SelectFromModel#

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

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

0.17版本新增。

更多信息请参考用户指南

参数:
estimator对象

构建转换器的基础估计器。这可以是已拟合的估计器(如果prefit设置为True),也可以是非拟合的估计器。估计器在拟合后应具有feature_importances_coef_属性。否则,应使用importance_getter参数。

thresholdstr 或 float,默认值=None

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

prefitbool,默认值=False

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

norm_order非零整数、inf、-inf,默认值=1

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

max_featuresint、callable,默认值=None

要选择的最大特征数。

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

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

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

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

0.20版本中新增。

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

importance_getterstr 或 callable,默认值='auto'

如果为'auto',则通过估计器的coef_属性或feature_importances_属性使用特征重要性。

还接受一个字符串,该字符串指定用于提取特征重要性的属性名称/路径(使用attrgetter实现)。例如,在TransformedTargetRegressor的情况下,给出regressor_.coef_;在Pipeline(其最后一步命名为clf)的情况下,给出named_steps.clf.feature_importances_

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

0.24版本中新增。

属性:
estimator_估计器

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

  • 如果prefit=True,则它是estimator的深拷贝。

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

n_features_in_int

fit期间看到的特征数量。

max_features_int

fit期间计算的最大特征数。仅当max_features不为None时才定义。

  • 如果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,) 的类数组,默认值=None

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

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

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

1.4 版本中的变更: 更多详情请参见 元数据路由用户指南

返回:
self对象

已拟合的估计器。

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

拟合数据,然后转换它。

使用可选参数 fit_params 将转换器拟合到 Xy,并返回 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)[source]#

根据选择的特征掩码特征名称。

参数:
input_features字符串类数组或 None,默认为 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_out字符串对象的 ndarray

转换后的特征名称。

get_metadata_routing()[source]#

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

请查看 用户指南,了解路由机制的工作原理。

1.4 版本中新增。

返回:
routingMetadataRouter

一个 MetadataRouter 封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔值,默认为 True

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

返回:
params字典

参数名称与其值的映射。

get_support(indices=False)[source]#

获取所选特征的掩码或整数索引。

参数:
indices布尔值,默认为 False

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

返回:
support数组

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

inverse_transform(X)[source]#

反转转换操作。

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

输入样本。

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

transform 将移除特征的位置插入零列的 X

property n_features_in_#

fit期间看到的特征数量。

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

仅需拟合一次 SelectFromModel 元转换器。

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

训练输入样本。

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

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

**partial_fit_params**字典
  • 如果 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 将被路由到子估计器,这允许别名。

更多详情请参见 元数据路由用户指南

返回:
self对象

已拟合的估计器。

set_output(*, transform=None)[源代码]#

设置输出容器。

有关如何使用此 API 的示例,请参见 介绍 set_output API

参数:
transform{"default", "pandas", "polars"},默认值=None

配置 transformfit_transform 的输出。

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

  • "pandas":DataFrame 输出

  • "polars":Polars 输出

  • None:转换配置保持不变

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

返回:
self估计器实例

估计器实例。

set_params(**params)[源代码]#

设置此估计器的参数。

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

参数:
**params**字典

估计器参数。

返回:
self估计器实例

估计器实例。

属性 threshold_#

用于特征选择的阈值。

transform(X)[源代码]#

将 X 减少到选定的特征。

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

输入样本。

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

只有选定特征的输入样本。