RFE#

class sklearn.feature_selection.RFE(estimator, *, n_features_to_select=None, step=1, verbose=0, importance_getter='auto')[原始碼]#

使用遞迴特徵消除進行特徵排序。

在給定一個外部估算器(例如,線性模型的係數)為特徵指定權重的情況下,遞迴特徵消除(RFE)的目標是透過遞迴地考量越來越小的特徵集合來選擇特徵。首先,在初始特徵集合上訓練估算器,並透過任何特定屬性或可呼叫物件取得每個特徵的重要性。然後,從目前的特徵集合中修剪掉最不重要的特徵。該程序會在修剪後的集合上遞迴重複,直到最終達到要選擇的特徵的期望數量。

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

參數:
estimatorEstimator 實例

一個有監督學習估算器,具有提供特徵重要性資訊的 fit 方法 (例如 coef_feature_importances_)。

n_features_to_select整數或浮點數,預設值為 None

要選擇的特徵數量。如果為 None,則選擇一半的特徵。如果為整數,則此參數是要選擇的特徵的絕對數量。如果為 0 到 1 之間的浮點數,則為要選擇的特徵的比例。

在版本 0.24 中變更:新增了用於表示比例的浮點數值。

step整數或浮點數,預設值為 1

如果大於或等於 1,則 step 對應於每次迭代要移除的特徵(整數)數量。如果在 (0.0, 1.0) 範圍內,則 step 對應於每次迭代要移除的特徵百分比(向下捨入)。

verbose整數,預設值為 0

控制輸出的詳細程度。

importance_getter字串或可呼叫物件,預設值為 'auto'

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

也接受指定用於提取特徵重要性的屬性名稱/路徑的字串(透過 attrgetter 實作)。例如,在 TransformedTargetRegressor 的情況下給定 regressor_.coef_,或是在最後一個步驟命名為 clf 的類別 ~sklearn.pipeline.Pipeline 的情況下給定 named_steps.clf.feature_importances_

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

在版本 0.24 中新增。

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

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

estimator_Estimator 實例

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

n_features_整數

選取特徵的數量。

n_features_in_整數

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

在版本 0.24 中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

在版本 1.0 中新增。

ranking_形狀為 (n_features,) 的 ndarray

特徵排名,使得 ranking_[i] 對應於第 i 個特徵的排名位置。選取的(亦即,估計的最佳)特徵會被指派排名 1。

support_形狀為 (n_features,) 的 ndarray

選取特徵的遮罩。

另請參閱

RFECV

遞迴特徵消除,內建交叉驗證選擇最佳特徵數量。

SelectFromModel

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

SequentialFeatureSelector

基於循序交叉驗證的特徵選取。不依賴重要性權重。

注意事項

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

參考文獻

[1]

Guyon, I., Weston, J., Barnhill, S., & Vapnik, V., “Gene selection for cancer classification using support vector machines”, Mach. Learn., 46(1-3), 389–422, 2002.

範例

以下範例顯示如何在 Friedman #1 資料集中擷取 5 個資訊量最高的特徵。

>>> from sklearn.datasets import make_friedman1
>>> from sklearn.feature_selection import RFE
>>> from sklearn.svm import SVR
>>> X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
>>> estimator = SVR(kernel="linear")
>>> selector = RFE(estimator, n_features_to_select=5, step=1)
>>> 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, **fit_params)[原始碼]#

擬合 RFE 模型,然後在選取的特徵上擬合底層估算器。

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

訓練輸入樣本。

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

目標值。

**fit_params字典
  • 如果 enable_metadata_routing=False (預設值):參數會直接傳遞至底層估算器的 fit 方法。

  • 如果 enable_metadata_routing=True:參數會安全地傳遞至底層估計器的 fit 方法。

在 1.6 版本中變更:詳情請參閱中繼資料路由使用者指南

傳回:
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.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] 的陣列

X,其中插入了零的列,表示特徵會被 transform 移除。

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

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

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

輸入樣本。

**predict_params字典

傳遞給底層估算器的 predict 方法的參數。

於 1.6 版本新增: 僅當 enable_metadata_routing=True 時可用,可使用 sklearn.set_config(enable_metadata_routing=True) 設定。詳情請參閱 Metadata Routing 使用者指南

傳回:
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)[原始碼]#

將 X 縮減至選定的特徵,並返回估算器的分數。

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

輸入樣本。

y形狀為 [n_samples] 的陣列

目標值。

**score_params字典
  • 如果 enable_metadata_routing=False (預設):直接傳遞給底層估算器的 score 方法的參數。

  • 如果 enable_metadata_routing=True:安全地傳遞給底層估算器的 score 方法的參數。

在版本 1.0 中新增。

在 1.6 版本中變更:詳情請參閱中繼資料路由使用者指南

傳回:
score浮點數

使用 rfe.transform(X)y 返回的選定特徵計算出的底層基礎估算器的分數。

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

設定輸出容器。

請參閱 設定輸出 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> 形式的參數,因此可以更新巢狀物件的每個組件。

參數:
**params字典

估算器參數。

傳回:
self估算器實例

估算器實例。

transform(X)[原始碼]#

將 X 縮減至選定的特徵。

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

輸入樣本。

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

僅具有選定特徵的輸入樣本。