日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中可选参数的特征_sklearn特征选择方法及参数

發布時間:2024/9/15 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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特征选择方法及参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。