模型解释性:SHAP包的使用
本篇博客介绍另一种事后可解释性方法:SHAP(SHapley Additive exPlanation)方法。
1. Shapley值理论
Shapley值是博弈论中的一个概念,通过衡量联盟中各成员对联盟总目标的贡献程度,从而根据贡献程度来进行联盟成员的利益分配,避免了分配的平均主义。
当Shapley理论用于解释机器学习模型的时候,将输入特征xxx视为参与成员,模型输出的概率分布f(x)f(x)f(x)视为联盟总目标,通过衡量各特征的贡献度来挖掘重要特征,从而提供可解释性判断依据。其数学模型如下:g(Z′)=φ0+∑j=1MφjZj′≈f(x)(1)g(Z^{'})=\varphi_{0}+\sum_{j=1}^{M}\varphi_{j}Z^{'}_{j}\approx f(x) \tag{1}g(Z′)=φ0+j=1∑MφjZj′≈f(x)(1)其中,ggg是解释模型,f(x)f(x)f(x)是原机器学习模型,Zj′={0,1}MZ^{'}_{j}=\{0,1\}^{M}Zj′={0,1}M表示相应特征是否被观察到,MMM是输入特征的数目,φi\varphi_{i}φi是每个特征的归因值,φ0\varphi_{0}φ0是解释模型的常数。
对于一个特定的输入数据x0x_{0}x0,其Shapley值的计算公式如下:φi(f,x0)=∑S⊆NS/{i}∣S∣!(M−∣S∣−1)!∣NS∣\varphi_{i}(f,x_{0})=\sum_{S\subseteq N_{S}/ \{i\}}\frac{|S|!(M-|S|-1)!}{|N_{S}|!}[f(S\cup\{i\})-f(S)]\tag{2}φi(f,x0)=S⊆NS/{i}∑∣NS∣!∣S∣!(M−∣S∣−1)其中,φi(f)\varphi_{i}(f)φi(f)代表函数fff中特征iii的贡献度,NSN_{S}NS是所有特征组成的集合,SSS代表特征子集,NS/{i}N_{S}/\{i\}NS/{i}代表在集合NSN_{S}NS中去除特征iii,S∪{i}S\cup \{i\}S∪{i}表示子集SSS中增加特征iii,∣S∣|S|∣S∣表示集合SSS中元素的个数。
为了方面公式(2)的计算,通常将公式(2)转化为如下公式计算:φi(f,x0)=∑z′∈{0,1}M∣z′∣!(M−∣z′∣−1)!M\varphi_{i}(f,x_{0})=\sum_{z^{'}\in\{0,1\}^{M}}\frac{|z^{'}|!(M-|z^{'}|-1)!}{M!}[f_{S}(z^{'})-f_{S}(z^{'}|i)]\tag{3}φi(f,x0)=z′∈{0,1}M∑M!∣z′∣!(M−∣z′∣−1)其中,fS=E[f(x)∣zS′]=1N∑j=1Nf(xj′)f_{S}=E[f(x)|z_{S}^{'}]=\frac{1}{N}\sum_{j=1}^{N}f(x_{j}^{'})fS=E[f(x)∣zS′]=N1j=1∑Nf(xj′)其中,zS′z_{S}^{'}zS′为集合SSS中特征的取值所组成的集合,NNN为原函数fff训练数据的个数,xj′x_{j}^{'}xj′的取值如下:xj′={x0i,Fi∈zS′xji,Fi∉zS′x_{j}^{'}=\left\{\begin{aligned} x_{0i},& F_{i}\in z_{S}^{'} \\ x_{ji},&F_{i}\notin z_{S}^{'} \end{aligned}\right. xj′={x0i,xji,Fi∈zS′Fi∈/zS′其中,x0ix_{0i}x0i为待解释数据x0x_{0}x0的第iii个特征值,xjix_{ji}xji表示第jjj个训练数据中第iii个特征的取值,FiF_{i}Fi表示第iii个特征值。
SHAP值具备扎实的理论基础,但φi\varphi_{i}φi的计算复杂度和E[f(x)∣zS′]E[f(x)|z_{S}^{'}]E[f(x)∣zS′]的有效估计是其在实际应用中的最大阻碍,为了解决这个问题,Lundberg等人提出了Tree SHAP方法。
Tree SHAP是用于树模型的快速SHAP值估计方法,大大增加了SHAP值的实际应用能力。
2 SHAP包用法
这里仍然以Boston房价为例,使用XGBoost方法训练模型。其用法举例如下:
模型训练
import pandas as pd
import numpy as np
from sklearn.datasets import load_boston
from xgboost import XGBRegressor
from sklearn.model_selection import train_test_split
import shap
shap.initjs()
#分类
boston=load_boston()
X=boston.data
y=boston.target
features=boston.feature_names
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)xgbr=XGBRegressor(n_estimators=200,max_depth=4)
xgbr.fit(X_train,y_train)
对单个样本进行解释
explainer=shap.TreeExplainer(xgbr)
shap_values=explainer.shap_values(X_test[1].reshape(1,-1))
shap.force_plot(explainer.expected_value,shap_values,X_test[1].reshape(1,-1),feature_names=features)
其结果如下:

关于上图,有以下几个方面需要说明:
- base_value:全体样本Shape平均值,这里的全体样本指的是模型的训练样本;
- output_value: 当前样本的Shap输出值,即为模型的预测值;
- 正向作用特征:红色特征即为正向作用的特征;
- 反向作用特征:蓝色特征即为反向作用的特征;
整个测试集的Shap分布
explainer=shap.TreeExplainer(xgbr)
shap_values=explainer.shap_values(X_test)
shap.force_plot(explainer.expected_value,shap_values,X_test,feature_names=features)
其结果如下(可以通过调节横纵坐标观察当个特征的效果):

从特征角度观察样本Shap值
shap.summary_plot(shap_values,X_test,feature_names=features)
其结果如下:

参考文献
- 《基于图模型机器学习算法的可解释性技术研究与实现》
- 《稳定评估机器学习模型可解释性研究》
- https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/106131890
相关文章:
模型解释性:SHAP包的使用
本篇博客介绍另一种事后可解释性方法:SHAP(SHapley Additive exPlanation)方法。 1. Shapley值理论 Shapley值是博弈论中的一个概念,通过衡量联盟中各成员对联盟总目标的贡献程度,从而根据贡献程度来进行联盟成员的利益分配,避免…...
算法训练营 day45 动态规划 0-1背包理论 分割等和子集
算法训练营 day45 动态规划 0-1背包理论 分割等和子集 0-1背包理论 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 在下面的讲解中&…...
SSM框架
1.mybatis的底层原理 本质上就是使用反射和动态代理来实现对应的映射关系 2.日志级别 3.传递参数 单个参数的传递和多个参数的传递 Emp selectOne(Param(“xingming”) String name); List selectByCondition(Param(“name”) String name,Param(“sal”) double sal); 4.#和…...
教育行业需要什么样的客服系统?
某教育公司拥有素质教育、成人教育、智慧教育等多个业务板块,日常通过电商、线上媒体、线上线下授课等方式进行业务开展和品牌宣传,取得了非常不错的成绩,受到了很多人的好评反馈。 对于这样一个教育公司,客户来源广泛࿰…...
花房集团任命新首席财务官:已跌破IPO发行价,活跃用户下滑
上市刚满2个月,花椒母公司花房集团(HK:03611)的高管就发生了变更。2023年2月12日,花房集团披露的公告显示,董事会宣布赵磊为该公司首席财务官(CFO),自2023年2月10日起生效。 据贝多…...
儿童绘本馆图书借阅租赁知识付费小程序源码交流
1.分类图书 2.书单推荐 4.会员卡次、期限购买 5.借阅时间选择 6.积分签到 7.优惠Q领取 前端uniapp开发 后端thinkphp开发 完全开源 <template> <view class"sp-section sp-index"> <!-- search --> <view class&qu…...
Vue3 中 axios 的安装及使用
目录前言:一、什么是 axios ?二、Axios 的配置项三、Axios 的请求方式四、自定义创建实例五、Axios 请求错误处理六、Axios 解决跨域问题七、Axios 请求案例随机笑话大全总结:前言: 在编写vue里的项目时,必须要用和后台…...
Django设计模式以及模板层介绍
MVC和MTV 传统的MVC作用:降低模块间的耦合度(解耦)Django的MTV模式 作用:降低模块间的耦合度(解耦)什么是模板 1、模板是可以根据字典数据动态变化的html网页2、模板可以根据视图中传递的字典数据动态生成相…...
Linux信号一门搞定
1.信号是什么? 信号其实就是一个软件中断。 例: 输入命令,在Shell下启动一个前台进程。用户按下Ctrl-C,键盘输入产生一个硬件中断。如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,…...
手撸一个动态Feign,实现一个“万能”接口调用
Feign,在微服务框架中,是的服务直接的调用变得很简洁、简单,而不需要再编写Java Http调用其他微服务的接口。 动态feign 对于fegin调用,我们一般的用法:为每个微服务都创建对应的feignclient接口,然后为每…...
Linux Capabilities 入门
目录 Linux capabilities 是什么? capabilities 的赋予和继承 线程的 capabilities Permitted Effective Inheritable Bounding Ambient 文件的 capabilities Permitted Inheritable Effective 运行 execve() 后 capabilities 的变化 案例 Linux capab…...
驱动 day6
关于设备树的理解: 设备树(Device Tree)是一种用于特定硬件设备的解释语法树。它用来表示存储有关主板硬件和CPU架构信息的数据在内核中的传递格式,使内核可以更好地了解硬件并支持它们,而不必编写固定的代码。设备节点…...
附录2-tensorflow目标检测
源码来自作者Bubbliiiing,我对参考链接的代码略有修改,网盘地址 链接:百度网盘 请输入提取码 提取码:dvb1 目录 1 参考链接 2 环境 3 数据集准备 3.1 VOCdevkit/VOC2007 3.2 model_data/voc_classes.txt 3.3 voc_an…...
常见的EMC问题
电磁兼容设计的目的就在于满足产品功能要求、减少调试时间,使产品满足电磁兼容标准的要求,并且使产品不会对系统中的其它设备产生电磁干扰。 电磁兼容设计中常见的问题有哪些? 1、电磁兼容设计可以从电路设计(包括器件选择&…...
Redis内存存储效率问题
目录 内存碎片是如何形成的? 如何判断是否有内存碎片? 如何清理内存碎片? INFO命令 面向 Prometheus 的 Redis-exporter 监控 实习期间,了解到,企业级开发中多个项目使用Redis,运行Redis实例的有可能是…...
3.28 haas506 2.0开发教程-example-蓝牙多设备扫描(仅支持M320,HD1)
haas506 2.0开发教程-example-蓝牙多设备扫描案例说明蓝牙信息克隆1.手机蓝牙改名信息克隆代码测试案例说明 开发板扫描蓝牙设备,获取并打印蓝牙设备mac地址。mac地址每个设备不同,且不能更改。本案例仅适用于M320开发板和HD1-RTU。案例使用手机与iBeac…...
C语言经典编程题100例(41~60)
目录41、习题4-4 特殊a串数列求和42、习题4-6 水仙花数43、习题4-7 最大公约数和最小公倍数44、习题7-5 找鞍点45、练习5-1 求m到n之和46、练习5-2 找两个数中最大者47、练习5-3 数字金字塔48、习题5-1 符号函数49、习题5-2 使用函数求奇数和50、习题5-3 使用函数计算两点间的距…...
git日常使用命令
实习这段时间使用了很多git指令来提交代码,简单记录一下日常使用的指令: 提交代码通常顺序: 1.git status 查看本地修改项 2.git add . 提交全部文件 (这个 .是全部文件)到暂存区 3.git commit -m ‘本次提交的说明’…...
ES6对象展开运算符浅拷贝or深拷贝
ES6中提出的对象展开运算符“…”就是用来展开元素的。有了它就不用代码循环遍历了,偷懒专用。 1. 合并数组 展开原有数组中的所有元素,可以合并成一个新的数组。 var a[1,2,3]; var b[4,5,6]; var c[...a,...b]; console.log(c) // 输出:…...
leaflet 上传包含shp的zip文件,在map上解析显示图形(059)
第059个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传包含shp的zip文件,利用shapefile读取shp数据,并在地图上显示图形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果加载shapefile.js方式安装引用jszip(…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
