xgboostモデルのセーブ、ロード


| 2 min read | machine-learning python xgboost

使い方知らないとうまくできなかったのでまとめておく

環境

  • python 3.7
  • xgboost 0.9.0

モデルのセーブ、ロード

xgb.XGBClassifier()で学習したものを保存、呼び出しを行う際につまづいた

どうやらinstance化するXGBの種類によって

処理を追加する必要があるらしい

2017年くらいの情報によると

Booster()インスタンスにLabelEncoderを追加してやればいいらしい

https://github.com/dmlc/xgboost/issues/2073

  • X_test: 特徴量データ
  • y_test: ラベルのみのデータ

として、

import xgboost as xgb
from sklearn import preprocessing
 
clf = xgb.XGBClassifier()
booster = xgb.Booster()
booster.load_model('model.bin')
 
clf._Booster = booster
clf._le = preprocessing.LabelEncoder().fit(y_test)
y_pred_proba = clf.predict_proba(X_test)
y_pred = clf.predict(X_test)

これでできた

しかし公式ドキュメントによると 

pythonで使うならpickleを使うといい、とあるので

元からあるインターフェイスは推奨しないのか、と思いつつ作った。こちらでも動いた

import xgboost as xgb
import pickle
 
# train the model
model = xgb.XGBClassifier(max_depth=4)
model.fit(X_train, y_train)
 
pickle.dump(model, open("xgb_model.pickle", "wb"))
 
# load model from file
loaded_model = pickle.load(open("xgb_model.pickle", "rb"))
 
y_pred_proba = loaded_model.predict_proba(X_test)
y_pred = loaded_model.predict(X_test)

参考