特征选择的几种方法
目錄
1、 過濾法(Filter)
1.1 方差選擇法
1.2 相關(guān)系數(shù)法
1.3 卡方檢驗(yàn)
1.4 互信息法
1.5 relief算法
2、包裹法(Wrapper)
2.1 遞歸特征消除法
2.2 特征干擾法
3、嵌入法(Embedded)
3.1 基于懲罰項(xiàng)的特征選擇法
3.2 基于樹模型的特征選擇法
4、機(jī)器學(xué)習(xí)中的特征選擇和優(yōu)缺點(diǎn)
1、 過濾法(Filter)
1.1 方差選擇法
使用方差選擇法,先要計(jì)算各個(gè)特征的方差,然后根據(jù)閾值,選擇方差大于閾值的特征。使用feature_selection庫的VarianceThreshold類來選擇特征的代碼如下:
from sklearn.feature_selection import VarianceThreshold#方差選擇法,返回值為特征選擇后的數(shù)據(jù) #參數(shù)threshold為方差的閾值 VarianceThreshold(threshold=3).fit_transform(iris.data)1.2 相關(guān)系數(shù)法
使用相關(guān)系數(shù)法,先要計(jì)算各個(gè)特征對(duì)目標(biāo)值的相關(guān)系數(shù)以及相關(guān)系數(shù)的P值。用feature_selection庫的SelectKBest類結(jié)合相關(guān)系數(shù)來選擇特征的代碼如下:
from sklearn.feature_selection import SelectKBest from scipy.stats import pearsonr#選擇K個(gè)最好的特征,返回選擇特征后的數(shù)據(jù) #第一個(gè)參數(shù)為計(jì)算評(píng)估特征是否好的函數(shù),該函數(shù)輸入特征矩陣和目標(biāo)向量,輸出二元組(評(píng)分,P值)的數(shù)組,數(shù)組第i項(xiàng)為第i個(gè)特征的評(píng)分和P值。在此定義為計(jì)算相關(guān)系數(shù) #參數(shù)k為選擇的特征個(gè)數(shù) SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)1.3 卡方檢驗(yàn)
經(jīng)典的卡方檢驗(yàn)是檢驗(yàn)定性自變量對(duì)定性因變量的相關(guān)性。假設(shè)自變量有N種取值,因變量有M種取值,考慮自變量等于i且因變量等于j的樣本頻數(shù)的觀察值與期望的差距,構(gòu)建統(tǒng)計(jì)量:
不難發(fā)現(xiàn),這個(gè)統(tǒng)計(jì)量的含義簡(jiǎn)而言之就是自變量對(duì)因變量的相關(guān)性。用feature_selection庫的SelectKBest類結(jié)合卡方檢驗(yàn)來選擇特征的代碼如下:
from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2#選擇K個(gè)最好的特征,返回選擇特征后的數(shù)據(jù) SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)1.4 互信息法
經(jīng)典的互信息也是評(píng)價(jià)定性自變量對(duì)定性因變量的相關(guān)性的(例如決策樹ID3算法),互信息計(jì)算公式如下:
為了處理定量數(shù)據(jù),最大信息系數(shù)法被提出,使用feature_selection庫的SelectKBest類結(jié)合最大信息系數(shù)法來選擇特征的代碼如下:
from sklearn.feature_selection import SelectKBestfrom minepy import MINE#由于MINE的設(shè)計(jì)不是函數(shù)式的,定義mic方法將其為函數(shù)式的,返回一個(gè)二元組,二元組的第2項(xiàng)設(shè)置成固定的P值0.5def mic(x, y):m = MINE()m.compute_score(x, y)return (m.mic(), 0.5)#選擇K個(gè)最好的特征,返回特征選擇后的數(shù)據(jù) 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提出.?基本內(nèi)容:從訓(xùn)練集D中隨機(jī)選擇一個(gè)樣本R,?然后從和R同類的樣本中尋找k最近鄰樣本H,從和R不同類的樣本中尋找k最近鄰樣本M,?最后按照公式更新特征權(quán)重.
? ? ? ??
Relief算法python實(shí)現(xiàn):https://blog.csdn.net/qq_40871363/article/details/86511843?
2、包裹法(Wrapper)
2.1 遞歸特征消除法
遞歸消除特征法使用一個(gè)基模型來進(jìn)行多輪訓(xùn)練,每輪訓(xùn)練后,消除若干權(quán)值系數(shù)的特征,再基于新的特征集進(jìn)行下一輪訓(xùn)練。使用feature_selection庫的RFE類來選擇特征的代碼如下:
from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression#遞歸特征消除法,返回特征選擇后的數(shù)據(jù) #參數(shù)estimator為基模型 #參數(shù)n_features_to_select為選擇的特征個(gè)數(shù) RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)2.2 特征干擾法
特征選擇原理:用加上噪聲的特征和原特征下的誤差對(duì)比來評(píng)價(jià)特征重要性,誤差越大,說明特征越重要。以隨機(jī)森林為例:
sklearn中會(huì)對(duì)每個(gè)特征賦予一個(gè)分?jǐn)?shù),分?jǐn)?shù)越大,特征越重要,因此,可以根據(jù)特征重要性排序,然后選擇最佳特征組合;
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(默認(rèn)=False)?是否使用袋外樣品進(jìn)行估算?泛化精度。3、嵌入法(Embedded)
嵌入特征選擇方法和算法本身緊密結(jié)合,在模型訓(xùn)練過程中完成特征選擇。例如,
決策樹算法每次都選擇分類能力最強(qiáng)的特征;
線性回歸+L2正則化:某些信號(hào)比較弱的特征權(quán)重減小;
線性回歸+L1正則化:某些信號(hào)比較弱的特征權(quán)重為0;
彈性網(wǎng)絡(luò):L1懲罰項(xiàng)降維的原理在于保留多個(gè)對(duì)目標(biāo)值具有同等相關(guān)性的特征中的一個(gè),所以沒選到的特征不代表不重要。
3.1 基于懲罰項(xiàng)的特征選擇法
使用帶懲罰項(xiàng)的基模型,除了篩選出特征外,同時(shí)也進(jìn)行了降維。使用feature_selection庫的SelectFromModel類結(jié)合帶L1懲罰項(xiàng)的邏輯回歸模型,來選擇特征的代碼如下:
from sklearn.feature_selection import SelectFromModel from sklearn.linear_model import LogisticRegression#帶L1懲罰項(xiàng)的邏輯回歸作為基模型的特征選擇 SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)3.2 基于樹模型的特征選擇法
樹模型中GBDT也可用來作為基模型進(jìn)行特征選擇,使用feature_selection庫的SelectFromModel類結(jié)合GBDT模型,來選擇特征的代碼如下:
from sklearn.feature_selection import SelectFromModel from sklearn.ensemble import GradientBoostingClassifier#GBDT作為基模型的特征選擇 SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)4、機(jī)器學(xué)習(xí)中的特征選擇和優(yōu)缺點(diǎn)
參考:https://blog.csdn.net/piaodexin/article/details/77203696
——————————————————————
參考:
https://www.cnblogs.com/bonelee/p/8632866.html?
總結(jié)
- 上一篇: linux 常用工具
- 下一篇: java 动态代理