使用joblib加载scikit-learn v0.23.1构建的随机森林模型时出现scipy.sparse._csr模块缺失错误
解决joblib加载模型时出现
ModuleNotFoundError: No module named 'scipy.sparse._csr'的问题 这个问题我之前也碰到过,大概率是scipy版本不兼容导致的——你保存模型时的scipy版本和现在加载环境里的scipy版本不一致,scipy在后续版本中调整了内部模块的结构,scipy.sparse._csr这个内部模块的路径在新版本里可能已经变更,或者仅在旧版本中存在。
具体解决步骤:
第一步:确认保存模型时的scipy版本
回到你最初训练并保存模型的环境,运行以下命令查看当时的scipy版本:pip show scipy如果当时有记录
requirements.txt文件,直接查看其中的scipy版本号即可。第二步:在加载环境中安装对应版本的scipy
在你现在加载模型的Python环境里,安装和保存环境完全一致的scipy版本,比如当时用的是scipy 1.5.4,就执行:pip install scipy==1.5.4注意:scikit-learn v0.23.1对scipy的最低要求是
>=0.19.1,所以要确保安装的scipy版本既和保存环境一致,又满足scikit-learn的兼容要求。第三步:用虚拟环境隔离依赖(长期解决方案)
为了避免后续再出现类似的版本冲突问题,建议用虚拟环境(比如venv或conda)来隔离每个项目的依赖:# 用venv创建虚拟环境 python3.7 -m venv model_env # 激活环境(Linux/macOS) source model_env/bin/activate # 激活环境(Windows) model_env\Scripts\activate # 安装指定版本的依赖 pip install scikit-learn==0.23.1 scipy==你需要的版本 joblib之后所有和这个模型相关的训练、保存、加载操作都在这个环境中进行。
如果以上步骤还是无法解决问题,可以检查加载环境中的scikit-learn版本是否也是v0.23.1,因为scikit-learn和scipy的兼容性也会影响模型的序列化/反序列化。
内容的提问来源于stack exchange,提问作者Daniel Wyatt
相关产品推荐
相关产品推荐

