optunaによるパラメーターチューニング

1. optuna によるLightGBMのパラメーターチューニング

参考サイト:


(1) optunaライブラリのインストール

 - LightGBM用のoptunaがあるのでそれをインストール

  import optuna.integration.lightgbm as lgb_optuna


(2) object関数の用意とチューニング

  • optunaでは、自動チューニング対象パラメーターとパラメーター数値の探索範囲の設定、対象モデルの設定、検証設定をobject関数に記述する。
  • params辞書に対象パラメーターと探索範囲を設定
  • paramsでの探索範囲の整数、浮動小数点、一様分布などは、traialオブジェクトで設定。
  • create_study()メソッドでインスタント作成
  • optimize()メソッドに作成したobject関数を渡し、チューニング。
  • チューニングは、optimize()の引数に指定する'timeout'で探索時間を指定するか、'n_trials'で指定した探索回数探す。どちらも指定しない場合は、Ctrl+Cで止めるまで探し続ける。
  • object関数内で、validationにtestデータを指定(下の例では、lgb_testがvalidation用データで、optuna.train()の引数valid_setsに渡している)する場合は、出来上がったモデルの評価用のデータ欲しくなるので、元データを3つ(train, test, last_test)に分割する必要がある。


  • 例)回帰モデル用のobject関数とチューニング結果

  # LightGBM用にデータを加工

  lgb_train = lgb.Dataset(x_train, y_train)

  lgb_test = lgb.Dataset(x_test, y_test)

  # ojbect関数の作成

  def objective(trial):

    # params辞書にパラメーター毎の探索は陰萎を設定。

    params = {

      'objective': 'regression',

      'metric': 'rmse',

      'lambda_l1': trial.suggest_loguniform('lambda_l1', 1e-8, 10.0),

      'lambda_l2': trial.suggest_loguniform('lambda_l2', 1e-8, 10.0),

      'num_leaves': trial.suggest_int('num_leaves', 2, 256),

      'feature_fraction': trial.suggest_uniform('feature_fraction', 0.4, 1.0),

      'bagging_fraction': trial.suggest_uniform('bagging_fraction', 0.4, 1.0),

      'bagging_freq': trial.suggest_int('bagging_freq', 1, 7),

      'min_child_samples': trial.suggest_int('min_child_samples', 5, 100),

    }

    # 訓練

    gbm = lgb_optuna.train(params,

               lgb_train,

               valid_sets=(lgb_train, lgb_test),

               num_boost_round=10000,

               early_stopping_rounds=100,

               verbose_eval=50)

    # 予測と検証(検証はテストデータ利用)

    predicted = gbm.predict(x_test)

    RMSE_score = np.sqrt(mean_squared_error(y_test, predicted))

    return RMSE_score

  # インスタンス作成して、チューニング

  study_gbm = optuna.create_study()

  study_gbm.optimize(objective, timeout=3600) #一時間で打ち切る

  # 結果

  print('誤差最小値:',study_gbm.best_value)

  print('パラメーター:',study_gbm.best_params)



LightGBMのパラメーターチューニング参考サイト



2. optunaによる、XGBoostのパラメータチューニング

以下の例は、回帰モデル

# 利用ライブラリ

import optuna

import xgboost as xgb

結果:

best score: 0.116

parameters: {'n_estimators': 998, 'max_depth': 16, 'min_child_weight': 4, 'learning_rate': 0.01, 'scale_pos_weight': 14, 'subsample': 0.5, 'colsample_bytree': 0.9}

機械学習Tips保管庫

データ解析、機械学習のための学習内容の保管庫。復習用。

0コメント

  • 1000 / 1000