特徵工程小結
1. 為什麼要進行歸一化
歸一化後會使每一維度數據的更新速度變得更為一致,可更快通過梯度下降法找到最優解。梯度下降法求解的模型有線性回歸、邏輯回歸、支持向量機、神經網路模型等,但歸一化對決策樹模型並不適用,以C4.5為例,模型節點分裂時主要依據數據集關於特徵的信息增益比,而信息增益比與是否歸一化是無關的。
什麼情況下(不)需要歸一化?
需要: 基於參數的模型或基於距離的模型,都是要進行特徵的歸一化。
不需要:基於樹的方法是不需要進行特徵的歸一化,例如隨機森林,bagging 和 boosting等。
2. 類別特徵如何處理
- 序號編碼
- 獨熱編碼
from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) # fit來學習編碼
enc.transform([[0, 1, 3]]).toarray() # 進行編碼
什麼情況下(不)用獨熱編碼?
用:獨熱編碼用來解決類別型數據的離散值問題,
不用:將離散型特徵進行one-hot編碼的作用,是為了讓距離計算更合理,但如果特徵是離散的,並且不用one-hot編碼就可以很合理的計算出距離,那麼就沒必要進行one-hot編碼。 有些基於樹的演算法在處理變數時,並不是基於向量空間度量,數值只是個類別符號,即沒有偏序關係,所以不用進行獨熱編碼。 Tree Model不太需要one-hot編碼: 對於決策樹來說,one-hot的本質是增加樹的深度。
- 二進位編碼
- 標籤編碼LabelEncoder
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit([1,5,67,100])
le.transform([1,1,100,67,5])
小結:
- 連續型特徵:線性函數歸一化(Min-Max Scaling)、零均值歸一化(Z-Score Normalization)
- 離散型特徵(Categorical Feature):序號編碼(Ordinal Encoding)、獨熱編碼(One-hot Encoding)、 二進位編碼(Binary Encoding)