Kaggle學習筆記(一)·特徵工程
#前言:此文由筆者在kaggle上閱讀優秀的solution時順手記下的筆記,寫下來方便自己複習整理。限於本人水平,如有錯誤敬請指教。
1.DAE(降噪自編碼器)[1]
在使用DAE通常採用的方法為向原數據添加高斯雜訊或均布雜訊。
也可以採用輸入swap noise的方式,舉例:
設置inputswapnoise=0.15,意為某特徵的15%的樣本可能被從其他行隨機抽樣的數據代替。
DAE的拓撲結構可採用deep stack和bottleneck兩種,例如:
deepstack:221-1500-1500-1500-221
inputswapnoise=0.15/learning_rate_decay=0.995,epochs=1000
bottleneck:221-15000-15000-3000-15000-15000-221
inputswapnoise=0.1/learning_rate_decay=0.995,epochs=1000
註:221是輸入樣本的特徵數量,1500是隱層元素數量。
利用隱層輸出作為下面模型訓練的數據,也可加入原數據中一起作為訓練數據。
2.特徵交叉(feature interactions)
選擇兩個類別特徵cat1,cat2
train為訓練集,test為預測集。
新的交叉類別train[new_cat] = train[cat1] + _ + train[cat2]
例子:
Train/test 各有三個樣本,共兩個特徵。通過特徵交叉獲得Plus特徵,再將train/test的Plus特徵結合起來進行類別編碼,得到新的交叉特徵New_cat。
該方法可推廣到3、4、5…個特徵的交叉。
train cat1 cat2 Plus New_cat
0 a c a_c 0
1 b d b_d 1
2 b c b_c 2
test cat1 cat2 Plus New_cat
0 a c a_c 0
1 a c a_c 0
2 a d a_d 3
3.GBDT生成特徵[2]
將原數據根據特徵分成三份(cat,reg,ind),即每份數據有不同的特徵但樣本數量相同。用其中的兩份作為訓練數據,另外一份作為目標變數訓練Xgboost或LightGBM(gbdt樹),用訓練出的模型作出的預測作為新的特徵。
4.特徵聚合(feature aggregation)
選擇重要的類別特徵,利用pandas的groupby功能生成min/max/std/mean/median等特徵。
5.類別特徵詞向量(Embedding)
可利用embedding+dense組成的自編碼器生成類別特徵的向量,向量維度可取4、8、12等。
6.數值特徵獨熱編碼(One-Hot Encoding)
對取值較少的數值特徵可以將其轉化為類別特徵並作獨熱編碼。該方法有利於NN模型的訓練,對gbdt模型而言意義不大。
7.歸一化方法(Normalization)[1]
傳統的歸一化方法有max_min,mean_std等,歸一化的數據有利於神經網路的收斂。
RankGauss方法:
Sorted_index是根據reg排序的index,再縮放到-1,1之間得到scaled_index。利用Erfinv函數Y_0=sqrt(2)*erfinv(x),Y_1 = Y_0 - mean(Y_0)得到轉化後的RankGauss變數Y_1。
P.S. 該方法在1和-1處生成的值為inf與-inf,我暫時還沒弄清楚如何處理,請教一下知道的朋友。
index reg sorted_index scaled_index
0 0 0 -1
1 2 2 0.33
2 4 3 1
3 1 1 -0.33
8.類別特徵奇異值分解(SVD)
用類別特徵構成0,1矩陣,如原始數據:
cat1 cat2
a 1
b 2
a 2
c 3
轉換為稀疏的表示矩陣:
cat1/cat2 1 2 3
a 1 1 0
b 0 1 0
c 0 0 1
採用svd分解將該稀疏矩陣降維得到由不同類別特徵結合生成的新特徵。
參考:
[1] Porto Seguro』s Safe Driver Prediction
[2] Porto Seguro』s Safe Driver Prediction
推薦閱讀:
※微軟宣布在機器中英雙語翻譯領域取得突破性進展
※機器學習演算法如何調參?這裡有一份神經網路學習速率設置指南
※機器學習基石筆記1:基礎概念
※如何理解機器學習?
※4 支持向量機-總結