You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SHAP汇总图图例中映射类别ID与类别名称

解决SHAP汇总图类别ID替换为鸢尾花中文类别名称的问题

我在鸢尾花(Iris)数据集上训练了随机森林分类器,代码如下:

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

iris = datasets.load_iris()
X = iris.data
y = iris.target

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

model = RandomForestClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)

随后通过以下代码绘制SHAP值汇总图:

import shap

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)

shap.summary_plot(shap_values, X_test)

生成的图中图例显示的是类别ID(Class 0、Class 1、Class 2),需要将其映射为对应的中文类别名称:

  • Class 0 → 山鸢尾(对应原名称setosa)
  • Class 1 → 变色鸢尾(对应原名称versicolor)
  • Class 2 → 弗吉尼亚鸢尾(对应原名称virginica)

数据集自带的类别名称数组为:

iris.target_names
# 输出:array(['setosa', 'versicolor', 'virginica'], dtype='<U10')

实现方法

调用shap.summary_plot()时,传入class_names参数指定中文类别名称即可完成替换:

# 定义中文类别名称列表
class_names = ["山鸢尾", "变色鸢尾", "弗吉尼亚鸢尾"]

# 绘制带中文类别的SHAP汇总图
shap.summary_plot(shap_values, X_test, class_names=class_names)

执行上述代码后,汇总图的图例将直接显示中文类别名称,替代原有的Class ID标识。

内容的提问来源于stack exchange,提问作者Amina Umar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 01:47:16