加载sklearn模型报错:找不到sklearn.ensemble._gb_losses模块求助
解决ModuleNotFoundError: No module named 'sklearn.ensemble._gb_losses'问题
首先修正代码中的明显错误
你的Flask代码里存在重复加载模型的错误:
model = pickle.load(open("model.pkl", "rb")) app = Flask(__name__) Model = pickle.load(model) # 这行完全多余,model已经是加载好的模型对象,无需再次调用pickle.load
直接删除Model = pickle.load(model)这一行即可,否则会引发额外错误。
针对_gb_losses模块缺失的解决方案
这个错误本质是模型保存时的scikit-learn版本与当前运行环境的版本不兼容,_gb_losses是scikit-learn内部用于梯度提升树(GradientBoosting系列模型)的私有模块,不同版本的模块结构可能有变化。
安装模型训练时的精确版本:
找到训练model.pkl的环境,执行print(sklearn.__version__)获取版本号,然后在当前环境安装对应版本:pip install scikit-learn==[训练时的版本号]比如训练时用的是1.2.1,就执行
pip install scikit-learn==1.2.1。逐步测试相近稳定版本:
如果不知道训练版本,可尝试测试1.0.x到1.3.x之间的稳定版本,比如依次安装1.0.2、1.1.3、1.2.2、1.3.2,每次安装后尝试加载模型,直到找到兼容版本。重新训练模型:
如果无法找到对应版本,直接用当前环境的scikit-learn重新训练模型并保存新的model.pkl,这是最彻底的兼容方案,避免跨版本的模块依赖问题。检查自定义损失函数:
如果训练模型时使用了自定义损失函数(针对GradientBoosting模型),确认该函数是否依赖了sklearn.ensemble._gb_losses内部模块,若有则需要调整损失函数实现,改用公共API支持的方式。
内容的提问来源于stack exchange,提问作者Atharv Thombare
相关产品推荐
相关产品推荐

