四个自定义 SHAP 图
超越 Python 包,创建 SHAP 值的定制可视化
SHAP 值是了解模型如何进行预测的绝佳工具。SHAP 包提供了许多可视化效果,使这个过程更加简单。话虽如此,我们不必完全依赖这个包。我们可以通过创建自己的 SHAP 图来进一步了解模型的工作原理。在本文中,我们将解释四个定制的 SHAP 图以及您可以从中学到什么。您可以在GitHub1上找到用于创建这些图的代码。
讨论的图表之一是图 1 中的瀑布图。这是一种可视化单个预测的 SHAP 值的好方法。模型做出的每个预测都会有自己的瀑布图。它可以用来准确解释每个特征对最终预测的贡献。例如,这只鲍鱼的壳重量使预测的环数减少了 1.82。
要创建此图,我们首先必须使用 SHAP 包计算 SHAP 值。然后我们将这些值传递到提供的瀑布图函数中。还有许多其他可用的图,但我们不一定非要使用它们。一旦我们有了 SHAP 值,我们就可以自由地创建自己的可视化效果。现在,让我们深入研究第一个。
图 1:SHAP 相关热图
正如我们在瀑布图中看到的,对于给定的预测,模型中的每个特征都会有一个 SHAP 值。我们能够计算这些 SHAP 值在所有预测中的相关性。对每个成对特征组合执行此操作,我们可以构建一个 SHAP 相关性热图,如图 2 所示。在这里我们可以看到,例如,鲍鱼壳直径(diameter
)和高度(height
)的 SHAP 值的相关性为 0.4。
我们可以将其与图 3 所示的标准相关性热图进行比较。这是使用特征值创建的,可以告诉我们特征是否相关。换句话说,它可以告诉我们两个特征是否倾向于朝相同方向或相反方向移动。另一方面,SHAP 值给出了特征对预测的贡献。因此,SHAP 相关性将告诉我们两个特征是否倾向于将预测移向同一方向。
我们已经看到一些差异。请注意,在图 3 中,整重和去壳重呈正相关 (1)。相比之下,这些特征的 SHAP 值呈负相关 (-0.5)。即使这些特征朝同一方向移动,它们的贡献也倾向于将预测朝相反的方向移动。直观地看,这可能看起来很奇怪。一个可能的原因是这两个特征之间存在相互作用。
另一个区别是 SHAP 相关性可以针对连续变量和分类变量进行计算。这是因为无论针对哪个特征计算 SHAP 值,它们始终都是连续的。这就是为什么三个二元变量(即 sex.I、sex.M 和 sex.F)包含在 SHAP 相关性热图中,而不是标准相关性热图中的原因。
图2:调整后的瀑布图
下一个图更像是对现有 SHAP 图的补充。在文章开头的图 1 中,我们查看了瀑布图。我们可以通过添加一些其他信息来了解有关预测的更多信息。查看图 4,我们添加了该鲍鱼的实际环数(即 y=7)。我们还为每个特征添加了分布图。红线表示该特征的平均值。虚线表示用于进行预测的实际特征值。
图 5 是可视化此信息的另一种方式。此处,特征被色块包围,其中颜色由特征的值决定。我们坚持 SHAP 包使用的惯例。如果特征的值相对于该特征的平均值较低,则该块将更蓝。如果特征值较高,则该块将为红色。在图 4 中,我们可以看到大多数特征值低于平均值(即红线左侧)。这对应于您在图 5 中看到的所有蓝色块。
通过在上图中包括实际环数 y,我们能够看到模型对这只鲍鱼的准确度。如果我们发现预测与实际值有很大差异,我们对 SHAP 值的解释可能会改变。在我们的例子中,预测值非常接近实际值。如果它们不同,我们可能会查看瀑布图以了解是否有任何特征导致了错误的预测。
通过添加分布图或色块,我们为特征值提供了背景信息。这使我们能够更全面地解释模型做出该预测的原因。之前我们可以看到哪个因素对预测贡献最大。现在,我们可以开始理解为什么该特征如此重要。为了更好地理解这一点,让我们使用银行业的一个示例。
假设我们建立一个用于接受/拒绝贷款申请的模型。月收入可能是一个重要因素。随着这一特征的下降,您更有可能拖欠贷款。假设该模型拒绝了一项申请。之前我们可以说,“我们拒绝了您的申请,您的月收入是这一决定的主要驱动因素”。现在,通过调整后的瀑布图之一,我们可以说,“我们拒绝了您的申请。这是因为您的月收入远低于我们的平均客户。”
图 3:交互热图
接下来我们将要看的两个图是 SHAP 交互值的可视化。如果您不熟悉这些,我建议您阅读一下分析与 SHAP 的相互作用这篇文章。我们将更深入地介绍如何解释这些值。总而言之,对于给定的预测,我们将有一个 SHAP 交互值矩阵。矩阵的对角线给出主效应,非对角线给出交互效应。每个预测都会有一个这样的矩阵。
为了创建第三个图,我们首先计算所有交互值矩阵中每个单元格的绝对平均值。交互效应减半,因此我们还将对角线外的数值乘以 2。然后我们可以将其显示为热图,如图 6 所示。热图将围绕对角线对称,因此我们仅显示下半部分。
该图与均值 SHAP 图类似,因为它可以突出显示重要特征。但现在,我们可以突出显示重要的主效应和交互效应。例如,我们可以看到经验、学位、绩效和销售额的平均主效应很大。这告诉我们,这些特征往往会对模型的预测产生重大影响。同样,我们可以看到经验.学位和绩效.销售额交互效应很显著。
图 4:交互瀑布图
我们的最后一张图是 SHAP 交互值的瀑布图。这可以以与普通瀑布图相同的方式进行解释。但现在我们无法看到主效应和交互效应如何对预测做出贡献。例如,经验主效应使预测奖金增加了 35.99 美元。同样,经验.程度交互效应使预测奖金增加了 13.76 美元。
如果您查看用于创建此图的代码,您会发现我们非常狡猾。问题是 SHAP 包没有提供可视化预测交互值的方法。经过一些工作,我们就可以使用为正常 SHAP 值创建瀑布图的函数。如图 8 所示,这涉及将二维矩阵中的交互值转换为一维数组。一旦我们有了这个数组,我们就可以将其传递给瀑布函数,SHAP 会将其视为一组正常的 SHAP 值。
参考
S. Lundberg, SHAP Python package (2021), https://github.com/slundberg/shap
S. Lundberg & S. Lee, A Unified Approach to Interpreting Model Predictions (2017), https://arxiv.org/pdf/1705.07874.pdf
「AI秘籍」系列课程:
- 人工智能应用数学基础
- 人工智能Python基础
- 人工智能基础核心知识
- 人工智能BI核心知识
- 人工智能CV核心知识
Github, https://github.com/hivandu/public_articles/blob/main/src/interpretable_ml/SHAP/shap_custom.ipynb ↩︎
相关文章:

