【发布时间】:2021-09-16 07:12:58
【问题描述】:
这是我使用 shap 的代码:
由于我只绘制了三倍相同的形状值,我希望这三个图是相同的。然而,它一直在变化。经过一些研究,似乎每次调用的顶部都会出现一个新值,但为什么呢?是不是 shap 中的错误?
编辑 1:我尝试在每次调用 shap.plots.beeswarm 之间加载相同的模型,但结果仍然不同。
【问题讨论】:
这是我使用 shap 的代码:
由于我只绘制了三倍相同的形状值,我希望这三个图是相同的。然而,它一直在变化。经过一些研究,似乎每次调用的顶部都会出现一个新值,但为什么呢?是不是 shap 中的错误?
编辑 1:我尝试在每次调用 shap.plots.beeswarm 之间加载相同的模型,但结果仍然不同。
【问题讨论】:
基于this github issue,问题与“其他特征的总和”变量的创建有关。这个变量是临时的,即你只使用它一次进行绘图(如果你再次运行 shap.plots.beeswarm 结果是错误的)。所以我想你的问题的解决方案是“不要多次运行它就没有问题”。
【讨论】:
感谢@jared_mamrot,我可以找到解决方案。 我只需要更改 shap 函数 beeswarm 的代码:
Line 57 : shap_exp = shap_values
替换为:
Line 57 : shap_exp = copy.deepcopy(shap_values)
确保在代码顶部导入库:
import copy
编辑:如果您不想更改源代码,只需在调用 beeswarm 时提供 shap_values 的深层副本:
import copy
shap.plots.beeswarm(copy.deepcopy(shap_values), max_display=15)
【讨论】: