0

我正在寻找加载模型并且遇到问题,因为该模型是使用旧版本的 XGBoost 制作的。我已经访问了他们的网站并查看了,但它并没有明确说明什么语法可以正确解决这个问题并正确加载模型。我也没有意识到使用 joblib 加载时甚至需要 XGBoost

下面是代码:

    def init():
        global model

        model_path =  'C:\\Users\\ow\\Documents\\Test_Classification_Model\\3rd\\model_AutoMLe8aaac5a731.pkl'
        model = joblib.load(model_path)
init()

这是错误:

引发 XGBoostError(py_str(_LIB.XGBGetLastError())) xgboost.core.XGBoostError: [15:33:27] C:\Users\Administrator\workspace\xgboost-win64_release_1.0.0\src\learner.cc:682: 检查失败: 标头 == serialisation_header_:

如果您正在加载由旧版 XGBoost 生成的序列化模型(如 Python 中的 pickle),请先 Booster.save_model从该版本调用导出模型,然后将其加载回当前版本。有一个简单的脚本可以帮助这个过程。看:

https://xgboost.readthedocs.io/en/latest/tutorials/saving_model.html

以供参考脚本,以及有关保存模型和序列化之间差异的更多详细信息。

4

3 回答 3

1

您需要 xboost==0.90 才能使用 joblib 加载腌制模型。加载模型并将其序列化为 JSON。

于 2020-11-19T17:13:14.513 回答
1

按照他们的建议去做。

使用 Anaconda 或您正在使用的任何工具创建一个新环境。加载模型并将其序列化为 JSON 文件。这样可以确保它不是二进制文件(因此您可以使用普通的文本编辑器查看它)并且 XGBoost 例程可以获取它们需要的任何字段。您可能只是简单地腌制了模型,这意味着您将 Python 对象保存到二进制文件中。这通常会在您切换机器或版本时导致问题,因此最终不建议这样做。

所以一旦你安装了正确的 XGBoost 版本,你就可以使用这个脚本: https ://github.com/dmlc/xgboost/blob/master/doc/python/convert_090to100.py

于 2020-06-07T13:06:43.467 回答
1

您转储模型的版本xgboost和加载模型的版本应该相同。对我来说,它是通过使用最新版本的xgboost.

最初我将模型倾倒在其中,xgboost=0.90但加载时使用xgboost=1.4.1.
所以我倾倒并使用加载模型xgboost=1.4.1并且它起作用了。

希望对您有所帮助...

于 2021-05-12T06:05:27.457 回答