【Python特征工程系列】教你利用XGBoost模型分析特征重要性(源码)

news2025/4/22 20:19:12

这是Python特征工程系列原创文章,我的第186篇原创文章。

一、问题

应用背景介绍:      

       如果有一个包含数十个甚至数百个特征的数据集,每个特征都可能对你的机器学习模型的性能有所贡献。但是并不是所有的特征都是一样的。有些可能是冗余的或不相关的,这会增加建模的复杂性并可能导致过拟合。特征重要性分析可以识别并关注最具信息量的特征,从而带来以下几个优势:

    • 改进模型性能

    • 能减少过度拟合

    • 更快训练和推理

    • 增强可解释性

前期相关回顾:

【Python特征工程系列】利用梯度提升(GradientBoosting)模型分析特征重要性(源码)

【Python特征工程系列】8步教你用决策树模型分析特征重要性(源码)

【Python特征工程系列】利用随机森林模型分析特征重要性(源码)

本期相关知识:

       XGBoost(eXtreme Gradient Boosting)极致梯度提升,是一种基于GBDT的算法或者说工程实现。XGBoost通过集成多个决策树模型来进行预测,并通过梯度提升算法不断优化模型的性能。XGBoost的基本思想和GBDT相同,但是做了一些优化,比如二阶导数使损失函数更精准;正则项避免树过拟合;Block存储可以并行计算等。XGBoost可以计算每个特征的重要性得分,帮助我们理解哪些特征对模型预测的贡献最大。

二、实现过程

导入第三方库

import pandas as pd
from sklearn.model_selection import train_test_split
import xgboost as xgb
import matplotlib.pyplot as plt
import seaborn as sns

2.1 准备数据

data = pd.read_csv(r'dataset.csv')
df = pd.DataFrame(data)

图片

2.2 目标变量和特征变量

target = 'target'
features = df.columns.drop(target)

 特征变量如下:

图片

2.3 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)

 X_train如下:

图片

2.4 训练模型

model = xgb.XGBRegressor(n_estimators=100, max_depth=10)
model.fit(X_train, y_train)

2.5 提取特征重要性

feature_importance = model.feature_importances_
feature_names = features

 feature_importance如下:

图片

2.6 创建特征重要性的dataframe

importance_df = pd.DataFrame({'Feature': feature_names, 'Importance': feature_importance})

 importance_df如下:

图片

2.7 对特征重要性进行排序

importance_df = importance_df.sort_values(by='Importance', ascending=False)

排序后的 importance_df如下:

图片

2.8 可视化特征重要性

plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=importance_df)
plt.title('Feature Importance')
plt.xlabel('Importance')
plt.ylabel('Feature')
plt.show()

 可视化结果如下:

图片

本期内容就到这里,我们下期再见!需要数据集和源码的小伙伴可以关注底部公众号添加作者微信!

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1346023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3568测试tdd

RK3568测试tdd 一、门禁取包二、烧录三、跑tdd用例四、查看结果参考资料 一、门禁取包 右键复制链接,粘贴下载;解压到文件夹; 二、烧录 双击\windows\RKDevTool.exe打开烧写工具,工具界面击烧写步骤如图所示: 推荐…

部署es集群

在单机上利用docker容器运行多个es实例来模拟es集群。不过生产环境推荐大家每一台服务节点仅部署一个es的实例。部署es集群可以直接使用docker-compose来完成,但这要求你的Linux虚拟机至少有4G的内存空间 创建es集群 编写docker-compose文件 首先编写一个docker-…

微信公众号没有留言功能,怎么破?

为什么公众号没有留言功能?2018年2月12日,TX新规出台:根据相关规定和平台规则要求,我们暂时调整留言功能开放规则,后续新注册帐号无留言功能。这就意味着2018年2月12日号之后注册的公众号不论个人主体还是组织主体&…

[spark] SaveMode

https://spark.apache.org/docs/latest/api/java/index.html?org/apache/spark/sql/SaveMode.html Overwrite 覆盖模式是指将DataFrame保存到数据源时,如果数据/表已经存在,则现有数据将被DataFrame的内容覆盖。 注意: Overwrite 模式会覆盖已存在的表…

最优轨迹生成(三)—— 无约束BIVP轨迹优化

本系列文章是学习深蓝学院-移动机器人运动规划课程第五章最优轨迹生成 过程中所记录的笔记,本系列文章共包含四篇文章,依次介绍了微分平坦特性、无约束BVP轨迹优化、无约束BIVP轨迹优、 带约束轨迹优化等内容 本系列文章链接如下: 最优轨迹生…

ElasticSearch历史版本/老版本下载

下载地址 https://www.elastic.co/cn/downloads/past-releases#elasticsearch 搜索所需版本并下载

Grafana增加仪表盘

1.Grafana介绍 grafana 是一款采用Go语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。 Grafana下载地址:https://grafana.com/g…

【网络奇遇记】揭秘计算机网络的性能指标:时延带宽积|往返时间|利用率|丢包率

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋上期回顾一. 时延带宽积二. 往返时间三. 利用率四. 丢包率📝结语 &#x1…

李宏毅 自然语言处理(Speech Recognition) 笔记

李宏毅NLP(自然语言处理)完整课程,强推!_哔哩哔哩_bilibili 从Ng那里跑路来学NLP了,之前其实ML入门听的就是宝可梦捕获大师()的课,目前计划是,本博文作为上面链接所示课程的笔记记录。听完之后…

sklearn 中matplotlib编制图表

代码 # 导入pandas库,并为其设置别名pd import pandas as pd import matplotlib.pyplot as plt# 使用pandas的read_csv函数读取名为iris.csv的文件,将数据存储在iris_data变量中 iris_data pd.read_csv(data/iris.txt,sep\t)# 使用groupby方法按照&quo…

VMware ESXi常用查看RAID和磁盘信息工具及命令汇总

一、Esxcli 使用 Esxcli 命令可获取有关 vSAN 的信息,以及对您的 vSAN 环境进行故障排除。 可用命令如下: 命令描述esxcli vsan network list确认哪些 VMkernel 适配器可用于 vSAN 通信。esxcli vsan storage list列出由 vSAN 声明的存储磁盘。esxcli…

MIT线性代数笔记-第34讲-左右逆,伪逆

目录 34.左右逆,伪逆左右逆伪逆 打赏 34.左右逆,伪逆 左右逆 之前讲到的逆都是针对可逆方阵而言的,对于长方矩阵,实际上也有广义的逆,那就是左逆和右逆 左逆 当矩阵列满秩,即 r n r n rn时,…

springcloud微服务篇--6.网关Gateway

一、为什么需要网关? 网关功能: 身份认证和权限校验 服务路由、负载均衡 请求限流 在SpringCloud中网关的实现包括两种: gateway zuul Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的Web…

R统计学1 - 基础操作入门问题1-20

R统计学入门基础问题 1. 如何生成100个高斯&#xff08;正态&#xff09;分布随机数 x <- rnorm(100, mean 5, sd 0.1) x # [1] 4.893534 5.046611 5.081097 4.979164 5.181700 5.038192 5.135376 5.173346 4.968877 4.986146 # [11] 4.946258 5.198199 5.055531 4.9430…

在 Linux 中使用 cat 命令

cat 命令用于打印文本文件的文件内容。至少&#xff0c;大多数 Linux 用户都是这么做的&#xff0c;而且没有什么问题。 cat 实际上代表 “连接(concatenate)”&#xff0c;创建它是为了 合并文本文件。但只要有一个参数&#xff0c;它就会打印文件内容。因此&#xff0c;它是用…

轻松实现电脑批量记账,高效管理财务数据

随着生活和工作的日益复杂&#xff0c;财务管理也变得越来越重要。一个好的记账软件可以帮助您更好地管理财务&#xff0c;使您更轻松地跟踪支出、收入和资产。那么&#xff0c;如何选择一款好用的记账软件呢&#xff1f;如何在电脑上进行批量记账呢&#xff1f; 第一步&#x…

51单片机项目(25)——基于51单片机电子秒表的protues仿真

1.功能设计 使用51单片机&#xff0c;完成0-59s的计时&#xff0c;并且实时显示在数码管上。使用一个按键控制计时器的启停。 仿真截图如下&#xff1a; 2.模块介绍 独立按键&#xff1a; 独立按键也称为轻触式开关&#xff0c;是一种简单的电气开关设备。它是一种手动操作Sw…

java并发编程一 并发编程的基本概念

进程与线程 进程 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的当一个程序被运行&…

SNMP获取Linux系统信息

snmp测试 snmpwalk -v 2c -c public123 192.168.227.133 system[rootlocalhost ~]# snmpwalk -v 2c -c public123 192.168.227.133 system SNMPv2-MIB::sysDescr.0 STRING: Linux localhost.localdomain 5.10.0-60.18.0.50.oe2203.x86_64 #1 SMP Wed Mar 30 03:12:24 UTC 202…

最新Redis7哨兵模式(保姆级教学)

一定一定要把云服务器的防火墙打开一定要&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;否则不成功&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…