原文鏈接: An Introduction to Feature Selection
你需要哪些特征來構建一個預測模型?
這是一個困難的問題,需要這個領域的深度知識.
自動選擇你的數據中的那些對要解決的問題最有用的或者最相關的特征是可能的. 這個過程叫做特征選擇.
在這篇文章中,你會發現特征選擇的方法和類型, 下一次你需要為機器學習模型選擇特征的時候, 你可以使用和遵循這些方法的一個列表.
什么是特征選擇
特征選擇也被叫做變量選擇或者屬性選擇.
它是自動選擇你數據的一些屬性的方法,而這些屬性是和你要解決的預測模型問題特別相關的.
¨特征選擇是一個選擇相關特征子集,用於構建模型的過程¨
---Wikipedia entry
特征選擇和降維不同.兩種方法都是為了減少數據集的屬性數量,但是降維是通過創建新的屬性組合,特征選擇包含和排除數據中的屬性而並不改變它們. (降維可能改變數據屬性,特征選擇不改變它們)
降維的例子包括PCA(主成份分析),SVD(奇異值分解)和Sammon's mapping (Sammon映射).
"特征選擇對於本身是有用的,但它主要是作為一個過濾器, 它屏蔽掉那些沒用的特征,同時保護你的那些現有的特征."
-- Robert
特征選擇解決的問題
特征選擇輔助你創建一個准確的預測模型. 它們幫助你選擇特征, 這些特征能夠用更少的數據給你很好的或者更好的精度.
特征選擇能夠被用於鑒定和移掉不需要的,不相關的和冗余的屬性,這些屬性並不能提高預測模型精度或者可能事實上減少模型精度.
你需要更少的屬性,因為它能夠降低模型復雜度,而且一個更簡單的模型能夠被更簡單的理解和解釋.
"變量選擇的目的有三個方面:提高預測器的預測性能, 提供更快和更低成本的預測器, 和提供更好的了解產生的數據的基本過程."
-- Guyon
特征選擇算法
有三種一般類的特征選擇算法: 過濾算法,包裝算法和嵌入式算法.
1. 過濾算法
過濾特征選擇方法運用統計方法將一個分值分配給每個特征.這些特征按照分數排序,然后決定是被保留還是從數據集中刪除.這個方法通常是單變量且獨立的考慮每個特征,或者考慮其依賴變量.
一些過濾方法包括Chi squared test(方卡檢驗),information gain(信息增益)和correlation coefficient scores(相關系數得分).
2. 包裝算法
包裝方法考慮一族特征作為搜索問題,不同的組合被准備,檢驗並和其他組合比較. 我們使用一個預測模型評估特征的組合,然后根據模型精度給每個特征組合一個分數.
這個搜索過程可能有條不紊的例如best-fist搜索算法, 它可能隨機例如random hill-climbing 算法.或者它可能是啟發式的例如前向和后向傳遞增添和刪除特征的.
一個例子就是遞歸特征消除算法.
3. 嵌入式算法
嵌入式算法在模型創建的時候,學習哪些特征對於模型精度的貢獻最大.最典型的嵌入式特征選擇方法是正則化方法.
正則化方法也被稱為引入附加約束到預測算法(例如回歸算法)的優化,它偏向於較低復雜度的模型.
正則規划算法的例子是Lasso,Elastic Net和Ridge Regression.
特征選擇教程和方法
在本文之前,我們已經看到許多特征選擇的例子了.
- Weka: 如何用weka選擇特征
- Scikit-learn: 如何用python的scikit-learn庫做遞歸特征刪除
- R: 如何用R做遞歸特征刪除
選擇特征時的陷阱
特征選擇是另一個的應用機器學習過程的重要部分, 如模型選擇. 你不可以放棄和忘記.
考慮特征選擇在模型選擇過程中很重要.如果你不能,你可能會在無意中帶入偏見到你的模型中,最終導致過擬合.
"...應該在你的訓練集以外做特征選擇...不這樣做,你將會導致訓練數據的過擬合."
-- Ben
例如,當你使用精度估測方法,例如交叉驗證的適合,你必須包含特征選擇在每個內循環中. 這意味着特征選擇是在模型訓練前就已經在准備好的fold中執行了. 准備數據時先做特征選擇,然后在模型選擇和訓練時執行是錯誤的. (??)
"如果我們運用合適的流程,在每個fold上執行特征選擇,就不再會有關於特征和fold相關影響的信息".
--Dikran
其原因是,做出特征選擇的決定是基於整個訓練集的,這反過來傳遞到模型了.這可能會導致一個模型和其他模型相比,被所選擇的特征而增強影響,看起來獲得更好的結果,而事實上是有偏見的結果.
"如果你在所有數據上執行特征選擇,然后交叉驗證,再在交叉驗證過程的每個fold的測試數據同樣被用來選擇特征, 這就造成了性能分析的偏見.
--Dikran
特征選擇列表:
Esabelle Guyon 和 Andre Elisseeff (“An Introduction to Variable and Feature Selection” 的作者)提供了一個特別好的列表, 下次你要為你的模型問題做數據特征選擇的時候可以使用這張列表.
我已經把清單的重要部分轉載過來啦:
1. 你是否有領域知識? Yes, 那就構建一個更好的特定設置的特征
2. 你的特征相配(尺度)嗎? No, 那就歸一化這些特征.
3. 你是否懷疑特征獨立性? Yes, 通過構建聯合特征或者特征的乘積,只要你的計算機資源允許.
4. 你需要修剪輸入變量嗎? No, 構建析取特征或者加權特征.
5. 你需要單獨評估特征嗎? Yes, 使用一個變量排序方法;否則無論怎樣都去獲取一個基本結果.
6. 你需要一個預測器嗎? No, 停止.
7. 你懷疑你的數據"臟"嗎? Yes, 檢測異類例子,使用step5排在頂端的變量;檢查和丟棄他們.
8. 你知道什么需要先測試嗎? No, 使用一個線性預測器. 使用前向選擇方法,用probe作為停止標准; 或者在step5 之后, 使用0范數嵌入方法作為比較, 用增加的特征子集建立一個相同特征的預測器序列. 你能用一個更小子集匹配或者提高性能嗎? 如果能的話, 用那個子集嘗試一個線性預測器.
9. 你有新的想法,時間,時間資源和足夠的例子嗎?Yes, 比較一些特征選擇方法,包括你的想法,相關參數,后向選擇和嵌入式算法. 使用線性和非線性預測器. 用模型選擇選擇最好的方法.
10. 你需要一個穩定的解嗎? Yes, 二次采樣你的數據,並為一些"bootstrap"重做你的分析.
更多閱讀
為了在這個課題中有更深的理解, 你可以選擇這個話題的一本書, 如下:
- Feature Selection for Knowledge Discovery and Data Mining
- Computational Methods of Feature Selection
- Computational Intelligence and Feature Selection: Rough and Fuzzy Approaches
- Subspace, Latent Structure and Feature Selection: Statistical and Optimization Perspectives Workshop
- Feature Extraction, Construction and Selection: A Data Mining Perspective
特征選擇是特征工程的一個子課題. 你可能會喜歡深入看一下特征工程的話題. “Discover Feature Engineering, How to Engineer Features and How to Get Good at It“ , 下一篇博文就是這篇文章的翻譯.