sklearn特征选取之SelectFromModel

embedded/2024/9/24 19:02:42/

sklearn.feature_selection.SelectFromModel 是一种基于模型的重要性权重进行特征选择的工具,允许我们根据学习器的权重或特征重要性自动选择特征。它通过从模型中提取特征的重要性来选择特征,常用于与那些具有 coef_feature_importances_ 属性的模型结合使用,如线性模型、树模型等。

1. 语法

python">from sklearn.feature_selection import SelectFromModelSelectFromModel(estimator, threshold=None, prefit=False, norm_order=1, max_features=None)

2. 参数说明

  • estimator: 训练好的模型或将要拟合的模型。该模型需要具备 coef_feature_importances_ 属性,例如,线性回归、逻辑回归、决策树、随机森林等。模型通过这些属性来衡量每个特征的重要性。

  • threshold: 阈值,用来决定特征的重要性。所有权重或重要性大于该阈值的特征将被选中。可以是一个字符串(如 ‘mean’ 或 ‘median’),也可以是一个具体的数值。如果设置为 None,则默认使用 mean

    • ‘mean’: 选择权重或特征重要性大于平均值的特征。
    • ‘median’: 选择权重或特征重要性大于中位数的特征。
    • 浮点数值:选择权重或特征重要性大于该值的特征。
  • prefit: 布尔值。是否已经对模型进行过预训练。如果为 True,则直接使用已经训练好的模型,否则将在 SelectFromModel 调用 fit 方法时自动拟合模型。

  • norm_order: 规范的顺序,指定用于特征选择时 coef_ 向量的范数。对于 L1 正则化模型通常使用 1,对于 L2 正则化模型使用 2

  • max_features: 指定选择的最大特征数。如果为 None,则根据 threshold 选择所有符合条件的特征。如果指定了数值,则会选择前 max_features 个最重要的特征。

3. 返回值

  • get_support(): 返回一个布尔数组,指示哪些特征被选中(True 表示被选中)。
  • transform(X): 将输入的特征矩阵 X 转换为仅包含所选特征的新特征矩阵。
  • fit(X, y): 根据输入数据 X 和目标变量 y,拟合模型并选择特征。

4. 示例

(1) 基本用法:使用线性模型进行特征选择
python">from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SelectFromModel
from sklearn.datasets import load_iris# 加载数据集
X, y = load_iris(return_X_y=True)# 使用逻辑回归模型
estimator = LogisticRegression()# 创建 SelectFromModel 对象
selector = SelectFromModel(estimator=estimator)# 拟合模型并进行特征选择
selector.fit(X, y)# 查看哪些特征被选择了
print("Selected features:", selector.get_support())# 转换原始数据,保留选中的特征
X_selected = selector.transform(X)
print("Transformed shape:", X_selected.shape)

输出:

Selected features: [ True False True False]
Transformed shape: (150, 2)

在这个例子中,SelectFromModel 根据逻辑回归模型的权重选择了 2 个特征。

(2) 使用随机森林模型进行特征选择
python">from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
from sklearn.datasets import load_iris# 加载数据集
X, y = load_iris(return_X_y=True)# 使用随机森林模型
estimator = RandomForestClassifier(n_estimators=100)# 创建 SelectFromModel 对象
selector = SelectFromModel(estimator=estimator, threshold='mean')# 拟合模型并进行特征选择
selector.fit(X, y)# 查看选择的特征
print("Selected features:", selector.get_support())# 转换原始数据
X_selected = selector.transform(X)
print("Transformed shape:", X_selected.shape)

在这里,SelectFromModel 通过随机森林的 feature_importances_ 属性进行特征选择,保留那些重要性超过平均值的特征。

(3) 使用预训练模型进行特征选择

如果我们已经预先训练了模型,可以设置 prefit=True 来跳过重新训练的步骤:

python"># 预训练一个模型
estimator = LogisticRegression().fit(X, y)# 使用预训练模型进行特征选择
selector = SelectFromModel(estimator=estimator, prefit=True)# 查看选择的特征
print("Selected features:", selector.get_support())# 转换原始数据
X_selected = selector.transform(X)
(4) 限制选择的最大特征数量

