SHAP值的主要思想来自合作博弈论(coalitional game theory)中的Shapley值。Shapley值由Shapley在1953年提出,用来对玩家贡献进行评估,从而分配收益的一种方法。在机器学习中,SHAP值被用来解释学习模型对某一输入状态的各特征值对预测输出的贡献(重要程度)。本文主要记录SHAP的计算步骤。

定义(联盟):假定状态空间为nnn维,标记为A={x1,x2,...,xn}A=\{x_1, x_2, ..., x_n\}A={x1​,x2​,...,xn​},我们此时要估计第iii个特征对预测输出的贡献,若有一集合SSS满足S⊂AS\subset AS⊂A且xi∉Sx_i\notin Sxi​∈/S,假定有一样本xk=[x1=a1,x2=a2,...,xn=an]\mathbf{x}_k=[x_1=a_1, x_2=a_2, ..., x_n=a_n]xk​=[x1​=a1​,x2​=a2​,...,xn​=an​],则称Sa={xj=aj,∀j∈S}S_a=\{x_j=a_j, \forall j\in S\}Sa​={xj​=aj​,∀j∈S}为特征xi=aix_i=a_ixi​=ai​的一个联盟。

举例:假定有一样本xk=[x1=a1,x2=a2,...,xn=an]\mathbf{x}_k=[x_1=a_1, x_2=a_2, ..., x_n=a_n]xk​=[x1​=a1​,x2​=a2​,...,xn​=an​],我们要评估x2x_2x2​的SHAP值,当S={x1,x3}S=\{x_1, x_3\}S={x1​,x3​}时有联盟Sa={x1=a1,x3=a3}S_a=\{x_1=a_1, x_3=a_3\}Sa​={x1​=a1​,x3​=a3​}。

定义(在联盟SaS_aSa​下,xi=ax_i=axi​=a的贡献):假定SaS_aSa​为xix_ixi​的一个联盟,则在该联盟下,xi=aix_i=a_ixi​=ai​的贡献定义如下:

Exj∼Xj,∀j≠i且xj∉S(f^(Sa∪{xi=ai}∪{xj}))−Exj∼Xj,∀xj∉S(f^(Sa∪{xj}))(1)E_{x_j \sim X_j, \forall j\neq i 且 x_j\notin S}(\hat{f}(S_a\cup \{x_i=a_i\} \cup \{x_j\}))-E_{x_j \sim X_j , \forall x_j \notin S} (\hat{f}(S_a\cup \{x_j\}))\tag{1}Exj​∼Xj​,∀j=i且xj​∈/S​(f^​(Sa​∪{xi​=ai​}∪{xj​}))−Exj​∼Xj​,∀xj​∈/S​(f^​(Sa​∪{xj​}))(1)
其中,XjX_jXj​为生成特征xjx_jxj​的分布函数。

式(1)可以简写成val(Sa∪{xi})−val(Sa)val(S_a\cup\{x_i\})-val(S_a)val(Sa​∪{xi​})−val(Sa​),valx(Sb)val_x(S_b)valx​(Sb​)是子集SbS_bSb​的预测值在未包含SbS_bSb​中的特征上的期望。

定义(SHAP值):SHAP值是特征xix_ixi​所有可能联盟下的贡献的加权和,形式如下:

