KernelSHAP vs TreeSHAP

news2024/11/19 5:37:35

Kernel SHAPTree SHAP都用于近似Shapley值。Tree SHAP要快得多。缺点是它只能用于基于树的算法,如随机森林和xgboost。另一方面,Kernel SHAP是模型不可知的(model agnostic),这意味着它可以与任何机器学习算法一起使用。我们将比较这两种近似方法。

接下来介绍实验,将展示Tree SHAP实际上有多快。此外,还将探讨树算法的参数如何影响时间复杂度。这些包括树的数量深度特征的数量。在使用Tree SHAP进行数据探索时,这些知识非常方便。最后,我们将讨论特性依赖等其他考虑因素如何影响方法。

Time per observation(每次观测时间)

对于第一个实验,我们想看看这些方法计算SHAP值需要多少时间。我们不会讨论用于获得结果的代码,但您可以在GitHub上找到它。总之,我们从模拟回归数据开始。它有10000个样本,10个特征和1个连续目标变量。使用这些数据,我们训练一个随机森林。具体来说,该模型有100棵树,最大深度为4。

现在可以使用这个模型来计算 SHAP 值。同时使用 KernelSHAP 和 TreeSHAP 方法,对于每种方法计算 10、100、1000、2000、5000 和 10000 个 SHAP 值。记录每个值计算所花费的时间,并且我重复此过程 3 次,然后将平均值作为最终时间。

可以在图 1 中看到结果。TreeSHAP 明显更快。对于 10,000 个 SHAP 值,该方法耗时 1.44 秒。相比之下,KernelSHAP 耗时 13 分 40.56 秒。这是 570 倍的时间。当然这些计算的速度将取决于设备,但差异不会太大。

上面的 TreeSHAP 线看起来很平。这是因为 KernelSHAP的值太大了。在下图 2 中,我们单独绘制 TreeSHAP 。可以看到它也随着观察次数的增加而线性增加。这告诉我们每个 SHAP 值都需要相似的时间来计算。我们将在下一节探讨原因。
在这里插入图片描述

时间复杂度

两种方法的时间复杂度如下。这也是树算法中计算特征的SHAP值时的复杂度。T 是个体树的数量。L 是每棵树中的最大叶子数。D 是每棵树的最大深度。M 是每棵树中的最大特征数。对于这些方法,这些参数将以不同的方式影响逼近时间。
在这里插入图片描述
TreeSHAP 的复杂性只受深度 (D) 的影响。而KernelSHAP 受特征数量 (M) 的影响。不同之处在于 KernelSHAP 复杂度是指数 w.r.t M 而 TreeSHAP 是二次 w.r.t D。因为树深度(D=4)比特征(M = 10)小的多,所以KernelSHAP 会慢很多。

这是每个 SHAP 值的时间复杂度,一般情况下每个值都需要相似的时间来计算,所以我们看到时间和观察次数之间存在线性关系。现在将探讨时间与其他参数 T、L、D 和 M 之间的关系。然后将讨论结果对模型验证和数据探索的意义。

树的数量(T)

对于这两种方法,复杂度都是树的数量(T)的线性w.r.t.。为了验证这个参数会以类似的方式影响逼近时间。我们通过增加树的数量来训练不同的模型,使用每个模型计算100个SHAP值。

可以在图3中看到结果。对于这两种方法,时间随树的数量线性增加。这就是我们在查看时间复杂度时所期望的结果。这告诉我们,通过限制树的数量,我们可以减少计算SHAP值的时间。
在这里插入图片描述

特征数量(M)

只有KernelSHAP受到特征数量(M)的影响,这次我们在不同数量的特征上训练模型。而其他参数(T、L、D)保持不变。在下图4中,可以看到随着m的增加,KernelSHAP的时间呈指数增长。相比之下,TreeSHAP的时间受影响较小。
在这里插入图片描述
TreeSHAP的时间在逐渐增加(虽然不明显),因为我们看到复杂度与m无关。这是计算单个特征的SHAP值时的复杂度。随着M的增加,我们需要为每次观测计算更多的SHAP值,所以这部分增加应该是合理的。

树的深度(D)

最后,我们改变树的深度。我们将森林中每棵树的深度都设置成最大深度。在下图5中,可以看到当我们增加深度时使用TreeSHAP的时间大大增加了。在某些情况下,TreeSHAP的计算成本甚至比KernelSHAP高。因为TreeSHAP复杂度是D的函数时,这点也是毫无疑问的。
在这里插入图片描述
为什么KernelSHAP时间也会增加?这是因为特征(M)和叶(L)的数量是根据树的深度而变化的。随着深度的增加,会有更多的分裂,所以我们会有更多的叶子。更多的分叉也意味着树可以使用更多的特征。可以在下图6中看到这一点。在这里,我们计算了森林中所有树木的特征和叶子的平均数量。

