一.基於統計值的篩選方法
1.過濾法:選擇特征的時候,不管模型如何,首先統計計算該特征和和label的一個相關性,自相關性,發散性等等統計指標。
優點:特征選擇開銷小,有效避免過擬合
缺點:沒有考慮后續的學習器來選擇特征,減弱了學習器的學習能力(因為某些特征可能和label算出來相關性不大,但是可能和其他特征交叉后,會和label具有很強的關聯性)
2.單變量篩選法:
a:缺失值占比
b:方差
c:頻數
d:信息熵
3.多變量篩選法
計算多個變量之間自己的相關性,繪制相應的相關性圖,可以使用皮爾遜相關系數,斯皮爾曼相關系數等等來作為衡量。尤其是是在線性模型當中,兩個共線性的模型可能對模型並不具備促進作用,反而可能會帶來一些災難性的后果。樹模型則可以不考慮這種基於多變量的篩選方法。
二.基於模型驗證的篩選方法
基於模型的驗證集進行打分,是一種比較靠譜的方法,也是和最終模型的打分強相關的。
什么意思呢?也就是說我們每增加一些特征或者減少一些特征,我們就用來訓練出一個模型,進行cv,也就是cross validation進行交叉驗證,看模型的准確度是否是上升了。
我們基於這種方法對其進行改進,還有一種時間開銷比較小的方法則是;排列重要性
也就是說,我們可以使用排列重要性這種方法對模型的特征進行驗證和篩選。這種方法對於樹模型來說基本上來說是最好的方法了。
如下圖所示:
當我們已經train出一個模型之后,我們對這個模型某一個特征進行打亂,再對當前的數據進行預測,看准確度多少,如果模型的准確度下降比較多,那么說明該變量對模型的影響很大。如果准確度下降不多,則說明該變量對模型的影響不大,完全可以將其剔除。這是一個十分有效且時間復雜度比較低的一個特征篩選的方法,在我們進行特征工程的時候可以經常使用這個方法,這個方法的代碼實現起來也並不是很難。
三.基於模型嵌入的篩選方法
特征選擇被嵌入到學習器的訓練過程當中,利用模型參數來計算特征重要性。
線性模型:使用線性模型的系數大小進行衡量(比如邏輯回歸和線性回歸當中某個特征的前面的系數,看是否significant)
樹模型:使用特征分裂過程當中的信息增益進行衡量
深度學習:使用注意力機制的權重進行衡量
但是模型認為重要的特征,不一定重要!因為不重要的特征可能和其他特征之間具有強相關性,因此如果剔除,也可能會對模型的效果並不一定有一定的提升。模型認為不重要的,也有可能重要。