1. optuna によるLightGBMのパラメーターチューニング
参考サイト:
- Optuna の拡張機能 LightGBM Tuner によるハイパーパラメータ自動最適化
- XGBoostでOptunaを使う
- Optunaでパラメータチューニング
- optunaでハイパーパラメータ最適化
- Optunaでハイパーパラメータチューニング
- optunaドキュメント
(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}
0コメント