Beyond Description

icon

LightGBM (how to use)

ここではLightGBMに関する最低限の情報をまとめておきます。詳細を知りたい場合は他の人のページを見てください。

1. Import

import lightgbm as lgb

2. Parameter (scikit-learn API type)

予測の目的
 ♦ 回帰を解きたい場合は "regression"
 ♦ 分類を解きたい場合は "binary"
他にも存在する。

使用するモデルの選択
 ♦ "gbdt" : 勾配ブースティング木
 ♦ "rf" : ランダムフォレスト
 ♦ "dart" : 多重加法型回帰樹木 + Drop Out
 ♦ "goss" :

シード値が固定されていないと、再現性が担保できないため、シード値を固定する。

評価指標
 ♦ "mrse", "mae" は回帰に対して使用される。
 ♦ "binary_logloss", "auc" は分類に対して使用される。
他にも存在する。

学習回数

1に設定すると学習の途中経過を見ることができる。見る必要がない場合は-1に設定する。

指定した回数連続で評価指標に変化がなければ、収束したと判定して学習を終了する。

学習率 : 過去の結果を元にどれくらい更新するか (0.1, 0.05, 0.01派が存在する。)

モデルの深さの最大値 : 調整必須(5-9くらいが良い??)
大きいほど過学習を起こしやすい。

一つの決定木につく葉の数 : 調整必須
大きいほど過学習を起こしやすい。

L1ノルムの係数 : 調整必須
小さいほど過学習を起こしやすい。

L2ノルムの係数 : 調整必須
小さいほど過学習を起こしやすい。

各決定木においてランダムに抽出される列の割合 : 調整必須 大きいほど過学習を起こしやすい。

各決定木においてランダムに抽出されるサンプルの割合 : 調整必須
大きいほど過学習を起こしやすい。

ここで指定した繰り返しごとにバギングを実施する : 調整必須
大きいほど過学習を起こしやすい。しかし、0のときはバギングが実施されない。

1枚の葉に含まれる最小データ数 : 調整必須
小さいほど過学習を起こしやすい。

# パラメータ設定例 (設定値はデフォルト)
params = {
    'objective': 'regression', 
    'boosting_type': 'gbdt',
    'random_state': 29, # デフォルトではNoneなので必ず設定する。
    'metric': 'rmse', # 指定しないと適切な評価関数を自動補完
    'n_estimators': 100,
    'verbose': 1, 
    'early_stopping_round': 10, # デフォルト0 (0なら記述しない)
    'learning_rate': 0.1,
    'max_depth': -1, # -1は上限なしを意味する
    'num_leaves': 31,
    'reg_alpha': 0,
    'reg_lambda': 0,
    'colsample_bytree': 1.0,
    'subsample': 1.0,
    'subsample_freq': 0,
    'min_child_samples': 20
    }

3. Model making (scikit-learn API type)

# インスタンス生成
model = lgb.LGBMClassifier(**params) # 分類
model = lgb.LGBMRegressor(**params)  # 回帰
    
# 学習を実行
model.fit(X_train, y_train) # エラー

これではエラーが発生する。
early_stopping_roundを指定すると評価に使用するためのデータセットが必要になるためである。
そこで、データセットの一部をearly stoppingの評価に使用すれば解決。

# インスタンス生成
from sklearn.model_selection import train_test_split
X_train, X_eval, y_train, y_eval = train_test_split(X_train, y_train, test_size=0.2, random_state=7)
            
# 評価用のデータセットを渡して学習を実行
model.fit(X_train, Y_train, eval_set=[(X_eval, y_eval)])

4. Referenced page

my picture
I'm graduate student who aspires to be a machine learning engineer.
Swarm robotics and swarm intelligence is my field of research.