前提・実現したいこと
二値分類のタスクで、lightgbmを用いた分類を行いたいです。
その際の、評価指標としてaucを用いたいのですが、以前二値分類のタスクでlightgbmを用いたときはloglossを用いており、こちらは最小化したい指標ですが、aucは最大化したい指標であるため、どのように扱えばよいか悩んでいます。
発生している問題・エラーメッセージ
1, optunaでハイパーパラメータ最適化を行いたいと考えているのですが、最終行(1つ目のoptunaソースコード)は以下のどちらにすればよいのでしょうか?
python
1return Accuracy
python
1return -Accuracy
2, また、2つ目のソースコードのようにlightgbmを学習させると、aucを最大化するように学習してくれていると考えてよいのでしょうか?
以前は、このmetricにloglossを入れることでloglossを最小化するように学習してくれていたので疑問に思っています。
どうぞよろしくお願いいたします。
該当のソースコード
python
1def objective(trial): 2 params = {'objective': 'binary', 3 'metric': {'auc'}, 4 'eta':0.1, 5 'max_depth' : trial.suggest_int('max_depth', 2, 12)} 6 gbm = lgb.train(params, 7 lgb_train, 8 valid_sets=(lgb_train, lgb_eval), 9 num_boost_round=10000, 10 early_stopping_rounds=100, 11 verbose_eval=50) 12 prob = gbm.predict(X_te) 13 pred = np.round(prob) 14 15 Accuracy = roc_auc_score(y_te.values.tolist(), pred) 16 17 pruning_callback = optuna.integration.LightGBMPruningCallback(trial, 'auc') 18 return Accuracy 19 20study = optuna.create_study(sampler=optuna.samplers.RandomSampler(seed=0)) 21study.optimize(objective, timeout=60)
python
1params = {'objective': 'binary', 2 'metric': 'auc', 3 'eta': 0.5, 4 'random_state' : 1234, 5 'max_depth' : 6,} 6gbm = lgb.train(params, 7 lgb_train, 8 valid_sets=lgb_eval, 9 num_boost_round=10000, 10 early_stopping_rounds=100, 11 verbose_eval=50)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。