特徵選擇是從原始數據中選擇對於預測Pipeline而言最好的特徵的過程,更正式地說,給定n個特徵,搜索其中包括k個特徵的子集來改善機器學習Pipeline的性能。特徵選擇嘗試剔除數據中的噪聲。特徵選擇的方法包括基於統計和基於模型的特徵選擇。
1. 評價特徵工程的性能指標
除了分類任務的準確率和回歸任務的均方差根外,我們還可以使用元指標對特徵工程進行評價。元指標是指不直接與模型預測性能相關的指標,它們試圖衡量與模型自身相關的性能,包括模型擬合/訓練所用的時間、擬合後的模型預測新實例的時間和需要保存的數據大小等,創建如下函數來完成搜索給定參數,優化機器學習參數,輸出評估Pipeline的指標

2. 創建基準機器學習流水線
在特徵選擇時,使用邏輯回歸、K最近鄰、決策樹和隨機森林等作為基準。
在選擇基準學習器時,需考慮預測準確率和實時預測時間。
3. 特徵選擇
3.1 基於統計的特徵選擇
(1) 使用皮爾遜相關係數或假設檢驗等單變量方法。皮爾遜相關係數會測量列之間的線性關係,該係數在-1到1之間變化,0表示沒有線性關係,接近-1或1時代表線性關係很強。

構建如下類來Pipeline整個相關性選擇預處理過程

(2) 使用假設檢驗,假設檢驗的原則是:特徵與響應向量沒有關係。若要拒絕這一假設,p值小於0.05。p值是介於0到1的小數,代表在假設檢驗下,給定數據偶然出現的概率。p值越低,拒絕零假設的概率越大。在特徵選擇中,p值越低,表示這個特徵與響應變量有關聯的概率越大,要保留這個特徵。f_classif函數在每個特徵上單獨執行一次方差分析,並分配一個p值,SelectKBest會將特徵按照p值排列(越小越好),只保留指定的k個最佳特徵。

3.2 基於模型的特徵選擇
主要使用的兩類模型是基於樹的模型和線性模型,這兩類模型都有特徵排列的功能,對特徵劃分子集時很有用,這些方法的邏輯並不相同,但目標一致,找到最佳的特徵子集,優化機器學習的Pipeline。
(1) 基於樹的模型
在擬合決策樹時,決策樹會從根節點開始,在每個節點處貪婪地選擇最優分割,優化節點純淨度指標。默認情況下,會優化基尼指數。每次分割時,模型會記錄每個分割對整體優化目標的幫助。因此,在樹形結構中,這些指標對特徵重要性有記錄。SelectFromModel會使用機器學習內部模型的內部指標來評估特徵的重要性,不使用SelectKBest中的p值。pipeline.steps是由元組組成的列表,pipeline.steps[0][1]是第一個估計器,pipeline.steps[1][1]是第二個估計器。

(2) 線性模型和正則化
SelectFromModel可以處理任何包括feature_importances_或coef_屬性的機器學習模型。基於樹模型會暴露前者,線性模型會暴露後者。在擬合後,線性回歸、邏輯回歸、支持向量機等線性模型會將一個係數放在特徵的斜率(重要性)前面,SelectFromModel會認為這個係數等同於重要性,並根據擬合時的係數選擇特徵。正則化是對模型施加額外約束的方法,L1正則化(Lasso),L2正則化(嶺)。

4. 總結
以下作為判斷選擇特徵方法的優劣時參考
(1) 如果特徵是分類的,從SelectKBest開始,用卡方或基於樹的選擇器
(2) 如果特徵基本是定量的,用線性模型和基於相關性的選擇器效果一般更好
(3) 如果是二元分類為題,考慮使用SelectFromModel和SVC,因為SVC會查找優化二元分類任務的係數