我第一次听说 Shapley 值是在学习模型可解释性的时候。我知道了 SHAP,它是一个框架,可以更好地理解为什么机器学习模型会那样运行。事实证明,Shapley 值已经存在了一段时间,它们最早起源于 1953 年的博弈论领域,目的是解决以下情况:

  • 一群拥有不同技能的参与者为了集体奖励而相互合作。那么,如何在小组中公平分配奖励?

当一个「旧」概念被应用到另一个领域,如机器学习,关于它是如何获得新的应用是非常有趣的。在机器学习中,参与者是你输入的特征,而集体支出是模型预测。在这种情况中,Shapley 值用于计算每个单独的特征对模型输出的贡献。

如何计算 Shapley 值?大多数时候,你倾向于在文献中看到这个等式:

让我们把它分解一下。在一个联盟游戏(前面描述的场景)中,我们有一组 N 个玩家。我们还有一个函数 v,它给出了这些参与者的任何子集的值,也就是说,S 是 N 的子集,然后 v(S)给出了该子集的值。因此,对于一个联合博弈(N,v),我们可以使用这个方程来计算玩家 i 的贡献,即 Shapley 值。

现在我不知道你会怎么想,但当我第一次遇到这个等式时,我的第一反应如下图:

我很难理解为什么它看起来是这样的。我花了一些时间研究之后,终于开始有了一些理解。所以,我们开始吧!

好吧,我们要做的第一件事是重写初始方程:

乍一看,这个公式似乎并没有变容易,但请不要着急。很快,我将分解方程的不同部分,以便理解它们,但我们也可以定义一个具体的场景,我们可以使用它来让所有部分都不那么抽象。

假设我们经营一家生产砖块的工厂。我们的一个生产团队由四个人组成:Amanda、Ben、Claire 和 Don(从现在起,我将以他们名字中的第一个字母来称呼他们)。每周他们一起设法生产出 X 块砖。由于我们工厂运转良好,我们有一笔奖金要发给队员们。但是,为了让我们以公平的方式做到这一点,我们需要弄清楚每个人对每周生产 X 数量的砖块贡献了多少。

最困难的是,我们有好几个因素都会影响团队可以生产的砖块数量。其中之一是团队规模,因为团队规模越大,生产的砖块就越多。另一个可能是团队成员之间的合作程度。问题是,我们无法以有意义的方式量化这些影响,但幸运的是,我们可以使用 Shapley 值来回避这个问题。

我们现在已经定义了我们的玩家(A、B、C 和 D)以及他们参与的游戏(生产砖块)。让我们从计算生产的 X 砖中有多少可以归于 Don 开始,即计算 D 的 Shapley 值。如果我们把它与 Shapley 值公式的参数联系起来,我们就得到:

所以 D 是我们的球员 i,整个 N 组由所有四个队员 A,B,C 和 D 组成,我们先看一下 Shapley 值公式的这一部分:

也就是说,我们需要把我们的团队成员排除在我们现在关注的人之外。然后,我们需要考虑所有可能形成的子集。所以如果我们从组中排除 D,我们就只剩下 {A,B,C}。从这个剩余的组中,我们可以形成以下子集:

我们总共可以构造出其余团队成员的 8 个不同子集。其中一个子集是空集,即它没有任何成员。现在让我们把注意力转移到这个部分:

这是我们 Shapley 值的一个基本概念的应用:在游戏中增加玩家 i 的边际价值。所以对于任何给定的子集,我们要比较它的值和当包括玩家 i 的时候它的值。通过这样做,我们得到了将玩家 i 添加到该子集的边际值。

我们把它和我们的例子联系起来,想看看如果我们把 D 加到 8 个子集中的每一个子集上,每周生产的砖块数量有什么不同。我们可以将这 8 个边缘值直观地表示为:

你可以将每种情况都视为我们需要观察的不同场景,以便公平地评估 D 对整个生产的贡献程度。这意味着,我们需要观察如果没有人工作(即空集合)会产生多少砖块,并将其与只有 D 工作时的情况进行比较。我们还需要观察 AB 产生的砖块数量,并将其与 AB 产生的砖块数量以及所有 8 个集合中 D 可以产生的砖块数量进行比较。

