为什么每次我调用 shap.plots.beeswarm 时 shap 值都会发生变化?

Sas*_*eux 7 python xgboost shap

这是我使用 shap 的代码:

在此输入图像描述

由于我只是绘制了相同形状值的三倍,因此我希望这三个图是相同的。然而,它一直在变化。经过一些研究,似乎每次调用时顶部都会出现一个新值,但为什么呢?这是形状中的错误吗?

编辑1:我尝试在每次调用之间加载相同的模型shap.plots.beeswarm,但结果仍然不同。

Sas*_*eux 8

感谢@jared_mamrot 我能找到解决方案。我只需要更改 shap 函数 beeswarm 的代码:

Line 57 : shap_exp = shap_values
Run Code Online (Sandbox Code Playgroud)

取而代之 :

Line 57 : shap_exp = copy.deepcopy(shap_values)
Run Code Online (Sandbox Code Playgroud)

确保在代码顶部导入库:

import copy
Run Code Online (Sandbox Code Playgroud)

编辑:如果您不想更改源代码,只需在调用 beeswarm 时提供 shap_values 的深层副本,如下所示:

import copy    
shap.plots.beeswarm(copy.deepcopy(shap_values), max_display=15)
Run Code Online (Sandbox Code Playgroud)