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

如何解决SHAP库waterfall_plot调用时的IndexError报错问题

SHAP waterfall_plot 报 IndexError: string index out of range 解决方法

报错根因

这个越界报错出在SHAP生成瀑布图Y轴标签的环节:内部格式化特征值时拿到了空字符串,访问字符串第一个字符直接报错。本质是构造Explanation对象时传入的样本数据格式不兼容,加上KernelExplainer初始化和自定义Weka模型的适配问题,导致SHAP内部取特征值失败。

修复步骤

  • 修正KernelExplainer初始化逻辑
    原有代码直接传入返回0/1分类标签的predict方法、且背景数据用Pandas DataFrame,会导致SHAP值计算不稳定,二分类场景应基于正类预测概率做解释:
    # 包装预测函数,仅返回正类概率
    def pos_class_proba(X_input):
        return sci_Model_2.predict_proba(X_input)[:, 1]
    
    # 背景数据转numpy数组传入,不要直接传DataFrame
    explainer_2 = shap.KernelExplainer(pos_class_proba, X.to_numpy())
    shap_values_2 = explainer_2.shap_values(X.to_numpy())
    
  • 修正Explanation对象构造方式
    原有代码传入带字符串索引的Pandas Series作为样本数据,SHAP内部排序后用整数位置取值时会出现索引匹配错误,需去掉冗余索引、显式传入特征名:
    ex = shap.Explanation(
        values=shap_values_2[0],
        base_values=explainer_2.expected_value,
        data=X.iloc[0].to_numpy(), # 转为无索引的纯数值numpy数组
        feature_names=X.columns.tolist() # 显式传入特征名列表,不要传自定义columns变量避免长度/内容不匹配
    )
    
  • 兜底类型检查
    如果上述修改后仍报错,先统一特征数据类型,避免arff转csv过程中混入非数值类型:
    # 所有特征强制转为浮点型,消除object dtype
    X = X.astype(float)
    
    执行完类型转换后重新计算SHAP值、构造Explanation对象即可正常绘图。

内容的提问来源于stack exchange,提问作者Pablo Moreira Garcia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:03:50