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,則會分別透過呼叫 fitpartial_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 的複本,並在傳遞給 fitpartial_fit 的資料上進行擬合。

n_features_in_整數

fit 期間看到的特徵數量。

max_features_整數

fit 期間計算的最大特徵數量。僅當 max_features 不是 None 時定義。

  • 如果 max_featuresint,則 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 將轉換器擬合到 Xy,並返回 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_featuresNone,則使用 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

設定 transformfit_transform 的輸出。

  • "default": 轉換器的預設輸出格式

  • "pandas": DataFrame 輸出

  • "polars": Polars 輸出

  • None: 轉換設定保持不變

在 1.4 版本中新增:新增了 "polars" 選項。

傳回:
self估計器實例

估計器實例。

set_params(**params)[來源]#

設定此估計器的參數。

此方法適用於簡單的估計器以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估計器參數。

傳回:
self估計器實例

估計器實例。

property threshold_#

用於特徵選擇的閾值。

transform(X)[來源]#

將 X 縮減為選定的特徵。

參數:
X形狀為 [n_samples, n_features] 的陣列

輸入樣本。

傳回:
X_r形狀為 [n_samples, n_selected_features] 的陣列

僅包含選定特徵的輸入樣本。