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 选择器,自动调整选择的特征数量。使用 scorer 评估不同数量的选定特征的 RFE 选择器的性能,并将结果汇总在一起。最后,跨折平均分数,并将选择的特征数量设置为最大化交叉验证分数的特征数量。参见 cross-validation estimator 的词汇条目。

更多信息请参阅 User Guide

Parameters:
estimator :``Estimator`` 实例

一个具有 fit 方法的监督学习估计器,通过 coef_ 属性或 feature_importances_ 属性提供特征重要性信息。

stepint 或 float, default=1

如果大于或等于 1,则 step 对应于每次迭代中要移除的特征(整数)数量。 如果在 (0.0, 1.0) 之间,则 step 对应于每次迭代中要移除的特征百分比(向下取整)。 注意,为了达到 min_features_to_select ,最后一次迭代可能会移除少于 step 的特征。

min_features_to_selectint, default=1

要选择的特征的最小数量。即使原始特征数量与 min_features_to_select 之间的差值不能被 step 整除,这个数量的特征也会被评分。

Added in version 0.20.

cvint, 交叉验证生成器或可迭代对象, default=None

确定交叉验证分割策略。 cv 的可能输入包括:

  • None,使用默认的 5 折交叉验证,

  • 整数,指定折数。

  • CV splitter ,

  • 一个可迭代对象,生成 (train, test) 索引数组对。

对于整数/None 输入,如果 y 是二分类或多分类,使用 StratifiedKFold 。如果估计器是分类器或 y 既不是二分类也不是多分类,使用 KFold

参阅 User Guide 了解可以使用的各种交叉验证策略。

Changed in version 0.22: cv 的默认值 None 从 3 折改为 5 折。

scoringstr, callable 或 None, default=None

一个字符串(参见 scoring_parameter )或 一个具有签名 scorer(estimator, X, y) 的评分器可调用对象/函数。

verboseint, default=0

控制输出的详细程度。

n_jobsint 或 None, default=None

在跨折拟合时并行运行的核心数量。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。参见 Glossary 了解更多细节。

Added in version 0.18.

importance_getterstr 或 callable, default=’auto’

如果为 ‘auto’,则通过估计器的 coef_feature_importances_ 属性使用特征重要性。

还接受指定特征重要性提取的属性名称/路径的字符串。 例如,在 TransformedTargetRegressor 的情况下给出 regressor_.coef_ ,或在 Pipeline 的情况下给出 named_steps.clf.feature_importances_ ,其最后一步名为 clf

如果为 callable ,则覆盖默认的特征重要性获取器。 可调用对象会传递已拟合的估计器,并应返回每个特征的重要性。

Added in version 0.24.

Attributes:
classes_ndarray of shape (n_classes,)

类标签在 estimator 是分类器时可用。

estimator_ :``Estimator`` 实例

用于选择特征的已拟合估计器。

cv_results_dict of ndarrays

所有数组(字典的值)按使用的特征数量升序排序(即,数组的第一个元素表示使用最少特征的模型,而最后一个元素表示使用所有可用特征的模型)。 该字典包含以下键:

split(k)_test_scorendarray of shape (n_subsets_of_features,)
  1. 折的交叉验证分数。

mean_test_scorendarray of shape (n_subsets_of_features,)

跨折的平均分数。

std_test_scorendarray of shape (n_subsets_of_features,)

跨折分数的标准差。

n_featuresndarray of shape (n_subsets_of_features,)

每一步使用的特征数量。

Added in version 1.0.

n_features_int

通过交叉验证选择的特征数量。

n_features_in_int

fit 期间看到的特征数量。仅当基础估计器在拟合时暴露此类属性时定义。

Added in version 0.24.

feature_names_in_ndarray of shape ( n_features_in_ ,)

fit 期间看到的特征名称。仅当 X 的特征名称均为字符串时定义。

Added in version 1.0.

ranking_narray of shape (n_features,)

特征排名,使得 ranking_[i] 对应于第 i 个特征的排名位置。 选定的(即估计的最佳)特征被分配排名 1。

support_ndarray of shape (n_features,)

选定特征的掩码。

See also

RFE

递归特征消除。

Notes

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

如果基础估计器允许,则允许输入中的 NaN/Inf。

References