好吧,我们现在已经知道我们需要计算 8 个不同的边缘值。Shapley 值方程告诉我们,我们需要把它们加在一起。然而,在我们做这些之前,我们还需要调整每一个边际值,从等式的这一部分可以看出:

它计算出除玩家 i 以外的所有剩余团队成员的子集的排列可以有多少个。或者换句话说:如果你有| N |-1 个玩家,你能用它们组成多少个| S |大小的组?然后我们用这个数字除以玩家 i 对所有大小为| S |的群体的边际贡献。

在我们的场景中,| N |-1=3,也就是说,当我们计算 D 的 Shapley 值时,这些是剩下的团队成员数量。在我们的例子中,我们将使用等式的那一部分来计算我们可以形成多少个 0、1、2 和 3 大小的组,因为这些只是我们可以用剩下的成员构造的组大小。因此,例如,如果有| S |=2,那么我们可以构造 3 个不同的大小为 2 的组:AB、BC 和 CA。这意味着我们应该对 8 个边缘值中的每一个应用以下比例因子:

让我们思考一下为什么要这样做。我们想知道 D 对团队总产出的贡献有多大。为了做到这一点,我们计算了他对我们所能形成的团队中每个集合的贡献。通过添加这个比例因子,我们平均了其他团队成员对每个子集大小的影响。这意味着,当我们将 D 加入到一个 0,1,2 和 3 大小的团队中时,我们能够捕获这些团队的平均边际贡献。

好了,我们差不多结束了,我们只有 Shapley 值方程的最后一部分要分解,这一点也应该很容易理解。

我们需要应用到所有的边际值,然后才能求和。我们必须把它们和总队员数分开。

我们为什么要这么做?好吧,如果我们看看砖厂的例子,我们已经平均出了其他团队成员对每个子集大小的影响,这样我们就可以算出 D 对 0、1、2 和 3 大小的组的贡献。最后一块拼图是平均小组规模的影响,也就是说,D 贡献了多少与小组规模无关。

我们现在终于可以计算出 D 的 Shapley 值了,我们观察到他对团队中所有不同的子集的贡献是多少。我们还对团队成员组成和团队规模的影响进行了平均,这最终允许我们计算:

数学符号更多的是一个图形化的说明,而不是一个数学的说明(这是我在脑海中想象它的方式)

在这里,我们得到了 D 的 Shapley 值。在我们为团队的其他成员完成这项工作之后,我们将知道每个人对每周生产的 X 块砖的贡献,这样我们就可以在所有团队成员中公平地分配奖金。

在这一点上,我希望你对 Shapley 的价值观有了更好的理解。很酷的是,我们不需要知道任何关于值函数 v 内部工作原理,只需要观察它为不同子集提供的值,我们可以从参与游戏的玩家中得到这些值。

这才是 Shapley 值背后真正的力量和吸引力。然而,这是有代价的。对于一组参与游戏的 n 个玩家,你将需要分析 2^n 个子集才能计算 Shapley 值。

有一些方法可以使计算更加实际可行,在引言中我提到了 SHAP 框架,它的主要优点是,当将 Shapley 值应用于机器学习时,它能够更有效地计算 Shapley 值。

