SelectFromModel#
- class sklearn.feature_selection.SelectFromModel(estimator, *, threshold=None, prefit=False, norm_order=1, max_features=None, importance_getter='auto')[來源]#
基於重要性權重選擇特徵的元轉換器。
於 0.17 版本新增。
請參閱使用手冊以了解更多資訊。
- 參數:
- estimator物件
建立轉換器的基礎估計器。這可以是已擬合的 (如果
prefit
設定為 True) 或未擬合的估計器。估計器在擬合後應具有feature_importances_
或coef_
屬性。否則,應使用importance_getter
參數。- threshold字串或浮點數,預設值=None
用於特徵選擇的閾值。保留絕對重要性值大於或等於該閾值的特徵,而其他特徵則被捨棄。如果為“中位數”(resp. “平均值”),則
threshold
值為特徵重要性的中位數 (resp. 平均值)。也可以使用縮放因子(例如,“1.25*平均值”)。如果為 None,且如果估計器具有 penalty 參數設定為 l1,無論是明確設定還是隱含設定(例如,Lasso),則使用的閾值為 1e-5。否則,預設使用“平均值”。- prefit布林值,預設值=False
是否預期將預先擬合的模型直接傳遞給建構函式。如果為
True
,則estimator
必須是已擬合的估計器。如果為False
,則會分別透過呼叫fit
和partial_fit
來擬合和更新estimator
。- norm_order非零整數、inf、-inf,預設值為 1
用於篩選係數向量的範數階數,該係數向量在估計器的
coef_
屬性為二維時低於threshold
。- max_features整數、可呼叫物件,預設值為 None
要選擇的最大特徵數量。
如果為整數,則指定允許的最大特徵數量。
如果為可呼叫物件,則指定如何使用
max_features(X)
的輸出計算允許的最大特徵數量。如果為
None
,則保留所有特徵。
若只想根據
max_features
進行選擇,請設定threshold=-np.inf
。在 0.20 版本中新增。
在 1.1 版本中變更:
max_features
接受可呼叫物件。- importance_getter字串或可呼叫物件,預設值為 'auto'
如果為 'auto',則會透過估計器的
coef_
屬性或feature_importances_
屬性使用特徵重要性。也接受一個字串,指定用於提取特徵重要性的屬性名稱/路徑(使用
attrgetter
實作)。例如,在TransformedTargetRegressor
的情況下給定regressor_.coef_
,或在Pipeline
的情況下,其最後一步名為clf
,則給定named_steps.clf.feature_importances_
。如果為
callable
,則會覆寫預設的特徵重要性取得器。該可呼叫物件會傳遞已擬合的估計器,並且應傳回每個特徵的重要性。在 0.24 版本中新增。
- 屬性:
- estimator_估計器
從中建立轉換器的基本估計器。此屬性僅在呼叫
fit
後存在。如果
prefit=True
,則是estimator
的深層副本。如果
prefit=False
,則是estimator
的複本,並在傳遞給fit
或partial_fit
的資料上進行擬合。
n_features_in_
整數在
fit
期間看到的特徵數量。- max_features_整數
在 fit 期間計算的最大特徵數量。僅當
max_features
不是None
時定義。如果
max_features
是int
,則max_features_ = max_features
。如果
max_features
是可呼叫物件,則max_features_ = max_features(X)
。
在 1.1 版本中新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅當
X
具有全部為字串的特徵名稱時定義。在 1.0 版本中新增。
threshold_
浮點數用於特徵選擇的閾值。
另請參閱
RFE
基於重要性權重的遞迴特徵消除。
RFECV
使用內建的交叉驗證選擇最佳特徵數量的遞迴特徵消除。
SequentialFeatureSelector
基於循序交叉驗證的特徵選擇。不依賴重要性權重。
注意事項
如果底層估計器也允許,則允許輸入中出現 NaN/Inf。
範例
>>> from sklearn.feature_selection import SelectFromModel >>> from sklearn.linear_model import LogisticRegression >>> X = [[ 0.87, -1.34, 0.31 ], ... [-2.79, -0.02, -0.85 ], ... [-1.34, -0.48, -2.55 ], ... [ 1.92, 1.48, 0.65 ]] >>> y = [0, 1, 0, 1] >>> selector = SelectFromModel(estimator=LogisticRegression()).fit(X, y) >>> selector.estimator_.coef_ array([[-0.3252..., 0.8345..., 0.4976...]]) >>> selector.threshold_ np.float64(0.55249...) >>> selector.get_support() array([False, True, False]) >>> selector.transform(X) array([[-1.34], [-0.02], [-0.48], [ 1.48]])
使用可呼叫物件來建立選擇器,該選擇器可以使用不超過一半的輸入特徵。
>>> def half_callable(X): ... return round(len(X[0]) / 2) >>> half_selector = SelectFromModel(estimator=LogisticRegression(), ... max_features=half_callable) >>> _ = half_selector.fit(X, y) >>> half_selector.max_features_ 2
- fit(X, y=None, **fit_params)[原始碼]#
擬合 SelectFromModel 後設轉換器。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
訓練輸入樣本。
- y形狀為 (n_samples,) 的類陣列,預設值為 None
目標值(分類中對應於類別的整數,迴歸中的實數)。
- **fit_params字典
如果
enable_metadata_routing=False
(預設):參數會直接傳遞給子估計器的fit
方法。如果prefit=True
,則會忽略它們。如果
enable_metadata_routing=True
:參數會安全地路由到子估計器的fit
方法。如果prefit=True
,則會忽略它們。
在 1.4 版本中變更:如需更多詳細資訊,請參閱中繼資料路由使用者指南。
- 傳回:
- self物件
已擬合的估計器。
- fit_transform(X, y=None, **fit_params)[原始碼]#
擬合資料,然後轉換它。
使用可選參數
fit_params
將轉換器擬合到X
和y
,並返回X
的轉換版本。- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
輸入樣本。
- y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列,預設值為 None
目標值(對於非監督轉換,則為 None)。
- **fit_params字典
額外的擬合參數。
- 傳回:
- X_new形狀為 (n_samples, n_features_new) 的 ndarray 陣列
轉換後的陣列。
- get_feature_names_out(input_features=None)[原始碼]#
根據選取的特徵遮罩特徵名稱。
- 參數:
- input_features字串或 None 的類陣列,預設值為 None
輸入特徵。
如果
input_features
為None
,則使用feature_names_in_
作為輸入的特徵名稱。如果未定義feature_names_in_
,則會產生以下輸入特徵名稱:["x0", "x1", ..., "x(n_features_in_ - 1)"]
。如果
input_features
為類陣列,則如果已定義feature_names_in_
,input_features
必須與feature_names_in_
相符。
- 傳回:
- feature_names_out字串物件的 ndarray
轉換後的特徵名稱。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看 使用者指南,了解路由機制的運作方式。
於 1.4 版新增。
- 傳回:
- routingMetadataRouter
一個
MetadataRouter
,封裝路由資訊。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
- 參數:
- deep布林值,預設值為 True
如果為 True,將返回此估算器以及包含的子物件(為估算器)的參數。
- 傳回:
- paramsdict
參數名稱對應到其值。
- get_support(indices=False)[原始碼]#
取得選取特徵的遮罩或整數索引。
- 參數:
- indices布林值,預設值為 False
如果為 True,則傳回值將為整數陣列,而不是布林遮罩。
- 傳回:
- support陣列
一個索引,可從特徵向量中選取保留的特徵。如果
indices
為 False,則為形狀為 [# 輸入特徵] 的布林陣列,其中元素為 True 表示其對應的特徵選取為保留。如果indices
為 True,則為形狀為 [# 輸出特徵] 的整數陣列,其值為輸入特徵向量的索引。
- inverse_transform(X)[原始碼]#
反轉轉換操作。
- 參數:
- X形狀為 [n_samples, n_selected_features] 的陣列
輸入樣本。
- 傳回:
- X_r形狀為 [n_samples, n_original_features] 的陣列
將
X
中會被transform
移除的特徵位置插入零的資料行。
- property n_features_in_#
在
fit
期間看到的特徵數量。
- partial_fit(X, y=None, **partial_fit_params)[原始碼]#
只擬合一次 SelectFromModel 中繼轉換器。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
訓練輸入樣本。
- y形狀為 (n_samples,) 的類陣列,預設值為 None
目標值(分類中對應於類別的整數,迴歸中的實數)。
- **partial_fit_paramsdict
如果
enable_metadata_routing=False
(預設值):直接傳遞至子估算器的partial_fit
方法的參數。如果
enable_metadata_routing=True
:傳遞至子估算器的partial_fit
方法的參數。如果prefit=True
,則會忽略這些參數。
在 1.4 版本中變更:如果透過
set_config
設定enable_metadata_routing=True
,則**partial_fit_params
會被路由到子估計器,這允許別名。請參閱 中繼資料路由使用者指南 以了解更多詳細資訊。
- 傳回:
- self物件
已擬合的估計器。
- set_output(*, transform=None)[來源]#
設定輸出容器。
請參閱 介紹 set_output API 以取得如何使用此 API 的範例。
- 參數:
- transform{“default”, “pandas”, “polars”}, default=None
設定
transform
和fit_transform
的輸出。"default"
: 轉換器的預設輸出格式"pandas"
: DataFrame 輸出"polars"
: Polars 輸出None
: 轉換設定保持不變
在 1.4 版本中新增:新增了
"polars"
選項。
- 傳回:
- self估計器實例
估計器實例。
- set_params(**params)[來源]#
設定此估計器的參數。
此方法適用於簡單的估計器以及巢狀物件(例如
Pipeline
)。後者具有<component>__<parameter>
形式的參數,因此可以更新巢狀物件的每個元件。- 參數:
- **paramsdict
估計器參數。
- 傳回:
- self估計器實例
估計器實例。
- property threshold_#
用於特徵選擇的閾值。