(歡迎各位關注,本專欄會對機器學習的特征工程中一些實用的處理方法進行介紹,該系列篇幅較短,力求闡述其核心并提供相應的實現方法。)
對數變換是一種常用的特征工程方法。一般對于數值大于0的重尾分布數據,我們都可以采取對數變換的方法來轉換特征值,從而讓特征具有更好的數值屬性,進而增強模型的效果。那麼如何理解對數變換?什麼情況下對數變換會是一種有效的特征工程方法呢?讓我們先從幾個基本概念開始。
1,對數函數
既然要進行對數變換,那麼就需要針對對數函數的性質有深刻的理解。
下圖是對數函數在一個較大的定義域範圍内所繪制出的函數圖像,
對數函數圖像
我們可以很明顯地看出,當x數值較小時,y值變化較快,而随着x值不斷變大,y值變化越發平緩,讓我們先記下這個圖像性質。
2,重尾分布
我們常說很多事物的自然分布近似于正态分布,但事實上還有一種更為廣泛的分布,其表現為少量的個體做出大量的貢獻(如下圖所示),這就是長尾分布。
長尾分布
# Python 繪制長尾分布
# 長尾分布采樣
a, m = 3., 2. # shape and mode
s = (np.random.pareto(a, 1000) 1) * m
# 繪制分布圖
import matplotlib.pyplot as plt
count, bins, _ = plt.hist(s, 100)
plt.show()
對于呈現長尾分布的特征,我們不能簡單地去除長尾部分的特征值,這是因為這些長尾的尾部很長,在整個特征分布中占比其實也并不低,事實上具有很大的信息量,對模型來說很有價值。但如果直接就這麼放入模型也不是合适的方法。如上圖所示,尖尖的左側加一個長長的尾巴,這意味着有大量的值在<2左右的這個極小的低值段區間内,分布明顯有偏向,這會讓以高斯分布為假設的模型難以學習到合理的參數,使得該特征為模型帶來的效果大打折扣。
至此,問題已經明确,既然這種分布形式并不好,那麼我們怎麼來緩解它呢?答案就是,使用對數變換。
3,對數變換
我們根據前面發現的log函數所具有的性質,對特征值進行對數變換,使得較小值區間在轉換後被擴展到一個變化較大的範圍内(x數值較小時,y值變化較快),而長尾的大值區間被壓縮到一個變化較小的範圍内(随着x值不斷變大,y值變化越發平緩),進而整體上減緩長尾分布這種極偏的分布狀态,為低值端争取更多的空間,将高值端盡可能的壓縮,使得整體分布更加合理。
對數轉換後的長尾分布圖
# log轉換後的分布圖
import matplotlib.pyplot as plt
count, bins, _ = plt.hist(np.log(s), 100)
plt.show()
4,結語
對數變換是一種十分常用的特征工程方法,當我們遇到類似分布的特征數據時,可以通過這種轉換來讓特征變得更加有效。此外它還具有以下優點:
如果你覺得我的文章有價值,請持續關注我,我會持續更新。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!