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}")