首页 > 解决方案 > 如何正确使用具有多个回归目标的形状决策图和力图?

问题描述

我有一个 Keras 神经网络,它有 26 个特征和 100 个目标,我想用SHAP python 库来解释。例如,为了绘制力图,我这样做:

shap.force_plot(exp.expected_value[i], shap_values[j][k], x_val.columns)

在哪里:

我感到困惑的是,i实际上j可能有所不同,而且我确实得到了一个看起来不错的情节。但是,它们不应该总是相同的索引吗?不应该总是将第 i 个基线目标与第 i 个目标的形状值进行比较吗?我对索引的理解有误吗?

标签: pythonmachine-learningkerasneural-networkshap

解决方案


i并且j应该是相同的,因为您正在绘制ith目标如何受特征影响,从基础到预测:

shap.force_plot(exp.expected_value[i], shap_values[i][k], x_val.columns)

在哪里:

  • 我代表ith目标类
  • k 代表kth要解释的样本。

背后的原因是exp.expected_valueshape ,它们将是要添加到的 shap 值的基值,如果转换为 numpy 数组,则num_targetsshap 值应该是 shape 。[num_classes, num_samples, num_features]

因此,例如,要在原始空间中获取第 k 个数据点的 shap 值,可以这样做:

shap_values[:,k,:].sum(1) + base_values

对于使用 softmax 进入概率空间的模型,可以这样做:

softmax(shap_values[:,k,:].sum(1) + base_values)

注意,这是假设 shap_values 是 numpy 数组类型。

请询问是否有不清楚的地方。


推荐阅读