ϕi(val)=∑S∪A且xi∉S∣S∣!(n−∣S∣−1)!n!(val(Sa∪{xi}−val(Sa))(2)\phi_i(val)=\sum_{S\cup A 且 x_i\notin S}\frac{|S|!(n-|S|-1)!}{n!}(val(S_a\cup\{x_i\}-val(S_a))\tag{2}ϕi​(val)=S∪A且xi​∈/S∑​n!∣S∣!(n−∣S∣−1)!​(val(Sa​∪{xi​}−val(Sa​))(2)

举例:假定有数据集D={(x1,y1),(x2,y2),...,(xm,ym)}D=\{(\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), ..., (\mathbf{x}_m, y_m)\}D={(x1​,y1​),(x2​,y2​),...,(xm​,ym​)},mmm为数据个数。假定该数据状态有4维,标记为{x1,x2,x3,x4}\{x_1, x_2, x_3, x_4\}{x1​,x2​,x3​,x4​}。经过该数据集,我们训练得到一模型f^\hat{f}f^​,我们现在想查看某一样本xi={x1=3,x2=5,x3=9,x4=1}\mathbf{x}_i=\{x_1=3, x_2=5, x_3=9, x_4=1\}xi​={x1​=3,x2​=5,x3​=9,x4​=1}中第2个特征对预测结果f^(xi)\hat{f}(\mathbf{x}_i)f^​(xi​)的贡献。

  • step 1:确定x2=5x_2=5x2​=5所有可能的联盟总共有8个,如下所示
    S1=∅S_1=\emptysetS1​=∅
    S2={x1=3}S_2=\{x_1=3\}S2​={x1​=3}
    S3={x3=9}S_3=\{x_3=9\}S3​={x3​=9}
    S4={x4=1}S_4=\{x_4=1\}S4​={x4​=1}
    S5={x1=3,x3=9}S_5=\{x_1=3, x_3=9\}S5​={x1​=3,x3​=9}
    S6={x1=3,x4=1}S_6=\{x_1=3, x_4=1\}S6​={x1​=3,x4​=1}
    S7={x3=9,x4=1}S_7=\{x_3=9, x_4=1\}S7​={x3​=9,x4​=1}
    S8={x1=3,x3=9,x4=1}S_8=\{x_1=3, x_3=9, x_4=1\}S8​={x1​=3,x3​=9,x4​=1}

  • step 2:对于所有的联盟利用式(1)计算其对预测结果的贡献,以S2={x1=3}S_2=\{x_1=3\}S2​={x1​=3}为例
    从数据集DDD中随机采样KKK次,获得了KKK个数据样本,对于每个样本xa=[x1=a1,x2=a2,x3=a3,x4=a4]\mathbf{x}_a=[x_1=a_1, x_2=a_2, x_3=a_3, x_4=a_4]xa​=[x1​=a1​,x2​=a2​,x3​=a3​,x4​=a4​]做如下操作:
    a) 保持联盟中的特征x1x_1x1​,要求贡献的特征x2x_2x2​与xa\mathbf{x}_axa​中的对应特征的值相等,计算f^(x1=3,x2=5,x3=a3,x4=a4)\hat{f}(x_1=3, x_2=5, x_3=a_3, x_4=a_4)f^​(x1​=3,x2​=5,x3​=a3​,x4​=a4​);
    b)仅保持联盟中的特征x1x_1x1​,其它与xa\mathbf{x}_axa​中的对应特征的值相等,计算f^(x1=3,x2=a2,x3=a3,x4=a4)\hat{f}(x_1=3, x_2=a_2, x_3=a_3, x_4=a_4)f^​(x1​=3,x2​=a2​,x3​=a3​,x4​=a4​);
    c)计算vk=f^(x1=3,x2=5,x3=a3,x4=a4)−f^(x1=3,x2=a2,x3=a3,x4=a4)v_k=\hat{f}(x_1=3, x_2=5, x_3=a_3, x_4=a_4)-\hat{f}(x_1=3, x_2=a_2, x_3=a_3, x_4=a_4)vk​=f^​(x1​=3,x2​=5,x3​=a3​,x4​=a4​)−f^​(x1​=3,x2​=a2​,x3​=a3​,x4​=a4​)
    计算完得到KKK个vk,k=1,2,...,Kv_k, k=1, 2, ...,Kvk​,k=1,2,...,K,取平均v(S)=1K∑k=1Kvkv(S) =\frac{1}{K} \sum_{k=1}^{K}v_kv(S)=K1​∑k=1K​vk​近似式(1)。

  • step 3:根据∣S∣!(n−∣S∣−1)!n!\frac{|S|!(n-|S|-1)!}{n!}n!∣S∣!(n−∣S∣−1)!​计算各联盟的权值如下
    S1:14S_1:\frac{1}{4}S1​:41​
    S2:112S_2:\frac{1}{12}S2​:121​
    S3:112S_3:\frac{1}{12}S3​:121​
    S4:112S_4:\frac{1}{12}S4​:121​
    S5:112S_5:\frac{1}{12}S5​:121​
    S6:112S_6:\frac{1}{12}S6​:121​
    S7:112S_7:\frac{1}{12}S7​:121​
    S8:14S_8:\frac{1}{4}S8​:41​

  • step 4:对计算得到的v(Si),i=1,2,....,8v(S_i), i=1,2,....,8v(Si​),i=1,2,....,8按以上权值进行加权求和得到x2=5x_2=5x2​=5对于f^(xi\hat{f}(\mathbf{x}_if^​(xi​的预测结果的SHAP值。
    ϕ2(val)=14v(S1)+112v(S2)+112v(S3)+112v(S4)+112v(S5)+112v(S6)+112v(S7)+14v(S8)\phi_2(val)=\frac{1}{4}v(S_1)+\frac{1}{12}v(S_2)+\frac{1}{12}v(S_3)+\frac{1}{12}v(S_4)+\frac{1}{12}v(S_5)+\frac{1}{12}v(S_6)+\frac{1}{12}v(S_7)+\frac{1}{4}v(S_8)ϕ2​(val)=41​v(S1​)+121​v(S2​)+121​v(S3​)+121​v(S4​)+121​v(S5​)+121​v(S6​)+121​v(S7​)+41​v(S8​)。


END

[轻笔记] SHAP值的计算步骤相关推荐

  1. 机器学习模型可解释性进行到底 —— SHAP值理论(一)

    最近在系统性的学习AUTOML一些细节,本篇单纯从实现与解读的角度入手, 因为最近SHAP版本与之前的调用方式有蛮多差异,就从新版本出发,进行解读. 不会过多解读SHAP值理论部分,相关理论可参考: ...

  2. ML之shap:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用RF随机森林+计算SHAP值单样本力图/依赖关系贡献图可视化实现可解释性之攻略

    ML之shap:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用RF随机森林+计算SHAP值单样本力图/依赖关系贡献图可视化实现可解释性之详细 ...

  3. 因果推断杂记——因果推断与线性回归、SHAP值理论的关系(十九)

    文章目录 1 因果推断与线性回归的关系 1.1 DML的启发 1.2 特殊的离散回归 = 因果? 2 因果推断中的ITE 与SHAP值理论的思考 2.1 一些奇思妙想 2.2 因果推断 -> s ...

  4. 熵值法计算权重有异常值_指标权重确定方法 1-熵值法

    在信息论中,熵是对不确定性或随机性的一种度量,不确定性越大,熵值就越大,不确定性越小,熵值就越小.不确定性越大,表明随机性越大,数据越离散,则包含的信息就越大,在确定权重的时候往往就越小. 熵值法确定 ...

  5. 手把手教你用熵值法计算权重

    由于对数据要求少,且容易计算,熵值法一直是备受欢迎的权重计算方法. 今天的文章,将带大家一起梳理熵值法计算权重的步骤以及如何应用到综合评价研究中. 一.研究背景 研究案例是利用熵值法来对各企业的财务状 ...

  6. 特征重要性与shap值

    在模型的训练过程中,往往会需求更加优异的模型性能指标如准确率.召回等,但在实际生产中,随着模型上线使用产生衰减,又需要快速定位问题进行修复,因此了解模型如何运作.哪些特征起到了关键作用有着重要意义.同 ...

  7. python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例

    python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...

  8. 18、CSS基础——属性值的计算过程

    属性值的计算过程 1. 页面渲染 浏览器的页面渲染方式: 一个元素一个元素依次渲染,顺序按照页面的树形目录结构进行 即页面按照这种树形目录结构自根发散对元素依次进行渲染,元素一定是上一个渲染完后才渲染 ...

  9. 标准化互信息NMI计算步骤及其Python实现

    Excellence is a continuous process and not an accident. 卓越是一个持续的过程而不是一个偶然事件. 原文地址:https://dreamhomes ...

  10. excel熵值法计算权重_指标权重确定方法 1-熵值法

    在信息论中,熵是对不确定性或随机性的一种度量,不确定性越大,熵值就越大,不确定性越小,熵值就越小.不确定性越大,表明随机性越大,数据越离散,则包含的信息就越大,在确定权重的时候往往就越小. 熵值法确定 ...

最新文章

  1. sqlserver 把两个sql查询语句查询出来的两张表合并成一张表
  2. java yii_构建 Java 应用程序
  3. python123文件和数据格式化测试7_二级Python----文件和数据格式化(DAY 7)
  4. 酷安应用市场php源码,酷安应用市场 v11.0.3-999 去广告极限精简版
  5. nacos怎么修改服务分组_Nacos(六):多环境下如何“管理”及“隔离”配置和服务...
  6. LeetCode 459. Repeated Substring Pattern
  7. php%3cimg src,XSS小游戏
  8. 问题 F: 编写函数:一维数组的逆序 (Append Code)
  9. vsftpd虚拟用户与匿名用户配合使用
  10. 关于ArcGIS的文件格式
  11. python设计程序界面_python图形界面(GUI)设计
  12. 把MSGF变成SPLF 把SPLF变成MEMBER(源文件)-转载
  13. 数据库(mysql)查询语句练习(中级)
  14. 学嵌入式需要报培训班吗?
  15. pythonhistogram教程_Plot Histogram in Python
  16. 利用云服务器发布项目
  17. 微信内分享链接防红防封技术系统的实现方案
  18. 将直播链接放入微信公众号
  19. 数据库指向默认模式(Schema)
  20. vscode运行php报错php not found

热门文章

  1. MySQL慢查询,一口从天而降的锅!
  2. 贪吃蛇html网页小游戏,JavaScript贪吃蛇,网页在线版贪食蛇游戏
  3. DLT - Diagnostic Log and Trace简介
  4. verilog驱动1602液晶屏
  5. 投稿流程以及审稿状态
  6. 解决stm32下载错误 “Could not stop Cortex-M device.Please check the JTAG cable.“
  7. 华为/华三交换机配置NTP时钟同步
  8. Excel删除重复项,不保留重复项数据
  9. 所谓的flash、ddr、ufs
  10. html黑科技导入res,css黑科技