【初学者向け】LGBM/CatBoost版 パラメータ – ベースライン付ガイド

実践

以前、以下の記事でXGBoostのパラメータガイドを公開いたしました。
今回はこれのLGBM/CatBoost版です。

LightGBM版パラメータチューニング

from lightgbm import LGBMRegressor 
model = LGBMRegressor( # boosting_type='gbdt',
           device='gpu',
           num_leaves=31, # 木の葉の数(基本値: 31)大きすぎると過学習リスク                        
max_depth=6, # 木の深さ(基本値: 6)葉の数と合わせて調整
feature_fraction=0.5, # 1本の木ごとの特徴量の割合(基本値: 0.5)
   
        bagging_fraction=0.8, # 学習時に使用するデータの割合(基本値: 0.8)
n_estimators=10000, # ブースティングラウンド数
learning_rate=0.02, # 各ラウンドの学習率(低めで安定性を確保)
min_child_samples=10, # 葉に含まれるデータの最小サンプル数

)

このコードをベースに、各パラメータの意味と調整の優先順位について見ていきましょう。


1. device=”gpu”

概要:
GPU環境が利用可能な場合、計算速度が大幅に向上します。
ポイント:

  • まずはGPUが利用できるか確認しましょう。
  • Kaggleやクラウド環境ではGPUが一般的に提供されるため、最初から有効にしておいても良いでしょう。

2. num_leaves & max_depth

概要:
LightGBMでは、num_leavesが各木の複雑さを決定する主要なパラメータです。
max_depthも併用することで、木の深さを制限し過学習を防ぎます。
(ベースライン値: num_leaves=31, max_depth=6)

  • num_leavesが大きすぎると、複雑すぎて過学習のリスクが上がります。
  • まずは31から始め、過学習気味であれば減らし、精度が伸び悩む場合は調整してみましょう。

3. feature_fraction & bagging_fraction

概要:
特徴量とデータのサブサンプリングで、各ツリーの多様性を確保し、過学習を防ぎます。

  • feature_fraction: 1本の木を作る際に使用する特徴量の割合。
    (ベースライン値: 0.5)
  • bagging_fraction: 学習時に利用するデータの割合。
    (ベースライン値: 0.8)
  • どちらも0~1の範囲で設定し、0.5~0.8あたりが一般的です。

4. n_estimators & learning_rate

概要:
ブースティングラウンド数と各ラウンドでの学習率の設定です。

  • n_estimatorsは多めに設定し、early_stopping_roundsで調整します。
  • learning_rateは低め(例:0.02)で設定し、安定した学習を目指します。

5. min_child_samples

概要:
各葉に含まれるデータの最小サンプル数を指定し、過学習を防ぎます。

  • 高い値に設定すると、よりロバストな(過学習しにくい)モデルになります。
  • 初学者はベースラインの10から始め、必要に応じて調整してください。

6. categorical_feature

概要:
LightGBMは、カテゴリ変数を扱う機能があり、学習前にカテゴリ型として指定することで自動的に処理します。

# カテゴリ変数の設定例 
CATS = train.select_dtypes(include=["object"]).columns.tolist()
train_data = lgb.Dataset(train[features], label=train[target], categorical_feature=CATS) 

7. early_stopping_rounds

概要:
一定ラウンド内で改善が見られなければ学習を自動停止します。

  • 過学習防止のため、early_stopping_roundsを活用することが有効です。
  • ここでは100ラウンドと設定しています。

調整の進め方(LightGBM)

  1. ベースライン設定で動作確認
    まずは上記のパラメータで学習させ、基本性能を把握。
  2. 主要パラメータの微調整
    • num_leavesmax_depth:モデルの複雑さを調整し、過学習と汎化性能のバランスを確認。
    • feature_fractionbagging_fraction:サブサンプリングの割合を変化させ、性能の変動をチェック。
  3. 学習率の調整
    cv結果を見ながら、微調整。
  4. その他のパラメータ
    min_child_samplesなど、過学習防止のためのパラメータも必要に応じて調整。

CatBoost版パラメータチューニング

from catboost import CatBoostRegressor 
model = CatBoostRegressor(task_type='GPU',
             depth=6, # 木の深さ(基本値: 6)
             iterations=10000, # ブースティングラウンド数
             learning_rate=0.02, # 各ラウンドの学習率(低めで安定性確保)
             l2_leaf_reg=3, # 正則化項。(基本値: 3)
             random_strength=1, # ランダム性の強さ(ノイズ除去に寄与)
             bagging_temperature=1, # サンプリングの温度パラメータ
one_hot_max_size=10, # カテゴリ変数のone-hotの閾値
early_stopping_rounds=100, # 改善が見られなければ学習停止

             cat_features: CATS #カテゴリ変数名のリスト
)

CatBoostは、カテゴリ変数の自動処理機能が優れています。
上記のコード例を元に、主要パラメータの意味と調整方法を確認していきましょう。


1. task_type

概要:
GPU環境での高速学習を実現します。
ポイント:

  • まずはGPUが利用できるか確認し、適宜’task_type’を設定してください。
  • クラウド環境などでは、GPUが標準的に利用可能な場合が多いです。

2. depth

概要:
各決定木の深さを指定します。
(ベースライン値: 6)

  • 深さが大きすぎると過学習リスクが高まるため、基本は6から開始し、調整を行いましょう。

3. iterations & learning_rate

概要:
CatBoostでは、iterationsがブースティングラウンド数、learning_rateが各ラウンドでの学習率です。

  • iterationsは多めに設定し、early_stopping_roundsで調整可能。
  • learning_rateは0.02など低めに設定し、学習の安定性を確保します。

4. l2_leaf_reg

概要:
葉ごとのL2正則化項です。
過学習防止に効果的です。

  • 正則化項の値を調整することで、モデルの汎化性能を改善できます。
  • 初学者はベースライン値の3から始め、必要に応じて調整してください。

5. random_strength & bagging_temperature

概要:
これらのパラメータは、モデルにランダム性を与えることでノイズに強くし、過学習を抑制します。

  • random_strength: 乱数の強さを調整します。(ベースライン値: 1)
  • bagging_temperature: サンプリングの温度パラメータ。値が大きいほど多様なサンプルが利用されます。(ベースライン値: 1)

6. one_hot_max_size

概要:
カテゴリ変数が一定のサイズ以下の場合、one-hotエンコーディングを自動で適用します。

CatBoostは、カテゴリ変数を自動的に処理するため、特に事前のエンコーディングは不要です。


7. early_stopping_rounds

概要:
指定ラウンド内に改善が見られなければ学習を停止します。

  • 過学習防止のため、early_stopping_roundsを設定し、適宜調整します。
  • ここでは100ラウンドと設定しています。

8. cat_features

概要:
カテゴリ変数を明示的に指定するパラメータです。
カテゴリ変数名ののリストを入れますが、以下のようなコードでobject型にしておく必要があることに注意してください。なお、以下のコードでは欠損値も”NaN”として新しいカテゴリとなります。

CATS =  [cat_1, cat_2,...] # カテゴリ変数名のリスト

train[CATS] = train[CATS].astype(str)
test[CATS] = test[CATS].astype(str)

ポイント:

  • カテゴリ変数をリスト形式で指定し、CatBoostが最適なエンコーディングを自動で実施できるようにします。
  • 指定する際は、カラム名またはインデックスで設定してください。
  • データセット内のカテゴリ変数を事前に把握しておくと、より効果的にモデルのパフォーマンス向上が期待できます。

調整の進め方(CatBoost)

  1. ベースライン設定で動作確認
    上記パラメータでモデルを学習させ、初期性能を確認します。
  2. 主要パラメータの微調整
    • depth:モデルの複雑さを調整し、過学習と汎化性能のバランスを確認。
    • iterationslearning_rate:cv結果を見ながら最適な組み合わせを模索します。
  3. 正則化やランダム性の調整
    l2_leaf_reg、random_strength、bagging_temperatureの値を調整し、ノイズへの対応力を強化。
  4. カテゴリ変数の扱い
    CatBoostの自動処理を活用し、必要に応じてone_hot_max_sizeを調整。

まとめ

LightGBMおよびCatBoostのパラメータチューニングでは、まずベースライン設定で各種パラメータの影響を確認し、その後主要パラメータ(ツリーの深さ、サブサンプリング、学習率など)を微調整することが重要です。
実際のコンペティションや実務では、学習曲線や評価指標を綿密に観察し、各パラメータの最適な組み合わせを見つけるプロセスが不可欠です。
まずはベースライン設定で動作確認し、そこから各パラメータの挙動を理解して調整していくといいでしょう。

コメント

タイトルとURLをコピーしました