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
将通过调用fit
和partial_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_
;对于其最后一步命名为clf
的Pipeline
,给出named_steps.clf.feature_importances_
。如果为
callable
,则覆盖默认的特征重要性获取器。可调用对象将传入已拟合的估计器,并应返回每个特征的重要性。0.24 版本新增。
- 属性:
- estimator_estimator
用于构建变换器的基础估计器。此属性仅在调用
fit
后存在。如果
prefit=True
,则它是estimator
的深层复制。如果
prefit=False
,则它是estimator
的克隆,并在传递给fit
或partial_fit
的数据上进行拟合。
n_features_in_
intfit
期间看到的特征数量。- 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,) 的类数组对象, 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
将变换器拟合到X
和y
,并返回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_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_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
配置
transform
和fit_transform
的输出。"default"
:变换器的默认输出格式"pandas"
:DataFrame 输出"polars"
:Polars 输出None
:变换配置不变
1.4 版本新增: 添加了
"polars"
选项。
- 返回:
- self估计器实例
估计器实例。