神经网络模型可解释性SHAP绘图出现异常Class 0问题求助
问题原因与解决方法
问题根源
你遇到的两个问题本质是同一个原因导致的:你的ANN模型predict方法输出为形状(样本数量, 1)的二维数组,SHAP会将每个输出维度识别为一个独立的分类类别,因此出现了Class 0标识,同时触发多分类场景下的分组绘图逻辑,导致样式和传统回归任务的摘要图不一致。
解决方法
你可以任选以下一种方法修复问题:
- 方法1:直接调整生成的shap_values维度
先打印shap_values的形状确认结构,再做对应调整即可:
调整后再调用# 如果shap_values是长度为1的列表,取第一个元素 shap_values = shap_values[0] # 如果shap_values是三维数组(样本数,特征数,1),切片去掉最后一维 # shap_values = shap_values[:,:,0]shap.summary_plot(shap_values, X_test, feature_names=features)即可得到传统样式的摘要图,且不会出现Class 0标识。 - 方法2:提前包装预测函数,输出一维结果(更稳妥,避免后续其他SHAP绘图也出现类似问题)
import shap # 特征名 features = list(dataset.iloc[:, 0:-1].columns) # 包装预测函数,拉平输出为一维数组 def ann_predict(x): return ann.predict(x).flatten() explainer = shap.KernelExplainer(ann_predict,X_train) shap_values = explainer.shap_values(X_test, nsamples=100) shap.summary_plot(shap_values, X_test, feature_names=features)
内容的提问来源于stack exchange,提问作者Joehat
相关产品推荐
相关产品推荐

