特征選擇, 經典三刀


       

    【特征工程】特征選擇與特征學習

       特征選擇(Feature Selection,FS)和特征抽取(Feature Extraction, FE)是特征工程(Feature Engineering)的兩個重要的方面。  他們之間最大的區別就是是否生成新的屬性。  FS僅僅對特征進行排序(Ranking)和選擇, FE更為復雜,需要重新認識事物, 挖掘新的角度, 創新性的創立新的屬性, 而目前深度學習這么火, 一個很重要的原因是縮減了特征提取的任務。 不過, 目前特征工程依然是各種機器學習應用領域的重要組成部分。

 

1.為什么要特征選擇?

 

1.1特征選擇與分類器性能的關系

一般說來,當固定一個分類器的話, 所選擇的特征數量和分類器的效果之間會有一個曲線, 在某個x(1<=x<=n)的地方, 會達到最優。那么, 該怎么選這x個特征呢? 這是一個比較難的問題。   

 

1.2 為什么特征少了不行?

這個比較直觀, 特征少了會導致無法區分的情況發生。 如下圖所示,僅僅依賴x1或者x2特征, 都無法區分這兩類數據, 所以當特征數量過小, 很可能導致數據重疊。進而, 所有分類器都會失效。

1.3 為什么特征多了也不行?

那為什么特征多了也不行呢? 如下圖所示,明明根據縱軸來判斷就可以容易的區分兩類, 但是因為引入了橫軸的特征, 使得同類數據在空間中距離變遠,變稀疏了。 進而使得很多分類器失效。 所以, 特征不是越多越好!

 

2. 特征選擇的一般流程

 

根據前面如何得到一個最優的子集, 那么特征選擇的的一般流程就是, 找一個集合,然后針對某個學習算法, 測試效果如何, 一直循環直到找到最優集合為止。

  

如果把Evaluation再突出表示, 那么整個流程就會是如下圖這樣一個過程。

 

那么按照這個流程, 是不是特征選擇就解決呢?  固定一個算法, 然后搜索(Search)一個測試子集, 然后進行Cross-Validation進行評價,直到找到最優目標。 那么這個搜索空間有多大呢?假設有n個特征, 每個特征可以選擇或者不選擇, 那么就是2的n次方的搜索空間,n為特征數量。所以基本上n=10的時候,就是一個1024次的嘗試。如果每次嘗試1分鍾, 光這個就需要1天時間。  尤其當n>10的情況, 是非常常見的。

所以當n<10的時候, 看上去一些暴力搜索算法還是可以嘗試一下的。其他一些常見的搜索算法也可以試試:

窮舉法(Exhaustive): 暴力窮盡

貪心法(Greedy Selection): 線性時間

模擬退火(Simulated Annealing): 隨機嘗試找最優

基因算法(Genetic Algorithm): 組合深度優先嘗試

鄰居搜索(Variable Neighbor Search): 利用相近關系搜索

 

我們把基於Cross-Validation和基因算法(GA)的一般流程列在如下:

 

但是, 始終當n很大的時候, 這個搜索空間會很大,如何找最優值還是需要一些經驗結論。

 

3. 機器學習特征選擇的經典三刀?

 

特征選擇的經典經驗總結起來主要有三刀: 飛刀(Filter), 彎刀(Wrapper), 電刀(Embedded)。 類比起來:

 

小李飛刀(Filter):  快速無比, 但是能不能打的准,還得看各自功力。

圓月彎刀(Wrapper):  實力無窮, 但是會不會用, 需要點悟性和魔力,還靠點運氣。

高頻電刀(Embedded): 模式單調,快速並且效果明顯, 但是如何參數設置, 需要深厚的背景知識。

 

Filter, Wrapper, Embedded 為什么是具有這些特性呢?

 

3.1 Filter 過濾式 (飛刀)

顧名思義,就是要基於貪心的思想, 把需要的特征篩/濾出來。  一般說來, 基於貪心就需要對特征進行打分。  而這個打分可以基於領域知識, 相關性, 距離,缺失, 穩定性 等等。 

