8月上旬使用Python SHAP中 summary_plot()时,画出来的图依然是各特征的shap value,图状为beeswarm,但在中旬重新跑该段代码时,画出来的图为mean(|shap value|),图状为柱状图。
SHAP修改之后:
fig = plt.figure()
shap.summary_plot(shap_values, data[cols], show = False, max_display = 30)
plt.tight_layout()
plt.show()
效果如下图:
此时画出来的图默认是SHAP value 的mean value。
这是Python SHAP在8月近期对shap.summary_plot()的修改,此前会直接画出模型中各个特征SHAP值,这可以更好地理解整体模式,并允许发现预测异常值。每一行代表一个特征,横坐标为SHAP值。一个点代表一个样本,颜色表示特征值(红色高,蓝色低)。
因此去查询了SHAP的官方文档,发现依然可以通过shap.plots.beeswarm()实现上述功能。
# train XGBoost model
X,y = shap.datasets.adult()
model = xgboost.XGBClassifier().fit(X, y)
# compute SHAP values
explainer = shap.Explainer(model, X)
shap_values = explainer(X)
跑出来的结果如下图:
至此,问题完美解决。