SelectFromModel#

class sklearn.feature_selection.SelectFromModel(estimator, *, threshold=None, prefit=False, norm_order=1, max_features=None, importance_getter='auto')[source]#

基于重要性权重进行特征选择的元变换器。

0.17 版本新增。

用户指南中阅读更多内容。

参数:
estimatorobject

用于构建变换器的基础估计器。它可以是一个已拟合(如果 prefit 设置为 True)或未拟合的估计器。估计器在拟合后应具有 feature_importances_coef_ 属性。否则,应使用 importance_getter 参数。

thresholdstr 或 float, default=None

用于特征选择的阈值。绝对重要性值大于或等于阈值的特征将被保留,而其他特征将被丢弃。如果为“median”(或“mean”),则 threshold 值为特征重要性的中位数(或平均值)。也可以使用缩放因子(例如,“1.25*mean”)。如果为 None,并且估计器具有设置为 l1 的 penalty 参数(显式或隐式,例如 Lasso),则使用的阈值为 1e-5。否则,默认为“mean”。

prefitbool, default=False

是否期望将预拟合模型直接传递给构造函数。如果为 True,则 estimator 必须是已拟合的估计器。如果为 False,则 estimator 将通过调用 fitpartial_fit 进行拟合和更新。

norm_order非零 int, inf, -inf, default=1

在估计器的 coef_ 属性为二维时,用于过滤低于 threshold 的系数向量的范数阶数。

max_featuresint, callable, default=None

要选择的最大特征数量。

  • 如果为整数,则指定允许的最大特征数量。

  • 如果为可调用对象,则指定如何使用 max_features(X) 的输出来计算允许的最大特征数量。

  • 如果为 None,则保留所有特征。

若仅基于 max_features 进行选择,请设置 threshold=-np.inf

0.20 版本新增。

1.1 版本更改: max_features 接受可调用对象。

importance_getterstr 或 callable, default=’auto’

如果为“auto”,则通过估计器的 coef_ 属性或 feature_importances_ 属性获取特征重要性。

也接受指定用于提取特征重要性(通过 attrgetter 实现)的属性名称/路径的字符串。例如,对于 TransformedTargetRegressor,给出 regressor_.coef_;对于其最后一步命名为 clfPipeline,给出 named_steps.clf.feature_importances_

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

0.24 版本新增。

属性:
estimator_estimator

用于构建变换器的基础估计器。此属性仅在调用 fit 后存在。

  • 如果 prefit=True,则它是 estimator 的深层复制。

  • 如果 prefit=False,则它是 estimator 的克隆,并在传递给 fitpartial_fit 的数据上进行拟合。

n_features_in_int

fit 期间看到的特征数量。

max_features_int

fit 期间计算的最大特征数量。仅在 max_featuresNone 时定义。

  • 如果 max_featuresint 类型,则 max_features_ = max_features

  • 如果 max_features 是可调用对象,则 max_features_ = max_features(X)

1.1 版本新增。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

fit 期间看到的特征名称。仅当 X 具有都是字符串的特征名称时定义。

1.0 版本新增。

threshold_float

用于特征选择的阈值。

另见

RFE

基于重要性权重的递归特征消除。

RFECV

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

SequentialFeatureSelector

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

说明

如果底层估计器支持,则允许输入中包含 NaN/Inf。

示例

>>> from sklearn.feature_selection import SelectFromModel
>>> from sklearn.linear_model import LogisticRegression
>>> X = [[ 0.87, -1.34,  0.31 ],
...      [-2.79, -0.02, -0.85 ],
...      [-1.34, -0.48, -2.55 ],
...      [ 1.92,  1.48,  0.65 ]]
>>> y = [0, 1, 0, 1]
>>> selector = SelectFromModel(estimator=LogisticRegression()).fit(X, y)
>>> selector.estimator_.coef_
array([[-0.3252,  0.8345,  0.4976]])
>>> selector.threshold_
np.float64(0.55249)
>>> selector.get_support()
array([False,  True, False])
>>> selector.transform(X)
array([[-1.34],
       [-0.02],
       [-0.48],
       [ 1.48]])

