如何正确使用具有多重回归目标的形状决策图和力图?

2024-10-02 00:27:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Keras神经网络,有26个特性和100个目标,我想用SHAPpython库来解释。 例如,为了绘制力图,我执行以下操作:

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

其中:

  • exp.expected_values是一个大小为100的列表,其中包含我的每个目标的基本值(这至少是我所了解的)。我假设索引i是指第i个目标
  • shap_values指每个验证案例中每个目标的所有特征的Shapley值。因此,j从0运行到99(即我的目标的大小),并且k从0运行到验证案例总数

我感到困惑的是ij实际上是不同的,我得到的图看起来不错。然而,它们不应该总是相同的索引吗?第i个基线目标是否应始终与第i个目标的形状值进行比较? 我理解指数错了吗


Tags: 目标plotvalue绘制神经网络val特性案例
1条回答
网友
1楼 · 发布于 2024-10-02 00:27:42

ij应该是相同的,因为您正在绘制ith目标如何受要素的影响,从基础到预测:

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

其中:

  • i stands for ith target class
  • k stands for kth sample to be explained.

背后的原因是exp.expected_value将是形状num_targets,它们将是要添加到的形状值的基值,如果转换为numpy数组,则形状值应是形状[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_值为numpy数组类型

如果有什么不清楚,请询问

相关问题 更多 >

    热门问题