[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.

Examples

以下示例展示了如何检索 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 是分类器时可用。

Returns:
形状为 (n_classes,) 的 ndarray
decision_function(X)#

计算 X 的决策函数。

Parameters:
X{array-like 或 sparse matrix},形状为 (n_samples, n_features)

输入样本。内部将转换为 dtype=np.float32 ,如果提供稀疏矩阵, 则转换为稀疏的 csr_matrix

Returns:
scorearray,形状为 [n_samples, n_classes] 或 [n_samples]

输入样本的决策函数。类的顺序与属性 classes_ 中的顺序相对应。 回归和二分类产生形状为 [n_samples] 的数组。

fit(X, y, groups=None)#

拟合RFE模型并自动调整选定的特征数量。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

训练向量,其中 n_samples 是样本数量, n_features 是特征总数。

yarray-like,形状为 (n_samples,)

目标值(分类为整数,回归为实数)。

groupsarray-like,形状为 (n_samples,) 或 None,默认=None

样本的分组标签,用于在将数据集拆分为训练/测试集时使用。 仅在与“Group” cv 实例(例如 GroupKFold )结合使用时使用。

Added in version 0.20.

Returns:
selfobject

拟合的估计器。

fit_transform(X, y=None, **fit_params)#

拟合数据,然后进行转换。

将转换器拟合到 Xy ,并带有可选参数 fit_params , 并返回 X 的转换版本。

Parameters:
X形状为 (n_samples, n_features) 的类数组

输入样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组, 默认=None

目标值(无监督转换为 None)。

**fit_paramsdict

其他拟合参数。

Returns:
X_new形状为 (n_samples, n_features_new) 的 ndarray 数组

转换后的数组。

get_feature_names_out(input_features=None)#

屏蔽根据选定特征的特征名称。

Parameters:
input_features字符串的类数组或None, 默认=None

输入特征。

  • 如果 input_featuresNone ,则使用 feature_names_in_ 作为输入特征名称。如果 feature_names_in_ 未定义,则生成以下输入特征名称: ["x0", "x1", ..., "x(n_features_in_ - 1)"]

  • 如果 input_features 是类数组,则 input_features 必须与 feature_names_in_ 匹配,如果 feature_names_in_ 已定义。

Returns:
feature_names_out字符串对象的ndarray

转换后的特征名称。

get_metadata_routing()#

Raise NotImplementedError .

此估计器尚不支持元数据路由。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。

Returns:
paramsdict

参数名称映射到它们的值。

get_support(indices=False)#

获取一个掩码或整数索引,用于选择特征。

Parameters:
indicesbool, 默认=False

如果为True,返回值将是一个整数数组,而不是一个布尔掩码。

Returns:
supportarray

一个从特征向量中选择保留特征的索引。如果 indices 为False,这是一个布尔数组,形状为 [# 输入特征],其中元素为True当且仅当其对应的特征被选择保留。如果 indices 为 True,这是一个整数数组,形状为[# 输出特征],其值为输入特征向量的索引。

inverse_transform(X)#

反转变换操作。

Parameters:
X形状为 [n_samples, n_selected_features] 的数组

输入样本。

Returns:
X_r形状为 [n_samples, n_original_features] 的数组

X 在特征被 transform 方法移除的地方插入零列。

predict(X)#

将X减少到所选特征并使用估计器进行预测。

Parameters:
Xarray of shape [n_samples, n_features]

输入样本。

Returns:
yarray of shape [n_samples]

预测的目标值。

predict_log_proba(X)#

预测X的类别对数概率。

Parameters:
X形状为[n_samples, n_features]的数组

输入样本。

Returns:
p形状为(n_samples, n_classes)的数组

输入样本的类别对数概率。类别的顺序与属性:term:classes_ 中的顺序相对应。

predict_proba(X)#

预测X的类别概率。

Parameters:
X{array-like 或 sparse matrix},形状为 (n_samples, n_features)

输入样本。内部将转换为 dtype=np.float32 ,如果提供稀疏矩阵, 则转换为稀疏的 csr_matrix

Returns:
p形状为 (n_samples, n_classes) 的数组

输入样本的类别概率。类别的顺序对应于属性 classes_ 中的顺序。

score(X, y, **fit_params)#

将X减少到选定的特征并返回估计器的分数。

Parameters:
Xarray of shape [n_samples, n_features]

输入样本。

yarray of shape [n_samples]

目标值。

**fit_paramsdict

传递给底层估计器的 score 方法的参数。

Added in version 1.0.

Returns:
scorefloat

使用 rfe.transform(X)y 返回的选定特征计算的底层基估计器的分数。

set_fit_request(*, groups: bool | None | str = '$UNCHANGED$') RFECV#

Request metadata passed to the fit method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to fit if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to fit .

  • None : metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str : metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default ( sklearn.utils.metadata_routing.UNCHANGED ) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline . Otherwise it has no effect.

Parameters:
groupsstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for groups parameter in fit .

Returns:
selfobject

The updated object.

set_output(*, transform=None)#

设置输出容器。

请参阅 介绍 set_output API 以了解如何使用API的示例。

Parameters:
transform{“default”, “pandas”, “polars”}, 默认=None

配置 transformfit_transform 的输出。

  • "default" : 转换器的默认输出格式

  • "pandas" : DataFrame 输出

  • "polars" : Polars 输出

  • None : 转换配置不变

Added in version 1.4: "polars" 选项已添加。

Returns:
self估计器实例

估计器实例。

set_params(**params)#

设置此估计器的参数。

该方法适用于简单估计器以及嵌套对象(例如 Pipeline )。后者具有形式为 <component>__<parameter> 的参数,以便可以更新嵌套对象的每个组件。

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

transform(X)#

将X 缩减为选定的特征。

Parameters:
Xarray of shape [n_samples, n_features]

输入样本。

Returns:
X_rarray of shape [n_samples, n_selected_features]

仅包含所选特征的输入样本。