Optunaの目的関数に引数を渡す方法

optunaは最適な機械学習のハイパーパラメータを探索するツールです。 以下はよくあるoptunaのサンプルです。

import optuna

# 目的関数
def objective(trial):
  x = trial.suggest_uniform('x', -10, 10)

  return (x - 2) ** 2

study = optuna.create_study()
study.optimize(objective, n_trials=100)

objectiveはtrial以外の引数を取りません。 ですが、他の引数を渡したい事もあります。

こういう場合はfunctools.partialを使う事で実現できます。

import optuna

# 目的関数
def objective2(trial, a):
  x = trial.suggest_uniform('x', -10, 10)

  return (x - a) ** 2

objective = functools.partial(objective2, a=2)
study = optuna.create_study()
study.optimize(objective, n_trials=100)

なお、公式のFAQに他の方法も掲載されてます。 FAQ — Optuna 2.3.0 documentation