四个自定义 SHAP 图
超越 Python 包,创建 SHAP 值的定制可视化 SHAP 值是了解模型如何进行预测的绝佳工具。SHAP 包提供了许多可视化效果,使这个过程更加简单。话虽如此,我们不必完全依赖这个包。我们可以通过创建自己的 SHAP 图来进一步了解模型的工作原理。在本…...

为什么使用HTTPS?
HTTPS现在是所有Web活动的首选协议,因为它是用户保护敏感信息的最安全方式。 HTTPS不仅对请求用户信息的网站至关重要。除了用户直接发送的信息外,攻击者还可以从不安全的连接中跟踪行为和身份数据。 HTTP为网站所有者带来的好处除了数据安全之外&…...
软件设计-系统架构师(五十五)
1在网络规划中,政府内外网之间应该部署网络安全防护设备。在下图部署的设备A是(),对设备A作用描述错误的是()。 问题1 A IDS B 防火墙 C 网闸 D UTM 问题2 A 双主机系统,即使外网被黑客攻击…...
三分钟学会线缆电流估算
今天带你用三分钟的时间,学会电源线承受电流估算,不浪费时间,直接开始吧。 工作温度30℃,长期连续90%负载下的载流量 1.5平方毫米――14A 2.5平方毫米――26A 4平方毫米――32A 6平方毫米――47A 16平方毫米――92A 25平方毫米――120A 3…...

Snipaste 的一款替代工具 PixPin,支持 gif 截图、长截图和 OCR 文字识别,功能不是一点点强!
Snipaste 的一款替代工具 PixPin,支持 gif 截图、长截图和 OCR 文字识别,功能不是一点点强! PixPin 的名字来源于“Pixel Pin”,简单来说是一个截图、贴图的工具,但是 PixPin 以截图和贴图两大功能为核心做了大量的优…...
Oracle基础教程
体系结构 数据库 一个操作系统仅有一个数据库 实例 拥有一系列后台进程和存储结构,一个数据库可拥有一个或多个实例,一般只有1个实例 数据文件(.dbf/.ora) 数据文件是数据库的物理存储单元,一个表空间由一个或多…...

