如何匹配正确sklearn版本完成模型反序列化并解决运行报错
报错原因与处理方案
核心原因
你遇到的所有报错的根源是最开始的sklearn版本不兼容警告:你训练保存lgbm_v4.pkl模型时使用的sklearn版本为0.24.1,当前运行环境的sklearn版本为0.24.2。跨版本加载joblib序列化的模型时,模型内部绑定的LabelEncoder等组件行为出现异常,直接导致模型预测输出的标签为整数类型0/1,而你的测试集标签是字符串类型'0'/'1',触发类型不匹配报错,后续的多个报错都是第一个异常触发的连锁反应,和你写的基础代码逻辑无关。
处理方案
- 优先选择对齐依赖版本:将当前环境的sklearn降级到和训练环境一致的0.24.1版本,执行命令:
降级完成后重新加载模型运行即可,该方案能彻底解决所有版本兼容导致的隐藏问题。pip install scikit-learn==0.24.1 - 临时修复标签类型问题:如果暂时不想调整依赖版本,可以在调用
score方法前,先将测试集标签转换为和预测结果一致的整数类型:
该方案只能解决当前的类型报错,无法保证模型后续运行不会出现其他隐藏的兼容异常。y_test = y_test.astype(int) result = lgbm_v4.score(X_test, y_test) - 重新训练模型:如果可以获取到原始训练代码和训练数据集,在当前0.24.2版本的sklearn环境下重新训练模型,保存新的pkl文件后加载使用,也可以彻底解决版本不兼容问题。
注意:后续使用joblib保存/加载sklearn系模型时,尽量保证训练和运行环境的sklearn版本完全一致,避免出现类似的兼容问题。
内容的提问来源于stack exchange,提问作者Nabih Bawazir
相关产品推荐
相关产品推荐

