【问题标题】:Python, shap package: How to plot a grid of dependence plots?Python,shap 包:如何绘制依赖图网格?
【发布时间】:2019-10-22 18:04:45
【问题描述】:

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

fig, axs = plt.subplots(2,8, figsize=(16, 4), facecolor='w', edgecolor='k') # figsize=(width, height)
fig.subplots_adjust(hspace = .5, wspace=.001)

axs = axs.ravel()

for i in range(10):

    axs[i].contourf(np.random.rand(12,12),5,cmap=plt.cm.Oranges)
    axs[i].set_title(str(250+i))

plt.show()

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

  1. 我的网格的图形大小不受 figsize 参数的影响
  2. 我的代码在网格下方绘制了更大版本的绘图。
  3. 网格中仅显示了一个相关性图。
fig, axs = plt.subplots(1,8, figsize=(4, 2))
axs = axs.ravel()

for b in X_test.columns[:3]:
    for a in X_test.columns[:3]:
        shap.dependence_plot((a, b), shap_interaction_values, X_test)

我得到的图像:

【问题讨论】:

    标签: python matplotlib shap


    【解决方案1】:
    import shap
    import matplotlib.pyplot as plt
    
    X = ...
    shap_values = ...
    
    columns = X.columns
    
    # adjust nrows, ncols to fit all your columns
    fig, axes = plt.subplots(nrows=4, ncols=3, figsize=(20, 14))
    axes = axes.ravel()
    
    for i, col in enumerate(columns):
        shap.dependence_plot(col, shap_values, X, ax=axes[i], show=False)
    

    【讨论】:

      【解决方案2】:

      我和你有同样的问题 - code 说dependence_plot 需要一个可选参数:ax

      因此,您可以制作子图并将后续图放入其中:

      
      
      fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2)
      shap.dependence_plot((a, b), shap_interaction_values, X_test, ax=ax1)
      shap.dependence_plot((a, b), shap_interaction_values, X_test, ax=ax2)
      
      

      在您的情况下,您可以zip() 将轴和列放在一起。

      我还没有解决在使用interaction_index 的情况下该怎么办 - 在这种情况下,您将在图的末尾获得所有可能的interaction_indexes 热图,这看起来很糟糕。

      编辑:丑陋的 hack,但它似乎可以解决问题 - 如果您为每个依赖图指定交互索引,那么它将为每个图绘制一个颜色条到最后一个子图,这看起来很糟糕。

      我最终手动删除了轴(每个颜色条是一个附加轴),然后自动重新调整了子图:

      fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, constrained_layout=True)
      shap.dependence_plot((a, b), shap_interaction_values, X_test, ax=ax1)
      shap.dependence_plot((a, b), shap_interaction_values, X_test, ax=ax2)
      fig.axes[-1].remove()
      fig.axes[-1].remove()
      

      这将摆脱 所有 颜色条,并且 constrained_layout=True 将确保正确重绘最后一个子图,如果没有此参数,它将保持“压缩”状态,以便为不存在的颜色条腾出空间.

      【讨论】:

        猜你喜欢
        • 2022-12-04
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 2011-07-06
        • 2022-06-14
        • 2021-12-25
        • 2020-09-15
        相关资源
        最近更新 更多