python中可选参数的特征_sklearn特征选择方法及参数
本文結(jié)合sklearn中的特征選擇的方法,講解相關(guān)方法函數(shù)及參數(shù)的含義。
1. 移除低方差特征
方差越大的特征,可以認(rèn)為是對(duì)目標(biāo)變量越有影響的特征,是我們需要研究的特征。可以利用 VarianceThreshold,移除方差不滿足一定閾值的特征。
classsklearn.feature_selection.VarianceThreshold(threshold=0.0)
參數(shù) threshold 為設(shè)定的方差閾值,小于該值的特征將被移除,默認(rèn)取值0,即移除方差為0的特征。
需要注意的是,不同分布的數(shù)據(jù),方差的計(jì)算方式不同。連續(xù)性變量的方差,大家都比較熟悉它的計(jì)算方式;但是離散型變量的方差,計(jì)算就有所不同了。例如官方文檔中的例子,假設(shè)一個(gè)二元隨機(jī)變量,它的取值為0、1,服從二項(xiàng)分布,而二項(xiàng)分布的方差計(jì)算公式為:D(x) = n*p*q = n*p*(1-p),p為實(shí)驗(yàn)“成功”的概率,q為失敗的概率,n為試驗(yàn)次數(shù)。(注:官方文檔中寫的方差計(jì)算公式少了n,個(gè)人認(rèn)為他是錯(cuò)的,雖然不影響結(jié)果。如果我理解錯(cuò)了,也希望博友指正。)。針對(duì)二元變量,我們希望取值為0或者1比例不要太大。例如,我們不希望其中一個(gè)取值的比例超過80%,那么,此時(shí) threshold 參數(shù)的可設(shè)置為:threshold = 0.8*(1- 0.8)。
2. 單變量特征選擇
所謂的單變量特征選擇,就是對(duì)樣本數(shù)據(jù)中的特征分別進(jìn)行統(tǒng)計(jì)檢驗(yàn),并根據(jù)檢驗(yàn)結(jié)果對(duì)特征進(jìn)行評(píng)分,然后按照設(shè)定的規(guī)則進(jìn)行篩選。主要有以下四種方法:
SelectKBest(score_func,k)
其中?score_func傳入用于特征評(píng)分的統(tǒng)計(jì)檢驗(yàn)方法,默認(rèn)是 f_classif,它計(jì)算的是單變量與訓(xùn)練 target 間的方差分析F值(Anova F-value);k 傳入用戶想要根據(jù)評(píng)分從高到低留下的變量的個(gè)數(shù),默認(rèn)是10。
注意,當(dāng)選用默認(rèn)的 f_classif 方法時(shí),只適用于分類任務(wù),即目標(biāo)變量為分類變量(因?yàn)橹挥心繕?biāo)變量是分類變量,才好進(jìn)行方差分析)。
SelectPercentile(score_func,percentile)
其中 score_func 同上;percentile 傳入用戶想要根據(jù)評(píng)分從高到低留下的變量個(gè)數(shù)占總個(gè)數(shù)的比例,默認(rèn)10,表示10%。
SelectFpr(score_func,alpha)
通過控制統(tǒng)計(jì)檢驗(yàn)中取偽錯(cuò)誤發(fā)生的概率來選擇特征,其中score_func同上;alpha用來控制置信水平,alpha值為保留該變量的最高p值,即p值大于該值,移除對(duì)應(yīng)的變量。
GenericUnivariateSelect(score_func,mode,param)
這是一個(gè)整合上述幾種方法的廣義方法,其中score_func同上;mode 用來指定特征選擇的方法,可選項(xiàng)有{‘percentile’, ‘k_best’, ‘fpr’, ‘fdr’, ‘fwe’},與上面幾種方法相對(duì)應(yīng);param的輸入取決于mode中指定的方式,即指定方式對(duì)應(yīng)的傳入?yún)?shù)。
3. 遞歸特征消除法
classsklearn.feature_selection.RFECV(estimator,?step=1,?cv=None,?scoring=None,?verbose=0,?n_jobs=1)
遞歸特征消除法(Recursive feature elimination)的基本思想是反復(fù)地構(gòu)建多個(gè)模型(如回歸模型、支持向量機(jī)等),例如,在回歸任務(wù)中,對(duì)n個(gè)變量,第一輪構(gòu)造n個(gè)模型,每個(gè)模型都對(duì)應(yīng)著剔除掉一個(gè)變量,選擇出其中效果最佳的模型對(duì)應(yīng)的變量,將其剔除,再進(jìn)入第二輪,這樣通過遞歸構(gòu)建模型,最終將剩余的變量控制在最佳的水平,這類似交叉驗(yàn)證(cross validation)的過程,我們使用 sklearn.feature_selection中的RFECV() 來實(shí)施這個(gè)過程,其具體參數(shù)如下:
estimator:該參數(shù)傳入用于遞歸構(gòu)建模型的有監(jiān)督型基學(xué)習(xí)器,要求該基學(xué)習(xí)器具有fit方法,且其輸出含有coef_或feature_importances_這種結(jié)果;
step:數(shù)值型,默認(rèn)為1,控制每次迭代過程中刪去的特征個(gè)數(shù),有以下兩種情況:
1.若傳入大于等于1的整數(shù),則在每次迭代構(gòu)建模型的過程中刪去對(duì)應(yīng)數(shù)量的特征;
2.若傳入介于0.0到1.0之間的浮點(diǎn)數(shù),則在每次第迭代構(gòu)造模型的過程中刪去對(duì)應(yīng)比例的特征。
cv:控制交叉驗(yàn)證的分割策略,默認(rèn)是3折交叉驗(yàn)證,有以下幾種情況:
1.None,等價(jià)于不傳入?yún)?shù),即使用默認(rèn)設(shè)置的3折交叉驗(yàn)證;
2.正整數(shù),這時(shí)即指定了交叉驗(yàn)證中分裂的子集個(gè)數(shù),即k折中的k;
n_jobs:控制并行運(yùn)算中利用到的CPU核心數(shù),默認(rèn)為1,即單核工作,若設(shè)置為-1,則啟用所有核心進(jìn)行運(yùn)算;
函數(shù)返回值:
n_features_:通過交叉驗(yàn)證過程最終剩下的特征個(gè)數(shù);
support_:被選擇的特征的被選擇情況(True表示被選擇,False表示被淘汰);
ranking_:所有特征的評(píng)分排名;
estimator_:利用剩下的特征訓(xùn)練出的模型;
4.?SelectFromModel 選取特征
SelectFromModel包括:L1-based feature selection (基于 L1 的特征選取)、Tree-based feature selection(基于 Tree(樹)的特征選取) 等。
classsklearn.feature_selection.SelectFromModel(estimator, threshold=None, prefit=False)
有系數(shù)的線性模型中,L1正則化可生成一個(gè)稀疏矩陣,利于計(jì)算,所以可以做特征選擇。
from sklearn.feature_selection importSelectFromModelfrom sklearn.linear_model import Lasso #此處以L1正則化的線性模型Lasso為例
lasso = Lasso() #可在此步對(duì)模型進(jìn)行參數(shù)設(shè)置,這里用默認(rèn)值。
lasso.fit(X, y) #訓(xùn)練模型,傳入X、y, 數(shù)據(jù)中不能包含miss_value
model =SelectFromModel(lasso)
X_new= model.transform(X)
在無系數(shù)的非線性模型中,通過計(jì)算得到特征重要性,根據(jù)重要性篩選無關(guān)特征
from sklearn.feature_selection importSelectFromModelfrom sklearn.ensemble import RandomForestRegressor #獲得特征重要度
rf = RandomForestRegressor() #默認(rèn)參數(shù)
rf.fit(X, y)
model=SelectFromModel(rf)
X_new= model.transform(X)
參考:?https://www.cnblogs.com/feffery/p/8808398.html#commentform
總結(jié)
以上是生活随笔為你收集整理的python中可选参数的特征_sklearn特征选择方法及参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python123江湖秘籍_江湖秘籍,p
- 下一篇: python字典默认输出键还是值_说说在