比治山日記

比治山スカイウォーカーです

FLAMLで学習済みのモデルを保存する・読み込む方法

FLAMLでAutoMLしてモデルを作成したあと、そのモデルを保存して読み込む方法が分からず、調べたのでメモ。以下の2種類がありそう。

1. Pickle等でAutoMLのオブジェクトとしてそのまま保存する
2. 実際に使用された学習モデルのパッケージの重みとして保存する

学習部分
from flaml import AutoML
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_california_housing
from sklearn.metrics import mean_squared_error

automl = AutoML()
automl_settings = {
    "time_budget": 10,  # in seconds
    "metric": 'r2',
    "task": 'regression',
    "log_file_name": "california.log",
}
X, y = fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

automl.fit(X_train=X_train, y_train=y_train,**automl_settings)
print(automl.model.estimator)
Pickle等でAutoMLのオブジェクトとしてそのまま保存する

AutoMLのオブジェクトで読み出す場合にこちらを使用する。

import pickle
with open('automl.pkl', 'wb') as f:
    pickle.dump(automl, f, pickle.HIGHEST_PROTOCOL)

automl_pkl = pickle.load(open('automl.pkl', 'rb'))
y_pred = automl_pkl.predict(X_test)
print(mean_squared_error(y_pred, y_test, squared=False))
実際に使用された学習モデルのパッケージの重みとして保存する

推論時にはAutoMLを使用せずに、ベストな学習モデルのネイティブなパッケージを使用して推論したい場合にこちらを使用する。実際に何の学習モデルが選択されたかを、予め知る必要がある。

from catboost import CatBoostRegressor

automl.model.estimator.save_model("best_model.txt")

catboost = CatBoostRegressor()
catboost.load_model("best_model.txt")
y_pred = catboost.predict(X_test)
print(mean_squared_error(y_pred, y_test, squared=False))