基于基尼系数的shapley值分解代码实现,万广华森北用的那个java软件,求发一份!
不知道你这个问题是否已经解决, 如果还没有解决的话:求的目标是: 每个特征如何影响数据点的预测
线性模型例子
一个样本的预测\( \hat{f}(x) \):
$$ \hat{f}(x)=\beta_0+\beta_{1}x_{1}+\ldots+\beta_{p}x_{p} $$
其中 x 是我们要计算贡献的样本。每个xj 是一个特征值,其中 j = 1,...,p, βj是特征 j 对应的权重.
预测\( \hat{f}(x) \)时候的第 j 个特征的贡献φj是:
$$ \phi_j(\hat{f})=\beta_{j}x_j-E(\beta_{j}X_{j})=\beta_{j}x_j-\beta_{j}E(X_{j}) $$
其中E(βjXj)是特征 j 的平均效应估计值。贡献是特征效果(feature effect)减去平均效果(average effect)之间的差值.
现在我们知道每个特征对预测的贡献有多大。如果我们对该个样本的各个特征贡献求和:
$$ \begin{align*}\sum_{j=1}^{p}\phi_j(\hat{f})=&\sum_{j=1}^p(\beta_{j}x_j-E(\beta_{j}X_{j}))\\=&(\beta_0+\sum_{j=1}^p\beta_{j}x_j)-(\beta_0+\sum_{j=1}^{p}E(\beta_{j}X_{j}))\\=&\hat{f}(x)-E(\hat{f}(X))\end{align*} $$
即数据点 x 的预测值减去平均预测值. (特征贡献可能为负)
在其他模型类型中没有类似的权重,因此我们需要不同的解决方案: 合作博弈论(cooperative game theory)
通用方法
Shapley 值通过玩家的值函数val定义, 其中玩家包含在特征集合S中.
其中Shapley值是特征对预测的贡献;价值函数是玩家联盟(特征值)的支付函数(payout function)
特征值的 Shapley 值是其对支出的贡献,对所有可能的特征值组合进行加权求和:
$$ \phi_j(val)=\sum_{S\subseteq\{1,\ldots,p\}\setminus\{j\}}\frac{|S|!\left(p-|S|-1\right)!}{p!}\left(val\left(S\cup\{j\}\right)-val(S)\right) $$
其中 S 是模型使用特征的子集,x 是要解释的样本的特征值的向量,p 是特征个数. 有特征j的值函数与无特征j的值函数作差.
\( val_{x}(S) \)是对集合 S 中特征值的预测, 对于未包含在集合 S 中的特征进行边缘化(marginalize):
$$ val_{x}(S)=\int\hat{f}(x_{1},\ldots,x_{p})d\mathbb{P}_{x\notin{}S}-E_X(\hat{f}(X)) $$
这为不属于 S 的每个特征进行多重积分(multiple integrations)。
一个具体的例子:机器学习模型使用4个特征x1,x2,x3和x4,我们评估由特征值x1和x3组成的联盟S的预测:
$$ val_{x}(S)=val_{x}(\{1,3\})\\ =\int_{\mathbb{R}}\int_{\mathbb{R}}\hat{f}(x_{1},X_{2},x_{3},X_{4})d\mathbb{P}_{X_2X_4}-E_X(\hat{f}(X)) \\ 对X_2X_4的概率分布\mathbb P_{X_2X_4}积分, 即对含X_2X_4的联合概率边缘化(消除变量:特征值X_2X_4的分布的影响) $$
它的形式与线性模型中的特征贡献类似.
但是一般边缘化的积分变量不带P来着 $$ f_{X}(x)=\int_{-\infty}^{+\infty} f(x, y) d y $$ 好像能理解作者的意图了 因为单纯特征值X2X4在此处是无意义的, 特征值分布才对f有意义 如下才是错的: $$ \int_{\mathbb{R}}\int_{\mathbb{R}}\hat{f}(x_{1},X_{2},x_{3},X_{4})dX_2 dX_4-E_X(\hat{f}(X)) $$ |