Optuna multi-objective 优化的最佳参数
Best parameters of an Optuna multi-objective optimization
当使用 Optuna 执行单个 objective 优化时,研究的最佳参数可使用:
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}
如果我想执行多 objective 优化,这将变成例如:
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.
如何获得多objective优化的最佳参数?
在多 objective 优化中,您通常会得到不止一个最佳试验,而是一组试验。这个集合通常被称为 Pareto 前沿。您可以通过 study.best_trials
获得帕累托前沿或试验列表,然后查看每个试验的参数,即 study.best_trials[some_index].params
.
例如,给定最小化 f1
和最大化 f2
的方向,您最终可能会得到一个 f1
值较小(好)但在f2
(坏)的同一时间值很小,而另一个试验可能对 f1
(坏)和 f2
(好)都有很大的值。这两个试验都可以从 study.best_trials
.
返回
当使用 Optuna 执行单个 objective 优化时,研究的最佳参数可使用:
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}
如果我想执行多 objective 优化,这将变成例如:
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.
如何获得多objective优化的最佳参数?
在多 objective 优化中,您通常会得到不止一个最佳试验,而是一组试验。这个集合通常被称为 Pareto 前沿。您可以通过 study.best_trials
获得帕累托前沿或试验列表,然后查看每个试验的参数,即 study.best_trials[some_index].params
.
例如,给定最小化 f1
和最大化 f2
的方向,您最终可能会得到一个 f1
值较小(好)但在f2
(坏)的同一时间值很小,而另一个试验可能对 f1
(坏)和 f2
(好)都有很大的值。这两个试验都可以从 study.best_trials
.