數據分析:歸一化、標准化和中心化/零均值化


1 概念
  歸一化:1)把數據變成(0,1)或者(1,1)之間的小數。主要是為了數據處理方便提出來的,把數據映射到0~1范圍之內處理,更加便捷快速。2)把有量綱表達式變成無量綱表達式,便於不同單位或量級的指標能夠進行比較和加權。歸一化是一種簡化計算的方式,即將有量綱的表達式,經過變換,化為無量綱的表達式,成為純量。
  標准化:在機器學習中,我們可能要處理不同種類的資料,例如,音訊和圖片上的像素值,這些資料可能是高維度的,資料標准化后會使每個特征中的數值平均變為0(將每個特征的值都減掉原始資料中該特征的平均)、標准差變為1,這個方法被廣泛的使用在許多機器學習算法中(例如:支持向量機、邏輯回歸和類神經網絡)。
  中心化:平均值為0,對標准差無要求
  歸一化和標准化的區別:歸一化是將樣本的特征值轉換到同一量綱下把數據映射到[0,1]或者[-1, 1]區間內,僅由變量的極值決定,因區間放縮法是歸一化的一種。標准化是依照特征矩陣的列處理數據,其通過求z-score的方法,轉換為標准正態分布,和整體樣本分布相關,每個樣本點都能對標准化產生影響。它們的相同點在於都能取消由於量綱不同引起的誤差;都是一種線性變換,都是對向量X按照比例壓縮再進行平移。
  標准化和中心化的區別:標准化是原始分數減去平均數然后除以標准差,中心化是原始分數減去平均數。 所以一般流程為先中心化再標准化。
  無量綱:我的理解就是通過某種方法能去掉實際過程中的單位,從而簡化計算。

2 為什么要歸一化/標准化?
  如前文所說,歸一化/標准化實質是一種線性變換,線性變換有很多良好的性質,這些性質決定了對數據改變后不會造成“失效”,反而能提高數據的表現,這些性質是歸一化/標准化的前提。比如有一個很重要的性質:線性變換不會改變原始數據的數值排序。
(1)某些模型求解需要
  1)在使用梯度下降的方法求解最優化問題時, 歸一化/標准化后可以加快梯度下降的求解速度,即提升模型的收斂速度。如左圖所示,未歸一化/標准化時形成的等高線偏橢圓,迭代時很有可能走“之”字型路線(垂直長軸),從而導致迭代很多次才能收斂。而如右圖對兩個特征進行了歸一化,對應的等高線就會變圓,在梯度下降進行求解時能較快的收斂。

 

 
橢圓等高線和圓形等高線

 

 
梯度下降軌跡

  2)一些分類器需要計算樣本之間的距離(如歐氏距離),例如KNN。如果一個特征值域范圍非常大,那么距離計算就主要取決於這個特征,從而與實際情況相悖(比如這時實際情況是值域范圍小的特征更重要)。

(2)無量綱化
  例如房子數量和收入,因為從業務層知道,這兩者的重要性一樣,所以把它們全部歸一化。 這是從業務層面上作的處理。

(3)避免數值問題
  太大的數會引發數值問題。

3 數據預處理時
3.1 歸一化
(1)Min-Max Normalization
   x' = (x - X_min) / (X_max - X_min)

(2)平均歸一化
   x' = (x - μ) / (MaxValue - MinValue)
  (1)和(2)有一個缺陷就是當有新數據加入時,可能導致max和min的變化,需要重新定義。

(3)非線性歸一化
  1)對數函數轉換:y = log10(x)
  2)反余切函數轉換:y = atan(x) * 2 / π
  (3)經常用在數據分化比較大的場景,有些數值很大,有些很小。通過一些數學函數,將原始值進行映射。該方法包括 log、指數,正切等。需要根據數據分布的情況,決定非線性函數的曲線,比如log(V, 2)還是log(V, 10)等。

3.2 標准化
(1)Z-score規范化(標准差標准化 / 零均值標准化)
  x' = (x - μ)/σ

3.3 中心化
  x' = x - μ

