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

Python 3.9调用pickle.load()时提示找不到sklearn.ensemble.voting模块

解决ModuleNotFoundError: No module named 'sklearn.ensemble.voting'

这个错误的核心原因是你加载pickle模型时使用的scikit-learn版本,和当初保存模型时的版本不匹配——旧版scikit-learn里sklearn.ensemble.voting是公开可用的模块,但后续版本中该模块的内容被整合到sklearn.ensemble主模块或内部模块sklearn.ensemble._voting中,导致加载时找不到对应路径。

下面是几个可行的解决办法:

  • 匹配保存模型时的scikit-learn版本
    先查看当前安装的scikit-learn版本:

    pip show scikit-learn
    

    如果你能找到当初保存模型时使用的版本号,直接安装对应版本即可:

    pip install scikit-learn==x.x.x
    

    把x.x.x替换为具体版本号,比如0.24.2(该版本仍保留sklearn.ensemble.voting模块)。

  • 临时映射模块路径(无需更换版本)
    若不想更换版本,可以在加载模型前手动将缺失的模块路径映射到当前存在的模块上,添加以下代码:

    import sys
    from sklearn.ensemble import _voting
    
    # 将旧模块名映射到当前的_voting内部模块
    sys.modules['sklearn.ensemble.voting'] = _voting
    # 再执行模型加载
    model = pickle.load(open("model_name.plk", "rb"))
    

    如果上述代码无效,尝试映射到sklearn.ensemble主模块:

    import sys
    from sklearn import ensemble
    
    sys.modules['sklearn.ensemble.voting'] = ensemble
    model = pickle.load(open("model_name.plk", "rb"))
    
  • 重新训练并保存模型(长期解决方案)
    如果条件允许,用当前版本的scikit-learn重新训练模型,再用pickle保存,这样后续加载就不会再出现模块路径不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:57:27