模型验证和数据探索的建议

通过改变深度,我们看到在某些情况下 TreeSHAP 的计算成本更高。但是这些情况不太可能发生。只有当我们的树深度为 20 时才会发生这种情况。使用这么深的树并不常见,因为我们通常会拥有比树深度 (D) 更多的特征 (M)。

在使用 SHAP 验证树模型时,TreeSHAP 通常是更好的选择。我们能够更快地计算 SHAP 值。尤其是当您需要比较多个模型时。对于模型验证,我们对参数 T、L、D 和 M 没有太多选择。这是因为我们只想验证性能最好的模型。

对于数据探索,树算法可用于发现重要的非线性关系和交互。我们的模型只需要足够好就可以捕捉数据中的潜在趋势。所以通过减少树的数量 (T) 和深度 (D) 来使用 TreeSHAP 加快这个过程。并且可以在不大幅提高执行时间的情况下探索许多模型特征(M)。

一些注意事项

在选择方法时,时间复杂度是一个重要因素。在做出选择之前,可能需要考虑其他一些差异。其中包括 KernelSHAP 与模型无关,这些方法受特征依赖的影响,并且只有 TreeSHAP 可用于计算交互效果。

模型不可知

一开始我们就提到了 TreeSHAP 的最大限制是它不是模型无关的。如果使用的是非基于树的算法,将无法使用它。例如神经网络也有自己的逼近方法。这是就需要用到 DeepSHAP。但是KernelSHAP 是唯一可以与所有算法一起使用的方法。

特征依赖

特征依赖可能会扭曲 KernelSHAP 所做的近似。该算法通过随机采样特征值来估计SHAP值。如果当特征相关时,在使用 SHAP 值时,可能会过分重视不太可能的观察结果。

而TreeSHAP 没有问题。但是由于特征依赖性,该算法存在另外问题。即对预测没有影响的特征可以获得非零的 SHAP 值。当该特征与另一个影响预测的特征相关时,就会发生这种情况。在这种情况下会得出错误的结论:即某个特征对预测有贡献。

分析交互

SHAP交互值是SHAP值的扩展。它们通过将特征的贡献分解为其主要和交互影响。对于给定的特征,交互效应是它与其他特征的所有联合贡献。在突出显示和可视化数据中的交互时,这些可能很有用。如果有需要这方面的内容,我们可以单独文章介绍。

如果要使用 SHAP 交互值,则必须使用 TreeSHAP。这是因为它是唯一实现交互值的近似方法。这与 SHAP 交互值的复杂性有关。估计这些 KernelSHAP需要 更长的时间。

总结

应该尽可能使用 TreeSHAP。它速度更快,并且能够分析交互。对于数据探索。如果正在使用其他类型的模型算法,那么将不得不坚持使用 KernelSHAP。,因为它仍然是比蒙特卡罗采样等其他方法更快的近似方法。
————————————————
本文完整代码:https://github.com/conorosully/medium-articles/blob/master/src/interpretable%20ml/SHAP/kernelSHAP_vs_treeSHAP.ipynb
原文连接:https://towardsdatascience.com/kernelshap-vs-treeshap-e00f3b3a27db
作者:Conor O’Sullivan
搬运链接:https://avoid.overfit.cn/post/74f491a38a874b5e8dd9d17d9da4bfbb

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

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

相关文章

SEAM-STRESS

模型 PCM means ‘Pixel Correlation Module’ 辅助信息 作者未提供代码

Python二叉树用法介绍

更多资料获取 📚 个人网站:ipengtao.com 二叉树是一种常见的数据结构,具有树形结构,每个节点最多有两个子节点。Python中有多种方式来表示和操作二叉树,本文将介绍二叉树的基本概念、构建、遍历和一些常见操作&#x…

[UGUI]Unity背包系统制作详细步骤

二、背包制作 1.创建空物体,然后创建UI-Image 制作背包整个背包所在的父UI的背景图 选中BG,找到他的锚点设置,按住Alt键,点击右下角的适配,让锚点和内容都匹配画布 PS:不按Alt键是设置一个元素的锚点位…

某医院小程序存在支付漏洞和越权

某医院小程序存在支付漏洞和越权查看他人身份证,手机号,住址等信息 一个医院线上的小程序 登陆后点击个人信息,抓包,放到repeter模块, 修改strUserID参数可以越权查看别人信息 放intruder模块可以跑数据,这…

神器!使用 patchworklib 库进行多图排版真棒啊

如果想把多个图合并放在一个图里,如图,该如何实现 好在R语言 和 Python 都有对应的解决方案, 分别是patchwork包和patchworklib库。 推介1 我们打造了《100个超强算法模型》,特点:从0到1轻松学习,原理、…

互联网程序设计HTML+CSS+JS

一、HTML基础 HTML超文本标记语言。 超文本&#xff1a;链接&#xff1b; 标记&#xff1a;标签&#xff0c;带尖括号的文本。 1、标签结构 标签要成对出现&#xff0c;中间包裹内容&#xff1b; <>里面放英文字母&#xff08;标签名&#xff09;&#xff1b; 结束…

013 C++ set与map的用法

前言 本文将会向你介绍set与map的主要用法 set详解 int main() {set<string> s;vector<string> v { "Fan1","Fan2", "Fan3", "Fan4" };for (auto e : v){s.insert(e);}string input;while (cin >> input){if (s.…

java+python农村集体产权管理系统php+vue

注册、登陆该系统根据操作权限的不同分为管理员和用户两种&#xff0c;新用户在登陆前要进行用户注册&#xff0c;注册完成后方可进行登陆。 本次设计的关键问题处理&#xff0c;主要有如下几点&#xff1a; (1&#xff09;本次开发&#xff0c;采用主流Thinkphp框架进行开发&a…

LRU 是什么?

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

java中IO知识点概念

这里写自定义目录标题 内存中的数据以电子信号的形式表示&#xff0c;而磁盘中的数据是以磁场的方向表示。1.流的分类2.File类3.流的API 关键4.理解缓冲的作用-一次性多拿些读写文件的时候为什么要有缓冲流 -意义是什么缓冲流的使用 5.路径问题6.文件的创建7.内存和磁盘存储本质…

Python---lambda表达式

普通函数与匿名函数 在Python中&#xff0c;函数是一个被命名的、独立的完成特定功能的一段代码&#xff0c;并可能给调用它的程序一个返回值。 所以在Python中&#xff0c;函数大多数是有名函数 > 普通函数。但是有些情况下&#xff0c;我们为了简化程序代码&#xff0c;…

SpringSecurity+JWT实现权限控制以及安全认证

一.简介 Spring Security 是 Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 认证&#xff1a;验证当前访问系统的是不是本系统的用户&#xff0c;并且要确认具体是哪个用户​ 授权&…

Numpy进阶

NumPy进阶80题完整版

DDD落地:有赞的生产项目,DDD如何落地?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如有赞、阿里、滴滴、极兔、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 谈谈你的DDD落地经验&#xff1f; 谈谈你对DDD的理解&#x…

Python基础语法之学习运算符

Python基础语法之学习运算符 一、代码二、效果 一、代码 print("1 1 ", 1 1) print("1 - 1 ", 1 - 1) print("1 * 1 ", 1 * 1) print("11 / 5 ", 11 / 5) print("11 // 5 ", 11 // 5) print("9 % 5 ", 9…

go标准库

golang标准库io包 input output io操作是一个很庞大的工程&#xff0c;被封装到了许多包中以供使用 先来讲最基本的io接口 Go语言中最基本的I/O接口是io.Reader和io.Writer。这些接口定义了读取和写入数据的通用方法&#xff0c;为不同类型的数据源和数据目标提供了统一的接…

工业产品3d交互展示数字云展厅更绿色环保

随着数字技术的飞速发展&#xff0c;3D全景汽车云展厅平台应运而生&#xff0c;为现代展览带来了前所未有的创新与变革。该平台以其独特的优点&#xff0c;为观众、艺术家和展商带来了全新的展览体验&#xff0c;开启了未来展览的新篇章。 首先&#xff0c;3D全景汽车云展厅平台…

gradle构建项目速度优化及排查方式

文章目录 一、前言二、Android项目优化1、相关配置2、构建速度分析 三、Gradle项目通用优化1、分析构建耗时2、使用配置进行优化3、优化依赖解析a. 避免不必要和未使用的依赖项b. 优化存储库顺序 c. 最小化动态和快照版本d. 通过构建扫描查找动态和变化的版本e. 通过构建扫描可…

Vue2问题:如何全局使用less和sass变量?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约2400字&#xff0c;整篇阅读大约需要4分钟。 本文主要内容分三部分&#xff0c;如果您只需要解决问题&#xff0c;请阅读第一、二部分即可。如果您有更多时间&#xff…

【数据库】基于排序算法的去重,集合与包的并,差,交,连接操作实现原理,执行代价以及优化

基于两趟排序的其它操作 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏…