Xgboost の train で callback を利用する

Xgboost の train のラウンドごとに 関数を呼び出すための callbacks の利用法を備忘録として残しておく。

Callbackの利用例

ラウンドごとに日時を表示する例を作成した。

Gist https://gist.github.com/kunsen-an/f09966dc2ab7f3975f983091c3800fb5  にテストコードを含む notebook を置いた。実行結果例もそちらで確認できる。

callback を戻り値とする関数の定義

ここでは、return_callback()という関数を定義し、その中で定義したprint_time関数を返している。

train の evals で評価すべきデータセットを指定していて、評価結果がある場合には、ラウンド回数(iteration)、日時(dt_string)とともにその結果(evaluation_result_list)も出力する。

評価結果がない場合には、ラウンド回数(iteration)と日時(dt_string)を表示する。

ラウンドごとに呼び出されるコールバックのリスト設定

print_time()の戻り値であるcallbackを、ラウンドごとに呼び出される callbackのリスト(ここでは、callbacks)に設定する。

trainの引数

xgboost.train の引数 callbacksに、上に示したリスト callbacksを設定して、呼び出す。

参考

次の記事が参考になった。

https://stackoverflow.com/questions/46619974/save-the-output-of-xgb-train-of-xgboost-as-a-log-file-with-python-logging

また、上に示した例では直接使っていないが、Callback APIのドキュメントも当然ながら参考になる。

https://xgboost.readthedocs.io/en/latest/python/python_api.html#callback-api