0

使用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.

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

4

1 回答 1

4

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

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

于 2021-01-21T23:56:09.707 回答