机器学习中的 Shapley 值怎么理解?相关推荐

  1. 原创 | 一文读懂机器学习中的shapley值方法

    作者:贾恩东本文约2000字,建议阅读9分钟本文为你介绍更公平分配利益权重的一种算法--Shapley值方法. 本篇文章是数据派一文读懂系列的新年第一篇原创,在这里祝贺大家新年学业有新成就,生活有新气 ...

  2. 机器学习中的方差和偏差理解

    一.Bias(偏差) & Variance(方差) 偏差:描述的是预测值(估计值)的期望与真实值之间的差距.偏差越大,越偏离真实数据,如下图第二行所示. 方差:描述的是预测值的变化范围,离散程 ...

  3. 一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉

    关于交叉熵在loss函数中使用的理解 交叉熵(cross entropy)是深度学习中常用的一个概念,一般用来求目标与预测值之间的差距.以前做一些分类问题的时候,没有过多的注意,直接调用现成的库,用起 ...

  4. 机器学习中的线性回归,你理解多少?

    作者丨algorithmia 编译 | 武明利,责编丨Carol 来源 | 大数据与人工智能(ID: ai-big-data) 机器学习中的线性回归是一种来源于经典统计学的有监督学习技术.然而,随着机 ...

  5. mysql null的作用_MySQL中对于NULL值的理解和使用教程

    NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串''的一样的东西.不是这样的!例如,下列语句是完全不同的: ?12mysql>INSERT INTO my ...

  6. 机器学习中参数模型和非参数模型理解

    写在前面 非参数模型(non-parametric model)和参数模型(parametric model)作为数理统计学中的概念,现在也常用于机器学习领域中. 在统计学中,参数模型通常假设总体服从 ...

  7. 数字信号处理实验三用fft对信号作频谱分析_机器学习中的音频特征:理解Mel频谱图...

    如果你像我一样,试着理解mel的光谱图并不是一件容易的事.你读了一篇文章,却被引出了另一篇,又一篇,又一篇,没完没了.我希望这篇简短的文章能澄清一些困惑,并从头解释mel的光谱图. 信号 信号是一定量 ...

  8. react中对于key值的理解

    1.key是用来帮助react识别哪些内容被更改.添加或者删除.key需要写在用数组渲染出来的元素内部,并且需要赋予其一个稳定的值.如果key值发生了变更,react则会触发UI的重渲染. 2.在相邻 ...

  9. BLAST中的E值的理解

    一般的,当我们使用BLAST(是一种用于在数据库当寻找任何蛋白质或者基因序列与你的目标序列一致的程序)时,我们会注意到这里有一个E值.那么这个Evalue是什么呢?怎么来理解这个值呢? 下面是一个平常 ...

  10. 机器学习中的Bias、Variance

    机器学习中的误差Error可以理解为偏差和方差的和. Error(误差) = Bias(偏差) + Variance(方差) Bias 偏差指的是样本输出与真实值之间的差距,即模型本身的拟合程度. 代 ...

最新文章

  1. 笔记-项目范围管理-复习要点
  2. LintCode 402: Continuous Subarray Sum
  3. ORACLE客户端jdbc连接测试,Oracle 客户端JDBC连接测试工具
  4. win2008 mysql_mysql5.7.17在win2008R2的64位系统安装与配置实例
  5. Kali环境下安装python3
  6. Spring多数据源解决方案
  7. ModelCoder状态机中的State逻辑
  8. 中国速度袋行业市场供需与战略研究报告
  9. 计算机专业英语词汇1695词(35天记忆)
  10. html css画圆形进度条,使用 css3 实现圆形进度条的方法
  11. SketchUp 更新插件,不用重启让更新生效
  12. 基于SSH开发报刊订阅管理系统的设计与实现
  13. 移动通信网络中的无线电通讯原理
  14. nyoj 海岛争霸(Floyd最短路径)
  15. cad怎么选择一个对象打散vba_CADVBA中的选择集过滤.doc
  16. 超给力,一款程序员必备的 996 代码工作量分析工具
  17. Python:后缀为whl的文件是什么?如何安装whl文件?
  18. Ant构建工具知识概括
  19. 运行php代码报错如下Uncaught Error: Call to undefined function curl_init()
  20. 2019最新Android常用开源库总结

热门文章

  1. linux文件管理ppt,Linux操作系统_文件管理2.ppt
  2. 2021年秋季Python程序设计相关课程教材推荐
  3. Linux 拷贝文件
  4. mysql双机热备份_MySQL双机热备份试验
  5. Python实现快速大文件比较代码解析
  6. class 文件比较
  7. 视频录制之音源设置方法:无法录制电脑声音(你听到的声音)
  8. gtp java 文件传输_GitHub - zhmgczh/GTPService: 围棋GTP协议应用实例(一个自动对弈程序,命令行交互或命令行与GUI对弈)...
  9. 广告投放管理平台 oython源码_【直播】全新腾讯广告投放管理平台如何帮助广告主乘风破浪?...
  10. js视频播放器/video详解