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
,则分别通过调用fit
和partial_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
的克隆,并根据传递给fit
或partial_fit
的数据进行拟合。
n_features_in_
int在
fit
期间看到的特征数量。- max_features_int
在fit期间计算的最大特征数。仅当
max_features
不为None
时才定义。如果
max_features
是int
,则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
将转换器拟合到X
和y
,并返回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_features
为None
,则使用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
配置
transform
和fit_transform
的输出。"default"
:转换器的默认输出格式"pandas"
:DataFrame 输出"polars"
:Polars 输出None
:转换配置保持不变
1.4 版本中新增: 添加了
"polars"
选项。
- 返回:
- self估计器实例
估计器实例。
- set_params(**params)[源代码]#
设置此估计器的参数。
此方法适用于简单的估计器以及嵌套对象(例如
Pipeline
)。后者具有<component>__<parameter>
形式的参数,因此可以更新嵌套对象的每个组件。- 参数:
- **params**字典
估计器参数。
- 返回:
- self估计器实例
估计器实例。
- 属性 threshold_#
用于特征选择的阈值。