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
相关产品推荐
相关产品推荐

