机器学习-特征工程中的特征选择
? ? ? ?對于一個機器學習問題,數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限。由此可見,數據和特征在模型的整個開發過程中是比較重要。特征工程,顧名思義,是對原始數據進行一系列工程處理,將其提煉為特征,作為輸入供算法和模型使用。從本質上來講,特征工程是一個表示和展現數據的過程。在實際工作中,特征工程旨在去除原始數據中的雜質和冗余,以設計更高效的特征以刻畫求解的問題與預測模型之間的關系。
? ? ? ?在實際的模型應用中并不是特征越多越好,特征越多固然會給我們帶來很多額外的信息,但是與此同時,一方面,這些額外的信息也增加實驗的時間復雜度和最終模型的復雜度,造成的后果就是特征的“維度災難”,使得計算耗時大幅度增加;另一方面,可能會導致模型的復雜程度上升而使得模型變得不通用。所以我們就要在眾多的特征中選擇盡可能相關的特征和有效的特征,使得計算的時間復雜度大幅度減少來簡化模型,并且保證最終模型的有效性不被減弱或者減弱很少,這也就是我們特征選擇的目的。
特征工程主要包括以下方面:
我們重點從3個方面來詳細說明特征工程的具體操作:
機器學習-特征工程中的數據預處理
機器學習-特征工程中的特征選擇
機器學習-特征工程中的特征降維
?
? ? ? ?我們在用邏輯回歸、決策樹等模型方法構建分類模型時,經常需要對自變量進行篩選。比如我們有200個候選自變量,通常情況下,不會直接把200個變量直接放到模型中去進行擬合訓練,而是會用一些方法,從這200個自變量中挑選一些出來,放進模型,形成入模變量列表,入模的變量數量會小于200個。這樣減少特征具有重要的現實意義:
- 減少特征數量、降維
- 降低學習任務的難度,提升模型的效率
- 使模型泛華能力更強,減少過擬合
- 增強對特征和特征值之間的理解
問題是,在面對未知領域時,很難有足夠的認識去判斷特征與目標之間的相關性,特征與特征之間的相關性。這時候就需要用一些數學或工程上的方法來幫助我們更好地進行特征選擇,挑選入模變量過程是個比較復雜的過程,需要考慮的因素很多,比如:變量的預測能力,變量之間的相關性,變量的簡單性(容易生成和使用),變量的強壯性(不容易被繞過),變量在業務上的可解釋性(被挑戰時可以解釋的通)等等。常見的方法有:
過濾法(Filter):按照發散性或者相關性對各個特征進行評分,設定閾值或者待選擇閾值的個數,選擇特征。常用的有方差選擇法,相關性選擇法,特征重要性選擇法,互信息選擇法,開發檢驗選擇法。
包裹法(Wrapper):根據目標函數,每次選擇若干特征或者排除若干特征,直到選擇出最佳的子集,常用的有遞歸特征消除法。
嵌入法(Embedding):先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據系數從大到小選擇特征。類似于Filter方法,但是是通過訓練來確定特征的優劣,常用的有基于樹模型的特征選擇和基于懲罰項的特征選擇法
目錄
1. 去掉重復值高的特征
2.?方差選擇法
3.?去掉相關性高的變量
4. 基于IV值的特征選擇
5. 基于互信息特征選擇
6. 基于卡方檢驗特征選擇
7. 基于樹模型的特征選擇
總結
1. 去掉重復值高的特征
? ? ? 最基礎的特征過濾方法,我們假設某特征的特征值只有0和1,并且在所有輸入樣本中,95%的實例的該特征取值都是1,那就可以認為這個特征作用不大。如果100%都是1,那這個特征就沒意義了。當特征值都是離散型變量的時候這種方法才能用,如果是連續型變量,就需要將連續變量離散化之后才能用,而且實際當中,一般不太會有95%以上都取某個值的特征存在,所以這種方法雖然簡單但是不太好用。可以把它作為特征選擇的預處理,先去掉那些取值變化小的特征,然后再從接下來提到的的特征選擇方法中選擇合適的進行進一步的特征選擇。在實際的應用中一般統計單一變量的眾數占比,眾數占比95%以上就可以過濾掉這個特征;另外空值率占比95%以上的變量也可以直接過濾掉。
2.?方差選擇法
? ? ? ?方差衡量的是一個隨機變量取值的分散程度。如果一個隨機變量的方差非常小,那這個變量作為輸入,是很難對輸出有什么影響的。在進行特征選擇時,可以丟棄那些方差特別小的特征。
? ? ? ?首先計算各個特征的方差,按照方差大小排序,特征的方差越大,特征可能越好。也可以根據指定的閾值選擇方差大于閾值的特征,或者指定待選擇的特征數 k,然后選擇 k 個最大方差的特征。在多分類問題中,如果某特征只有一個取值,那么該特征對分類結果沒有任何意義,因為不管取什么值都為 1,單憑該特征是無法區分樣本的分類。需要注意的是,方差選擇法只有在特征是離散型時才適用,如果是連續型則需要離散化后才能使用。此外,該方法在實際問題中效果并非很好,具體原因參考如下數據集:
特征A? ? ?特征B? ? ?Y
1? ? ?? ? ??? ? ?1 ? ? ?? ? 0
2 ? ? ?? ? ?? ? ?1 ? ? ?? ? 0
3? ? ?? ? ?? ? ? 1 ? ? ?? ? 0
1 ? ? ?? ? ?? ? ?2 ? ? ?? ? 1
2 ? ? ?? ? ?? ? ?2 ? ? ?? ? 1
3 ? ? ?? ? ?? ? ?2? ? ? ? ? 1
從以上的數據集中可以看出,特征 A 的方差 4 要大于特征 B 的方差 1.5,但特征 A 對最終分類結果 Y 的區分度明顯沒有特征 B 好。單看這 6 條數據,特征 A 幾乎沒有辦法區分 Y 是 0 還是 1。因此我們需要明確一個概念,特征值的方差越大不一定對分類結果有更好的區分。關鍵原因是特征值的方差僅僅只考慮自身的取值,而沒有結合最終的分類結果。
from sklearn.feature_selection import VarianceThreshold#方差選擇法,返回值為特征選擇后的數據 #參數threshold為方差的閾值 VarianceThreshold(threshold=3).fit_transform(iris.data)3.?去掉相關性高的變量
在統計學中,方差是用來度量單個隨機變量的離散程度,而協方差則一般用來刻畫兩個隨機變量的相似程度
- 如果協方差為正,說明X,Y同向變化,協方差越大說明同向程度越高;
- 如果協方差維負,說明X,Y反向運動,協方差越小說明反向程度越高;
- 如果兩個變量相互獨立,那么協方差就是0,說明兩個變量不相關。
Pearson相關系數也可以看成協方差:一種剔除了兩個變量量綱影響、標準化后的特殊協方差。Pearson相關系數可以反映兩個變量變化時是同向還是反向,如果同向變化就為正,反向變化就為負。由于它是標準化后的協方差,因此更重要的特性來了,它消除了兩個變量變化幅度的影響,而只是單純反應兩個變量每單位變化時的相似程度。
相關系數取值在-1到1之間,表征的是兩個隨機變量之間的線性相關關系。相關系數為0,表明兩個變量之間線性無關;相關系數大于0,說明兩個變量之間是正相關;相關系數小于0,代表兩個變量之間負相關。如果>0.8,說明2個變量有明顯線性關系,只保留一個,保留與label的皮爾遜系數較大的那個變量或者保留lightgbm AUC最大的那個;
優點:可以通過數字對變量的關系進行度量,并且帶有方向性,1表示正相關,-1表示負相關,可以對變量關系的強弱進行度量,越靠近0相關性越弱。
缺點:無法利用這種關系對數據進行預測,簡單的說就是沒有對變量間的關系進行提煉和固化,形成模型。要利用變量間的關系進行預測,需要使用到下一種相關分析方法,回歸分析。
from sklearn.feature_selection import SelectKBest from scipy.stats import pearsonr#選擇K個最好的特征,返回選擇特征后的數據 #第一個參數為計算評估特征是否好的函數,該函數輸入特征矩陣和目標向量,輸出二元組(評分,P值)的數組,數組第i項為第i個特征的評分和P值。在此定義為計算相關系數 #參數k為選擇的特征個數 SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)特征與輸出的相關系數的絕對值越大,說明對輸出的影響越大,應該優先選擇。
4. 基于IV值的特征選擇
IV中文意思是信息價值,或者信息量,可通過woe加權求和得到,衡量自變量對應變量的預測能力。一般我們選擇 IV值大于0.02的那些變量進入模型。
關于WOE和IV值的詳細解釋說明請看文章:https://blog.csdn.net/iqdutao/article/details/107916408
5. 基于互信息特征選擇
互信息也可以稱作為信息增益,互信息也是評價變量和label之間的相關性的,在進行特征選擇時,我們不該把焦點放在數據關系的類型(線性關系)上,而是要考慮在已經給定另一個特征的情況下一個特征可以提供多少信息量。互信息會通過計算兩個特征所共有的信息,把上述推理工程形式化表達出來。與相關性不同,它依賴的不是數據序列,而是數據的分布。
from sklearn.feature_selection import SelectKBestfrom minepy import MINE#由于MINE的設計不是函數式的,定義mic方法將其為函數式的,返回一個二元組,二元組的第2項設置成固定的P值0.5def mic(x, y):m = MINE()m.compute_score(x, y)return (m.mic(), 0.5)#選擇K個最好的特征,返回特征選擇后的數據 SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)在機器學習中,理想情況下,當互信息最大,可以認為從數據集中擬合出來的隨機變量的概率分布與真實分布相同。
需要注意的是,互信息也是只能處理離散的特征。如果連續的情況,需要先離散化,計算每一對特征之間的歸一互信息量。對于具有較高互信息量的特征對,我們會把其中一個特征扔掉。在進行回歸的時候,我們可以把互信息量非常低的特征扔掉。對于較小的特征集合這種方式的效果或許還可以。但是,在某種程度上,這個過程會非常緩慢,計算量會以平方級別增長,因為我們要計算的是每對特征之間的互信息量。
關于互信息的詳細解釋說明請看文章:https://blog.csdn.net/iqdutao/article/details/107795591
6. 基于卡方檢驗特征選擇
卡方檢驗是一種用途很廣的計數資料的假設檢驗方法。它屬于非參數檢驗的范疇,主要是比較兩個及兩個以上樣本率( 構成比)以及兩個分類變量的關聯性分析。其根本思想就是在于比較理論頻數和實際頻數的吻合程度或擬合優度問題。它在分類資料統計推斷中的應用,包括:兩個率或兩個構成比比較的卡方檢驗;多個率或多個構成比比較的卡方檢驗以及分類資料的相關分析等。
from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2#選擇K個最好的特征,返回選擇特征后的數據 SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)7. 基于樹模型的特征選擇
樹模型中GBDT也可用來作為基模型進行特征選擇,使用feature_selection庫的SelectFromModel類結合GBDT模型,來選擇特征的代碼如下:
from sklearn.feature_selection import SelectFromModel from sklearn.ensemble import GradientBoostingClassifier#GBDT作為基模型的特征選擇 SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)在實際的操作中進行特征選擇,可以先將特征的相關統計信息輸出,如下表,再根據特征的一些統計特性進行變量的選擇。
總結
(1)對于理解數據、數據的結構、特點來說,單變量特征選擇是個非常好的選擇。盡管可以用它對特征進行排序來優化模型,但由于它不能發現冗余(例如假如一個特征子集,其中的特征之間具有很強的關聯,那么從中選擇最優的特征時就很難考慮到冗余的問題)。
(2)正則化的線性模型對于特征理解和特征選擇來說是非常強大的工具。L1正則化能夠生成稀疏的模型,對于選擇特征子集來說非常有用;相比起L1正則化,L2正則化的表現更加穩定,由于有用的特征往往對應系數非零,因此L2正則化對于數據的理解來說很合適。由于響應變量和特征之間往往是非線性關系,可以采用basis expansion的方式將特征轉換到一個更加合適的空間當中,在此基礎上再考慮運用簡單的線性模型。
(3)隨機森林是一種非常流行的特征選擇方法,它易于使用,一般不需要feature engineering、調參等繁瑣的步驟,并且很多工具包都提供了平均不純度下降方法。它的兩個主要問題,1是重要的特征有可能得分很低(關聯特征問題),2是這種方法對特征變量類別多的特征越有利(偏向問題)。盡管如此,這種方法仍然非常值得在你的應用中試一試。
(4)特征選擇在很多機器學習和數據挖掘場景中都是非常有用的。在使用的時候要弄清楚自己的目標是什么,然后找到哪種方法適用于自己的任務。當選擇最優特征以提升模型性能的時候,可以采用交叉驗證的方法來驗證某種方法是否比其他方法要好。當用特征選擇的方法來理解數據的時候要留心,特征選擇模型的穩定性非常重要,穩定性差的模型很容易就會導致錯誤的結論。對數據進行二次采樣然后在子集上運行特征選擇算法能夠有所幫助,如果在各個子集上的結果是一致的,那就可以說在這個數據集上得出來的結論是可信的,可以用這種特征選擇模型的結果來理解數據。
?
?
?
參考鏈接:https://www.cnblogs.com/molieren/articles/10617863.html
參考鏈接:https://blog.csdn.net/wang1127248268/article/details/53505078
參考鏈接:https://zhuanlan.zhihu.com/p/141010878
參考鏈接:https://blog.csdn.net/weixin_43378396/article/details/90649064
參考鏈接:https://www.cnblogs.com/molieren/articles/10617863.html
?
?
總結
以上是生活随笔為你收集整理的机器学习-特征工程中的特征选择的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习-特征中的相关性及相关系数、卡方
- 下一篇: 机器学习-特征工程中的特征降维