tft每日頭條

 > 生活

 > 離散數據拐點檢測

離散數據拐點檢測

生活 更新时间:2024-11-25 02:32:35

(歡迎各位關注,本專欄會對機器學習的特征工程中一些實用的處理方法進行介紹,該系列篇幅較短,力求闡述其核心并提供相應的實現方法。)

對數變換是一種常用的特征工程方法。一般對于數值大于0的重尾分布數據,我們都可以采取對數變換的方法來轉換特征值,從而讓特征具有更好的數值屬性,進而增強模型的效果。那麼如何理解對數變換?什麼情況下對數變換會是一種有效的特征工程方法呢?讓我們先從幾個基本概念開始。


1,對數函數

既然要進行對數變換,那麼就需要針對對數函數的性質有深刻的理解。

下圖是對數函數在一個較大的定義域範圍内所繪制出的函數圖像,

離散數據拐點檢測(特征工程大傳對數變換)1

對數函數圖像

我們可以很明顯地看出,當x數值較小時,y值變化較快,而随着x值不斷變大,y值變化越發平緩,讓我們先記下這個圖像性質。


2,重尾分布

我們常說很多事物的自然分布近似于正态分布,但事實上還有一種更為廣泛的分布,其表現為少量的個體做出大量的貢獻(如下圖所示),這就是長尾分布。

離散數據拐點檢測(特征工程大傳對數變換)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值變化越發平緩),進而整體上減緩長尾分布這種極偏的分布狀态,為低值端争取更多的空間,将高值端盡可能的壓縮,使得整體分布更加合理。

離散數據拐點檢測(特征工程大傳對數變換)3

對數轉換後的長尾分布圖

# log轉換後的分布圖 import matplotlib.pyplot as plt count, bins, _ = plt.hist(np.log(s), 100) plt.show()


4,結語

對數變換是一種十分常用的特征工程方法,當我們遇到類似分布的特征數據時,可以通過這種轉換來讓特征變得更加有效。此外它還具有以下優點:

  1. 縮小數據的絕對數值範圍,讓特征不再飄。
  2. 依據對數的運算法則,将乘法變換為加法,符合中心極限法則下收斂到正态分布的假設。
  3. 非線性轉換為線性,讓問題變得更好建模

如果你覺得我的文章有價值,請持續關注我,我會持續更新。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved