特徵工程之特徵預處理
- 2019 年 12 月 26 日
- 筆記
1. 特徵的標準化和歸一化
由於標準化和歸一化這兩個詞經常混用,所以本文不再區別標準化和歸一化,而通過具體的標準化和歸一化方法來區別具體的預處理操作。
z-score標準化:這是最常見的特徵預處理方式,基本所有的線性模型在擬合的時候都會做 z-score標準化。具體的方法是求出樣本特徵x的均值mean和標準差std,然後用(x-mean)/std來代替原特徵。這樣特徵就變成了均值為0,方差為1了。在sklearn中,我們可以用StandardScaler來做z-score標準化。當然,如果我們是用pandas做數據預處理,可以自己在數據框裡面減去均值,再除以方差,自己做z-score標準化。
max-min標準化:也稱為離差標準化,預處理後使特徵值映射到[0,1]之間。具體的方法是求出樣本特徵x的最大值max和最小值min,然後用(x-min)/(max-min)來代替原特徵。如果我們希望將數據映射到任意一個區間[a,b],而不是[0,1],那麼也很簡單。用(x-min)(b-a)/(max-min)+a來代替原特徵即可。在sklearn中,我們可以用MinMaxScaler來做max-min標準化。這種方法的問題就是如果測試集或者預測數據里的特徵有小於min,或者大於max的數據,會導致max和min發生變化,需要重新計算。所以實際演算法中, 除非你對特徵的取值區間有需求,否則max-min標準化沒有 z-score標準化好用。
L1/L2範數標準化:如果我們只是為了統一量綱,那麼通過L2範數整體標準化也是可以的,具體方法是求出每個樣本特徵向量
x→的L2範數||x→||2,然後用x→/||x→||2代替原樣本特徵即可。當然L1範數標準化也是可以的,即用x/||x||1
代替原樣本特徵。通常情況下,範數標準化首選L2範數標準化。在sklearn中,我們可以用Normalizer來做L1/L2範數標準化。
此外,經常我們還會用到中心化,主要是在PCA降維的時候,此