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估计器实例
估计器实例。