根據維基百科,「特徵選擇是選擇用於模型構建的相關特徵的子集的過程」,或者換句話說,選擇最重要的特徵。
在正常情況下,領域知識起著重要作用,我們可以選擇我們認為最重要的特徵。例如,在預測房價時,臥室和面積通常被認為是重要的。不幸的是,在Do not Overfit II競賽(kaggle.com/c/dont-overfit-ii/data)中,領域知識的使用是不可能的,因為我們有一個二元目標和300個連續變量,這迫使我們嘗試特徵選擇技術。
簡介
通常,我們將特徵選擇和降維組合在一起使用。雖然這兩種方法都用於減少數據集中的特徵數量,但存在很大不同。
特徵選擇只是選擇和排除給定的特徵而不改變它們。
降維是將特徵轉換為較低維度。
加載數據
導入必須的Python庫
設置默認繪圖參數
加載機器學習數據集
Train Shape: (250, 302)Test Shape: (19750, 301)
使用seaborns countplot來顯示機器學習數據集中問題的分布
基線模型
我們將使用邏輯回歸作為基線模型。我們首先將數據分為測試集和訓練集,並進行了縮放:
LR Scores: [0.80729167 0.71875 0.734375 0.80034722 0.66319444]RFC Scores: [0.66753472 0.61371528 0.69618056 0.63715278 0.65104167]
檢查是最重要的特徵
從交叉驗證分數的變化可以看出,模型存在過擬合現象。我們可以嘗試通過特徵選擇來提高這些分數。
刪除又缺失值的特徵
檢查缺失值是任何機器學習問題的第一步。然後我們可以刪除超過我們定義的閾值的列。
train.isnull().any().any()
False
數據集沒有缺失值,因此在此步驟中沒有要刪除的特徵。
刪除低方差的特徵
在sklearn的特徵選擇模塊中,我們可以找到VarianceThreshold。它刪除方差不滿足某個閾值的所有特徵。默認情況下,它刪除了方差為零的特徵,或所有樣本值相同的特徵。
(250, 302)
我們可以從上面看到,所有列中都沒有相同值的特徵,因此我們沒有要刪除的特徵。
刪除高度相關的特徵
高度相關或共線性的特徵可能導致過度擬合。當一對變量高度相關時,我們可以刪除一個變量來減少維度,而不會損失太多信息。我們應該保留哪一個呢?與目標相關性更高的那個。讓我們來探索我們的特徵之間的相關性:
這裡我們看到了與目標變量高度相關的特性。特徵33與目標相關性最高,但相關值僅為0.37,僅為弱相關。
我們還可以檢查特徵與其他特徵之間的相關性。下面我們可以看到一個相關矩陣。看起來我們所有的特徵都不是高度相關的。
讓我們嘗試刪除相關值大於0.5的特徵:
Columns to drop: 0
從上面的相關矩陣可以看出,數據集中沒有高度相關的特徵。最高的相關性僅為0.37。
單變量特徵選擇
單變量特徵選擇是基於單變量統計檢驗選擇最優特徵。我們可以使用sklearn的SelectKBest來選擇一些要保留的特徵。這種方法使用統計測試來選擇與目標相關性最高的特徵。這裡我們將保留前100個特徵。
交叉驗證分數比上面的基線有所提高,但是我們仍然可以看到分數的變化,這表明過度擬合。
遞歸特性消除
遞歸特徵選擇通過消除最不重要的特徵來實現。它進行遞歸,直到達到指定數量的特徵為止。遞歸消除可以用於通過coef_或feature_importances_為特徵分配權重的任何模型。在這裡,我們將使用隨機森林選擇100個最好的特徵:
LR Scores: [0.99826389 0.99652778 0.984375 1. 0.99652778]RFC Scores: [0.63368056 0.72569444 0.66666667 0.77430556 0.59895833]
使用SelectFromModel選擇特徵
與遞歸特徵選擇一樣,sklearn的SelectFromModel與任何具有coef_或featureimportances屬性的估計器一起使用。它刪除低於設置閾值的特徵。
LR Scores: [0.984375 0.99479167 0.97222222 0.99305556 0.99305556]RFC Scores: [0.70659722 0.80729167 0.76475694 0.84461806 0.77170139]
PCA
主成分分析(PCA)是一種降維技術,它將數據投影到較低的維度空間。PCA在許多情況下都是有用的,但在多重共線性或預測函數需要解釋的情況下,就不需要優先考慮了。
這裡我們將使用PCA,保持90%的方差:
(250, 139)
LR Scores: [0.80902778 0.703125 0.734375 0.80555556 0.66145833]RFC Scores: [0.60503472 0.703125 0.69878472 0.56597222 0.72916667]
(250, 93)
LR Scores: [0.72048611 0.60069444 0.68402778 0.71006944 0.61284722]RFC Scores: [0.61545139 0.71440972 0.57465278 0.59722222 0.640625 ]
0.9059027777777778
結論
特徵選擇是任何機器學習過程的重要組成部分。在本文中,我們探索了幾種有助於提高模型性能的特徵選擇和降維方法。