單一特征選擇

根據每個特征屬性和目標屬性之間的計算值來進行排序選擇:

a. Welch's t-Test:   來判斷兩個屬性的分布的均值方差距離。

b. Fish-Score: 和Welch's t-Test類似, 計算兩個分布的距離, 均值只差和方差之和的距離。

 

c. Chi-Squared test: 計算類別離散值之間的相關性。

 

 

d. Information Gain:計算兩個划分的一致性。

 

多特征選擇

 

根據多個特征屬性和目標屬性之間的計算值來進行排序選擇:

 

e. Relief-F: 根據隨機選擇的樣本點,來計算屬性之間的相關性。

 

 

f. Correlation Feature Selection (CFS): 利用屬性之間的相關性, 進行選擇。

 

 

3.2. Wrapper 包裹式 (彎刀)

就是先選定特定算法,然后再根據算法效果來選擇特征集合。  一般會選用普遍效果較好的算法, 例如Random Forest, SVM, kNN等等。 

 

這可以使用前面提到的各種減小搜索空間的嘗試。 其中最經典的是使用啟發式搜索(Heuristic Search), 而概括的來說主要分為兩大類:

 

g. Forward Selection: 挑出一些屬性, 然后慢慢增大挑出的集合。 

 

h. Backward Elimination: 刪除一些屬性,然后慢慢減小保留的集合。

 

3.3 Embedded 嵌入式 (電刀)

利用正則化思想, 將部分特征屬性的權重變成零。 常見的正則化有L1的Lasso,L2的Ridge和混合的Elastic Net。其中L1的算子有明顯的特征選擇的功能。

 

 

在這里面,比較簡單的就是會自動進行特征選擇, 而且一次性就搞定了, 速度也不錯, 難點就是損失函數的選擇和縮放參數的選擇。   常見的損失函數如下圖所示:

 

Binary(0-1) loss: 灰線 對應錯誤率

 

Square loss: 紫線 對應 最新二乘法

 

Hinge loss: 淺藍 對應 SVM

 

Logistic loss:紅線 對應 邏輯回歸

 

Exponential loss:綠線 對應 adaboost

 

 

 

結構化Lasso

除了上述的簡單的Lasso,還有結構化的Lasso。

 

i. Group Lasso: 先將屬性進行分組, 然后對每個分組,看成一個屬性那樣 的采用Lasso的方法選擇, 要么全要, 要么全部不要。 再進一步, Sparse Group Lasso再在組內進行選擇。

 

 

 

j. Tree-Structured Lasso:  除了前面的扁平(Flat)的結構外, 還有層次化的結構。

 


對於這種情況, 同樣采用類似Group Lasso的思想。 對於一個數的子結構, 要么全要或者全不要,也可以允許分支單獨要。

 

 在這種樹結構的思想下, 那么每個樹的分支的正則化懲罰也可以采用不同的形式。

 

 

 

k. Graph Structure Lasso: 更進一步還可以推廣到基於圖的Lasso

 

在圖的情況下, 那么兩兩節點之間要定義一個懲罰項。

 

樹結構Lasso也可以利用圖來表示。

 

再次強調, 很多時候, 需要綜合上面的三刀來進行綜合選擇。  特征選擇不是一個容易的任務噢。

 

小結, 特征選擇的三刀要用的好需要自己實戰體會的, 下面再簡單歸納下:

 

Filter (F刀):

優點: 快速, 只需要基礎統計知識。

缺點:特征之間的組合效應難以挖掘。

 

Wrapper(W刀):

優點: 直接面向算法優化, 不需要太多知識。

缺點: 龐大的搜索空間, 需要定義啟發式策略。

 

Embedded(E刀):

優點: 快速, 並且面向算法。

缺點: 需要調整結構和參數配置, 而這需要深入的知識和經驗。

 

特征選擇, 經典三刀

 


免責聲明!

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



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