特徵處理之使數據分佈逼近正態分佈

前言

在機器學習和深度學習中,我們經常要對輸入的數據做歸一化或者在隱藏層使用Batch-Normlization(BN)操作,將數據範圍縮放到[0,1]或者[-1, 1]之間,主要作用:可以加快神經網絡訓練速度,防止過擬合。然而無論做歸一化還是BN處理,雖然將數據的均值變爲0,方差變爲1,但是數據的整體分佈並不一定服從標準的正態分佈(實際數據大部分時候都不會是),做歸一化和BN時,我們求出來的均值和方差,並不能說明我們數據是服從正態分佈的。

我們在進行機器學習/深度學習訓練的時候,往往希望數據越接近正態分佈越好,這樣對於訓練效果會有明顯的提升。

判斷數據是否服從正態分佈的指標

我們判斷數據分佈與標準正態分佈之間的差別主要根據兩個統計量:偏度(skewness)和峯度(kurtosis)

1. 偏度(skewness)

偏度(skewness),是統計數據分佈偏斜方向和程度的度量,是統計數據分佈非對稱程度的數字特徵。定義上偏度是樣本的三階標準化矩。

在這裏插入圖片描述
偏度定義中包括正態分佈(偏度=0),右偏分佈(也叫正偏分佈,其偏度>0),左偏分佈(也叫負偏分佈,其偏度<0)。正偏態分佈有以下特性:衆數 < 中位數 < 平均數;對於負偏態單峯分佈則恰恰相反,衆數 > 中位數 > 平均數。在對稱分佈中,三值相等

在這裏插入圖片描述
在這裏插入圖片描述

2. 峯度

峯度(peakedness;kurtosis)又稱峯態係數。表徵概率密度分佈曲線在平均值處峯值高低的特徵數。直觀看來,峯度反映了峯部的尖度。隨機變量的峯度計算方法爲:隨機變量的四階中心矩與方差平方的比值。

在這裏插入圖片描述
峯度包括正態分佈(峯度值=3),厚尾(峯度值>3),瘦尾(峯度值<3)
在這裏插入圖片描述

峯度用於描述一個分佈曲線形態的陡緩程度,通常以正態分佈曲線的峯度爲參照標準,來觀察波峯是更“尖”還是更“平”。我們稱正態分佈曲線的峯度爲常峯度,所有正態分佈曲線(無論均值和方差爲何值)峯度均爲3。峯度大於常峯度的分佈叫做尖峯分佈(峯度 > 3),它擁有更陡峭的波峯和更厚的尾部,反之亦然,平峯分佈擁有更平的波峯和更薄的尾部。

然而,一些工具將分佈曲線的超額峯度(峯度減去常峯度3)定義爲峯度,這樣做的目的是讓正態分佈的峯度重新定義爲0,便於分析比較,如Python的Scipy庫就是這樣處理的,以及Spark裏計算峯度的函數(Spark分類專欄裏有講到)。

使數據分佈逼近正態分佈

如果高度偏態(如Skewness爲其標準誤差的3倍以上),則可以取對數,其中又可分爲自然對數和以10爲基數的對數。如以下是轉換自然對數的指令:
以下是轉換成以10爲基數的對數(其糾偏力度最強,有時會矯枉過正,將正偏態轉換成負偏態)
另外,在計量經濟學中廣泛使用Box-Cox轉換方法。
通體來說,可以嘗試一下幾種方法:
1、對數變換 即將原始數據X的對數值作爲新的分佈數據:
X’=lgX
當原始數據中有小值及零時,亦可取X’=lg(X+1)
還可根據需要選用X’=lg(X+k)或X’=lg(k-X)
對數變換常用於(1)使服從對數正態分佈的數據正態化。如環境中某些污染物的分佈,人體中某些微量元素的分佈等,可用對數正態分佈改善其正態性。(2)使數據達到方差齊性,特別是各樣本的標準差與均數成比例或變異係數CV接近於一個常數時。
2、平方根變換 即將原始數據X的平方根作爲新的分佈數據。
X’=sqrt(X)
平方根變換常用於:1)使服從Poission分佈的計數資料或輕度偏態資料正態化,可用平方根變換使其正態化。2)當各樣本的方差與均數呈正相關時,可使資料達到方差齊性。
3、倒數變換 即將原始數據X的倒數作爲新的分析數據。
X’=1/X
常用於資料兩端波動較大的資料,可使極端值的影響減小。
4、平方根反正旋變換 即將原始數據X的平方根反正玄值做爲新的分析數據。
X’=sin-1sqrt(X)
常用於服從二項分佈的率或百分比的資料。一般認爲等總體率較小如<30%時或較大(如>70%時),偏離正態較爲明顯,通過樣本率的平方根反正玄變換,可使資料接近正態分佈,達到方差齊性的要求。
5. 計量經濟學中常用的BOX-COX變換

6、等頻歸一化
通過對訓練數據的分析,我們發現不同維度特徵的取值分佈、相同維度下特徵值的差異都很大。例如距離、價格等特徵的數據服從長尾分佈,體現爲大部分樣本的特徵值都比較小,存在少量樣本的特徵值非常大。常規的歸一化方法(例如 min-max, z-score)都只是對數據的分佈進行平移和拉伸,最後特徵的分佈仍然是長尾分佈,這就導致大部分樣本的特徵值都集中在非常小的取值範圍內,使得樣本特徵的區分度減小;與此同時,少量的大值特徵可能造成訓練時的波動,減緩收斂速度。此外也可以對特徵值做對數轉化,但由於不同維度間特徵的分佈不同,這種特徵值處理的方式並不一定適用於其他維度的特徵。在實踐中,我們參考了Google的Wide & Deep Model[^6]中對於連續特徵的處理方式,根據特徵值在累計分佈函數中的位置進行歸一化。即將特徵進行等頻分桶,保證每個桶里的樣本量基本相等,假設總共分了n個桶,而特徵x 屬於其中的第b (b ∈ {0, …, n - 1})個桶,則特徵x 最終會歸一化成 b /n。這種方法保證對於不同分布的特徵都可以映射到近似均勻分佈,從而保證樣本間特徵的區分度和數值的穩定性。

補充:

在這裏插入圖片描述

參考
  1. https://blog.csdn.net/xbmatrix/article/details/69360167
  2. https://baijiahao.baidu.com/s?id=1569732797373513&wfr=spider&for=pc
  3. http://blog.sina.com.cn/s/blog_1303cd95c0102vlwf.html
  4. https://blog.csdn.net/u013555719/article/details/78530879
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章