• 登录
Skip to content

一起大数据-技术文章心得

一起大数据网由数据爱好者发起并维护,专注数据分析、挖掘、大数据相关领域的技术分享、交流。不定期组织爱好者聚会,期待通过跨行业的交流和碰撞,更好的推进各领域数据的价值落地。

Menu
  • 首页
  • 大数据案例
  • 数据&电子书
  • 视频
    • Excel视频
    • VBA视频
    • Mysql视频
    • 统计学视频
    • SPSS视频
    • R视频
    • SAS视频
    • Python视频
    • 数据挖掘视频
    • 龙星计划-数据挖掘
    • 大数据视频
    • Machine Learning with Python
  • 理论
    • 统计学
    • 数据分析
    • 机器学习
    • 大数据
  • 软件
    • Excel
    • Modeler
    • Python
    • R
    • SAS
    • SPSS
    • SQL
    • PostgreSQL
    • KNIME
  • 技术教程
    • SQL教程
    • SPSS简明教程
    • SAS教程
    • The Little SAS Book
    • SAS EG教程
    • R语言教程
    • Python3教程
    • IT 技术速查手册
    • Data Mining With Python and R
    • SAS Enterprise Miner
  • 问答社区
  • 我要提问
Menu
机器学习中的 Shapley 值怎么理解?

机器学习中的 Shapley 值怎么理解?

Posted on 2023年4月27日

我第一次听说 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 值。

via:

雷锋网雷锋网雷锋网

from https://zhuanlan.zhihu.com/p/91834300

恭喜你,又看完一篇文章,扫码领个红包吧!图片

发表评论 取消回复

要发表评论,您必须先登录。

推荐访问

欢迎加入我们的付费交流社群,增长见识,互帮互助! 自2023-05-01起正式运营。
图片

数据分析交流:数据分析交流
Excel学习: Excel学习交流
Python交流:一起学习Python(数据分
SQL交流:一起学习SQL(数据分析
微博:一起大数据

最新提问

  • 统计方面的3个Python包
  • 更新R及Rstudio
  • TFP CausalImpact:一个Python包,用于估计设计干预对时间序列的因果效应
  • 根据公式的结构,写出计算的表达式,并结算结果
  • excel中提取超级链接公式中的链接地址
  • 用python解析公式并进行可视化
  • Python设置镜像源默认为清华的方法
  • VAR、VMA、VARMA 和 ARIMA
  • Python 的表达式解析库来解析公式
  • PandasAI:一个Python库,将生成式AI能力集成到Pandas中,允许进行高级数据分析任务,例如数据合成和增强

文章标签

AMOS CBC Excel GBDT KNN Modeler Mysql pandas PostgreSQL python python数据可视化 R SAS sklearn SPSS SQL SVM Tableau TensorFlow VBA 主成分分析 关联规则 决策树 协同过滤 可视化 因子分析 大数据 大数据分析 推荐系统 数据分析 数据可视化 数据挖掘 数据透视表 文本挖掘 时间序列 机器学习 深度学习 神经网络 结构方程 统计学 联合分析 聚类 聚类分析 逻辑回归 随机森林
©2023 一起大数据-技术文章心得 | Design: Newspaperly WordPress Theme