如何保存和加载xgboost模型?

Pen*_*hao 26 python machine-learning save xgboost

XGBoost指南的链接上,

  1. 可以保存模型. bst.save_model('0001.model')
  2. 模型及其特征映射也可以转储到文本文件中.
    bst.dump_model('dump.raw.txt') # dump model bst.dump_model('dump.raw.txt','featmap.txt')# dump model with feature map
  3. 可以按如下方式加载已保存的模型: bst = xgb.Booster({'nthread':4}) #init model bst.load_model("model.bin") # load data

我的问题是:

  1. save_model&之间有什么区别dump_model
  2. 保存'0001.model''dump.raw.txt','featmap.txt'?之间的区别是什么?
  3. 为什么加载的型号名称model.bin与要保存的名称不同0001.model
  4. 假设我训练两个模型model_Amodel_B,我想保存这两种模式以供将来使用,这saveload我应该使用功能?你能帮忙展示清楚的过程吗?

Rob*_*tty 14

如果您使用 sklearn api,您可以使用以下命令:


xgb_model_latest = xgboost.XGBClassifier() # or which ever sklearn booster you're are using

xgb_model_latest.load_model("model.json") # or model.bin if you are using binary format and not the json
Run Code Online (Sandbox Code Playgroud)

如果您使用上述 booster 方法进行加载,您将在 python api 中获得 xgboost booster,而不是 sklearn api 中的 sklearn booster。

所以,是的,如果您使用 sklearn api,这似乎是加载保存的 xgboost 模型数据的最 Pythonic 方式。


ppl*_*ski 11

这两个函数save_modeldump_model保存模型,所不同的是,dump_model你可以保存功能命名并保存树文本格式.

load_model会从模型工作save_model.该模型dump_model可以用于例如xgbfi.

在加载模型期间,您需要指定模型的保存路径.在示例bst.load_model("model.bin")模型中从文件加载model.bin- 它只是带有模型的文件的名称.祝好运!


Ioa*_*ios 8

Joblib库是保存和加载xgboost模型的一种简单方法。

import joblib
#save model
joblib.dump(xgb, filename) 

#load saved model
xgb = joblib.load(filename)
Run Code Online (Sandbox Code Playgroud)

  • 如果要跨语言加载和保存模型,那就不好了。例如,您想用python训练模型,但要用Java预测。 (4认同)
  • 当您使用 xgboost 的 sklearn API 时,这是 XGB 开发人员建议的方法。XGBClassifier & XGBRegressor 应该通过pickle 格式像这样保存。 (3认同)
  • 它说joblib在python3.8上已被弃用 (2认同)
  • 当您在不同版本的 Xgboost 上保存并加载为 pickle 时,将会出现不兼容的情况。 (2认同)

Chr*_*ger 5

我在这里找到了自己的出路,因为我正在寻找一种保存和加载xgboost模型的方式。这是我解决问题的方法:

import pickle
file_name = "xgb_reg.pkl"

# save
pickle.dump(xgb_model, open(file_name, "wb"))

# load
xgb_model_loaded = pickle.load(open(file_name, "rb"))

# test
ind = 1
test = X_val[ind]
xgb_model_loaded.predict(test)[0] == xgb_model.predict(test)[0]

Out[1]: True
Run Code Online (Sandbox Code Playgroud)

  • 如果您的模型保存在pickle中,则升级xgboost版本时可能会失去支持 (12认同)
  • “不要使用 pickle 或 joblib,因为这可能会引入对 xgboost 版本的依赖。保存和恢复模型的规范方法是通过 load_model 和 save_model。” (4认同)
  • 这是一个合法的用例 - 例如,pickling 是保存 sklearn 管道的官方建议。这必然意味着,如果有一个包含 XGBoost 模型的 sklearn 管道,他们最终必须腌制 XGBoost。如果担心在未来的某个地方,XGBoost 的更新可能会破坏 pickle 的行为,这就是版本固定(和单元测试)存在的原因。 (3认同)
  • 我必须警告你,仅仅 sklearn API 的更改就可能会破坏生产模型...如果使用 pickles,则需要固定所有内容...以及反对 pickle 模型的另一个论点:Triton Inference Server(由 NVIDIA 维护,在每个主要领域都可用)公共云)不会导入基于 pickled 树的模型(仅接受没有特定于版本的 python 对象标头保存的纯助推器,即 txt 或 json)。 (2认同)

use*_*267 5

不要使用pickle 或joblib,因为这可能会引入对xgboost 版本的依赖。保存和恢复模型的规范方法是通过load_modelsave_model

如果您想长期存储或归档模型,请使用 save_model (Python) 和 xgb.save (R)。

是 XGBoost 最新版本的相关文档。它还解释了dump_model和之间的区别save_model

请注意,您可以通过在使用bst.save_model. 如果保存和恢复模型的速度对您来说并不重要,这非常方便,因为它允许您对模型进行适当的版本控制,因为它是一个简单的文本文件。