问题标签 [shap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
631 浏览

keras - AttributeError:“顺序”对象没有属性“评估”

''' 我正在使用 SHAP 进行模型分析,在调用 'DeepExplainer' 时,我收到“AttributeError: 'Sequential' object has no attribute 'eval'”

我正在使用带有 keras 而不是张量流的 theano,因为 SHAP 存在一些版本不匹配问题,我在其他问题中也发布过。所以现在我正在尝试相同的东西,但是这一次,_Backend 我正在使用 PyTorch 并且模型构建很好,但是在使用 SHAP DeepExplainer 时它会抛出属性错误,我是 Model Explainer 域的这种类型错误的新手'''

输入:

输出:没有错误

之后: 输入:

错误:

解决此错误的任何帮助或方向?

0 投票
1 回答
554 浏览

python - 获取 one-hot 编码的 H2OFrame

我在 H2O 中使用 xgboost 进行二进制分类任务。数据集有几个分类特征,模型在训练期间对其应用单热编码。

现在我想使用 SHAP ( https://github.com/slundberg/shap ) 在本地解释预测。为此,最好让数据帧具有一次性编码的列和值。但是,我似乎无法从 H2O 模型中得到这个。

我可能可以手动重新创建一次性编码,但也许有人知道更快的解决方案?

0 投票
1 回答
1470 浏览

deep-learning - 使用 PyTorch RNN / LSTM 的 SHAP 值

有没有办法做到以上几点?SHAP包非常有用,并且非常适用于 PyTorch 神经网络。对于 PyTorch RNN,我收到以下错误消息(对于 LSTM,它相同):

在此处输入图像描述

似乎它不起作用,但有什么解决方法吗?有人有使用 PyTorch 和 SHAP 的经验吗?

0 投票
2 回答
2456 浏览

matplotlib - How to customize matplotlib plots using gcf() or gca()?

I am using a package called shap which has a integrated plot function. However i want to adjust some things like the labels, legend, coloring, size etc.

apparently due to the developer thats possible via using plt.gcf().

I call the plot like this, this will give a figure object but i am not sure how to use it:

enter image description here

UPDATE / SOLUTION Finally i got everything adjusted as i wanted it by doing the following:

enter image description here

0 投票
2 回答
2408 浏览

python - Python,shap 包:如何绘制依赖图网格?

我正在尝试从shap包中绘制一个依赖图网格。这是我想要的示例的 MWE 代码:

我想要的示例布局

这是我到目前为止的代码。有几件事不起作用:

  1. 我的网格的图形大小不受我的figsize论点的影响
  2. 我的代码在网格下方绘制了更大版本的图。
  3. 网格中仅显示了一个相关性图。

我得到的图像: 我得到了什么。

0 投票
0 回答
452 浏览

python - shap:绘图功能

我尝试创建一个 SHAP 总结图,当它们提供如下时按特征值着色:

但我得到了这个错误:

-------------------------------------------------- ------------------------- ValueError Traceback(最近一次调用最后一次)~/anaconda3/envs/naboo-env/lib/python3.6/site -packages/IPython/core/formatters.py in call (self, obj) 339 pass 340 else: --> 341 return printer(obj) 342 # 最后寻找特殊方法名 343 method = get_real_method(obj, self.print_method)

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/IPython/core/pylabtools.py in (fig) 242 243 if 'png' in formats: --> 244 png_formatter.for_type(图, lambda fig: print_figure(fig, 'png', **kwargs)) 245 if 'retina' in formats or 'png2x' in formats: 246 png_formatter.for_type(Figure, lambda fig:retina_figure(fig, **kwargs))

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/IPython/core/pylabtools.py in print_figure(fig, fmt, bbox_inches, **kwargs) 126 127 bytes_io = BytesIO() --> 128 fig.canvas.print_figure(bytes_io, **kw) 129 数据 = bytes_io.getvalue() 130 如果 fmt == 'svg':

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/backend_bases.py in print_figure(自我,文件名,dpi,facecolor,edgecolor,方向,格式,**kwargs)2210
方向=方向, 2211 dryrun=True, -> 2212 **kwargs) 2213 渲染器 = self.figure._cachedRenderer 2214 bbox_inches = self.figure.get_tightbbox(renderer)

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py in print_png(self, filename_or_obj, *args, **kwargs) 515 516 def print_png(self, filename_or_obj, *args, **kwargs): --> 517 FigureCanvasAgg.draw(self) 518 renderer = self.get_renderer() 519 original_dpi = renderer.dpi

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py in draw(self) 435 # if toolbar: 436 # toolbar.set_cursor(cursors.WAIT) --> 437 self.figure.draw(self.renderer) 438 # 一个 GUI 类可能需要使用这个绘图来更新一个窗口,所以 439 # 不要忘记调用超类。

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs) 53 renderer.start_filter() 54 ---> 55 return draw(artist, renderer, *args, **kwargs) 56 finally: 57 如果 artist.get_agg_filter() 不是 None:

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/figure.py in draw(self, renderer) 1491 1492
mimage._draw_list_compositing_images(-> 1493 渲染器,self,artist,self.suppressComposite ) 1494 1495
渲染器.close_group('图')

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, Artists, suppress_composite) 139 if not_composite has_images: 140 for a in Artists: - -> 141 a.draw(renderer) 142 else: 143 # 将任何相邻的图像合成在一起

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs) 53 renderer.start_filter() 54 ---> 55 return draw(artist, renderer, *args, **kwargs) 56 finally: 57 如果 artist.get_agg_filter() 不是 None:

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/axes/_base.py in draw(self, renderer, inframe) 2633
renderer.stop_rasterizing() 2634 -> 2635 mimage._draw_list_compositing_images(渲染器,自我,艺术家)2636 2637 renderer.close_group('axes')

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, Artists, suppress_composite) 139 if not_composite has_images: 140 for a in Artists: - -> 141 a.draw(renderer) 142 else: 143 # 将任何相邻的图像合成在一起

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs) 53 renderer.start_filter() 54 ---> 55 return draw(artist, renderer, *args, **kwargs) 56 finally: 57 如果 artist.get_agg_filter() 不是 None:

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/collections.py in draw(self, renderer) 909 def draw(self, renderer): 910 self.set_sizes(self._sizes, self.figure.dpi) --> 911 Collection.draw(self, renderer) 912 913

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs) 53 renderer.start_filter() 54 ---> 55 return draw(artist, renderer, *args, **kwargs) 56 finally: 57 如果 artist.get_agg_filter() 不是 None:

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/collections.py in draw(self, renderer) 262 renderer.open_group( self.class.name , self.get_gid ()) 263 --> 264 self.update_scalarmappable() 265 266 变换,transOffset,偏移,路径 = self._prepare_points()

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/collections.py in update_scalarmappable(self) 806 return 807 if self._is_filled: --> 808 self._facecolors = self.to_rgba( self._A,self._alpha)809 elif self._is_stroked:810 self._edgecolors = self.to_rgba(self._A,self._alpha)

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/cm.py in to_rgba(self, x, alpha, bytes, norm) 272 x = ma.asarray(x) 273 if norm : --> 274 x = self.norm(x) 275 rgba = self.cmap(x, alpha=alpha, bytes=bytes) 276 return rgba

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/matplotlib/colors.py in call (self, value, clip) 945 result.fill(0) # 还是应该全部屏蔽?还是0.5?946 elif vmin > vmax: --> 947 raise ValueError("minvalue must be less than or equal to maxvalue") 948 else: 949 if clip:

