OptunaでLightGBMのハイパーパラメータのクロスバリデーション

Source Code Software Computer機械学習

optuna ver1.5.0よりLightGBMでクロスバリデーションを行いながらハイパーパラメータの探索をおこなう機能が追加されたため、その使用方法についての紹介です。

optuna.integration — Optuna 2.3.0 documentation

scikit-learn interfaceをもつestimatorには、別のクラスが試験的に用意されており、そちらで実施可能なようです。

必要なパッケージ

optunaでLightGBM用のクロスバリデーション機能を実行するには、skleranのkFoldと、optunaとLigthGBMをインテグレートしたoptuna.integration.lightgbmをimportする必要があります。

from sklearn.model_selection import KFold
import optuna.integration.lightgbm as lgb

クロスバリデーション実行のためのクラス

LightGBMTunerCVによりクロスバリデーションを行いながらハイパーパラメータの探索が可能です。

ハイパーパラメータは、パラメータを一つずつ順番に最適化するstep-wiseな方法がとられているようです。

# クロスバリデーションによるハイパーパラメータの探索 3fold
tuner = lgb.LightGBMTunerCV(params, trainval, verbose_eval=100, early_stopping_rounds=100, folds=KFold(n_splits=3))

# ハイパーパラメータ探索の実行
tuner.run()

実行コードの例

# データ準備用
import sklearn.datasets
from sklearn.model_selection import train_test_split
# LightGBMおよび交差検定用
from sklearn.model_selection import KFold
import optuna.integration.lightgbm as lgb

# scikit-learnでお試しデータの準備
boston = sklearn.datasets.load_boston()
X_trainval, X_test, y_trainval, y_test = train_test_split(boston.data, boston.target, random_state=0)

# LightGBM用のデータセットに変換
trainval = lgb.Dataset(X_trainval, y_trainval)

# ハイパーパラメータサーチ&モデル構築
params = {'objective': 'regression',
          'metric': 'rmse',
          'random_seed':0} 

# クロスバリデーションによるハイパーパラメータの探索 3fold
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))
実行結果

Params:
 objective: regression # 設定値
 metric: rmse # 設定値
 random_seed: 0 # 設定値
 lambda_l1: 0.044785713144250304
 lambda_l2: 8.047034885116519
 num_leaves: 8
 feature_fraction: 0.44800000000000006
 bagging_fraction: 0.9123455120761703
 bagging_freq: 1
 min_child_samples: 20

コメント

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