heatmap
图
本笔记本旨在演示(并记录)如何使用 shap.plots.heatmap
函数。它使用了一个在经典的 UCI 成人收入数据集上训练的 XGBoost 模型(这是一个预测人们是否在 1990 年代年收入超过 50,000 美元的分类任务)。
[3]:
import xgboost
import shap
# train XGBoost model
X, y = shap.datasets.adult()
model = xgboost.XGBClassifier(n_estimators=100, max_depth=2).fit(X, y)
# compute SHAP values
explainer = shap.Explainer(model, X)
shap_values = explainer(X[:1000])
将SHAP值矩阵传递给热图绘制函数会创建一个图,其中实例在x轴上,模型输入在y轴上,SHAP值通过颜色刻度编码。默认情况下,样本使用 shap.order.hclust
进行排序,该方法根据解释相似性对样本进行层次聚类排序。这导致具有相同模型输出的样本因为相同的原因被分组在一起(如下图中资本收益影响较大的人群)。
模型的输出显示在热力图矩阵上方(围绕解释的 .base_value
中心),每个模型输入的全局重要性以条形图的形式显示在图的右侧(默认情况下,这是整体重要性的 shap.order.abs.mean
度量)。
[6]:
shap.plots.heatmap(shap_values)
增加 max_display
参数可以显示更多特征:
[3]:
shap.plots.heatmap(shap_values, max_display=12)
更改排序顺序和全局特征重要性值
我们可以通过向 feature_values
参数传递一组值来改变特征整体重要性的衡量方式(从而也改变它们的排序顺序)。默认情况下 feature_values=shap.Explanation.abs.mean(0)
,但下面我们展示了如何改为按所有样本中特征的最大绝对值排序:
[4]:
shap.plots.heatmap(shap_values, feature_values=shap_values.abs.max(0))
我们还可以使用 instance_order
参数来控制实例的排序。默认情况下,它设置为 shap.Explanation.hclust(0)
以将具有相似解释的样本分组在一起。下面我们展示如何通过所有特征的 SHAP 值之和进行排序,从而为数据提供一个补充的视角:
[5]:
shap.plots.heatmap(shap_values, instance_order=shap_values.sum(1))
有更多有用示例的想法吗?我们鼓励提交增加此文档笔记本的拉取请求!