主要内容

机器学习模型的Shapley值

本主题定义了Shapley值,描述了统计和机器学习工具箱™中计算Shapley值的两种可用算法,提供了每种算法的示例,并展示了如何降低计算成本。

沙普利值是什么?

在博弈论中,参与者的沙普利值是合作博弈中参与者的平均边际贡献。也就是说,沙普利值是一个合作游戏中产生的全部收益对个体玩家的公平分配。在机器学习预测的上下文中,查询点的特征的Shapley值解释了该特征在指定查询点对预测的贡献(回归响应或分类每个类的得分)。Shapley值对应于查询点的预测与平均预测之间的偏差,这是由于特征造成的。对于每个查询点,所有特征的Shapley值之和对应于预测与平均值的总偏差。

的Shapley值查询点的特征x是由值函数定义的v

φ v x 1 年代 v x 年代 v x 年代 1 | 年代 | | 年代 | 1 (1)
  • 是所有特征的个数。

  • 是所有特征的集合。

  • |年代|集合的基数是多少年代,或集合中元素的数量年代

  • vx年代是集合中特征的值函数吗年代对于查询点x.该函数的值表明了中特征的预期贡献年代到查询点的预测x

Shapley值MATLAB

计算机器学习模型的Shapley值沙普利对象。使用这些值来解释模型中各个特征对查询点预测的贡献。计算Shapley值有两种方法:

  • 创建一个沙普利对象获取具有指定查询点的机器学习模型沙普利函数。该函数为查询点计算模型中所有特征的Shapley值。

  • 创建一个沙普利对象用于机器学习模型沙普利函数,然后使用函数计算指定查询点的Shapley值适合函数。

算法

沙普利提供两种算法:kernelSHAP[1],它对值函数使用了介入分布,以及对kernelSHAP的扩展[2],它对值函数使用条件分布。属性指定要使用的算法“方法”的名称-值参数沙普利函数或适合函数。

这两种算法的区别在于值函数的定义。这两种算法都定义了值函数,使得查询点对所有特征的Shapley值之和对应于查询点的预测与平均值的总偏差。

1 φ v x f x E f x

因此,值函数vx年代必须与中特征的预期贡献相对应年代对于预测(f)作为查询点x.这两种算法利用从指定数据中创建的人工样本(X).你必须提供X通过机器学习模型输入或单独的数据输入参数时创建一个沙普利对象。在人工样本中,特征值为年代来自查询点。对于其余的功能(功能在年代c,的补年代), kernelSHAP算法使用介入性分布生成样本,而kernelSHAP算法的扩展使用条件分布生成样本。

KernelSHAP (“方法”、“interventional-kernel”

沙普利默认使用kernelSHAP算法。

kernelSHAP算法定义了特征的值函数年代在查询点x对于介入性分布的预期预测D,即特征的联合分布年代c

v x 年代 E D f x 年代 X 年代 c

在哪里x年代中功能的查询点值是年代,X年代c有哪些特点年代c

求值函数的值vx年代在查询点x,假设特征不是高度相关的,沙普利使用数据中的值X作为样本的介入性分布D中的功能年代c

v x 年代 E D f x 年代 X 年代 c 1 N j 1 N f x 年代 X 年代 c j

在哪里N是观察数,和X年代cj中特性的值年代cj观察。

例如,假设您有三个特性X并有四点观察:(x11x12x13), (x21x22x23), (x31x32x33),及(x41x42x43).假设年代包括第一个特性和年代c包括其他的。在这种情况下,在查询点评估的第一个特征的值函数(x41x42x43)是

v x 年代 1 4 f x 41 x 12 x 13 + f x 41 x 22 x 23 + f x 41 x 32 x 33 + f x 41 x 42 x 43

与kernelSHAP算法的扩展相比,kernelSHAP算法的计算成本更低,支持有序分类预测器,并且可以处理中缺失的值金宝appX.但是,该算法需要特征独立假设,并且使用分布外样本[3].混合查询点和数据创建的人工样本X可能包含不切实际的观察。例如,(x41x12x13)可能是一个在三个特征的完全联合分布中不出现的样本。

扩展到KernelSHAP (“方法”、“conditional-kernel”

指定“方法”、“conditional-kernel”使用kernelSHAP算法的扩展。

kernelSHAP算法的扩展定义了特性的值函数年代在查询点x的条件分布X年代c,考虑到X年代具有查询点值:

v x 年代 E X 年代 c | X 年代 x 年代 f x 年代 X 年代 c

求值函数的值vx年代在查询点x沙普利使用查询点的最近邻居,这些邻居对应于数据中10%的观测值X.该方法使用了比kernelSHAP算法更真实的样本,并且不需要特征独立性假设。然而,该算法计算成本更高,不支持有序分类预测器,并且不能处理金宝appS在连续特征中。此外,如果虚拟特征与重要特征相关,该算法可能会将非零Shapley值分配给不有助于预测的虚拟特征[3]

指定计算算法

此示例训练线性分类模型并使用kernelSHAP算法(“方法”、“interventional-kernel”)和kernelSHAP算法的扩展(“方法”、“conditional-kernel”).

列车线性分类模型

加载电离层数据集。该数据集有34个预测器和351个雷达返回的二进制响应,要么是坏的(“b”)或好(‘g’).

负载电离层

训练一个线性分类模型。指定目标函数最小化技术(“规划求解”作为有限内存Broyden-Fletcher-Goldfarb-Shanno准牛顿算法(“lbfgs”),以提高线性系数的准确性。

Mdl =直线(X,Y,“规划求解”“lbfgs”
Mdl = ClassificationLinear ResponseName: 'Y' ClassNames: {'b' 'g'} ScoreTransform: 'none' Beta: [34x1 double]偏差:-3.7100 Lambda: 0.0028学习者:'svm'属性,方法

KernelSHAP

利用核shap算法计算第一次观测的Shapley值,该算法使用介入分布进行值函数评估。您不必指定“方法”价值的,因为“interventional-kernel”是默认值。

queryPoint = X(1,:);explainer1 = shapley(Mdl,X,“QueryPoint”, queryPoint);

对于分类模型,沙普利使用每个班级的预测分数计算沙普利值。方法绘制预测类的Shapley值情节函数。

情节(explainer1)

图中包含一个轴对象。标题为Shapley Explanation的axes对象包含一个类型为bar的对象。

横柱图显示了10个最重要变量的Shapley值,按绝对值排序。每个值都解释了查询点的分数与预测班级的平均分之间的偏差,这是由于相应的变量造成的。

对于假定特征彼此独立的线性模型,可以计算正类(或中第二类)的介入沙普利值Mdl。一会‘g’),由估计系数(Mdl。β[1]

线性shapvalues = (Mdl.Beta'.*(queryPoint-mean(X)))';

创建一个包含从kernelSHAP算法计算的Shapley值和从系数计算的值的表。

t = table(explainer1.ShapleyValues.Predictor,explainer1.ShapleyValues.g,linearSHAPValues,...“VariableNames”, {“预测”“KernelSHAP价值”“LinearSHAP价值”})
t =34×3表预测器KernelSHAP值线性shap值_________ ________________ ________________ "x1" 0.28789 0.28789 "x2" -1.1996e-15 0" x3" 0.20822 0.20822 "x4" -0.01998 -0.01998 "x5" 0.20822 0.20822 "x6" -0.076991 -0.076991 "x7" 0.19188 0.19188 "x8" -0.64386 -0.64386 "x9" 0.42348 0.42348 "x10" -0.030049 -0.030049 "x11" -0.23132 -0.23132 "x12" 0.1422 0.1422 "x13" -0.045973 -0.29022 -0.29022 "x15" 0.21051 0.21051 "x16

扩展到KernelSHAP

使用kernelSHAP算法的扩展计算第一次观测的Shapley值,该算法使用条件分布进行值函数评估。

explainer2 = shapley(Mdl,X,“QueryPoint”queryPoint,“方法”“conditional-kernel”);

绘制Shapley值。

情节(explainer2)

图中包含一个轴对象。标题为Shapley Explanation的axes对象包含一个类型为bar的对象。

这两种算法为10个最重要的变量确定了不同的集合。只有两个变量的混合体而且对两个集合都是相同的。

计算成本

如果观测值或特征的数量很大,沙普利值的计算成本会增加。

大量的观察

计算值函数(v)如果你有大量的观测,例如超过1000个,那么计算成本就会很高。为加快计算速度,在创建沙普利对象,或通过指定并行运行“UseParallel”作为真正的方法计算值时沙普利适合函数。并行计算需要并行计算工具箱™。

大量功能

计算和方程1对于所有可用的子集年代什么时候会计算昂贵(特征的数量)很大。要考虑的子集总数为2.属性指定子集的最大数目,而不是计算所有子集的总和“MaxNumSubsets”名称-值参数。沙普利根据子集的权重值选择要使用的子集。子集的权重正比于1/(总和的分母),这对应于1除以二项式系数: 1 / 1 | 年代 | .因此,具有高或低基数值的子集具有较大的权重值。沙普利首先包含权重最高的子集,然后根据权重值降序包含其他子集。

降低计算成本

这个例子展示了当你有大量的观测值和特征时,如何减少沙普利值的计算成本。

加载示例数据集NYCHousing2015

负载NYCHousing2015

该数据集包括对10个变量的55246个观察值,这些变量包含2015年纽约市房产销售信息。本例使用这些变量来分析销售价格(SALEPRICE).

预处理数据集。转换datetime阵列(SALEDATE)至月份数字。

NYCHousing2015。SALEDATE=month(NYCHousing2015.SALEDATE);

训练一个回归集合。

Mdl = fitrensemble(NYCHousing2015,“SALEPRICE”);

计算第一次观测中所有预测变量的Shapley值。通过使用来测量计算所需的时间抽搐而且toc

tic explainer1 = shapley(Mdl;“QueryPoint”NYCHousing2015 (:));
警告:由于预测器数据有超过1000个观测值,计算可能会很慢。使用更小的训练集样本或指定“UseParallel”为true,以实现更快的计算。
toc
运行时间为504.276830秒。

正如警告消息所示,由于预测器数据有超过1000个观测值,计算可能会很慢。

沙普利提供多个选项,以在有大量观测值或特征时减少计算成本。

  • 大量的观察-使用较小的训练数据样本,并通过指定并行运行“UseParallel”作为真正的

  • 大量的特性-指定“MaxNumSubsets”参数来限制计算中包含的子集的数量。

再次使用较小的训练数据样本和并行计算选项计算Shapley值。另外,将子集的最大数量指定为2 ^ 5

NumSamples = 5e2;Tbl = datasample(NYCHousing2015,NumSamples,“替换”、假);tic explainer2 = shapley(Mdl,Tbl;“QueryPoint”NYCHousing2015 (1:)...“UseParallel”,真的,“MaxNumSubsets”、2 ^ 5);
使用“本地”配置文件启动并行池(parpool)…连接到并行池(工人数:6)。
toc
运行时间为71.145339秒。

指定额外的选项可以减少计算时间。

参考文献

[1]伦德伯格,斯科特M.和S.李。《解释模型预测的统一方法》神经信息处理系统研究进展30(2017): 4765-774。

[2] Aas, Kjersti, Martin。朱利姆和安德斯·洛兰德。《当特征相互依赖时,解释个体预测:对沙普利值的更精确近似》arXiv: 1903.10464(2019).

[3]库马尔,I.伊丽莎白,苏雷什·文卡萨布拉曼尼亚,卡洛斯·沙伊德格和索雷尔·弗莱德勒。“Shapley-Value-Based解释作为特征重要性度量的问题”arXiv: 2002.11097(2020)。

另请参阅

||

相关的话题