加载预训练joblib模型时出现ModuleNotFoundError错误求助
解决ModuleNotFoundError: No module named 'sklearn.ensemble.gradient_boosting'问题
问题原因
scikit-learn 1.0及以上版本移除了sklearn.ensemble.gradient_boosting模块,原模块中的GradientBoostingClassifier、GradientBoostingRegressor等类已直接移至sklearn.ensemble下。你当前使用的scikit-learn 1.3.0属于新版本,但模型是用旧版本scikit-learn保存的,导致加载时找不到旧模块路径。
解决方案
方案1:降级scikit-learn至保存模型时的版本
找到保存该模型时使用的scikit-learn版本(通常是0.24.x或更早),安装对应版本:
pip install scikit-learn==0.24.2
安装完成后重新运行加载代码即可。
方案2:用当前版本scikit-learn重新训练并保存模型
如果有模型训练代码,使用你当前的scikit-learn 1.3.0重新训练模型,再用joblib保存:
from sklearn.ensemble import GradientBoostingRegressor # 注意导入路径变化 import joblib # 假设训练代码(根据实际情况调整) # X_train, y_train = ... 你的训练数据 # clf = GradientBoostingRegressor(...) # clf.fit(X_train, y_train) # 保存新模型 joblib.dump(clf, "./model_data/boston_housing_prediction_new.joblib")
之后加载新保存的模型就不会出现模块找不到的问题。
方案3:手动修正模型的模块路径(进阶)
如果无法降级或重新训练,可以通过修改加载时的模块映射来兼容:
import joblib import sklearn.ensemble def module_mapper(module_name): # 将旧模块路径映射到新路径 if module_name == "sklearn.ensemble.gradient_boosting": return sklearn.ensemble return module_name # 加载模型时指定mapper clf = joblib.load("./model_data/boston_housing_prediction.joblib", mapper=module_mapper)
注意:此方法可能因新旧版本类的内部实现差异导致模型运行异常,仅作为临时应急方案。
内容的提问来源于stack exchange,提问作者Amal
相关产品推荐
相关产品推荐

