Shap - 颜色条不显示在汇总图中

Shap - The color bar is not displayed in the summary plot

显示summary_plot时,彩条不显示

shap.summary_plot(shap_values, X_train)

我试过改变plot_size。当绘图更高时,会出现颜色条,但它非常小 - 看起来不应该。

shap.summary_plot(shap_values, X_train, plot_size=0.7)

这是一个外观正确的彩条示例。

有谁知道这是否可以通过某种方式解决?

重现方式:

import pandas as pd
import shap
import sklearn
from sklearn.ensemble import RandomForestRegressor

# a classic housing price dataset
X,y = shap.datasets.boston()

# a simple linear model
model = RandomForestRegressor(max_depth=6, random_state=0, n_estimators=10)
model.fit(X, y)
shap_values = shap.TreeExplainer(model).shap_values(X)
shap.summary_plot(shap_values, X)

在这种情况下,显示了彩条,但是非常小。我选择了这样一个例子,以便于检索数据。

我遇到了和你一样的问题,我发现解决方案是将 matplotlib 降级到 3.4.3。看来 SHAP 还没有针对 matplotlib 3.5.1 进行优化。

如上所述,似乎在 matplotlib.pyplot 3.5 版中更改了颜色条或框纵横比的处理。但是,您可以更正它。

  • 使用shap.summary_plot(..., show=False)允许更改剧情
  • 如上所述,使用 plt.gcf().axes[-1].set_aspect(1000)
  • 设置颜色条的纵横比
  • 然后还设置颜色条框的外观 plt.gcf().axes[-1].set_box_aspect(1000)

这会返回旧结果。如果要使颜色条更粗,请将纵横比设置为 100。

我遇到了类似的问题,我使用的是 max_display=10。下面的代码解决了我的问题:

plt.gcf().axes[-1].set_aspect(100)
plt.gcf().axes[-1].set_box_aspect(100)

只需使用 'auto' 方面即可:

plt.gcf().axes[-1].set_aspect('auto')
plt.tight_layout()
# As mentioned, smaller "box_aspect" value to make colorbar thicker
plt.gcf().axes[-1].set_box_aspect(50) 

shap 版本 0.40.0; matplotlib 版本 3.5.1

显式调用 plt.colorbar() 将执行:

import xgboost
import shap

X, y = shap.datasets.adult()
model = xgboost.XGBClassifier().fit(X, y)

explainer = shap.Explainer(model, X)
shap_values = explainer(X)

shap.plots.beeswarm(shap_values, show=False, color_bar=False)
plt.colorbar()
plt.show()