首页 > 解决方案 > 有没有办法知道哪个 sklearn 版本用于训练泡菜模型?

问题描述

我得到了一个 pickle 文件,其中包含一个训练有素的梯度提升模型,该模型是由其他人在另一台机器上训练的。我意识到我无法在我的机器上加载这个泡菜文件

with open('gb_model.pickle','rb') as f:
    gbmodel = pickle.load(f)

我当前版本的scikit-learn==0.24.2. 我得到了错误ModuleNotFoundError: No module named 'sklearn.ensemble.gradient_boosting'。然后我尝试安装其他版本,sklearn但我不断收到与sklearn. 我也尝试使用joblib但得到相同的结果:

from joblib import load
clf = load('gb_model.pickle')

我意识到我需要加载与sklearn安装时相同版本的腌制文件。我在这里看到可以在加载后检查版本,但似乎我什至无法加载泡菜文件。还有另一种方法吗?我希望最终能够加载腌制模型。根据官方文档,理想情况下应该沿着腌制模型保存元数据,但我没有提供这个,有没有办法单独从腌制文件中获取这个?

标签: pythonmachine-learningscikit-learn

解决方案


如果您使用 sklearn 0.18 或更高版本训练模型,请尝试:

import pickle
clf = pickle.load(open('gb_model.pickle', 'rb'))
clf.__getstate__()['_sklearn_version']

但是,实际上没有称为gradient_boostinginside的模块sklearn.ensemble,这就是导致问题的原因。最接近的模块是sklearn.ensemble.GradientBoostingClassifier,或者来自 OpenML 的这个模块(我从未听说过)。


推荐阅读