特征工程(Feature Engineering)


一、什么是特征工程?

"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):

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM