特征选择的几种方法
目錄
1、 過濾法(Filter)
1.1 方差選擇法
1.2 相關系數法
1.3 卡方檢驗
1.4 互信息法
1.5 relief算法
2、包裹法(Wrapper)
2.1 遞歸特征消除法
2.2 特征干擾法
3、嵌入法(Embedded)
3.1 基于懲罰項的特征選擇法
3.2 基于樹模型的特征選擇法
4、機器學習中的特征選擇和優缺點
1、 過濾法(Filter)
1.1 方差選擇法
使用方差選擇法,先要計算各個特征的方差,然后根據閾值,選擇方差大于閾值的特征。使用feature_selection庫的VarianceThreshold類來選擇特征的代碼如下:
from sklearn.feature_selection import VarianceThreshold#方差選擇法,返回值為特征選擇后的數據 #參數threshold為方差的閾值 VarianceThreshold(threshold=3).fit_transform(iris.data)1.2 相關系數法
使用相關系數法,先要計算各個特征對目標值的相關系數以及相關系數的P值。用feature_selection庫的SelectKBest類結合相關系數來選擇特征的代碼如下:
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)1.3 卡方檢驗
經典的卡方檢驗是檢驗定性自變量對定性因變量的相關性。假設自變量有N種取值,因變量有M種取值,考慮自變量等于i且因變量等于j的樣本頻數的觀察值與期望的差距,構建統計量:
不難發現,這個統計量的含義簡而言之就是自變量對因變量的相關性。用feature_selection庫的SelectKBest類結合卡方檢驗來選擇特征的代碼如下:
from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2#選擇K個最好的特征,返回選擇特征后的數據 SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)1.4 互信息法
經典的互信息也是評價定性自變量對定性因變量的相關性的(例如決策樹ID3算法),互信息計算公式如下:
為了處理定量數據,最大信息系數法被提出,使用feature_selection庫的SelectKBest類結合最大信息系數法來選擇特征的代碼如下:
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)1.5 relief算法
????? Relief算法最早由Kira提出.?基本內容:從訓練集D中隨機選擇一個樣本R,?然后從和R同類的樣本中尋找k最近鄰樣本H,從和R不同類的樣本中尋找k最近鄰樣本M,?最后按照公式更新特征權重.
? ? ? ??
Relief算法python實現:https://blog.csdn.net/qq_40871363/article/details/86511843?
2、包裹法(Wrapper)
2.1 遞歸特征消除法
遞歸消除特征法使用一個基模型來進行多輪訓練,每輪訓練后,消除若干權值系數的特征,再基于新的特征集進行下一輪訓練。使用feature_selection庫的RFE類來選擇特征的代碼如下:
from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression#遞歸特征消除法,返回特征選擇后的數據 #參數estimator為基模型 #參數n_features_to_select為選擇的特征個數 RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)2.2 特征干擾法
特征選擇原理:用加上噪聲的特征和原特征下的誤差對比來評價特征重要性,誤差越大,說明特征越重要。以隨機森林為例:
sklearn中會對每個特征賦予一個分數,分數越大,特征越重要,因此,可以根據特征重要性排序,然后選擇最佳特征組合;
RandomForestClassifier(n_estimators=200,oob_score=True)oob_score : bool (default=False) Whether to use out-of-bag samples to estimate the generalization accuracy.oob_score:? bool(默認=False)?是否使用袋外樣品進行估算?泛化精度。3、嵌入法(Embedded)
嵌入特征選擇方法和算法本身緊密結合,在模型訓練過程中完成特征選擇。例如,
決策樹算法每次都選擇分類能力最強的特征;
線性回歸+L2正則化:某些信號比較弱的特征權重減小;
線性回歸+L1正則化:某些信號比較弱的特征權重為0;
彈性網絡:L1懲罰項降維的原理在于保留多個對目標值具有同等相關性的特征中的一個,所以沒選到的特征不代表不重要。
3.1 基于懲罰項的特征選擇法
使用帶懲罰項的基模型,除了篩選出特征外,同時也進行了降維。使用feature_selection庫的SelectFromModel類結合帶L1懲罰項的邏輯回歸模型,來選擇特征的代碼如下:
from sklearn.feature_selection import SelectFromModel from sklearn.linear_model import LogisticRegression#帶L1懲罰項的邏輯回歸作為基模型的特征選擇 SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)3.2 基于樹模型的特征選擇法
樹模型中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)4、機器學習中的特征選擇和優缺點
參考:https://blog.csdn.net/piaodexin/article/details/77203696
——————————————————————
參考:
https://www.cnblogs.com/bonelee/p/8632866.html?
總結
- 上一篇: linux 常用工具
- 下一篇: java 动态代理