Open2

optuna再入門

名無し。名無し。

はじめに

optuna を昔仕事で使っていたが、しばらく使う機会がなく忘れてるので再入門する。基本的な使い方とコンペで使う時にどうやって再現性と実行速度のバランスを取るかをとりあえず抑えることとして、他に覚えておきたいポイントをドキュメントからピックアップしたい。

名無し。名無し。

optimizerにn_jobs=-1を指定すると(昔コード読んだ記憶ではjoblibで)並列実行するが、これを指定すると若干結果が揺れる。n_jobs=1でも十分早く結果の再現性も問題なさそう.

以下のように書いて10回同じ設定で同じスコアになることを確認した

import optuna

def objective(trial: optuna.Trial) -> float:
    # ここに最適化の評価値を返すような処理を書く
    # a = trial.suggest_float("a", 0.0, 1.0)
    # b = trial.suggest_float("b", 0.0, 1.0)
    # score = score_fn(a, b) みたいに
    ...
    return score

study = optuna.create_study(
    direction="maximize", study_name="optimize", sampler=optuna.samplers.TPESampler(seed=42)
)
study.optimize(objective, n_trials=n_trials, n_jobs=1)
print(f"Best params: {study.best_params}, Best score: {study.best_value}")