SHAP summary_plot条形图与常规图Y轴特征不一致问题咨询
SHAP summary_plot两类图表Y轴特征顺序不一致原因说明
这个现象不是代码bug,是SHAP针对分类任务的固有默认排序逻辑差异导致的。
两类图表的默认排序规则
- 条形图(指定
plot_type="bar"):默认统计所有类别下每个特征的平均绝对SHAP值的全局均值,按该综合值从高到低排序展示特征,反映特征对全部分类类别的整体贡献度。
随机森林分类器调用shap_values()会返回长度等于类别数的列表,每个元素对应一个类别的SHAP值矩阵,条形图默认会遍历所有类别的SHAP值做聚合计算后排序。 - 默认蜂群图(不指定plot_type):旧版本SHAP(0.40之前的主流稳定版)在传入多类别SHAP值列表时,会默认取列表最后一个元素(通常对应分类任务的正类),单独计算该类别下每个特征的平均绝对SHAP值,按单类别贡献度排序,不会做跨类别聚合。
顺序差异的核心原因
两个图排序时依赖的统计口径完全不同:一个是跨类别聚合后的全局贡献排序,一个是单个类别(默认最后一类)的贡献排序。当不同特征在不同类别上的贡献度差异较大时,Y轴的特征顺序、甚至Top特征的展示范围都会出现明显差异。
对齐两类图表顺序的方法
不需要手动提前对特征做排序,只要统一两个图的SHAP值统计口径即可:
- 如果要统一展示单类别(比如二分类的正类)的特征贡献,绘图时明确传入对应类别的SHAP值矩阵即可:
import shap explainer = shap.TreeExplainer(clf) shap_values = explainer.shap_values(X_test) # 二分类场景取索引为1的正类SHAP值,两个图使用同一份数据 target_shap = shap_values[1] shap.summary_plot(target_shap, X_test, plot_type="bar") shap.summary_plot(target_shap, X_test)
- 如果要让蜂群图和默认条形图一致,使用跨类别全局贡献排序,调用蜂群图时增加
class_inds="all"参数即可。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

