当前位置: 首页 > news >正文

sklearn特征选取之SelectFromModel

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

1. 语法

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) 基本用法:使用线性模型进行特征选择
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) 使用随机森林模型进行特征选择
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 来跳过重新训练的步骤:

# 预训练一个模型
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 来限制选择的特征数量:

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 提供了一种简单有效的特征选择方法,特别适合与线性模型和决策树类模型结合使用。

相关文章:

sklearn特征选取之SelectFromModel

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

vue一级、二级路由设计

一、一级路由设计 一级路由是指直接映射到应用程序中顶级页面或组件的路由。这些路由通常定义在Vue Router的配置中,作为应用程序导航结构的基础。 直接映射:一级路由直接映射到URL路径和Vue组件,没有嵌套关系。顶级导航:它们通…...

python爬虫:将知乎专栏文章转为pdf

欢迎关注本人的知乎主页~ 实现思路 用户输入专栏ID: 代码首先提示用户输入一个知乎专栏的ID,默认值为 c_1747690982282477569。输入的ID用于构建API请求的URL。 发送HTTP请求: 使用 requests.get() 向知乎API发送GET请求,获取指定…...

嵌入式笔记(入门系列2)

目录 宏函数 预处理器#include 内存泄漏 内存对齐 堆与栈 Malloc 和 New Inline 宏函数 宏函数,宏函数,实际上就是让宏像函数一样被使用。宏函数以函数形式的方式进行入参,但是返回结果是通过表达式求值得到。话说的抽象,我…...

并发编程多线程

1.线程和进程的区别? 进程是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享内存空间线程更轻量,线程上下文切换成本一般上要比进程上下文…...

【十八】MySQL 8.0 新特性

MySQL 8.0 新特性 目录 MySQL 8.0 新特性 概述 简述 1、数据字典 2、原子数据定义语句 3、升级过程 4、会话重用 5、安全和账户管理 6、资源管理 7、表加密管理 8、InnoDB增强功能 9、字符集支持 10、增强JSON功能 11、数据类型的支持 12、查询的优化 13、公用…...

巨潮股票爬虫逆向

目标网站 aHR0cDovL3dlYmFwaS5jbmluZm8uY29tLmNuLyMvSVBPTGlzdD9tYXJrZXQ9c3o 一、抓包分析 请求头参数加密 二、逆向分析 下xhr断点 参数生成位置 发现是AES加密,不过是混淆的,但并不影响咱们扣代码 文章仅提供技术交流学习,不可对目标服…...

传知代码-从零开始构建你的第一个神经网络

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 从零开始构建你的第一个神经网络 在本教程中,我们将使用PyTorch框架从零开始构建一个简单的卷积神经网络(CNN),用于图片二分类任务。CNN 是一种深度学习模型&#…...

大厂面试真题:SpringBoot的核心注解

其实理解一个注解就行了@SpringBootApplication,我们的启动类其实就加了这一个 但是这么答也不行,因为面试官要的答案肯定不止这一个 我们打开SpringBootApplication的源码,会发现上面加了一堆的注解 相对而言比较重要是下面三个…...

Java设计模式—面向对象设计原则(五) ----->迪米特法则(DP) (完整详解,附有代码+案例)

文章目录 3.5 迪米特法则(DP)3.5.1 概述3.5.2 案例 3.5 迪米特法则(DP) 迪米特法则:Demeter Principle,简称DP 3.5.1 概述 只和你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to stranger…...

docker多阶段镜像制作,比如nginx镜像,编译+制作

镜像制作, nginx的源码包 把nginx源码拷贝到容器内 编译要用到gcc make , 以及扩展工具 pcre openssl # "pcre" perl compatibal regulaer expression 刚开始,可以两个终端, 一个手工操作(编译安装、拷贝、环境变量等)&#xf…...

大语言模型量化方法GPTQ、GGUF、AWQ详细原理

大语言模型量化的目的是减少模型的计算资源需求和存储占用,同时尽量保持模型的性能。以下是几种常见的量化方法的原理; 1. GPTQ (Gradient-based Post-training Quantization) GPTQ 是一种基于梯度的后训练量化方法,主要目的是在减少浮点计…...

《 C++ 修炼全景指南:十 》自平衡的艺术:深入了解 AVL 树的核心原理与实现

摘要 本文深入探讨了 AVL 树(自平衡二叉搜索树)的概念、特点以及实现细节。我们首先介绍了 AVL 树的基本原理,并详细分析了其四种旋转操作,包括左旋、右旋、左右双旋和右左双旋,阐述了它们在保持树平衡中的重要作用。…...

SAP 特别总账标识[SGL]

1. 特别总账标识(SGL)概述 1.1 定义与目的 特别总账标识(Special General Ledger, SGL)在SAP系统中用于区分客户或供应商的不同业务类型,以便将特定的业务交易记录到非标准的总账科目中。 定义:SGL是一个用于标记特殊业务类型的…...

认知杂谈77《简单:通往高手的技巧》

内容摘要:          在信息爆炸、关系复杂的时代,简单是复杂背后的真谛。简单如“112”,是智慧的朴素呈现。简单有强大力量,像清泉般纯净,如“我爱你”简单却有力,基础财务知识也体现其在理财中的作…...

《SmartX ELF 虚拟化核心功能集》发布,详解 80+ 功能特性和 6 例金融实践

《SmartX ELF 虚拟化核心功能集》电子书现已发布!本书详细介绍了 SmartX ELF 虚拟化及云平台核心功能,包含虚机服务、容器服务、网络服务、存储服务、运维管理、工具服务、数据保护等各个方面。 即刻下载电子书,了解如何利用基于 SmartX ELF …...

9月23日

思维导图 作业 统计家目录下.c文件的个数 #!/bin/bashnum0for file in ~/*.c; doif [ -f "$file" ]; then((num))fi doneecho "家目录下.c文件的个数: $num"...

如何使用Jinja定义dbt宏

dbt宏在dbt框架内的工作方式与传统编程中的函数类似。它允许用户将特定的、通常是重复的SQL逻辑封装到可调用的命名单元中,就像在其他编程语言中用函数来避免重复代码一样;dbt宏定义特定业务的SQL逻辑,然后在dbt项目中需要的地方调用该宏函数…...

深入理解 JavaScript 三大作用域:全局作用域、函数作用域、块级作用域

一. 作用域 对于多数编程语言,最基本的功能就是能够存储变量当中的值、并且允许我们对这个变量的值进行访问和修改。那么有了变量之后,应该把它放在哪里、程序如何找到它们?是否需要提前约定好一套存储变量、访问变量的规则?答案…...

【门牌制作 / A】

题目 代码 #include <bits/stdc.h> using namespace std; int main() {int cnt 0;for (int i 1; i < 2020; i){string s;s to_string(i);cnt count(s.begin(), s.end(), 2);}cout << cnt; }...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...