optunaで study = optuna.create_study(direction="maximize")
するときにdirectionを指定しますが、これは目的関数と評価関数のどちらを対象にしているのかドキュメントを読んでも釈然としません。今回はlightgbmでaucを最大化したいです。
以下のコードではlightgbmのパラメータにaucを渡しているだけなのでちゃんとaucが最大化されているか疑わしいのですが、目的関数と評価関数のどちらが対象か教えていただけますでしょうか。
def setup_logger(out_file=None, stderr=True, stderr_level=logging.INFO, file_level=logging.DEBUG): auc_list=[] def objective(trial): logger.info('{} START:'.format(trial.number)) data = pd.read_pickle(f'{PATH}prd_tr.pkl') test = pd.read_pickle(f'{PATH}prd_te.pkl') target = pd.read_pickle(f'{PATH}y.pkl') train_x, test_x, train_y, test_y = train_test_split(data, target, test_size=0.25) dtrain = lgb.Dataset(train_x, label=train_y) param = { 'objective': 'binary', 'metric': 'auc', '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.train(param, dtrain) preds = gbm.predict(test_x) pred_labels = np.rint(preds) accuracy = sklearn.metrics.accuracy_score(test_y, pred_labels) rocauc = roc_auc_score(test_y.values.tolist(), preds) auc_list.append(rocauc) pruning_callback = optuna.integration.LightGBMPruningCallback(trial, 'auc') return accuracy if __name__ == "__main__": study = optuna.create_study(direction="maximize") study.optimize(objective, n_trials=100) trial = study.best_trial train = pd.read_pickle(f'{PATH}prd_tr.pkl') test = pd.read_pickle(f'{PATH}prd_te.pkl') y = pd.read_pickle(f'{PATH}y.pkl') dtrain = lgb.Dataset(train, label=y) gbm = lgb.train(trial.params, dtrain) preds = gbm.predict(test) pred_labels = np.abs(np.rint(preds)) pred_labels = pred_labels.astype(np.int)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/15 03:01