【问题标题】:Is there a way to know which sklearn version was used to train a pickle model?有没有办法知道哪个 sklearn 版本用于训练泡菜模型?
【发布时间】:2021-08-18 22:41:26
【问题描述】:

我收到了一个带有经过训练的梯度提升模型的 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 版本加载腌制文件。 I saw here that one is able to check the version after loading it,但似乎我什至无法加载泡菜文件。还有另一种方法吗?我希望最终能够加载腌制模型。根据official documentation,理想情况下应该沿着pickle模型保存元数据,但我没有提供这个,有没有办法单独从pickle文件中获取这个?

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

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

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

    但是,sklearn.ensemble 内部实际上没有名为 gradient_boosting 的模块,这就是导致问题的原因。最接近的模块是来自 OpenML 的 sklearn.ensemble.GradientBoostingClassifierthis module(我从未听说过)。

    【讨论】:

    • 这不起作用,因为加载模型后,clf.__getstate__() 会将_sklearn_version 设置为当前加载的 sklearn 库的版本。见the source
    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2019-11-21
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多