Python模型解释性怎么做_SHAP值分析与特征重要性可视化
SHAP值计算前须确保模型支持predict/predict_proba接口Pipeline需用pipeline.predictPyTorch/TensorFlow模型要设eval()并禁梯度树模型优先用TreeExplainersummary_plot需校验feature_names与数据列序一致force_plot推荐matplotlib模式避免JS依赖问题TreeExplainer结果更准KernelExplainer需足够采样与合理背景数据。SHAP值计算前必须确认模型可调用 predict 或 predict_probaSHAP解释器本身不关心你用的是什么模型只认一个接口能输入 X二维数组输出一维预测值回归或概率向量分类。很多自定义封装模型、Keras子类模型、带预处理的Pipeline对象直接传给 shap.Explainer 会报 AttributeError: xxx object has no attribute predict。先手动测试model.predict(X_sample) 能否跑通X_sample 必须和训练时维度一致包括是否含截距项、是否标准化sklearn Pipeline 需用 pipeline.predict别传 pipeline.steps[-1][1]——后者可能漏掉前面的 StandardScaler 或 OneHotEncoderPyTorch/TensorFlow 模型要设为 eval() 模式并禁用梯度否则 shap.DeepExplainer 会卡在 forward 里LightGBM/XGBoost 建议用 shap.TreeExplainer比通用 Explainer 快 10 倍以上且支持原生缺失值处理shap.summary_plot 显示空白或坐标错乱检查 feature_names 和数据顺序shap.summary_plot 对输入数据非常敏感它默认按列顺序把 X 的每一列当成一个特征并用你传入的 feature_names 标注横轴。一旦两者不一致就会出现“变量名对不上”“重要性条纹全挤在左边”“y轴显示 Feature 0 到 Feature N”这类问题。feature_names 必须是 Python list不能是 pandas Index哪怕看着一样建议显式转list(X.columns)如果用了 pd.get_dummies 或 ColumnTransformer特征顺序很可能和原始 X 不同务必用 transformer.get_feature_names_out() 获取真实列名传给 summary_plot 的 shap_values 必须和 X 行数一致抽样时两个要同步X_sample X.iloc[idxs]; shap_vals_sample shap_vals[idxs]分类任务中shap_values 是 list of array每类一个画某类需指定shap.summary_plot(shap_vals[1], X)单样本解释图force_plot加载慢或报错 Failed to display widgetshap.force_plot 默认用 JavaScript 渲染交互式图表本地 Jupyter 运行时常见两类失败一是没装 shap 的 JS 依赖二是 notebook 内核和前端通信异常。这不是代码写错了而是环境链路断了。优先用静态图替代shap.plots.force(shap_vals[0], X.iloc[0], matplotlibTrue)注意是 shap.plots.force不是旧版 shap.force_plot确保 shap_vals 是 numpy array不是稀疏矩阵若来自 TreeExplainer它返回的是 dense但 KernelExplainer 可能返回 sparse加一步 .toarray()force_plot 的 base_value预期值必须是标量多分类场景下shap_vals[0].base_values 是数组得取对应类base_val shap_vals[0].base_values[1]别在 for 循环里反复调 force_plot——它每次生成完整 HTML内存涨得快导出 PDF 时容易崩溃TreeExplainer 和 KernelExplainer 结果差异大该信谁差异不是 bug是原理决定的前者基于模型结构做精确 Shapley 计算快、准、仅限树模型后者用采样逼近慢、有方差、通用但不稳定。如果你看到同一特征在两种解释器下重要性排序相反大概率是 KernelExplainer 的采样不足或背景数据没选好。 唱鸭 音乐创作全流程的AI自动作曲工具集 AI 辅助作词、AI 自动作曲、编曲、混音于一体