RFE#

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

特征排序与递归特征消除。

给定一个为特征分配权重的外部估计器(例如,线性模型的系数),递归特征消除(RFE)的目标是通过递归地考虑越来越小的特征集来选择特征。首先,估计器在初始特征集上进行训练,并通过任何特定属性或可调用对象获得每个特征的重要性。然后,从当前特征集中修剪最不重要的特征。该过程在修剪后的特征集上递归重复,直到最终达到所需的特征选择数量。

更多信息请参阅 用户指南

Parameters:
estimator :``Estimator`` 实例

一个具有 fit 方法的监督学习估计器,该方法提供特征重要性信息 (例如 coef_ , feature_importances_ )。

n_features_to_selectint 或 float, default=None

要选择的特征数量。如果为 None ,则选择一半的特征。如果为整数,则该参数为要选择的特征的绝对数量。如果为 0 到 1 之间的浮点数,则为要选择的特征的分数。

Changed in version 0.24: 添加了分数值。

stepint 或 float, default=1

如果大于或等于 1,则 step 对应于每次迭代中要移除的特征(整数)数量。 如果在 (0.0, 1.0) 之间,则 step 对应于每次迭代中要移除的特征的百分比(向下取整)。

verboseint, default=0

控制输出的详细程度。

importance_getterstr 或 callable, default=’auto’

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

还接受指定属性名称/路径的字符串(通过 attrgetter 实现)。 例如,在 TransformedTargetRegressor 的情况下给出 regressor_.coef_ ,或在最后一个步骤名为 clf 的 class:~sklearn.pipeline.Pipeline 的情况下给出 named_steps.clf.feature_importances_

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

Added in version 0.24.

Attributes:
classes_ndarray of shape (n_classes,)

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

estimator_ :``Estimator`` 实例

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

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_ndarray of shape (n_features,)

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

support_ndarray of shape (n_features,)

选择的特征的掩码。

See also

RFECV

带有内置交叉验证的递归特征消除,用于选择最佳特征数量。

SelectFromModel

基于重要性权重的阈值进行特征选择。

SequentialFeatureSelector

基于顺序交叉验证的特征选择。不依赖于重要性权重。

Notes

如果基础估计器允许,则允许输入中的 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 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 是分类器时可用。

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, **fit_params)#

拟合RFE模型,然后在选定的特征上拟合基础估计器。

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

训练输入样本。

yarray-like,形状为 (n_samples,)

目标值。

**fit_paramsdict

传递给基础估计器 fit 方法的额外参数。

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_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]

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