1

我正在使用 DeepExplainer 来获取深度学习模型的 shap 值。通过遵循一些教程,我可以获得一些结果,即哪些变量从基值推动模型预测,基值是训练集中的平均模型输出。

我有大约 5,000 个观察值和 70 个特征。DeepExplainer 的表现中规中矩。我的代码是:

model0 = load_model(model_p+'health0.h5')

background = healthScaler.transform(train[healthFeatures])
e = shap.DeepExplainer(model0, background)
shap_values = e.shap_values(healthScaler.transform(test[healthFeatures]))

test2 = test[healthFeatures].copy()
test2[healthFeatures] = healthScaler.transform(test[healthFeatures])

shap.force_plot(e.expected_value[0], shap_values[0][947,:], test2.iloc[947,:])

情节如下: 在此处输入图像描述

这里的基值为 0.012(也可以通过e.expected_value[0]看到),非常接近输出值 0.01。

在这一点上,我有一些问题:

1) 输出值与通过model0.predict(test[healthFeatures])[947] = -0.103得到的预测值不同我应该如何评估输出值?

2) 可以看出,我使用整个训练集作为背景来近似 SHAP 值的条件期望。使用训练集和整个集的随机样本有什么区别?它仅与性能问题有关吗?

提前谢谢了!

4

1 回答 1

0

可能为时已晚,但仍然是一个最常见的问题,它将使其他初学者受益。要回答 (1),预期值和输出值将不同。顾名思义,预期是模型预测的分数的平均值,例如,如果是概率,那么它是模型吐出的概率的平均值。对于 (2),只要 backroung 值小于 5k,它不会有太大变化,但如果 > 5k,那么您的计算将需要几天时间才能完成。

请参阅(第 21-25 行)以获得更全面的答案。

于 2020-01-02T12:42:25.810 回答