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

PyCaret调用predict_model时报KeyError: ['age'] not in index问题求助

PyCaret predict_model 报KeyError不存在特征的问题原因与解决方案

问题根因

PyCaret在执行setup初始化训练流程时,会把除了target和你指定的ignore_features之外的所有列都作为训练输入特征,记录在预处理pipeline的final_training_columns属性中。

你训练完成后的模型内置了完整的预处理逻辑,调用predict_model时,预处理步骤会强制校验输入数据是否包含所有final_training_columns中的列,缺失任何一列都会抛出对应KeyError。你删除age等非target列之后,输入数据缺少了训练时用到的特征,因此触发报错。

解决方法

根据你的实际需求选择对应方案:

  • 方案1:确实需要剔除部分特征用于预测
    回到训练流程的setup步骤,通过ignore_features参数指定你不需要用到的特征,重新训练模型后再执行预测即可。示例代码:
    from pycaret.classification import *
    # setup阶段指定忽略age列,不会进入训练特征
    exp = setup(
        data=df,
        target='target',
        categorical_features=['sex','cp','fbs','restecg','exang','thal'],
        ignore_features=['age'] # 此处填写你要剔除的所有列
    )
    best_model = compare_models()
    # 后续预测时传入剔除了age和target列的数据即可正常运行
    predict_model(best_model, data=df.drop(['age','target'], axis=1).tail())
    
  • 方案2:仅测试预测逻辑,不需要调整训练特征
    不要删除任何训练阶段用到的特征列,仅删除target列传入predict_model即可,也就是你已验证可正常运行的写法:
    predict_model(best_model, data=df.drop('target', axis=1).tail())
    
    如果你需要验证某列对预测结果的影响,可以将该列的取值统一替换为均值/中位数/众数等固定值后再传入预测,不要直接删除列。

内容的提问来源于stack exchange,提问作者PlutoSenthil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:18:03