👋

OptunaのLightGBMTunerに学ぶ、LightGBMのハイパーパラメーターのチューニング方法

2023/08/06に公開

概要

OptunaのLightGBMTunerを読んでいたら、LightGBMTunerにハイパラチューニングのナレッジがぶっこまれていたのでシェア。

https://optuna.readthedocs.io/en/stable/_modules/optuna/integration/_lightgbm_tuner/optimize.html#LightGBMTuner


何をチューニングすればいいの?

以下に「feature fraction, num_leaves, bagging_fraction および bagging_freq のいずれかによる変化が大きく」と記載がある。

日本語にすると「変数選択の割合、葉の数、標本抽出の割合と頻度」の4つ。

https://tech.preferred.jp/wp-content/uploads/2020/01/image1.png

https://tech.preferred.jp/ja/blog/hyperparameter-tuning-with-optuna-integration-lightgbm-tuner/


どの順番でチューニングするとよいのか?

PFNのページに「重要なハイパーパラメータから順に最適なハイパーパラメータをチューニングする」と書いてある。この順番については明記がないが、ソースコードも合わせて見ると、以下の順番のようだ。

日本語でまとめると、以下の順番でチューニングしていることになる。
変数選択の割合 → 葉の数 → 標本抽出の割合(と頻度)→ 正則化 → 葉に含まれるデータ数

  • feature_fraction
  • num_leaves
  • bagging_fraction, bagging_freq
  • feature_fraction (2回目)
  • lambda_l1, lambda_l2
  • min_data_in_leaf

https://optuna.readthedocs.io/en/stable/_modules/optuna/integration/_lightgbm_tuner/optimize.html#LightGBMTuner


チューニングする順番、範囲、回数のまとめ

同じく、上記のソースコードからまとめました。回数はoptunaで試行する回数を指します。

工程 範囲 回数
feature_fraction 0.4-1.0 7回
num_leaves 2-256 20回
bagging_fraction, bagging_freq bagging_fraction: 0.4..1.0, bagging_freq: 1..7 10回
feature_fraction(2回目) 1回目±0.08 6回
lambda_l1, lambda_l2 lambda_l1: 1e-8..10.0, lambda_l2: 1e-8..10.0 20回
min_data_in_leaf 5,10,25,50,100 5回

変数選択の割合は2回チューニングしていることからもかなり重視されていることがわかります。


感想

こういう、ある程度やってたらわかる勘どころを公開してくれているのは非常に助かります(しかも日本最強格のKagglerが作ってくれているので本当に土下座ものです🙇‍♂)。

個人的には、 変数選択の割合 → 葉の数 → 標本抽出の割合(と頻度)→ 正則化 → 葉に含まれるデータ数 という順番でチューニングしていくという流れ自体が非常に参考になりました(!)

Discussion