当前位置: 首页 > 知识库问答 >
问题:

无法用SHAP显示栏图

汪修诚
2023-03-14

我是SHAP新手,尝试在我的分类器上使用它。下面是我已经运行了clf.fit(train\u x,train\u y)之后的代码片段:

explainer = shap.Explainer(clf)
shap_values = explainer(train_x.to_numpy()[0:5, :])
shap.summary_plot(shap_values, plot_type='bar')

现在,这有两个问题。一是即使我设置了plot\u type参数,它也不是条形图。另一个原因是我似乎不知何故丢失了功能名称(是的,当调用clf.fit()时,它们确实存在于数据帧中)。

我尝试将最后一行替换为:

shap.summary_plot(shap_values, train_x.to_numpy()[0:5, :], plot_type='bar')

这并没有改变什么。我还试图用以下内容替换它,看看我是否至少可以恢复我的功能名称:

shap.summary_plot(shap_values, train_x.to_numpy()[0:5, :], feature_names=list(train_x.columns.values), plot_type='bar')

但这带来了一个错误:

Traceback (most recent call last):
  File "sklearn_model_runs.py", line 41, in <module>
    main()
  File "sklearn_model_runs.py", line 38, in main
    shap.summary_plot(shap_values, train_x.to_numpy()[0:5, :], feature_names=list(train_x.columns.values), plot_type='bar')
  File "C:\Users\kapoo\anaconda3\envs\sci\lib\site-packages\shap\plots\_beeswarm.py", line 554, in summary_legacy
    feature_names=feature_names[sort_inds],
TypeError: only integer scalar arrays can be converted to a scalar index

我现在有点不知所措。我刚刚用5行训练集尝试过,但是一旦我越过了这个绊脚石,我想使用整个东西。如果有帮助的话,分类器有5个标签,我的SHAP版本是0.40.0。

共有1个答案

孙斌
2023-03-14

好吧,问题是这样的。替换此:

shap\u values=explainer(训练到numpy()[0:5,:])

为此:

shap_values=explainer.shap_values(train_x)#将整个内容用作数据帧

然后,可以在打印过程中使用此选项:

feature_namestrain_x.columns.values

这里的文档真的应该更新。。。

 类似资料:
  • 我跟随一些在线示例实现了一个导航抽屉操作栏半透明状态栏。半透明的状态栏根本不会变为透明。 这是我的AndroidManifest。xml v21/风格。xml 主要活动。xml 以及主要的活动。JAVA

  • SHAP(SHapley Additive exPlanations)以一种统一的方法来解释任何机器学习模型的输出。 SHAP将博弈论与局部解释联系起来,将以前的几种方法结合起来,并根据预期表示唯一可能的一致且局部准确的加法特征归因方法(详见SHAP NIPS paper 论文)。 虽然SHAP值可以解释任何机器学习模型的输出,但我们已经开发了一种用于树集合方法的高速精确算法(Tree SHAP

  • 我复活了一个CN1项目(已经发布),并尝试让它在Netbeans 11下的模拟器中运行(运行在OpenJdK 11上)。然而,该项目不断失败。 我更新了CN1谷歌地图扩展,刷新了libs,但问题仍然存在。 谷歌地图扩展版本是42。我该怎么做才能让一切都像以前一样运转? 任何帮助都很感激,

  • 问题内容: 我曾经使用过,但是它只能显示HTML,不能显示SVG,并且嵌套的SVG HTML无法完成显示。 然后,我使用,但是它只能显示SVG,不能显示HTML。 有什么办法解决这个问题? 问题答案: 配置为将画布用于SVG。为此,您需要一个专家。这里是的Appleteer。

  • Mac OSX Netbeans JAVA 目标:21点程序…我正在尝试将扑克牌的图像图标显示在JLabel中 逻辑:我创建了一些CARD对象,用一个方法返回与之相关的imageIcon。在我的主GUI类中,如果我创建新的imageIcon来指定文件位置,它就会工作 注释掉的行工作正常,显示imageIcon图像,但是当我使用card1.getImage()方法时,图像不显示。方法很简单- 此外,

  • 问题内容: 我想要一个JFrame,在左右两侧有一个边框,边框为黑色,宽度为withfOfJFrame / 10。 现在,我的尝试如下所示: 这会在左右两侧添加一个黑色边框,但是该边框具有固定的大小,并且在调整窗口大小时不会重新计算。大小甚至不是800(JFrame的开始宽度)的1/10。 我究竟做错了什么?还是有更好的方法来做到这一点? 问题答案: 您可以使用和适当的权重来获得所需的结果: