uni farm

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)

参考

2022, Built with Gatsby. This site uses Google Analytics.