电脑如何录屏?三款电脑录屏工具分享
电脑如何录屏?作为一个经常需要录制电脑屏幕大职场人,不是为了制作教程、记录会议,就是偶尔想自己做个游戏解说视频。市面上的录屏软件琳琅满目,经过一番尝试和比较,我选出了三款我个人认为表现不错的软件,…...

idea2024建立maven web项目servlet 6.0
(1) 下载好tomcat 10.1.28 打开tomcat.apache.org官网下载 (2)配置好maven (3)idea 2024打开,建立项目 选择maven java项目 (4)在项目src/main/下 建立webapp/WEB-INF目录,在…...

游戏开放式新手引导框架设计
强制性引导:只能点某个按钮 优:程序简单 缺: 玩家体验差 开放式引导:不强制点 优:玩家体验好 缺: 程序复杂 需求分析: 1.开放式引导,引导是到达某个条件后进行一系列行为(…...

【Hot100】LeetCode—189. 轮转数组
目录 1- 思路自定义 reverse 翻转函数 2- 实现⭐189. 轮转数组——题解思路 3- ACM 实现 原题链接:189. 轮转数组 1- 思路 自定义 reverse 翻转函数 2- 实现 ⭐189. 轮转数组——题解思路 class Solution {public void rotate(int[] nums, int k) {k % nums.lengt…...

javaweb学习之HTML(一)
推荐学习使用网站 w3school 在线教程 认识HTML HTML(HyperText Markup Language)是超文本标记语言,它是一个用于创建网页和网页应用程序的标准标记语言。HTML文档由一系列的元素(elements)组成,这些元素通…...

项目实战:Qt+Opencv相机标定工具v1.3.0(支持打开摄像头、视频文件和网络地址,支持标定过程查看、删除和动态评价误差率,支持追加标定等等)
若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141334834 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、Op…...

【数据结构】汇总八、排序算法
排序Sort 【注意】本章是 排序 的知识点汇总,全文1万多字,含有大量代码和图片,建议点赞收藏(doge.png)!! 【注意】在这一章,记录就是数据的意思。 排序可视化网站: D…...
Java-分割list并执行多线程任务的工具类
要创建一个用于分割列表并执行多线程任务的工具类,你可以使用 Java 的 ExecutorService 和 ThreadPoolExecutor 来实现。下面是一个详细的示例,展示了如何创建这样一个工具类。 步骤 1: 创建线程池 首先,创建一个线程池来执行任务。 步骤 2: 分割列表 接着,定义一个方…...
Springboot-从服务器获取一个输入流,转成视频文件存到oss
要在Spring Boot应用中从服务器获取一个输入流,然后将该流转换为视频文件并存储到阿里云 OSS中,你可以遵循以下步骤: 设置阿里云OSS客户端:首先,你需要配置阿里云OSS客户端,以便能够上传文件到OSS。 获取输入流:使用HTTP客户端(如RestTemplate或WebClient)从服务器…...

[Meachines] [Easy] Bastion SMB未授权访问+VHD虚拟硬盘挂载+注册表获取NTLM哈希+mRemoteNG远程管理工具权限提升
信息收集 IP AddressOpening Ports10.10.10.134TCP:22, 135, 139, 445, 5985, 47001, 49664, 49665, 49666, 49667, 49668, 49669, 49670 $ nmap -p- 10.10.10.134 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH fo…...

STM32标准库学习笔记-9.DMA 直接存储器存取
参考教程:【STM32入门教程-2023版 细致讲解 中文字幕】 DMA(Direct Memory Access) DMA(Direct Memory Access)直接存储器存取DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预…...
ubuntu VCS+verdi安装遇到的一些问题
主体流程:https://blog.51cto.com/u_15346322/4995147 我的是Ubuntu22.4 安装目录问题 执行 ./installer -gui 只能安装到home 或者 sudo ./setup.sh -install_as_root 能安装到/usr/ 目录 运行 vcs 出现 bin/sh: Illegal option -h sudo rm -f /bin/sh sudo…...

使用Poi-tl对word模板生成动态报告
一、pom依赖问题: <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.12.2</version> </dependency> 使用 poi-tl 的 1.12.2版本,如果使用了poi依赖&#x…...
day45-dynamic programming-part12-8.16
tasks for today: 1. 115.不同的子序列 2. 583.两个字符串选的删除操作 3. 72.编辑距离 4. 总结编辑两个序列关系的问题 ------------------------------------------------------------------- 1. 115.不同的子序列 In this practice, it is necessary to compare with t…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...