我们可以使用 max_features 来限制选择的特征数量:

python">selector = SelectFromModel(estimator=estimator, max_features=2, threshold=-np.inf)# 拟合模型并进行特征选择
selector.fit(X, y)# 查看选择的特征
print("Selected features:", selector.get_support())

这里我们通过设置 threshold=-np.inf 选择了权重最大的两个特征。

5. 应用场景

  • 降维: SelectFromModel 可以通过减少不重要的特征来进行降维,提高模型的性能和泛化能力。
  • 特征选择: 利用模型的权重或特征重要性来选择对目标变量最有贡献的特征。
  • 自动化特征选择: 可以在构建模型时自动选择特征,特别适用于模型构建过程中自动化流水线的使用。

6. 注意事项

  • 依赖于模型的 coef_feature_importances_: SelectFromModel 依赖于所使用的模型具有 coef_(线性模型)或 feature_importances_(树模型等)属性。
  • 阈值选择: 选择适当的 threshold 参数对结果影响较大。可以使用 meanmedian 等动态值,或者根据数据实验确定一个具体的阈值。

7. 与其他特征选择方法的对比

  • RFE 的对比: SelectFromModel 直接根据特征的重要性进行选择,而 RFE 是通过递归地消除不重要的特征逐步选择。SelectFromModel 更直接,适合模型对特征重要性有直接衡量的情况。
  • SelectKBest 的对比: SelectKBest 是基于统计检验选择前 k 个最好的特征,而 SelectFromModel 是基于模型的重要性选择特征。

SelectFromModel 提供了一种简单有效的特征选择方法,特别适合与线性模型和决策树类模型结合使用。


http://www.ppmy.cn/embedded/116219.html

相关文章

计算机毕业设计 美发管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Docker网络原理

Docker 网络是 Docker 容器之间以及容器与外部世界之间通信的机制。Docker 提供了多种网络驱动,允许容器以不同的方式进行通信: Docker 网络工作原理: 网络命名空间:Docker 使用 Linux 的网络命名空间来隔离容器的网络堆栈。每个…

react组件入门

react应用程序就是由一个个组件搭建而成。组件有类组件和函数组件两种。 我们之前使用create-react-app创建了app,src下放的就是我们应用的源代码,我们基于这些已生成的文件,来学习和验证组件。 类组件 这里我们创建PostList.js更改这个ap…

oracle dblink的使用并举例

Oracle Database Link(DB Link)是Oracle提供的一种功能,允许你在一个数据库中直接访问另一个远程或本地数据库的对象(如表、视图、序列等)。DB Link的设置简化了跨数据库操作,使得数据的集成和同步变得更加…

windows桌面管理软件推荐:一键整理桌面!美化电脑桌面小助手!

windows桌面管理软件推荐来咯!在繁忙的工作和生活中,一个整洁、有序的电脑桌面不仅能提升工作效率,还能带来愉悦的视觉体验。然而,随着文件的增多,桌面往往变得杂乱无章。幸运的是,市面上有许多优秀的Windo…

Spring学习指南

文章目录 Spring是什么Spring 的诞生与发展Spring 的狭义和广义广义的 Spring:Spring 技术栈狭义的 Spring:Spring FrameworkSpring Framework 的特点方便解耦,简化开发方便集成各种优秀框架降低 Java EE API 的使用难度方便程序的测试AOP 编程的支持声明式事务的支持为什么…

Java List sort() 排序

sort是java.util.List接口的默认方法。 List的排序方法在Java 8中被引入。 排序方法接受比较器作为参数&#xff0c;并根据指定的比较器对这个列表进行排序。 default void sort(Comparator<? super E> c) 示例代码&#xff1a; import java.text.Collator; import …

大模型LLM对话模拟器Dialogue Simulator Visualization可视化工具

伴随着生成式人工智能技术发展&#xff0c;进2年涌现出大语言模型LLM/Agent系统/AI推理等众多方向的技术项目和论文。其中对话系统&#xff0c;智能体交互是用户通过UX界面和AI系统进行交互&#xff0c;这种交互有时候也是多模态&#xff08;用户输入文字/语音/图像&#xff09…