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 支持向量機-總結

TAG:機器學習 | Kaggle | 特徵工程 |