optuna ver1.5.0よりLightGBMでクロスバリデーションを行いながらハイパーパラメータの探索をおこなう機能が追加されたため、その使用方法についての紹介です。
optuna.integration — Optuna 3.6.1 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))
コメント