Optunaを活用したlightGBMのハイパーパラメータのオートチューニング

Optunaを活用したlightGBMのハイパーパラメータのオートチューニング
目次
一番精度が高く計算量が少ないオートチューニング
機械学習モデルの実装の際に必ず必要になってくる作業にハイパーパラメータのチューニング作業がある。これらは、各ハイパーパラメータの値を変動させ一番モデル精度の高い値を探す作業で手作業でやると日が暮れてしまう作業である。近年、グリッドサーチなど様々なチーニング方法があるが今回は一番精度が高く計算量が少ないOptunaを活用したオートチューニングを紹介する。これ以降の解説は、lightgbmでの実装が一通り完成していることを前提に解説します。
こんな人に読んでほしい
– 最近、機械学習やAIの勉強を始めた方
– Kaggleなどのデータ分析コンペで上位を目指したい方
– 効率の良いチューニング方法を知りたい方
具体的な実装方法1_外部ライブラリのインストール
下記コマンドを実行しOptunaの外部ライブラリをインストール・インポートしてください。注意点として、Optunaを使用する場合Lightgbmを扱うためのライブラリも変わるため、気をつけてください。一般的なlightgbmのライブラリではオートチューニングの実装ができません。今回、交差検証を行いながらオートチューニングをしていくので、sklearnのKFoldもインポートしてください。
!pip install lightgbm
!pip install optuna
from sklearn.model_selection
import KFold
import optuna.integration.lightgbm as lgb
具体的な実装方法2_パラメータの最適値の探索
lightgbmのモデル実装の部分を下記リンクに変更します。paramsでは最低限のモデル設定を行います。今回は回帰モデルをmseで評価していくため、paramsを下記のように設定しました。 lgb.LightGBMTunerCVでパラメータと扱うデータの宣言をし、tuner.run()を実行しパラメータの探索を行います。実際に探索したパラメータの最適値の詳細はbest_paramsに格納されています。
params = {
'objective': 'regression',
'metric': 'mse',
}
# trainval:学習用データと検証用データをlgb.Dataset()でデータセット化したものです。
# folds=KFold(n_splits=3):交差検証を行う設定、n_splitsで分割数を設定
tuner = lgb.LightGBMTunerCV(params, trainval,
verbose_eval=100, early_stopping_rounds=100,
folds=KFold(n_splits=3))
tuner.run()
# サーチしたパラメータの表示
best_params = tuner.best_params
print(" Params: ")
for key, value in best_params.items():
print(" {}: {}".format(key, value))
こちらが実際にbest_paramsに格納されている値です。今回のデータセットに対してのハイパーパラメータの最適値がこのように格納されています。

具体的な実装方法3_最適なパラメータ値の反映
先ほど見つけたパラメータの最適値を実際のモデル実装に反映させます。下記のようにlightgbmのパラメータ設定をする箇所にbest_paramsを設定します。
model = lgb.train(best_params, trains, valid_sets=valids,
verbose_eval=100, early_stopping_rounds=100)
まとめ_交差検証でのパラメータの探索が簡単に
今回はOptunaを活用したlightGBMのハイパーパラメータのオートチューニングを紹介しました。交差検証でのパラメータの探索が簡単にできるので、是非活用してみてください。