如何在imblearn Pipeline后使用SHAP?附报错及代码示例
问题解决:TreeExplainer不支持imblearn Pipeline类型报错
报错原因
TreeExplainer仅支持树结构模型(如AdaBoost、RandomForest等),但你传入的是整个imblearn Pipeline对象(包含SMOTE过采样和AdaBoost模型两个步骤),因此触发不支持类型的报错。
解决方案
从训练好的Pipeline中提取出内部的AdaBoost模型,再传入TreeExplainer即可。
修改后的SHAP代码
# 从最佳Pipeline中提取AdaBoost模型 best_adaboost = tuned_adaboost.best_estimator_.named_steps['adaboost'] # 初始化TreeExplainer并计算SHAP值 explainer = shap.TreeExplainer(best_adaboost) shap_values = explainer.shap_values(X_test) shap.summary_plot(shap_values[1], X_test)
补充说明
- Pipeline中的SMOTE仅作用于训练阶段,解释模型时直接使用原始测试集
X_test即可,无需额外过采样。 - 使用
named_steps['adaboost']可以清晰定位到Pipeline中指定名称的步骤,比通过索引(如steps[1][1])更易读、更鲁棒。
内容的提问来源于stack exchange,提问作者new_data
相关产品推荐
相关产品推荐

