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)#
拟合数据,然后进行转换。
将转换器拟合到
X
和y
,并带有可选参数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_features
是None
,则使用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
配置
transform
和fit_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]
仅包含所选特征的输入样本。