Optuna多目标优化的最佳参数



当使用Optuna进行单目标优化时,可以使用以下命令访问研究的最佳参数:

import optuna
def objective(trial):
x = trial.suggest_uniform('x', -10, 10)
return (x - 2) ** 2
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=100)
study.best_params  # E.g. {'x': 2.002108042}

如果我想执行多目标优化,这将成为例如:

import optuna
def multi_objective(trial):
x = trial.suggest_uniform('x', -10, 10)
f1 = (x - 2) ** 2
f2 = -f1
return f1, f2
study = optuna.create_study(directions=['minimize', 'maximize'])
study.optimize(multi_objective, n_trials=100)

这个可以工作,但是study.best_params命令使用RuntimeError: The best trial of a 'study' is only supported for single-objective optimization.

失败如何获得多目标优化的最佳参数?

在多目标优化中,你通常会得到不止一个最佳试验,而是一组试验。这一组通常被称为帕累托锋。你可以通过study.best_trials获得这个帕累托前沿,或者试验列表,然后查看每个单独试验的参数,即study.best_trials[some_index].params

例如,给定最小化f1和最大化f2的方向,您可能最终得到f1(好)值较小但同时f2(坏)值较小的试验,而另一个试验可能同时具有f1(坏)和f2(好)值较大的试验。这两个试验都可以从study.best_trials返回。

最新更新