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()
显示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()