天天看點

特征工程中的歸一化問題

特征工程中的「歸一化」有什麼作用? - 微調的回答 - 知乎 https://www.zhihu.com/question/20455227/answer/370658612

本文主要摘自知乎問題中微調童鞋的答案,侵删。

首先,我們需要明白三個問題:

  1. 資料縮放的本質是什麼
  2. 不同資料縮放的差別
  3. 如何選擇不同的縮放方法

我們從定義入手:

  • 歸一化(normalization): 
    特征工程中的歸一化問題
  • 标準化(standardization): 
    特征工程中的歸一化問題

其中 

特征工程中的歸一化問題

 和 

特征工程中的歸一化問題

 代表樣本的均值和标準差, 

特征工程中的歸一化問題

 為最大值, 

特征工程中的歸一化問題

 為最小值。

1. 歸一化和标準化本質上都是一種線性變換

先看歸一化,在資料給定的前提下,令常數 

特征工程中的歸一化問題

 ,常數 

特征工程中的歸一化問題

 ,那麼歸一化的新的形式就是 

特征工程中的歸一化問題

 。在這種改寫後下,易發現和标準化形式 

特征工程中的歸一化問題

 類似,因為在資料給定後 

特征工程中的歸一化問題

 和 

特征工程中的歸一化問題

 也可看做常數。

是以可以再稍微變形一下:

特征工程中的歸一化問題

 (公式1)

就發現事實上就是對向量 

特征工程中的歸一化問題

按照比例壓縮

特征工程中的歸一化問題

再進行平移 

特征工程中的歸一化問題

。是以歸一化和标準化的本質就是一種線性變換。

舉個簡單的例子:

  • 原始資料: 
    特征工程中的歸一化問題
     ,其中 
    特征工程中的歸一化問題
     , 
    特征工程中的歸一化問題
    特征工程中的歸一化問題
  • 歸一化:代入公式1,将 
    特征工程中的歸一化問題
     壓縮4倍并平移 
    特征工程中的歸一化問題
     ,得到
    特征工程中的歸一化問題
     ,最終有 
    特征工程中的歸一化問題
  • 标準化:與歸一化類似,略

2. 線性變化的性質

線性變換有很多良好的性質,這些性質決定了為什麼對資料進行改變後竟然不會造成“失效”,反而還能提高資料的表現。拿其中很重要的一個性質為例,線性變化不改變原始資料的數值排序。

下面舉個栗子:

from sklearn import preprocessing 
from scipy.stats import rankdata 
x = [[1], [3], [34], [21], [10], [12]] 
std_x = preprocessing.StandardScaler().fit_transform(x) n
orm_x = preprocessing.MinMaxScaler().fit_transform(x) 
# print(std_x) 
# print(norm_x) 
print('原始順序 :', rankdata(x)) 
print('标準化順序:', rankdata(std_x)) 
print('歸一化順序:', rankdata(norm_x))
           

發現兩種處理方法都不會改變資料的排序。對很多模型來說,這個性質保證了資料依然有意義,順序性不變,而不會造成了額外的影響。說白了,隻是因為線性變換保持線性組合與線性關系式不變,這保證了特定模型不會失效。

特征工程中的歸一化問題

3. 歸一化和标準化的差別

我們已經說明了它們的本質是縮放和平移,但差別是什麼呢?在不涉及線性代數的前提下,我們給出一些直覺的解釋:歸一化的縮放是“拍扁”統一到區間(僅由極值決定),而标準化的縮放是更加“彈性”和“動态”的,和整體樣本的分布有很大的關系。值得注意:

  • 歸一化:縮放僅僅跟最大、最小值的差别有關。
  • 标準化:縮放和每個點都有關系,通過方差(variance)展現出來。與歸一化對比,标準化中所有資料點都有貢獻(通過均值和标準差造成影響)。

當資料較為集中時, 

特征工程中的歸一化問題

 更小,于是資料在标準化後就會更加分散。如果資料本身分布很廣,那麼 

特征工程中的歸一化問題

 較大,資料就會被集中到更小的範圍内。

從輸出範圍角度來看, 

特征工程中的歸一化問題

 必須在0-1間。對比來看,顯然 

特征工程中的歸一化問題

 ,甚至在極端情況下 

特征工程中的歸一化問題

 ,是以标準化的輸出範圍一定比歸一化更廣。

  • 歸一化: 輸出範圍在0-1之間
  • 标準化:輸出範圍是負無窮到正無窮

4. 什麼時候用歸一化?什麼時候用标準化?

我們已經從第三部分得到了一些性質,是以可以得到以下結論:

  • 如果對輸出結果範圍有要求,用歸一化
  • 如果資料較為穩定,不存在極端的最大最小值,用歸一化
  • 如果資料存在異常值和較多噪音,用标準化,可以間接通過中心化避免異常值和極端值的影響

5.最後補兩張圖,直覺了解一下:

特征工程中的歸一化問題
特征工程中的歸一化問題

繼續閱讀