LightGBMのチューニングガイド
LightGBMの公式ドキュメントにある下記のチューニングガイドを基に、チューニングの方法をまとめてみました。
重要なパラメーター
num_leaves
num_leavesはツリーのリーフの数を制御するパラメータです。多すぎるとモデルが複雑になり過剰適合の原因となります。一般的には、学習データのサイズや特徴量の数に応じて適切な値を設定します。
min_data_in_leaf
min_data_in_leafは各リーフに含まれる最小データ数を設定します。
最適値はサンプル数やnum_leavesに依存します。大きな値に設定するとツリーが深く成長しすぎるのを防げますが、アンダーフィッティングを引き起こす可能性があります。実際には、大規模なデータセットでは数百から数千に設定するのが一般的のようです。
max_depth
max_depthはツリーの深さを制限するパラメータです。過剰適合を防ぐために、ツリーの深さを制限することが重要です。max_depthを設定する場合、num_leavesも明示的に設定し、その値が2のmax_depth乗以下になるようにします。例えば、max_depthが7の場合、2の7乗で128となりますが、実際には過剰適合を避けるためにこれより小さな値(例えば70〜80)に設定するのが一般的のようです。
以下はOptunaでの最適化例です。
max_depth = trial.suggest_int('max_depth', 3, 7)
num_leaves = trial.suggest_int('num_leaves', 20, min(80, 2 ** max_depth))
min_data_in_leaf = trial.suggest_int('min_data_in_leaf', 100, 1000)
速度の向上
並列処理
GPU対応版の使用
max_depthの減少
num_leavesの減少
min_gain_to_splitの増加
min_data_in_leafとmin_sum_hessian_in_leafの増加
num_iterationsの減少
early_stopping_roundの使用
特徴量の事前フィルタリングを有効にする
max_binまたはmax_bin_by_featureの減少
min_data_in_binの増加
feature_fractionの減少
max_cat_thresholdの減少
バギングの使用
save_binaryでデータセットを保存
精度の向上
大きなmax_binを使用(遅くなる可能性あり)
小さなlearning_rateと大きなnum_iterationsを使用
大きなnum_leavesを使用(過剰適合の可能性あり)
大規模なトレーニングデータを使用
DART(Dropouts meet Multiple Additive Regression Trees)を試す
DARTは、LightGBMのブースティング手法の一つで、各イテレーションで一部のツリーを無視(ドロップアウト)することで、過剰適合を防ぎ、汎化性能を向上させることを目的としています。この手法は、ニューラルネットワークにおけるドロップアウトを応用しています。
DARTの適用はboosting_typeにdartを指定します。
'boosting_type': 'dart'
過剰適合の防止
max_binやnum_leavesを小さくする
min_data_in_leafとmin_sum_hessian_in_leafを設定
バギングの使用:bagging_fractionとbagging_freqを設定
特徴量のサブサンプリング:feature_fractionを設定
大規模なトレーニングデータを使用
正則化の試行:lambda_l1、lambda_l2、min_gain_to_splitを設定
ツリーの深さの制限:max_depthを設定
エクストラツリーの試行:extra_treesを使用
パススムーズの増加:path_smoothを増やす