模型解释性:SHAP包的使用

news2024/9/20 14:57:15

  本篇博客介绍另一种事后可解释性方法:SHAP(SHapley Additive exPlanation)方法。

1. Shapley值理论

  Shapley值是博弈论中的一个概念,通过衡量联盟中各成员对联盟总目标的贡献程度,从而根据贡献程度来进行联盟成员的利益分配,避免了分配的平均主义。
  当Shapley理论用于解释机器学习模型的时候,将输入特征 x x x视为参与成员,模型输出的概率分布 f ( x ) f(x) f(x)视为联盟总目标,通过衡量各特征的贡献度来挖掘重要特征,从而提供可解释性判断依据。其数学模型如下: g ( Z ′ ) = φ 0 + ∑ j = 1 M φ j Z j ′ ≈ f ( x ) (1) g(Z^{'})=\varphi_{0}+\sum_{j=1}^{M}\varphi_{j}Z^{'}_{j}\approx f(x) \tag{1} g(Z)=φ0+j=1MφjZjf(x)(1)其中, g g g是解释模型, f ( x ) f(x) f(x)是原机器学习模型, Z j ′ = { 0 , 1 } M Z^{'}_{j}=\{0,1\}^{M} Zj={0,1}M表示相应特征是否被观察到, M M M是输入特征的数目, φ i \varphi_{i} φi是每个特征的归因值, φ 0 \varphi_{0} φ0是解释模型的常数。
  对于一个特定的输入数据 x 0 x_{0} x0,其Shapley值的计算公式如下: φ i ( f , x 0 ) = ∑ S ⊆ N S / { i } ∣ S ∣ ! ( M − ∣ S ∣ − 1 ) ! ∣ N S ∣ ! [ f ( S ∪ { i } ) − f ( S ) ] (2) \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)=SNS/{i}NS!S!(MS1)![f(S{i})f(S)](2)其中, φ i ( f ) \varphi_{i}(f) φi(f)代表函数 f f f中特征 i i i的贡献度, N S N_{S} NS是所有特征组成的集合, S S S代表特征子集, N S / { i } N_{S}/\{i\} NS/{i}代表在集合 N S N_{S} NS中去除特征 i i i S ∪ { i } S\cup \{i\} S{i}表示子集 S S S中增加特征 i i i ∣ S ∣ |S| S表示集合 S S S中元素的个数。
  为了方面公式(2)的计算,通常将公式(2)转化为如下公式计算: φ i ( f , x 0 ) = ∑ z ′ ∈ { 0 , 1 } M ∣ z ′ ∣ ! ( M − ∣ z ′ ∣ − 1 ) ! M ! [ f S ( z ′ ) − f S ( z ′ ∣ i ) ] (3) \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}MM!z!(Mz1)![fS(z)fS(zi)](3)其中, f S = E [ f ( x ) ∣ z S ′ ] = 1 N ∑ j = 1 N f ( x j ′ ) f_{S}=E[f(x)|z_{S}^{'}]=\frac{1}{N}\sum_{j=1}^{N}f(x_{j}^{'}) fS=E[f(x)zS]=N1j=1Nf(xj)其中, z S ′ z_{S}^{'} zS为集合 S S S中特征的取值所组成的集合, N N N为原函数 f f f训练数据的个数, x j ′ x_{j}^{'} xj的取值如下: x j ′ = { x 0 i , F i ∈ z S ′ x j i , F i ∉ z S ′ 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,FizSFi/zS其中, x 0 i x_{0i} x0i为待解释数据 x 0 x_{0} x0的第 i i i个特征值, x j i x_{ji} xji表示第 j j j个训练数据中第 i i i个特征的取值, F i F_{i} Fi表示第 i i i个特征值。
  SHAP值具备扎实的理论基础,但 φ i \varphi_{i} φi的计算复杂度和 E [ f ( x ) ∣ z S ′ ] 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

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

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

相关文章

机器学习-特征工程

特征工程是将原始数据转换为更好的代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性。特征抽取文本特征抽取,sklearn的API是sklearn.feature_extraction.text.CountVectorizer。(1).英文分词from sklearn.fe…

Smart Finance 热启动创世开启,参与质押瓜分SMART资产

在2023年开年以来,加密市场开始迎来复苏,以BTC、ETH等为代表的主流加密资产迎来普涨,虽然相较于2021年顶峰时期相比仍存在一定的差距,但市场的回暖正在带动加密行业在2023年的复苏。而随着DigiDaigaku登录美国体育盛会“超级碗”&…

手把手教你抢BingChatGPT免费体验名额!

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :ChatGPT-Bing 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永…

关于docker在CentOS6与CentOS7的安装教程

CentOS 6 安装docker步骤yum install -y epel-releaseyum install -y docker-io安装后的配置文件:/etc/sysconfig/docker启动Docker后台服务:service docker startdocker version验证CentOS 7 安装docker步骤感兴趣的可以看看docker安装文档https://docs…

企业如何解决内容审核的安全风险?

内容审核是什么?随着互联网的快速发展,与之而来的是信息爆炸式增长,而且这些互联网信息良莠不齐,其发布者也鱼龙混杂,常常混入很多不良或者违规违法信息,例如涉政、涉黄、暴恐、违禁、不良价值观、广告等。…

使用FirewallD构建动态防火墙(9)

预备知识 firewalld 是新一 Linux 代防火墙工具,它提供了支持网络 / 防火墙区域 (zone) 定义网络链接以及接口安全等级的动态防火墙管理工具。它也支持允许服务或者应用程序直接添加防火墙规则的接口。在 Linux 历史上已经使用过的防火墙工具包括:ipfwa…

redis命令大量超时 连接数突增

大家好,我是烤鸭: 今天分享一个线上线上redis命令大量超时,连接数突增的问题。由于不是我这边的业务,只能根据事后的一些客观数据进行分析。 配置: ​ redis 4.0 3主3从,总内存36G。 ​ 业务服务7台…

跨平台代码编写工具 Visual Studio Code

随着生产力的提高,生产工具也在不断的提高。 今天就介绍 目前最好用的工具 Visual Studio Code。 1. 入门 Visual Studio Code 是一款轻量级但功能强大的源代码编辑器,可在您的桌面上运行,适用于 Windows、macOS 和 Linux。它内置了对 Java…

蓝库云|制造业转型不可或缺的“PLM”的作用和真正价值

PLM是产品生命周期管理,是一种应用于在单一地点的企业内部、分散在多个地点的企业内部,以及在产品研发领域具有协作关系的企业之间的,支持产品全生命周期的信息的创建、管理、分发和应用的一系列应用解决方案,它能够集成与产品相关…

如何短期通过PMP考试?

PMP考试相比较其他考试,首先就是PMP是不卡通过率的,所以只要你做题的正确率上去了,那是有很大机会能通过考试的!想要短期通过PMP考试,就得每天安排具体的任务,规划好,按计划去做。抓紧时间&…

QFramework框架学习

主要学习内容TypeEventSystemActionKitTimer类1、TypeEventSystem-适用于一个条件触发,多个组件响应的情况例如:动物园系统中,点击肉食动物按钮,动物园中有肉食属性的动物都进行显示。步骤:1、动物自身脚本上进行判断是…

产品的可持续发展

如今,产品的可持续性对于取得商业成功至关重要。越来越多的政府提出了相关的合规性要求,普通消费者也在翘首期待符合可持续性发展理念的产品上市。然而,许多企业面临的首要问题是如何确定他们的产品是否满足可持续性发展的要求。 毕竟&#x…

后量子 KEM 方案:LAC

参考文献: Lyubashevsky V, Peikert C, Regev O. On ideal lattices and learning with errors over rings[J]. Journal of the ACM (JACM), 2013, 60(6): 1-35.Lu X, Liu Y, Zhang Z, et al. LAC: Practical ring-LWE based public-key encryption with byte-leve…

java -数据结构,List相关基础知识,ArrayList的基本使用,泛型的简单、包装类介绍

一、 预备知识-泛型(Generic) 1.1、泛型的引入 比如:我们实现一个简单的顺序表 class MyArrayList{public int[] elem;public int usedSize;public MyArrayList(){this.elem new int[10];}public void add(int key){this.elem[usedSize] key;usedSize;}public …

Ethercat系列(4)Twcat3激活配置过程的协议分析

广播设置ESC的4个端口环路设置从-》主广播读从站状态机实际状态主-》从从-》主广播清除接收错误计数器0x300且读应用层状态从-》主顺序读从站基本信息,链路层配置与状态从-》主广播读从站状态机状态主-》从从-》主顺序写ESC控制模式,广播读从站状态主-》…

一、图机器学习导论【CS224W】(Datawhale组队学习)

开源内容:https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页:https://web.stanford.edu/class/cs224w 文章目录前…

C++中的标准输入和输出

一、 C 输入输出的含义 在C语言中我们的输入和输出都是以printf和scanf进行操作的。他们都是函数。在C中的我们的输入输出都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。从操作系统(Linux)的角度看,每一个与主机相连的输…

RKE2部署高可用Rancher v2.7.1

先决条件 注意修改主机名,不要有冲突 第一个server节点安装 官方文档的描述感觉对于新手来说太不友好了,建议以下链接都看一下。Rancher新老文档都建议看一下,不然刚刚入门很蒙。 RKE2快速开始:https://docs.rke2.io/zh/install…

html+css综合练习一

文章目录一、小米注册页面1、要求2、案例图3、实现效果3.1、index.html3.2、style.css二、下午茶页面1、要求2、案例图3、index.html4、style.css三、法国巴黎页面1、要求2、案例图3、index.html4、style.css一、小米注册页面 1、要求 阅读下列说明、效果图,进行静…

由浅入深,聊聊OkHttp的那些事(很长,很细节)

引言 在 Android 开发的世界中,有一些组件,无论应用层技术再怎么迭代,作为基础支持,它们依然在那里。 比如当我们提到网络库时,总会下意识想到一个名字,即 OkHttp 。 尽管对于大多数开发者而言&#xff0…