複雜的模型不易解釋,難以調整。簡單的算法配合更好的特征或者更多的資料,比脆弱的假設配合複雜的算法會得到更好的結果。
好的特征代表了靈活性、更簡單的模型和更好的結果,不相關的特征則會影響模型的泛化性。是以特征選擇和特征工程并非是互相排斥的,而是相輔相成的。有效的特征工程能夠幫助我們提煉資料的代表。接着問題就來了,什麼才是好的代表?
代表的好壞取決于裡面所包含資訊的好壞。熵(entropy,熵值越高,資料中所包含的資訊越多),方差(variance,方差越大,資料中所包含的資訊越多),更好的分離映射(projection for better separation,最高的方差所對應的映射包含更多得資訊),特征對類别的關聯(feature to class association),等。所有這些都解釋了資料中所包含的資訊。
特征工程是模組化過程中很重要的一個步驟,但也很難實作自動化。它需要專業知識和很多資料的探索性分析。
1. 單一變量的基礎轉換:x, x^2,sqrt x ,log x, 縮放
2. 如果變量的分布是長尾的,應用box-cox轉換(用log轉換雖然快但不一定是一個好的選擇)
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):
執行聚類(clustering)并使用點和聚類中心的距離作為一個特征
主成分分析/奇異值分解 (pca/svd)
這是用來分析變量之間的互相關系和在資訊損失最小的情況下執行降維的有效技術。
*找到透過資料中,擁有最大方差的軸。
*在下一個正交軸上重複該步驟,直到你用完了資料或次元。每個軸都代表着一個新特征。
37.稀疏編碼(sparse coding)
選擇基元:基于你能如何用一個基元來重建輸入值和它有多稀疏來評估該基元;采取一些梯度步驟,以改進該評估。
有效的稀疏編碼算法
深度自編碼
38. 随機森林:訓練一部分決策樹:使用每個葉子作為一個特征
原文釋出時間為:2016-08-15
本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号