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
針對不同選擇的特徵數量進行評估並匯總在一起。 最後,分數會跨摺疊平均,且選擇的特徵數量會設定為最大化交叉驗證分數的特徵數量。 請參閱 交叉驗證估計器 的詞彙表條目。在 使用者指南 中閱讀更多資訊。
- 參數:
- estimator
Estimator
實例 一個監督式學習的估算器,具有
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 折交叉驗證。
整數,指定折數。
一個可迭代物件,以索引陣列的形式產生 (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_
,或者對於最後一步命名為clf
的Pipeline
,則給定named_steps.clf.feature_importances_
。如果為
callable
,則會覆蓋預設的特徵重要性獲取器。可呼叫物件會傳遞已擬合的估算器,並且應返回每個特徵的重要性。在 0.24 版本中新增。
- estimator
- 屬性:
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
將轉換器擬合到X
和y
,並回傳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_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] 的陣列
在
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
設定
transform
和fit_transform
的輸出。"default"
:轉換器的預設輸出格式"pandas"
:DataFrame 輸出"polars"
:Polars 輸出None
:轉換設定保持不變
1.4 版新增:新增
"polars"
選項。
- 回傳值:
- self估算器實例
估算器實例。