4 什么時候用歸一化?什么時候用標准化?
  (1)如果對輸出結果范圍有要求,用歸一化。
  (2)如果數據較為穩定,不存在極端的最大最小值,用歸一化。
  (3)如果數據存在異常值和較多噪音,用標准化,可以間接通過中心化避免異常值和極端值的影響。
  某知乎答主的回答提到了他個人經驗:一般來說,我個人建議優先使用標准哈。對於輸出有要求時再嘗試別的方法,如歸一化或者更加復雜的方法。很多方法都可以將輸出范圍調整到[0, 1],如果我們對於數據的分布有假設的話,更加有效的方法是使用相對應的概率密度函數來轉換。讓我們以高斯分布為例,我們可以首先計算高斯誤差函數(Gaussian Error Function),此處定為er fc(·),那么可以用下式進行轉化:

 
 


  這篇博客提到他的經驗:1) 在分類、聚類算法中,需要使用距離來度量相似性的時候、或者使用PCA技術進行降維的時候,第二種方法(Z-score standardization)表現更好。2) 在不涉及距離度量、協方差計算、數據不符合正太分布的時候,可以使用第一種方法或其他歸一化方法。比如圖像處理中,將RGB圖像轉換為灰度圖像后將其值限定在[0 255]的范圍。

 

5 哪些模型必須歸一化/標准化?
(1)SVM
  不同的模型對特征的分布假設是不一樣的。比如SVM 用高斯核的時候,所有維度共用一個方差,這不就假設特征分布是圓的么,輸入橢圓的就坑了人家,所以簡單的歸一化都還不夠好,來杯白化才有勁。比如用樹的時候就是各個維度各算各的切分點,沒所謂。

(2)KNN
  需要度量距離的模型,一般在特征值差距較大時,都會進行歸一化/標准化。不然會出現“大數吃小數”。

(3)神經網絡
  1)數值問題
  歸一化/標准化可以避免一些不必要的數值問題。輸入變量的數量級未致於會引起數值問題吧,但其實要引起也並不是那么困難。因為tansig(tanh)的非線性區間大約在[-1.7,1.7]。意味着要使神經元有效,tansig( w1x1 + w2x2 +b) 里的 w1x1 +w2x2 +b 數量級應該在 1 (1.7所在的數量級)左右。這時輸入較大,就意味着權值必須較小,一個較大,一個較小,兩者相乘,就引起數值問題了。
  假如你的輸入是421,你也許認為,這並不是一個太大的數,但因為有效權值大概會在1/421左右,例如0.00243,那么,在matlab里輸入 421·0.00243 == 0.421·2.43,會發現不相等,這就是一個數值問題。

  2)求解需要
  a. 初始化:在初始化時我們希望每個神經元初始化成有效的狀態,tansig函數在[-1.7, 1.7]范圍內有較好的非線性,所以我們希望函數的輸入和神經元的初始化都能在合理的范圍內使得每個神經元在初始時是有效的。(如果權值初始化在[-1,1]且輸入沒有歸一化且過大,會使得神經元飽和)
  b. 梯度:以輸入-隱層-輸出這樣的三層BP為例,我們知道對於輸入-隱層權值的梯度有2ew(1-a^2)*x的形式(e是誤差,w是隱層到輸出層的權重,a是隱層神經元的值,x是輸入),若果輸出層的數量級很大,會引起e的數量級很大,同理,w為了將隱層(數量級為1)映身到輸出層,w也會很大,再加上x也很大的話,從梯度公式可以看出,三者相乘,梯度就非常大了。這時會給梯度的更新帶來數值問題。
  c. 學習率:由(2)中,知道梯度非常大,學習率就必須非常小,因此,學習率(學習率初始值)的選擇需要參考輸入的范圍,不如直接將數據歸一化,這樣學習率就不必再根據數據范圍作調整。 隱層到輸出層的權值梯度可以寫成 2ea,而輸入層到隱層的權值梯度為 2ew(1-a^2)x ,受 x 和 w 的影響,各個梯度的數量級不相同,因此,它們需要的學習率數量級也就不相同。對w1適合的學習率,可能相對於w2來說會太小,若果使用適合w1的學習率,會導致在w2方向上步進非常慢,會消耗非常多的時間,而使用適合w2的學習率,對w1來說又太大,搜索不到適合w1的解。如果使用固定學習率,而數據沒歸一化,則后果可想而知。
  d.搜索軌跡:已解釋
  
(4)PCA

參考:
標准化和歸一化什么區別? - 知乎:https://www.zhihu.com/question/20467170
R--數據標准化、歸一化、中心化處理:https://zhuanlan.zhihu.com/p/33727799
特征工程中的[歸一化]有什么作用? - 知乎:https://www.zhihu.com/question/20455227
神經網絡為什么要歸一化:http://nnetinfo.com/nninfo/showText.jsp?id=37

作者:brucep3
鏈接:https://www.jianshu.com/p/95a8f035c86c
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM