Python | XGBoost+SHAP可解释性分析回归预测及可视化算法

Python | XGBoost+SHAP可解释性分析回归预测及可视化算法

立个flag,这是未来一段时间打算做的Python教程,敬请关注。

1 数据及应用领域

我的程序中给出数据data.xlsx(代码及数据见文末),10 列特征值,1 个目标值,适用于各行各业回归预测算法的需求,其中出图及数据自动保存在当前目录,设置的训练集与预测集的比例为 80%:20%。

(1)地球科学与环境科学

  • 遥感反演:利用多源遥感数据预测水体深度、土壤湿度、植被指数、叶面积指数等。
  • 气象与气候研究:预测降水量、气温、风速、风向等连续气象变量。
  • 水文与水资源管理:河流流量、地下水位、径流量预测。
  • 环境污染监测:空气质量指数、PM2.5/PM10浓度、重金属污染水平预测。
  • 地质与矿业:预测矿区地表沉降、地裂缝发展趋势,或矿产储量评估。

(2)生物学与医学

  • 生态学:预测物种分布密度、群落生物量或生态环境因子变化。
  • 公共卫生:基于环境、生活方式或基因组数据预测疾病风险或血液生化指标。
  • 医学影像分析:预测器官或病灶体积、组织属性、功能指标。

(3)工程与物理科学

  • 材料科学:预测材料性能,如强度、硬度、导热性、弹性模量
  • 土木与结构工程:预测建筑物或桥梁的应力、位移、寿命周期。
  • 控制系统与信号处理:连续控制变量预测、信号功率或系统状态预测。

(4)经济与社会科学

  • 经济预测:股价、GDP、通货膨胀率、消费指数预测。
  • 市场分析:销售额、客户需求、产品价格预测。
  • 社会行为:人口增长、流动性、社会指标预测。

(5)数据科学与机器学习方向

  • 时间序列预测:股票价格、气象指标、传感器数据。
  • 多变量因果建模:分析各特征对连续目标变量的影响。
  • 特征重要性解释:结合SHAP、LIME等方法揭示变量贡献。

2 算法理论基础

🌟 一、XGBoost 是什么?

一句话概括:



XGBoost 是一种把“决策树 + Boosting”做到极致的算法。

它的核心思想很简单: 每一棵树都在帮前一棵树“补作业”。最终用一堆小树叠加成一个强大的预测模型。

🔍 二、Boosting 的思想:不断纠错的“班级接力赛”

想象一下,一个班级做题:

  • 第1位同学先做一遍,做得不太好
  • 第2位同学专门看他错的地方继续改
  • 第3位同学继续弥补前两位的不足
  • ……

XGBoost 就是这样: 每一轮都在修前一轮的“错题”。最终把误差压到很低。

🧠 三、XGBoost 为什么比普通的 GBDT 更强?

XGBoost 的“外挂”非常多,但最关键有三点:

✔ ① 更聪明:它能“看一阶”和“看二阶”

普通 GBDT 只看数据的“变化方向”。XGBoost 还会看“变化的速度和曲率”。通俗理解:

  • 别的算法只知道“往左走还是往右走”
  • XGBoost 还能知道“这个方向好不好、稳不稳、是不是悬崖边”

所以它分裂节点时更稳,不容易被噪声带偏。

✔ ② 更能抗过拟合:它天生带“刹车系统”

XGBoost 内置了很多“限制树太复杂”的机制,比如:

  • 限制树的叶子数
  • 限制叶子的输出强度
  • 限制树长多深
  • 降低每棵树的“发力强度”(学习率)
  • 随机抽行抽列,让模型不被少数样本或特征带偏

这些都让它比普通 GBDT 更稳健。

✔ ③ 更快:它被工程师疯狂优化过

XGBoost 的速度,真的不是开玩笑的快。它做了几件非常狠的事情:

1. 特征提前排序:后面所有树直接复用,速度飞起
2. 自动处理缺失值:模型自己决定缺失值应该往“左子树”还是“右子树”
3. 并行计算:一棵树虽然是串行长的,但分裂候选可以并行
4. 极致利用 CPU 缓存:甚至优化了到底怎么放数据才能让缓存命中率更高

🎯 四、为什么 XGBoost 很难被完全替代?

尽管 LightGBM、CatBoost 等算法不断涌现,但 XGBoost 仍然在大量工程场景里占据一席之地。原因很现实:

  1. 鲁棒性极强,几乎不会翻车
  2. 对特征工程依赖小
  3. 可解释性比深度学习强
  4. 对稀疏、缺失、不均衡数据极友好
  5. 参数虽然多,但调参空间巨大,上限高

这是为什么大厂、科研、比赛都离不开它。

3 SHAP理论基础

🌟 一、SHAP 是什么?一句话概括



SHAP 是一套用“合作博弈论”思维解释模型的方法,用来回答:每个特征到底对预测结果贡献了多少?

如果你想知道:

  • 哪些特征最重要?
  • 每个特征是“推高”还是“压低”预测?
  • 不同样本吸收特征影响的方向是否一致?
  • 模型是怎么得出这个数的?

那 SHAP 就是最好的答案。

🧠 二、为什么要 SHAP?传统特征重要性有什么问题?

很多人都用过 XGBoost、Random Forest 的 “特征重要性”,但这些方法有明显缺陷:

❌ 1. 只能告诉你“重要”,不能告诉你“怎么重要”

例如: 某参数重要,但它是推高风速,还是降低风速?不知道。

❌ 2. 不能解释“单一样本”

模型给某一个点预测为 3.2 m/s,到底是由 NDVI 推上去的?还是由降水拉下来的?也不知道。

❌ 3. 依赖模型结构,不通用

不同模型指标不同,难对齐。

SHAP 完美解决了这些痛点。

🎲 三、SHAP 的核心思想:特征是“一起干活的队友”

想象一个团队比赛:

  • 每个队员(特征)都可能对团队成绩有贡献
  • 但是不同的队伍组合,贡献可能不一样
  • 那一个队员的“真实贡献”该怎么算?

SHAP 的思想就是:



让特征像“队员”一样参加所有组合队伍,再统计每个特征平均能让模型表现提高多少。

这就得到每个特征的贡献值(Shapley value)。它是一个“公平分配功劳”的方案。

🧩 四、SHAP 优秀的地方在哪里?

✔ 1. 公平性强

SHAP 的分配方式满足一系列“公平原则”:

  • 谁都没贡献 → 得分为 0
  • 特征越能独立提升模型效果 → 得分越大
  • 同样作用的特征贡献相同

这是其他方法做不到的。

✔ 2. 能画非常直观的可视化

本程序SHAP带的图包括:

这些图都是发论文神器。

论文价值:可解释性直接提升一档

SCI 论文里 reviewer 最爱问:

  • “模型的物理解释是什么?”
  • “为什么这个特征如此重要?”
  • “模型是不是只是黑盒?”

你用 SHAP,一张 beeswarm plot 就能回答所有问题。

✔ 3. 模型无关、模型无偏见

无论你是:

  • XGBoost
  • CatBoost
  • LightGBM
  • Random Forest
  • Gradient Boosting
  • NGBoost
  • 决策树

SHAP 都能解释。

4 其他图示

🎲 一、特征值相关性热图

特征值相关性热图用于展示各特征之间的相关强弱,通过颜色深浅体现正负相关关系,帮助快速识别冗余特征、强相关特征及可能影响模型稳定性的变量,为后续特征选择和建模提供参考。

🎲 二、散点密度图

散点密度图通过颜色或亮度反映点的聚集程度,用于展示大量样本的分布特征。相比普通散点图,它能更直观地呈现高密度区域、异常点及整体趋势,常用于回归分析与模型评估。以下为训练集和测试集出图效果。

5 代码获取

Python | XGBoost+SHAP 可解释性分析回归预测及可视化算法

新手小白/python 初学者请先根据如下链接教程配置环境,只需要根据我的教程即可,不需要安装 Python 及 pycharm 等软件。如有其他问题可加微信沟通。

Anaconda 安装教程(保姆级超详解)【附安装包+环境玩转指南】

https://mp.weixin.qq.com/s/uRI31yf-NjZTPY5rTXz4eA

Read more

Flutter for OpenHarmony:web3dart 连接以太坊区块链,构建去中心化应用(DApp 开发与智能合约调用深度实战)深度解析与鸿蒙适配指南

Flutter for OpenHarmony:web3dart 连接以太坊区块链,构建去中心化应用(DApp 开发与智能合约调用深度实战)深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 随着 Web3.0 概念的普及,区块链技术已从早期的极客玩具逐渐走向主流应用。无论是 DeFi(去中心化金融)、NFT(非同质化代币)还是 DAO(去中心化组织),都离不开与区块链网络的交互。 以太坊 (Ethereum) 作为目前最成熟的智能合约平台,其客户端通信协议 JSON-RPC 是行业标准。要在移动端(Flutter/OpenHarmony)与以太坊网络通信,我们不可能手动构造那些复杂的十六进制数据包。 web3dart 是 Dart 生态中唯一的、功能完备的 Web3 客户端库。它可以让你: 1. 管理账户:生成私钥、助记词,导入 keystore。 2. 发送交易:转账 ETH,部署合约。

By Ne0inhk
AI编程实战 : 使用 TRAE CN 将 MasterGo 设计稿转化为前端代码

AI编程实战 : 使用 TRAE CN 将 MasterGo 设计稿转化为前端代码

文章目录 * 什么是 MCP * 前置条件 * 1. 账号权限 * 2. 环境要求 * 3. 设计稿准备 * MasterGo AI Bridge 支持的能力 * 操作步骤 * 第一步: 安装/升级 TRAE CN IDE * 第二步: 获取 MasterGo 的 Personal Access Token * 第三步: 添加 MCP Server * 第四步: 创建自定义智能体(可选) * 第五步: 调用 MCP 生成前端代码 * 5.1 复制 MasterGo 设计稿链接 * 5.2 在 TRAE CN IDE

By Ne0inhk
【Java Web学习 | 第八篇】JavaScript(2) 基础知识2

【Java Web学习 | 第八篇】JavaScript(2) 基础知识2

🌈个人主页: Hygge_Code🔥热门专栏:从0开始学习Java | Linux学习| 计算机网络💫个人格言: “既然选择了远方,便不顾风雨兼程” 文章目录 * JavaScript 运算符与流程控制全解析 * 一、运算符:自增、比较与逻辑🥝 * 1. 自增运算符(++) * 2. 比较运算符 * 3. 逻辑运算符 * 二、条件判断语句🥝 * 1. if 语句 * 2. 三目运算符 * 3. switch 语句 * 三、循环语句🥝 * 1. while 循环 * 2. for 循环 * 总结🍂 JavaScript 运算符与流程控制全解析 在 JavaScript 中,运算符和流程控制是实现逻辑处理的基础。本文在前文基础上补充for循环内容,全面讲解比较运算符、

By Ne0inhk
前端真的能防录屏?EME(加密媒体扩展) DRM 反录屏原理 + 实战代码

前端真的能防录屏?EME(加密媒体扩展) DRM 反录屏原理 + 实战代码

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》专栏19年编写主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战 🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解 🌛《开源项目》本专栏主要介绍目前热门的开源项目,带大家快速了解并轻松上手使用 🍎 《前端技术》专栏以实战为主介绍日常开发中前端应用的一些功能以及技巧,均附有完整的代码示例 ✨《开发技巧》本专栏包含了各种系统的设计原理以及注意事项,并分享一些日常开发的功能小技巧 💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程 🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整 👍《Spring Security》专栏中我们将逐步深入Spring Security的各个

By Ne0inhk