Как сохранить и загрузить модель 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_A и model_B, я хотел сохранить обе модели для будущего использования, какую функцию save и load следует использовать? Не могли бы вы показать четкий процесс?

Ответ 1

Обе функции save_model и dump_model сохраняют модель, разница в том, что в dump_model вы можете сохранить имя функции и сохранить дерево в текстовом формате.

load_model будет работать с моделью save_model. Модель из dump_model может использоваться, например, с помощью xgbfi.

Во время загрузки модели вам необходимо указать путь, в котором сохраняются ваши модели. В примере bst.load_model("model.bin") загружается из файла model.bin - это просто имя файла с моделью. Удачи!

Ответ 2

Простым способом сохранения и загрузки модели xgboost является библиотека joblib.

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

#load saved model
xgb = joblib.load(filename)

Ответ 3

Я нашел свой путь здесь, потому что искал способ сохранить и загрузить мою модель xgboost. Вот как я решил свою проблему:

import pickle
file_name = "xgb_reg.bin"

# 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