使い方知らないとうまくできなかったのでまとめておく
環境
- 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)