SequentialFeatureSelector#

class sklearn.feature_selection.SequentialFeatureSelector(estimator, *, n_features_to_select='auto', tol=None, direction='forward', scoring=None, cv=5, n_jobs=None)[原始碼]#

執行循序特徵選擇的轉換器。

此循序特徵選擇器會以貪婪的方式新增(前向選擇)或移除(後向選擇)特徵,以形成特徵子集。在每個階段,此估算器會根據估算器的交叉驗證分數,選擇最佳的特徵來新增或移除。在非監督式學習的情況下,此循序特徵選擇器只會查看特徵(X),而不看所需的輸出(y)。

請在使用者指南中閱讀更多內容。

於 0.24 版本新增。

參數:
estimator估算器實例

一個未擬合的估算器。

n_features_to_select“auto”、整數或浮點數,預設值為 “auto”

如果 "auto",則行為取決於 tol 參數。

  • 如果 tol 不是 None,則當分數變化不超過 tol 時,會選取特徵。

  • 否則,會選取一半的特徵。

如果為整數,則此參數是要選取的絕對特徵數量。如果為介於 0 和 1 之間的浮點數,則是要選取的特徵比例。

於 1.1 版本新增: "auto" 選項於 1.1 版本新增。

於 1.3 版本變更: 預設值在 1.3 版本中從 "warn" 變更為 "auto"

tol浮點數,預設值為 None

如果分數在兩個連續的特徵新增或移除之間沒有至少增加 tol,則停止新增或移除。

當使用 direction="backward" 移除特徵時,tol 可以是負數。當進行前向選擇時,tol 必須為嚴格正數。以犧牲分數的微小降低為代價來減少特徵數量可能很有用。

只有當 n_features_to_select"auto" 時,tol 才會啟用。

於 1.1 版本新增。

direction{‘forward’、‘backward’},預設值為 ‘forward’

是否執行前向選擇或後向選擇。

scoring字串或可呼叫物件,預設值為 None

單一字串(請參閱 評分參數:定義模型評估規則)或可呼叫物件(請參閱 可呼叫的評分器)來評估測試集上的預測。

請注意,當使用自訂評分器時,它應傳回單一值。

如果為 None,則會使用估算器的 score 方法。

cv整數、交叉驗證產生器或可迭代物件,預設值為 None

決定交叉驗證分割策略。cv 的可能輸入為

  • None,使用預設的 5 折交叉驗證,

  • 整數,指定 (Stratified)KFold 中的折數,

  • CV 分割器,

  • 一個產生 (train, test) 分割(作為索引陣列)的可迭代物件。

對於整數/None 輸入,如果估算器是分類器,且 y 是二元或多類別,則會使用 StratifiedKFold。在所有其他情況下,會使用 KFold。這些分割器會以 shuffle=False 進行實例化,因此分割在各個呼叫之間會保持相同。

請參閱使用者指南,了解這裡可使用的各種交叉驗證策略。

n_jobs整數,預設值為 None

要並行執行的工作數。當評估要新增或移除的新特徵時,交叉驗證程序會在各個折數之間並行執行。None 表示 1,除非在 joblib.parallel_backend 內容中。-1 表示使用所有處理器。請參閱詞彙表以取得更多詳細資訊。

屬性:
n_features_in_整數

擬合期間看到的特徵數量。只有在底層估算器在擬合時公開此屬性時才會定義。

於 0.24 版本新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

擬合期間看到的特徵名稱。只有當 X 具有全部都是字串的特徵名稱時才會定義。

於 1.0 版本新增。

n_features_to_select_整數

選取的特徵數量。

support_形狀為 (n_features,)、dtype=bool 的 ndarray

選取特徵的遮罩。

另請參閱

GenericUnivariateSelect

具有可設定策略的單變數特徵選擇器。

RFE

基於重要性權重的遞迴特徵消除。

RFECV

基於重要性權重的遞迴特徵消除,具有自動選擇特徵數量的功能。

SelectFromModel

基於重要性權重閾值的特徵選擇。

範例

>>> from sklearn.feature_selection import SequentialFeatureSelector
>>> from sklearn.neighbors import KNeighborsClassifier
>>> from sklearn.datasets import load_iris
>>> X, y = load_iris(return_X_y=True)
>>> knn = KNeighborsClassifier(n_neighbors=3)
>>> sfs = SequentialFeatureSelector(knn, n_features_to_select=3)
>>> sfs.fit(X, y)
SequentialFeatureSelector(estimator=KNeighborsClassifier(n_neighbors=3),
                          n_features_to_select=3)
>>> sfs.get_support()
array([ True, False,  True,  True])
>>> sfs.transform(X).shape
(150, 3)
fit(X, y=None, **params)[原始碼]#

從 X 中學習要選擇的特徵。

參數:
X形狀如 (n_samples, n_features) 的類陣列 (array-like)

訓練向量,其中 n_samples 是樣本數量,而 n_features 是預測變數的數量。

y形狀如 (n_samples,) 的類陣列 (array-like),預設值為 None

目標值。此參數在非監督式學習中可能會被忽略。

**params字典 (dict),預設值為 None

要傳遞給底層 estimatorcvscorer 物件的參數。

1.6 版本新增: 僅在 enable_metadata_routing=True 時可用,可以使用 sklearn.set_config(enable_metadata_routing=True) 設定。有關更多詳細資訊,請參閱 元數據路由使用者指南

返回:
self物件

返回實例本身。

fit_transform(X, y=None, **fit_params)[原始碼]#

擬合數據,然後轉換它。

使用可選參數 fit_params 將轉換器擬合到 Xy,並返回 X 的轉換版本。

參數:
X形狀如 (n_samples, n_features) 的類陣列 (array-like)

輸入樣本。

y形狀如 (n_samples,) 或 (n_samples, n_outputs) 的類陣列 (array-like),預設值為 None

目標值(對於非監督式轉換為 None)。

**fit_params字典 (dict)

額外的擬合參數。

返回:
X_new形狀如 (n_samples, n_features_new) 的 ndarray 陣列

轉換後的陣列。

get_feature_names_out(input_features=None)[原始碼]#

根據選取的特徵遮罩特徵名稱。

參數:
input_features字串的類陣列 (array-like) 或 None,預設值為 None

輸入特徵。

  • 如果 input_featuresNone,則會使用 feature_names_in_ 作為輸入特徵名稱。如果未定義 feature_names_in_,則會產生以下輸入特徵名稱: ["x0", "x1", ..., "x(n_features_in_ - 1)"]

  • 如果 input_features 為類陣列 (array-like),則如果已定義 feature_names_in_,則 input_features 必須符合 feature_names_in_

返回:
feature_names_out字串物件的 ndarray

轉換後的特徵名稱。

get_metadata_routing()[原始碼]#

取得此物件的元數據路由。

請查看使用者指南,了解路由機制如何運作。

1.6 版本新增。

返回:
routingMetadataRouter

一個封裝路由資訊的 MetadataRouter

get_params(deep=True)[原始碼]#

取得此估算器的參數。

參數:
deep布林值 (bool),預設值為 True

如果為 True,將返回此估算器以及所包含的子物件(即估算器)的參數。

返回:
params字典 (dict)

參數名稱對應到它們的值。

get_support(indices=False)[原始碼]#

取得選取特徵的遮罩或整數索引。

參數:
indices布林值 (bool),預設值為 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 中被移除的特徵。

set_output(*, transform=None)[原始碼]#

設定輸出容器。

請參閱 介紹 set_output API,以了解如何使用此 API 的範例。

參數:
transform{“default”, “pandas”, “polars”}, 預設值=None

設定 transformfit_transform 的輸出格式。

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

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換設定保持不變

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

返回:
self估算器實例

估算器實例。

set_params(**params)[原始碼]#

設定此估算器的參數。

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

參數:
**paramsdict

估算器參數。

返回:
self估算器實例

估算器實例。

transform(X)[原始碼]#

將 X 縮減為選取的特徵。

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

輸入樣本。

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

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