一、什么是特征工程?
"Feature engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data."
簡而言之,就是將原始數據轉換為模型更容易理解的數據類型,從而提高模型的預測准確率。我認為包含三個方面:特征處理、特征選擇、特征生成。
數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。由此可見,特征工程尤其是特征選擇在機器學習中占有相當重要的地位。
二、特征工程的作用?
1)Better features means flexibility。伸縮性比較好,可以讓你使用不太復雜的模型,運行速度更快,更容易理解,更容易維護。
2)Better features means simpler models. 就是說你即使沒有選擇最正確的模型和最優化的參數,依然能得到相當滿意的效果。省去了大量去研究模型的時間。
3)Better features means better results。
為什么特征工程能產生這么好的效果呢?我從Jason Brownlee那里得到了啟發,因為特征工程把特征之間、特征與目標變量之間的潛在關系統統挖掘並完整地展示出來了。所以,對模型來講就很容易理解了,效果自然不錯了!相當於你把一個難題已經分解的很透徹了,即使小學生也能很好的理解並給出答案了。
Jason Brownlee的主頁:http://machinelearningmastery.com
三、特征工程的處理過程。
- Remove unnecessary features-去掉無用的特征
- Remove redundant features-去掉冗余的特征,如:共線特征
- Create new features-創造新特征
1)Combine existing features
2)Transform features
3)Use features from the context
4) Integrate external sources
- Modify feature types
e.g. from binary to numeric
- Modify feature values-修改特征的值,如特征的極大值、異常值、缺失值
四、特征工程舉例
This is might be a foreign idea, so here are three examples:
- Categorical: You have a categorical attribute that had the values [red, green blue], you could split that into 3 binary attributes of red, green and blue and give each instance a 1 or 0 value for each.
- Real: You have a real valued quantity that has values ranging from 0 to 1000. You could create 10 binary attributes, each representing a bin of values (0-99 for bin 1, 100-199 for bin 2, etc.) and assign each instance a binary value (1/0) for the bins.
常見做法 :
1. 單一變量的基礎轉換:x, x^2,sqrt x ,log x, 縮放
2. 如果變量的分布是長尾的,應用Box-Cox轉換,包括:對數轉換、平方根轉換、倒數轉換、平方根后再取倒數、冪轉換。
3. 你也可以檢查殘差(Residuals)或是log-odds(針對線性模型),分析是否是強非線性。
4. 對於基數比較大的數據,對於分類變量,創造一個表示每種類別發生頻率的特征是很有用的。當然,也可以用占總量的比率或是百分比來表示這些類別。
5. 對變量的每一個可能取值,估計目標變量的平均數,用結果當做創造的特征。
6. 創造一個有目標變量比率的特征。
7. 選出最重要的兩個變量,並計算他們相互之間、以及與其它變量之間的二階交叉作用並放入模型中,比較由此產生的模型結果與最初的線性模型的結果。
8. 如果你想要的解決方案更平滑,你可以應用徑向基函數核(Kadial Basis function kernel) 。這就相當應用一個平滑轉換。
9. 如果你覺得你需要協變量(Covariates ),你可以應用多項式核,或者明確添加它們的協變量。
10.高基數特征:在預處理階段,通過out-of-fold平均轉換成數值變量。
兩個變量組合而成的特征轉換 以下為一些常見的由兩個變量組合而成的特征轉換:
11.加法轉換
12. 相對於基數的差值
13. 乘法轉換:交互效果
14. 除法轉換:縮放/歸一化
15. 對數值型特征設定閾值以獲取其布爾值
16.笛卡兒積變換
17. 特征向量積:所有特征的向量積
試想一個特征A,它有兩個可能的值:{ A1,A2 } 。假設B是一個具有兩種可能性{ B1,B2 }的另一特征。那么, A和B之間的向量積(我們稱之為AB)將采取以下值之一: { (A1 , B1),(A1 , B2),(A2 , B1),(A2 , B2) } 。你基本上可以賦予這些”組合”你喜歡的任何名稱。但要記住,每個組合都表示一個由A和B的相應值包含的信息之間的協同作用。
18. 歸一化/數據標准化變換
在機器學習算法中提出的隱含假設(對朴素貝葉斯而言,在某種程度上是顯性假設)之一是:該特征服從正態分布。不過,有時我們可能會發現該特征不遵循正態分布,而是對數正態分布。那么在這種情況下常見的手段之一是取特征值的對數(即表現出對數正態分布的那些特征值),使得它展現出正態分布。如果在使用中的算法做出了正態分布的隱含/顯性假設的話,則這種轉化,即將一個服從對數正態分布的特征轉化為正態分布,可以幫助改善該算法的性能。
19. 分位數分級轉換 (Quantile Binning Transformation)
20. 白化數據 (Whitening the Data)
21. 窗體壓縮化 (Windowing) 如果所有的點都分布在時間軸上,那么在同一個窗口里的先前的點往往包含豐富的信息。
22. 最小-最大歸一化:不一定保留順序
23. S型/正切/對數轉換 (Sigmoid / Tanh / Log Transformations)
24. 用特殊方法處理0:對於計數特征有可能很重要
25. 去相關性/轉換變量
26. 重構數量
27.將不頻繁的分類變量划分到新的/獨立的類別中。
28.按順序應用一系列轉換。
29.獨特的編碼方式
30.靶值率編碼 (Target rate encoding)
31.哈希技巧 (Hash Trick) 常見的多個變量的特征轉換 以下為一些常見的多個變量的特征轉換:
32.主成分分析 (PCA)
33. 模型集成
34. 壓縮感知 (Compressed Sensing)
35.“猜平均值”或是“猜通過變量X分段后的平均值”
36. 處理映射(hack projection):