使用可调用对象创建选择器,该选择器最多可使用一半的输入特征。

>>> def half_callable(X):
...     return round(len(X[0]) / 2)
>>> half_selector = SelectFromModel(estimator=LogisticRegression(),
...                                 max_features=half_callable)
>>> _ = half_selector.fit(X, y)
>>> half_selector.max_features_
2
fit(X, y=None, **fit_params)[source]#

拟合 SelectFromModel 元变换器。

参数:
X形状为 (n_samples, n_features) 的类数组对象

训练输入样本。

y形状为 (n_samples,) 的类数组对象, default=None

目标值(分类中的整数对应类别,回归中的实数)。

**fit_paramsdict
  • 如果 enable_metadata_routing=False (默认值):直接传递给子估计器的 fit 方法的参数。如果 prefit=True,则这些参数被忽略。

  • 如果 enable_metadata_routing=True:安全地传递给子估计器的 fit 方法的参数。如果 prefit=True,则这些参数被忽略。

1.4 版本更改: 有关更多详细信息,请参阅元数据路由用户指南

返回:
selfobject

拟合后的估计器。

fit_transform(X, y=None, **fit_params)[source]#

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

使用可选参数 fit_params 将变换器拟合到 Xy,并返回 X 的变换版本。

参数:
X形状为 (n_samples, n_features) 的类数组对象

输入样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组对象, default=None

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

**fit_paramsdict

额外的拟合参数。

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

变换后的数组。

get_feature_names_out(input_features=None)[source]#

根据选定的特征遮罩特征名称。

参数:
input_featuresstr 的类数组对象或 None, default=None

输入特征。

  • 如果 input_featuresNone,则使用 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_outstr 对象的 ndarray

变换后的特征名称。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查阅用户指南,了解路由机制如何工作。

1.4 版本新增。

返回:
routingMetadataRouter

封装路由信息的 MetadataRouter

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, default=True

如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。

返回:
paramsdict

参数名称映射到其值。

get_support(indices=False)[source]#

获取所选特征的遮罩或整数索引。

参数:
indicesbool, default=False

如果为 True,返回值将是整数数组,而不是布尔遮罩。

返回:
supportarray

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

inverse_transform(X)[source]#

反转变换操作。

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

输入样本。

返回:
X_original形状为 [n_samples, n_original_features] 的数组

通过 transform 移除特征后,在相应位置插入零列的 X

partial_fit(X, y=None, **partial_fit_params)[source]#

仅拟合 SelectFromModel 元变换器一次。

参数:
X形状为 (n_samples, n_features) 的类数组对象

训练输入样本。

y形状为 (n_samples,) 的类数组对象, default=None

目标值(分类中的整数对应类别,回归中的实数)。

**partial_fit_paramsdict
  • 如果 enable_metadata_routing=False (默认值):直接传递给子估计器的 partial_fit 方法的参数。

  • 如果 enable_metadata_routing=True:传递给子估计器的 partial_fit 方法的参数。如果 prefit=True,则这些参数被忽略。

1.4 版本更改:如果通过 set_config 设置了 enable_metadata_routing=True,则 **partial_fit_params 会路由到子估计器,这允许别名。

有关更多详细信息,请参阅元数据路由用户指南

返回:
selfobject

拟合后的估计器。

set_output(*, transform=None)[source]#

设置输出容器。

有关如何使用此 API 的示例,请参阅Introducing the set_output API

参数:
transform{“default”, “pandas”, “polars”}, default=None

配置 transformfit_transform 的输出。

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

  • "pandas":DataFrame 输出

  • "polars":Polars 输出

  • None:变换配置不变

1.4 版本新增: 添加了 "polars" 选项。

返回:
self估计器实例

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
self估计器实例

估计器实例。

transform(X)[source]#

将 X 缩减为选定特征。

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

输入样本。

返回:
X_r形状为 [n_samples, n_selected_features] 的数组

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