因此,我生成了一个形状摘要图,如下所示:
explainer = shap.KernelExplainer(model, X_test[:100,:])
shap_values = explainer.shap_values(X_test[:100,:])
fig = shap.summary_plot(shap_values, features=X_test[:100,:], feature_names=feature_names, show=False)
plt.savefig('test.png')
这可以正常工作,并创建一个如下所示的图:
这看起来没问题,但有几个问题。在阅读shap summary_plots时,我经常会看到这样的例子:
正如你所看到的-这看起来和我的有点不同。基于这两个summary_plots底部的文本,看起来我的是显示每个特征的平均形状值,而我在网上看到的只是显示每个特征的每个单独的数据点-换句话说,我在网上看到的看起来更细粒度。
如何创建不显示每个功能的平均影响而仅显示每个数据点的summary_plot?我想一定是像use_average
之类的summary_plot()有一个布尔参数,但是什么也找不到。
另外,正如你在我的summary_plot上看到的--y轴上只包含了20个特征。我的模型实际上有大约100个特性,如果可能的话,我想把它们都包含在summary_plot中。我认为shap默认显示20,但我希望有一种方法可以增加这个数字。
发布于 2021-05-20 22:53:47
我的理解是,当模型有多个输出时,或者即使shap.summary_plot认为它有多个输出(在我的例子中是真的),SHAP只绘制条形图。当我尝试使用summary_plot的plot_type选项强制绘图为“点”时,出现了一个解释此问题的断言错误。
您可以尝试使用以下命令复制该错误消息:
shap.summary_plot(shap_values, x_train, plot_type='dot', show = False)
如果您得到相同的错误,那么尝试对模型中的第一个输出变量执行以下操作:
shap.summary_plot(shap_values[0], x_train, show = False)
这似乎解决了我的问题。
至于尝试增加参数的数量,我相信max_display选项应该会有所帮助,尽管我还没有尝试超过20个参数(我的模型没有那么大):
shap.summary_plot(shap_values[0], x_train, max_display = 5, show = False)
我希望它能帮上忙。祝你好运:)
https://stackoverflow.com/questions/67154078
复制相似问题