質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4987閲覧

optuna directionは目的関数と評価関数どちらを対象にしているのか

esklia

総合スコア81

Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/14 10:02

編集2021/07/14 10:02

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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

目的関数objectiveの戻り値を対象としています。

Optuna公式Tutorial
In optuna, conventionally functions to be optimized are named objective.This function returns the value of (????−2)2. Our goal is to find the value of x that minimizes the output of the objective function.

directionの説明は、公式の文章はわかりにくいので、こちらを参照ください。

Optunaでハイパーパラメータの自動チューニング
目的関数を定義し、Studyで最適化(スコア最小化)を実行します。なお、スコア最大化の場合は以下のコードを使います。

投稿2021/07/14 11:53

toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

esklia

2021/07/15 03:01

教えていただき感謝いたします。実は一つ目に挙げていただいたドキュメントは読んでいたのですが、minimizes the output of the objective function. からoptimize関数のdirectionも決まるよね、といった理解ができなかったので示していただき大変勉強になりました。 二つ目のほうも詳しく読んでみます。今回はlightgbmの設定にも慣れていなかったので余計に混乱してしまったようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問