ValueError:最小值必须小于或等于最大值

0 投票
2 回答
666 浏览

python - SHAP值能说明吗?

我在使用 SHAP 值来解释基于树的模型时遇到问题。
( https://github.com/slundberg/shapsd )
首先,我输入了大约 30 个特征,其中 2 个特征之间具有高度正相关。
之后,我训练 XGBoost 模型(python)并查看 2 个特征的 SHAP 值,SHAP 值具有负相关。

你们能向我解释一下,为什么 2 个特征之间的输出 SHAP 值的相关性与输入相关性不同?我可以相信SHAP的输出吗?

==========================

输入之间
的相关性:0.91788 SHAP 值之间的相关性:-0.661088

2个特征是
1)省内人口和
2)省内家庭数。

模型性能
训练 AUC:0.73
测试 AUC:0.71

散点图
输入散点图(x:省内家庭数,y:省内人口)
SHAP值输出散点图(x:省内家庭数,y:省内人口)

0 投票
1 回答
1255 浏览

python - 将 SHAP 值聚合到特征集是否有效?

SHAP 值似乎是相加的,例如,整体特征重要性图只是简单地将每个特征的绝对 SHAP 值相加并进行比较。这使我们能够将 SHAP 用于全局重要性和局部重要性。我们还可以以相同的方式获得特定数据记录子集的特征重要性。

出于同样的原因,获取变量集的聚合 SHAP 值是否有效?例如,“身高”、“体重”和“眼睛颜色”进入“人类描述”或“温度”、“湿度”和“气压”进入“天气”并相应地对它们进行排名。

从理论上讲,我不明白为什么不这样做,但如果有任何问题,我会很感激对此的反馈。

0 投票
1 回答
340 浏览

r - 带有 Keras 模型的 SHAP:操作数无法与形状一起广播 (2,6) (10,)

我正在从 R 中的库 shapper 运行 SHAP,以在 Keras CNN 模型上进行分类模型插入:

我做了一个简单的可复制示例

我的 CNN 模型

我的形状命令

我收到此错误:

0 投票
0 回答
510 浏览

shap - CNN模型中不同类型输入的SHAP解释

我有一个问题要使用 SHAP 来解释我的 CNN 模型的结果。我的 CNN 模型采用 2 个不同类型的输入。一个是图像,另一个是特征向量。我通过考虑这两者来训练和测试模型。建立模型没有问题。

当我尝试使用 SHAP 同时解释这两个输入的结果时,它不起作用。我实际上已经尝试过 deepexplainer 和 gradientexplainer。我得到的错误如下:

文件“”,第 1 行,在 shap_values = explainer.shap_values([x_test[:3], feature_test[:3]])

文件“C:\Users\kaz10003\AppData\Local\Continuum\anaconda3\lib\site-> > packages\shap\explainers\deep_init_.py”,第 119 行,在 shap_values 返回 self.explainer.shap_values(X,ranked_outputs, output_rank_order)

文件“C:\Users\kaz10003\AppData\Local\Continuum\anaconda3\lib\site-> packages\shap\explainers\deep\deep_tf.py”,第 284 行,在 shap_values diffs = model_output[:, l] - self .expected_value[l] - > output_phis[l].sum(axis=tuple(range(1, output_phis[l].ndim)))

AttributeError:“列表”对象没有属性“总和”

有人知道SHAP是否支持这种实现吗?这是我的代码: