如何解决如何正确地使用带有多个回归目标的形状决策图和力图?
我有一个Keras神经网络,它具有26个功能和100个目标,我想用SHAP python库进行解释。 例如,为了绘制力图,我这样做:
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
目标如何受要素(从基础到预测)的影响:
shap.force_plot(exp.expected_value[i],shap_values[i][k],x_val.columns)
其中:
- i代表
ith
目标类别- k代表要解释的
kth
示例。
后面的原因是exp.expected_value
的形状为num_targets
,并且它们是要添加到其上的shap值的基本值,并且如果转换,shap值的形状应该为[num_classes,num_samples,num_features]
到numpy数组。
例如,要获取原始空间中第k个数据点的整形值,可以这样做:
shap_values[:,k,:].sum(1) + base_values
,对于使用softmax进入概率空间的模型,可以这样做:
softmax(shap_values[:,:].sum(1) + base_values)
注意,这是假设shap_values是numpy数组类型。
请询问是否不清楚。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。