sklearn.feature_selection.SelectFromModel 特征重要性選擇(嵌入法的一種)


嵌入式特征選擇在學習器訓練過程中自動地進行特征選擇。嵌入式選擇最常用的是L1正則化與L2正則化。

SelectFromModel是一個元變壓器,可與擬合后具有coef_或feature_importances_屬性的任何估算器一起使用。如果相應的coef_或feature_importances_值低於提供的 threshold參數,則認為這些功能不重要並已刪除 。除了通過數字指定閾值之外,還有一些內置的啟發式方法,可使用字符串參數查找閾值。可用的試探法是“平均值”,“中位數”和浮點數的倍數,例如“ 0.1 *平均值”。與threshold標准結合使用時,可以使用 max_features參數設置對要選擇的要素數量的限制

基於L1-特征選擇

受L1范式懲罰的線性模型的稀疏解:其許多估計系數為零。當目標是減少要與另一個分類器一起使用的數據的維數時,可以將它們與feature_selection.SelectFromModel 選擇非零系數一起使用。特別地,用於此目的的稀疏估計量是linear_model.Lasso用於回歸,的linear_model.LogisticRegression和svm.LinearSVC 用於分類的,對於SVM和logistic回歸,參數C控制稀疏度:C越小,選擇的特征就越少。使用套索,alpha參數越高,選擇的特征就越少,為了很好地選擇alpha ,只要滿足某些特定條件,套索就可以使用很少的觀測值完全恢復非零變量的確切集合。特別是,樣本數量應為“足夠大”,否則L1模型將隨機執行,其中“足夠大”取決於非零系數的數量,特征數量的對數,噪聲量,非零系數的最小絕對值以及設計矩陣X的結構。此外,設計矩陣必須顯示某些特定的屬性,例如,不具有太大的相關性。沒有一般規則來選擇用於恢復非零系數的alpha參數。它可以通過交叉驗證(LassoCV或LassoLarsCV)進行設置,盡管這可能會導致懲罰模型不足:包括少量不相關的變量不會損害預測得分。LassoLarsIC相反,BIC()傾向於設置較高的alpha值。

 基於樹的特征選擇

基於樹的估計器(請參閱sklearn.tree模塊和模塊中的樹林sklearn.ensemble)可用於計算基於雜質的特征重要性,而反過來又可用於丟棄不相關的特征(當與sklearn.feature_selection.SelectFromModel 元變壓器結合使用時)

函數用法:

 

class sklearn.feature_selection.SelectFromModel(estimator, *, threshold=None, prefit=False, norm_order=1, max_features=None)

 

可選參數:

(1)estimator: object,用來構建變壓器的基本估算器。既可以是擬合的(如果prefit設置為True),也可以是不擬合的估計量。擬合后,估計量必須具有 feature_importances_或coef_屬性
(2)threshold: str, float, optional default None,用於特征選擇的閾值。保留重要性更高或相等的要素,而其他要素則被丟棄。如果為“中位數”(分別為“均值”),則該threshold值為特征重要性的中位數(分別為均值)。也可以使用縮放因子(例如,“ 1.25 *平均值”)。如果為None(無),並且估計器的參數懲罰顯式或隱式設置為l1(例如Lasso),則使用的閾值為1e-5。否則,默認情況下使用“平均值”
(3)prefit: bool, default False,預設模型是否期望直接傳遞給構造函數。如果為True,transform必須直接調用和SelectFromModel不能使用cross_val_score, GridSearchCV而且克隆估計類似的實用程序。否則,使用訓練模型fit,然后transform進行特征選擇。
(4)norm_order: 非零 int, inf, -inf, default 1,在估算器threshold的coef_屬性為維度2 的情況下,用於過濾以下系數矢量的范數的順序 ,正則化
(5)max_features:int or None, optional,要選擇的最大功能數。若要僅基於選擇max_features,請設置threshold=-np.inf

屬性:

estimator_:一個估算器,用來建立變壓器的基本估計器。只有當一個不適合的估計器傳遞給SelectFromModel時,才會存儲這個值,即當prefit為False時。
threshold_:float,用於特征選擇的閾值

方法:

fit(X [,y])適合SelectFromModel元變壓器。
fit_transform(X [,y])適合數據,然后對其進行轉換。
get_params([deep])獲取此估計量的參數。
get_support([index])獲取所選特征的掩碼或整數索引
inverse_transform(X)反向轉換操作
partial_fit(X [,y])僅將SelectFromModel元變壓器安裝一次。
set_params(**參數)設置此估算器的參數。
transform(X)將X縮小為選定的特征。

 from sklearn.svm import LinearSVC
 from sklearn.datasets import load_iris
 from sklearn.feature_selection import SelectFromModel
 X, y = load_iris(return_X_y=True)
 X.shape
# (150, 4)
 lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
 model = SelectFromModel(lsvc, prefit=True)  #已經fit過了,所以必須帶上參數prefit
 X_new = model.transform(X)   
 X_new.shape
 #(150, 3)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM