RFECV#

class sklearn.feature_selection.RFECV(estimator, *, step=1, min_features_to_select=1, cv=None, scoring=None, verbose=0, n_jobs=None, importance_getter='auto')[來源]#

使用交叉驗證的遞迴特徵消除來選擇特徵。

選擇的特徵數量會透過在不同的交叉驗證分割(由 cv 參數提供)上擬合 RFE 選擇器來自動調整。 RFE 選擇器的效能會使用 scorer 針對不同選擇的特徵數量進行評估並匯總在一起。 最後,分數會跨摺疊平均,且選擇的特徵數量會設定為最大化交叉驗證分數的特徵數量。 請參閱 交叉驗證估計器 的詞彙表條目。

使用者指南 中閱讀更多資訊。

參數:
estimatorEstimator 實例

一個監督式學習的估算器,具有 fit 方法,可透過 coef_ 屬性或 feature_importances_ 屬性提供特徵重要性的資訊。

stepint 或 float,預設值為 1

如果大於或等於 1,則 step 對應於每次迭代要移除的特徵數量(整數)。如果在 (0.0, 1.0) 範圍內,則 step 對應於每次迭代要移除的特徵百分比(向下取整)。請注意,最後一次迭代可能會移除少於 step 個特徵,以便達到 min_features_to_select

min_features_to_selectint,預設值為 1

要選擇的最小特徵數量。即使原始特徵計數與 min_features_to_select 之間的差值不能被 step 整除,也始終會對此數量的特徵進行評分。

在 0.20 版本中新增。

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

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

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

  • 整數,指定折數。

  • CV 分割器,

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

對於整數/None 輸入,如果 y 是二元或多類別,則使用 StratifiedKFold。如果估算器不是分類器,或者 y 既不是二元也不是多類別,則使用 KFold

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

在 0.22 版本中變更:cv 的預設值 None 從 3 折變更為 5 折。

scoringstr、可呼叫物件或 None,預設值為 None

一個字串(請參閱 評分參數:定義模型評估規則)或一個帶有簽名 scorer(estimator, X, y) 的評分器可呼叫物件/函式。

verboseint,預設值為 0

控制輸出的詳細程度。

n_jobsint 或 None,預設值為 None

在跨折擬合時並行運行的核心數量。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。有關詳細信息,請參閱詞彙表

在 0.18 版本中新增。

importance_getterstr 或可呼叫物件,預設值為 'auto'

如果為 'auto',則透過估算器的 coef_feature_importances_ 屬性來使用特徵重要性。

也接受一個字串,該字串指定用於提取特徵重要性的屬性名稱/路徑。例如,對於 TransformedTargetRegressor,則給定 regressor_.coef_,或者對於最後一步命名為 clfPipeline,則給定 named_steps.clf.feature_importances_

如果為 callable,則會覆蓋預設的特徵重要性獲取器。可呼叫物件會傳遞已擬合的估算器,並且應返回每個特徵的重要性。

在 0.24 版本中新增。

屬性:
classes_形狀為 (n_classes,) 的 ndarray

estimator 為分類器時可用的類別標籤。

estimator_Estimator 實例

用於選擇特徵的已擬合估算器。

cv_results_ndarray 的字典

所有陣列(字典的值)都按使用的特徵數量升序排序(即,陣列的第一個元素表示使用最少特徵的模型,而最後一個元素表示使用所有可用特徵的模型)。

在 1.0 版本中新增。

此字典包含以下鍵:

split(k)_test_score形狀為 (n_subsets_of_features,) 的 ndarray

第 (k) 折的交叉驗證分數。

mean_test_score形狀為 (n_subsets_of_features,) 的 ndarray

各折分數的平均值。

std_test_score形狀為 (n_subsets_of_features,) 的 ndarray

各折分數的標準差。

n_features形狀為 (n_subsets_of_features,) 的 ndarray

每個步驟使用的特徵數量。

在 1.5 版本中新增。

n_features_int

使用交叉驗證選擇的特徵數量。

n_features_in_int

fit 期間看到的特徵數量。僅在基礎估算器在擬合時公開此類屬性時定義。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅在 X 具有全部為字串的特徵名稱時定義。

在 1.0 版本中新增。

ranking_形狀為 (n_features,) 的 narray

特徵排名,使得 ranking_[i] 對應於第 i 個特徵的排名位置。選擇的(即,估計的最佳)特徵被賦予等級 1。

support_形狀為 (n_features,) 的 ndarray

所選特徵的遮罩。

參見

RFE

遞迴特徵消除。

注意事項

cv_results_ 中所有值的大小等於 ceil((n_features - min_features_to_select) / step) + 1,其中 step 是每次迭代移除的特徵數量。

如果基礎估算器也允許,則允許輸入中的 NaN/Inf。

參考文獻

[1]

Guyon, I., Weston, J., Barnhill, S., & Vapnik, V., “使用支持向量機進行癌症分類的基因選擇”, Mach. Learn., 46(1-3), 389–422, 2002。

範例

以下範例展示如何檢索 Friedman #1 資料集中事先未知的 5 個資訊豐富的特徵。

>>> from sklearn.datasets import make_friedman1
>>> from sklearn.feature_selection import RFECV
>>> from sklearn.svm import SVR
>>> X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
>>> estimator = SVR(kernel="linear")
>>> selector = RFECV(estimator, step=1, cv=5)
>>> selector = selector.fit(X, y)
>>> selector.support_
array([ True,  True,  True,  True,  True, False, False, False, False,
       False])
>>> selector.ranking_
array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
property classes_#

estimator 為分類器時可用的類別標籤。

回傳值:
形狀為 (n_classes,) 的 ndarray
decision_function(X)[原始碼]#

計算 X 的決策函數。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

輸入樣本。 在內部,它將被轉換為 dtype=np.float32,如果提供稀疏矩陣,則轉換為稀疏的 csr_matrix

回傳值:
score陣列,形狀 = [n_samples, n_classes] 或 [n_samples]

輸入樣本的決策函數。類別的順序與屬性 classes_ 中的順序一致。迴歸和二元分類會產生形狀為 [n_samples] 的陣列。

fit(X, y, *, groups=None, **params)[原始碼]#

擬合 RFE 模型並自動調整所選特徵的數量。

參數:
X形狀為 (n_samples, n_features) 的類陣列、稀疏矩陣

訓練向量,其中 n_samples 是樣本數,n_features 是特徵總數。

y形狀為 (n_samples,) 的類陣列

目標值(分類為整數,迴歸為實數)。

groups形狀為 (n_samples,) 或 None 的類陣列,預設為 None

將資料集分割為訓練/測試集時使用的樣本組標籤。僅與 “Group” cv 實例(例如,GroupKFold)結合使用。

在 0.20 版本中新增。

**paramsdict of str -> object

傳遞給估計器、評分器和 CV 分割器的 fit 方法的參數。

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

回傳值:
selfobject

已擬合的估計器。

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_paramsdict

其他擬合參數。

回傳值:
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.6 版本新增。

回傳值:
routingMetadataRouter

一個 MetadataRouter,封裝了路由資訊。

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

取得此估算器的參數。

參數:
deepbool,預設值為 True

若為 True,將會回傳此估算器及其包含的子物件(為估算器)的參數。

回傳值:
paramsdict

參數名稱對應到其值的字典。

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

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

參數:
indicesbool,預設值為 False

若為 True,則回傳值會是一個整數陣列,而非布林遮罩。

回傳值:
support陣列

一個從特徵向量中選取保留特徵的索引。若 indices 為 False,則這是一個形狀為 [# 輸入特徵] 的布林陣列,其中若元素對應的特徵被選取保留,則為 True。若 indices 為 True,則這是一個形狀為 [# 輸出特徵] 的整數陣列,其值為輸入特徵向量的索引。

inverse_transform(X)[原始碼]#

反轉轉換操作。

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

輸入樣本。

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

transform 移除特徵的位置插入零值後的 X

predict(X, **predict_params)[原始碼]#

將 X 縮減到所選取的特徵,並使用估算器進行預測。

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

輸入樣本。

**predict_paramsdict

要路由到基礎估算器的 predict 方法的參數。

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

回傳值:
y形狀為 [n_samples] 的陣列

預測的目標值。

predict_log_proba(X)[原始碼]#

預測 X 的類別對數機率。

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

輸入樣本。

回傳值:
p形狀為 (n_samples, n_classes) 的陣列

輸入樣本的類別對數機率。類別的順序與 classes_ 屬性中的順序一致。

predict_proba(X)[原始碼]#

預測 X 的類別機率。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

輸入樣本。 在內部,它將被轉換為 dtype=np.float32,如果提供稀疏矩陣,則轉換為稀疏的 csr_matrix

回傳值:
p形狀為 (n_samples, n_classes) 的陣列

輸入樣本的類別機率。類別的順序與 classes_ 屬性中的順序一致。

score(X, y, **score_params)[原始碼]#

使用給定測試資料和標籤的 scoring 選項進行評分。

參數:
X形狀為 (n_samples, n_features) 的類陣列

測試樣本。

y形狀為 (n_samples,) 的類陣列

X 的真實標籤。

**score_paramsdict

要傳遞給基礎評分器的 score 方法的參數。

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

回傳值:
scorefloat

相對於 scoring 定義的 y,self.predict(X) 的評分。

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)。後者具有 <元件>__<參數> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**params**字典(dict)

估算器參數。

回傳值:
self估算器實例

估算器實例。

transform(X)[原始碼]#

將 X 縮減為選定的特徵。

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

輸入樣本。

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

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