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