我有一个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运行到验证案例总数李>我感到困惑的是i
和j
实际上是不同的,我得到的图看起来不错。然而,它们不应该总是相同的索引吗?第i个基线目标是否应始终与第i个目标的形状值进行比较?
我理解指数错了吗
i
和j
应该是相同的,因为您正在绘制ith
目标如何受要素的影响,从基础到预测:其中:
背后的原因是
exp.expected_value
将是形状num_targets
,它们将是要添加到的形状值的基值,如果转换为numpy数组,则形状值应是形状[num_classes, num_samples, num_features]
因此,例如,要获取原始空间中第k个数据点的shap值,可以执行以下操作:
对于使用softmax进入概率空间的模型,可以这样做:
注意,这是假设shap_值为numpy数组类型
如果有什么不清楚,请询问
相关问题 更多 >
编程相关推荐