RFE#
- class sklearn.feature_selection.RFE(estimator, *, n_features_to_select=None, step=1, verbose=0, importance_getter='auto')[原始碼]#
使用遞迴特徵消除進行特徵排序。
在給定一個外部估算器(例如,線性模型的係數)為特徵指定權重的情況下,遞迴特徵消除(RFE)的目標是透過遞迴地考量越來越小的特徵集合來選擇特徵。首先,在初始特徵集合上訓練估算器,並透過任何特定屬性或可呼叫物件取得每個特徵的重要性。然後,從目前的特徵集合中修剪掉最不重要的特徵。該程序會在修剪後的集合上遞迴重複,直到最終達到要選擇的特徵的期望數量。
請在使用者指南中閱讀更多資訊。
- 參數:
- estimator
Estimator
實例 一個有監督學習估算器,具有提供特徵重要性資訊的
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 中新增。
- estimator
- 屬性:
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
將轉換器擬合到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.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
設定
transform
和fit_transform
的輸出。"default"
:轉換器的預設輸出格式"pandas"
:DataFrame 輸出"polars"
:Polars 輸出None
:轉換設定保持不變
於 1.4 版本新增:新增了
"polars"
選項。
- 傳回:
- self估算器實例
估算器實例。