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

使用新版scikit-learn加载旧训练模型时遇模块缺失错误

解决升级Python和scikit-learn后加载旧模型的ModuleNotFoundError问题

错误原因

scikit-learn在版本迭代中重构了模块结构:在0.20.3版本中,逻辑回归相关类位于sklearn.linear_model.logistic子模块;而升级到1.1.3版本后,该子模块被合并到sklearn.linear_model主模块中,旧模块路径被移除,导致joblib加载旧模型时触发ModuleNotFoundError。

解决方案

1. 临时模块映射(快速修复)

在加载模型前,手动将旧模块路径映射到新的模块位置,让pickle能找到对应的类:

import sys
from sklearn.linear_model import logistic as _logistic

# 注册旧模块路径,兼容pickle加载
sys.modules['sklearn.linear_model.logistic'] = _logistic

# 然后加载模型
from joblib import load
model = load('你的模型文件路径.joblib')

2. 重新训练模型(长期最优方案)

跨大版本的模型兼容性难以保证,建议在Python3.10.6 + scikit-learn1.1.3的新环境中重新训练模型并保存,这样既能避免兼容性问题,还能利用新版本的性能优化和bug修复。

3. 临时降级环境导出模型(备选方案)

如果无法重新训练,可以创建一个与原环境一致的虚拟环境(Python3.6.5 + scikit-learn0.20.3),加载旧模型后,将模型转换为更通用的格式(如ONNX),或者在旧环境中重新保存模型后尝试在新环境加载(此方法兼容性仍有风险)。

内容的提问来源于stack exchange,提问作者Deepak Tatyaji Ahire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:15:35