Python中使用Gradient Boosting Decision Trees (GBDT)进行特征重要性分析

在机器学习中,了解哪些特征对模型的预测有重要影响是至关重要的。这不仅帮助我们理解模型的决策过程,还可以指导我们进行特征选择,从而提高模型的效率和准确性。Gradient Boosting Decision Trees(GBDT)是一种强大的集成学习方法,它通过组合多个决策树的预测来提高性能。GBDT也提供了衡量特征重要性的直观方式,这是通过观察每个特征在构建决策树时的使用频率和贡献程度来完成的。

本博客将通过几个代码示例,展示如何使用Python中的​​scikit-learn​​库来训练GBDT模型,并进行特征重要性分析。

准备数据

首先,我们需要准备数据。在这里,我们将使用​​scikit-learn​​内置的波士顿房价数据集作为示例。

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split# 加载数据
boston = load_boston()
X, y = boston.data, boston.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

训练一个GBDT模型

接下来,让我们使用​​GradientBoostingRegressor​​来训练一个GBDT模型。

from sklearn.ensemble import GradientBoostingRegressor# 初始化和训练模型
gbdt = GradientBoostingRegressor(random_state=42)
gbdt.fit(X_train, y_train)

特征重要性分析

一旦模型被训练,我们可以通过查看​​feature_importances_​​属性来分析各个特征的重要性。

# 获取特征重要性
feature_importance = gbdt.feature_importances_# 打印每个特征的重要性
for i, importance in enumerate(feature_importance):print(f"Feature {boston.feature_names[i]}: {importance}")

可视化特征重要性

为了更直观地理解特征重要性,我们可以将其可视化。

import matplotlib.pyplot as plt
import numpy as np# 对特征重要性进行排序
sorted_idx = np.argsort(feature_importance)
pos = np.arange(sorted_idx.shape[0]) + .5# 绘制条形图
plt.figure(figsize=(12, 6))
plt.barh(pos, feature_importance[sorted_idx], align='center')
plt.yticks(pos, np.array(boston.feature_names)[sorted_idx])
plt.title('Feature Importance (GBDT)')
plt.xlabel('Relative Importance')
plt.ylabel('Feature')
plt.show()

使用SHAP值进行深入特征重要性分析

尽管GBDT提供了一种衡量特征重要性的方法,但SHAP(SHapley Additive exPlanations)值提供了一种更深入的分析特征对模型预测影响的方法。SHAP值基于博弈论,目标是解释每个特征对模型预测的贡献。

import shap# 计算SHAP值
explainer = shap.TreeExplainer(gbdt)
shap_values = explainer.shap_values(X_train)# 可视化第一个样本的SHAP值
shap.initjs()
shap.force_plot(explainer.expected_value, shap_values[0,:], X_train[0,:], feature_names=boston.feature_names)

通过上述代码,我们不仅能看到哪些特征对模型预测最重要,而且还能了解每个特征是如何影响每个单独预测的。

总结

通过GBDT模型,我们不仅能够建立强大的预测模型,还能深入了解哪些特征在模型中扮演着重要角色。特征重要性分析帮助我们理解模型的决策过程,优化特征选择,提高模型的性能。而SHAP值的引入,则进一步深化了我们对模型预测背后影响因素的理解

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

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

相关文章

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 4月29日,星期一

每天一分钟,知晓天下事! 2024年4月29日 星期一 农历三月廿一 1、 移民管理局:5月6日起换发补发出入境证件可“全程网办”。 2、 文旅部宣布恢复两岸旅游新措施:将率先恢复福建居民到马祖旅游。 3、 网信办:整治用夸…

微软最新季度业绩结果充分说明了云和AI的增长、谷歌和AWS的竞争

微软最新的季度业绩超出了华尔街的各种预期,但对其服务合作伙伴来说,最重要的是这家科技巨头的预期:人工智能不仅能够增长,而且其云产品尚未达到稳定状态——人工智能是云的潜在增长加速器。 周五的一份分析师报告称,…

scipy 笔记:spatial.KDTree

1 方法介绍 scipy.spatial.KDTree(data, leafsize10, compact_nodesTrue, copy_dataFalse, balanced_treeTrue, boxsizeNone) 用于快速最近邻查找的kd树 对于大维数(20已经很大),不要期望这比暴力搜索快很多。高维最近邻查询是计算机科学中…

yo!这里是网络入门初识

目录 前言 基本概念 网络 协议 地址 网络传输流程 OSI七层模型 TCP/IP四层(五层)模型 流程图 数据封装&&分用 后记 前言 对于上一个专栏——Linux操作系统,我们学习了操作系统的基础知识以及基本的系统编程,其…

前端面试题大合集2----基础篇

目录 1、事件模型 2、什么是事件委托/事件代理 3、说一下Commonjs、AMD和CMD 4、Ajax原理 5、说一下XHR和Fetch的区别 6、实现一个once函数,传入函数只执行一次 7、js监听对象属性的改变 8、如何解决跨域问题 9、介绍js有哪些内置对象 10、介绍js有哪些方法…

setTimeout回调函数 this指向问题

本文主要介绍setTimeout的回调函数的this指向问题 例子1:回调函数是一个普通函数 setTimeout 的回调函数是一个普通函数,而不是箭头函数,因此它有自己的上下文,this 指向全局对象(在浏览器中是 window 对象&#xff…

十大排序算法之——冒泡排序算法(Java实现)及思路讲解

冒泡排序是一种简单的排序算法,通过重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的…

挤压激励注意力 SE | Squeeze-and-Excitation Networks

论文名称:《Squeeze-and-Excitation Networks》 论文地址:https://arxiv.org/pdf/1709.01507.pdf 代码地址: https://github.com/hujie-frank/SENet 卷积神经网络 (CNN) 的核心构建块是卷积运算符,它使网络能够通过在每一层的局…

Linux进程基础概念子进程的创建

有着上一节我们对操作系统和冯诺依曼体系结构的理解,本篇我们便可以开始对 Linux 中的进程开始讲解。在本篇中对进程的基本概念进行了简单的介绍,然后通过对描述进程的 PCB,与 Linux 中的 task_struct 的详细讲解,使得对进程的概念…

Android Widget开发代码示例详细说明

因为AppWidgetProvider扩展自BroadcastReceiver, 所以你不能保证回调函数完成调用后,AppWidgetProvider还在继续运行。 a. AppWidgetProvider 的实现 /*** Copyright(C):教育电子有限公司 * Project Name: NineSync* Filename: SynWidgetProvider.java * Author(S…

界面组件DevExpress Blazor UI v23.2 - 网格、工具栏功能全新升级

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生Blazor UI组件(包括Pivot Grid、调度程序、图表、数据编辑器和报表等)。 DevExpress Blazor控件目前已经升级…

数字文旅重塑旅游发展新生态:以数字化转型为契机,推动旅游产业的创新发展,提升旅游服务的智能化、网络化和个性化水平

目录 一、引言 二、数字化转型推动旅游产业创新发展 1、数字化转型提升旅游产业效率 2、数字化转型拓展旅游产业边界 3、数字化转型促进旅游产业可持续发展 三、提升旅游服务智能化、网络化和个性化水平 1、智能化提升旅游服务体验 2、网络化拓宽旅游服务渠道 3、个性…

爬虫的实战应用之短信炸弹playwright现代网页测试工具

不讲废话,先上原理: 短信炸弹,也就是说持续对一个手机进行发送短信,实现的方式就是,利用某些网站的登录 ,注册的时候,发送短信验证码来实现。 如下图,其中有一个id为phone的输入框&a…

亲子公园实景剧本杀小程序系统开发

亲子公园实景剧本杀小程序系统开发涉及到多个方面的内容,具体步骤如下: 1. 系统需求分析:了解客户的需求和期望,明确开发目标和功能需求。 2. 系统架构设计:根据需求分析结果,设计系统的整体架构&#xf…

CODEFORCES --- 9A. Die Roll

9A. Die Roll 亚科、瓦科 和多特 是世界著名的动画片演员,他们决定暂停动画片的表演,休假去旅行。亚科梦想去宾夕法尼亚州,那里是他的祖国,也是他祖先的祖国。瓦科想到了塔斯马尼亚,那里有海滩、阳光和大海。小不点选…

配置nodejs的俩小脚本

介绍:共两个脚本。 脚本1,用来配置环境变量,生成环境变量所需的配置信息,然后自己添加到系统环境变量里去 特别注意:该脚本需要放到nodejs目录下面,如果不是,则无法生成环境变量配置文本内容 另…

Java23种设计模式-创建型模式之原型模式

原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制现有对象来生成新对象,而无需编写从头开始创建新对象的代码。 优点:可以克隆对象,无需与它们所属的具体类相耦合;可以克隆预生成原型,避免…

Java代码审计-flink-streaming-platform-web

前言 项目地址:GitHub - zhp8341/flink-streaming-platform-web: 基于flink的实时流计算web平台 flink-streaming-platform-web是一个将flink封装的一个可视化的、轻量级的flink web客户端系统,用户只需在web 界面进行sql配置就能完成流计算任务。 项目…

海外IP代理中的HTTP/SOCKS5协议都有哪些区别?

随着互联网大数据的兴起,代理ip也成为了很多用户完成任务时不可缺少的部分,代理ip随着出现的主要作用是变换ip,突破ip限制等问题,使用过代理ip的用户都知道,代理ip分为很多种,长效,短效及不同协…

【Elasticsearch<一>✈️✈️】简单安装使用以及各种踩坑

目录 🍸前言 🍻一、软件安装(Windows版) 1.1、Elasticsearch 下载 2.1 安装浏览器插件 3.1、安装可视化工具 Kibana 4.1、集成 IK 分词器 🍺二、安装问题 🍹三、测试 IK 分词器 ​🍷 四、章…