首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用SHAP来解释DNN模型,但我的summary_plot只显示了每个特征的平均影响,并没有包括所有特征

使用SHAP来解释DNN模型,但我的summary_plot只显示了每个特征的平均影响,并没有包括所有特征
EN

Stack Overflow用户
提问于 2021-04-19 06:44:02
回答 1查看 859关注 0票数 0

因此,我生成了一个形状摘要图,如下所示:

代码语言:javascript
运行
复制
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,但我希望有一种方法可以增加这个数字。

EN

回答 1

Stack Overflow用户

发布于 2021-05-20 22:53:47

我的理解是,当模型有多个输出时,或者即使shap.summary_plot认为它有多个输出(在我的例子中是真的),SHAP只绘制条形图。当我尝试使用summary_plot的plot_type选项强制绘图为“点”时,出现了一个解释此问题的断言错误。

您可以尝试使用以下命令复制该错误消息:

代码语言:javascript
运行
复制
shap.summary_plot(shap_values, x_train, plot_type='dot', show = False)

如果您得到相同的错误,那么尝试对模型中的第一个输出变量执行以下操作:

代码语言:javascript
运行
复制
shap.summary_plot(shap_values[0], x_train, show = False)

这似乎解决了我的问题。

至于尝试增加参数的数量,我相信max_display选项应该会有所帮助,尽管我还没有尝试超过20个参数(我的模型没有那么大):

代码语言:javascript
运行
复制
shap.summary_plot(shap_values[0], x_train, max_display = 5, show = False)

我希望它能帮上忙。祝你好运:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67154078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档