資料來源,百度關鍵字搜索「特徵選擇 過濾式」的前二三十頁不重複的數據(不得不說csdn的文章互抄率也太高了,而且好多優秀的文章都是從知乎轉來的)、《機器學習》等平常看的書、google上「feature selection filter」關鍵字搜索的不重複結果以及自己平常記錄的筆記。正好最近要做特徵選擇的模塊,所以借著知乎總結總結,也請各位同行批評指教。

lets begin!

簡單的一個思路圖,當然肯定不止這些,不過可以以這個圖為基準然後增加新的演算法進來這樣更有利於記憶和掌握


西瓜書上把特徵選擇總體分為了過濾式、包裹式、嵌入式,總體來看,過濾式是其中最簡單,運行速度最快的,畢竟只涉及到一些很easy的數學運算。

那麼為什麼要進行特徵選擇?

(1)、經過特徵選擇之後特徵的數量是下降的,有助於研究人員與用戶的理解,尤其是像銀行這類非常看重業務內在邏輯的工作場景或者是量化基金公司這類的研究場景,可解釋性都是一個非常需要考慮的東西,很多時候需要結合業務知識和機器學習的方法來共同支持業務決策,比如說你通過一些特徵衍生的方法(比如使用featuretool、gplearn或者是暴力的polynomial)產生的許多新的特徵並且在其中找到了表現很不錯的因子,一般來說都是需要通過業務邏輯的分析來增強特徵的可信度。

(2)、改善性能,節省存儲空間和計算開銷。這個很好理解了。

(3)、降低過擬合的風險,特徵的維度越高,越容易過擬合(這是這裡是越容易過擬合但是不等於說一定過擬合比如ctr領域動不動就是成千上萬的特徵),這一點可以從pac學習理論的角度給出標準的解釋(但是pac好難理解我還沒看懂==),不過後來我在某個地方看到了一個更好更直觀的解釋(類似於從圖像上去理解為什麼l1相對於l2容易產生稀疏解)

1、以邏輯回歸的二分類為例子,假設初始有5個特徵x1,x2,x3,x4,x5,則此時訓練完的模型的結果為y=sigmoid(w1x1+w2x2+w3x3+w4x4+w5x5+w0),這個時候如果新增了特徵x6,假設特徵x6非常垃圾對預測完全沒有幫助,那麼邏輯回歸可以通過l1正則化的手段將x6前面的係數w6變成0(或者非常接近0),則訓練結果為y=sigmoid(w1x1+w2x2+w3x3+w4x4+w5x5+w6x6+w0),因為w6約等於0,所以上式和下式是基本相同的,從這裡可以看出,新增的特徵對於模型的擬合能力起到的作用是至少不會降低模型的擬合能力(因為如果特徵非常差,至少可以通過正則化的方式將其排除,這一點gbdt、svm、神經網路等演算法也是一樣的道理),那麼舉一個極端的例子,假設我們用隨機數生成無數的特徵,大概率會存在某些特徵正好和標籤之間存在的很強的關聯(比如elo比賽中,有一個kaggler用隨機的方式生成的特徵居然和原始特徵的效果一樣好),但是這些特徵實際上是沒有意義的雜訊罷了。

2、當然,這種理解方式的問題在於比較侷限,對於knn這種演算法就沒辦法用上面的方式來解釋,所以這裡直接給出這一篇文章吧:visiondummy.com/2014/04 目前為止找到了關於高維特徵和過擬合的討論最好理解的一篇文章了。從兩個角度討論了高維數據與過擬合的關係:

(1)從高維空間容易擬合雜訊的角度出發(因為谷歌翻譯的問題。。這裡的「功能」實際上是「特徵」的意思)

核心的意思就是說,越是高維的空間越容易線性可分,(對於回歸問題就是越容易擬合,下同),也越容易擬合到特定於訓練集數據的異常,學習到的模型傾向於預測與訓練集分佈類似的新數據(舉個iris的例子,iris的特徵分佈非常均勻相似,所以我們在訓練集上無論怎麼擬合最終都可以在測試集的數據上得到很高的預測精度),但是一旦新數據不訓練數據的分佈產生了較大的出入,就會得到非常差的預測結果。

(2)從樣本在不同特徵空間下的樣本密度的角度出發

我更傾向於這一種理解的方式,直接以上圖為例子吧,我們看第二張圖,

二維空間的情況下,我們的訓練集的分佈是「兩隻貓和一隻狗」,而總的特徵空間的分佈更加複雜,為了便於表達的我的意思,假設我們把上圖分成4個小正方形,紅色部分訓練集的分佈是「兩隻貓和一隻狗」,那麼剩下的3個小正方形的分佈分別是「兩隻貓和兩隻狗」,「一隻貓和一隻狗」,「三隻貓和三隻狗」,顯然這裡就有四種不同的分佈情況了,我們知道,不同數據分佈下訓練出來的模型往往是不太相同的,所以這個時候你使用了總的特徵空間的1/4的數據擬合出來的有「偏見」的模型與預測全部的特徵空間中的樣本,必然會帶來一定的泛化無誤差。

那麼擴展到3維,4維。。。。等更高的維度,也是一樣的道理,訓練集的數據是有限的,但是當增大特徵的數量的時候無形中是使得特徵空間的分佈更加複雜更加多樣化,現有數據在全部特徵空間的樣本中對應的覆蓋率越小,越容易訓練出有「偏見」的模型,則最終的泛化誤差越大。

這樣解釋起來應該是比pac好理解。。。不過pac還是需要去仔細研究一下,畢竟是「通過計算來進行學習的理論,即關於機器學習的理論基礎,其目的在於分析學習任務的困難本質,為學習演算法提供理論保證,並根據分析結果指導演算法設計」。回頭有時間專門寫一篇來總結一下自己對《機器學習》中的pac的計算學習理論的理解和筆記吧


一般來說過濾式特徵選擇的方法分為單變數和多變數過濾兩類,表現形式就是計算出一些衡量特徵好壞的指標,然後根據指標來支持特徵選擇的決策,這一點《美團機器學習實戰》上介紹的倒是蠻多的。

寫多了,再開一篇寫代碼吧。。。


推薦閱讀:
相關文章