【问题标题】:Best parameters of an Optuna multi-objective optimizationOptuna 多目标优化的最佳参数
【发布时间】:2021-01-21 18:54:17
【问题描述】:

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

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

【问题讨论】:

    标签: python optimization optuna


    【解决方案1】:

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

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

    【讨论】:

    • study.best_trials 的所有试验中如何选择是否有任何指导方针?
    • 如果物镜的数量是两个或三个,您可以使用optuna.visualization.plot_pareto_front 绘制帕累托前沿以进行目视检查。这需要plotly。除此之外,暂时不在 Optuna 的范围内。据我了解,这是一个研究课题。
    • @Dr.Paprika 答案取决于您的问题。您可以获得 best_params_ 并过滤第一个值,然后是第二个值,或者相​​反。您可以对第一个参数更严格,但对第二个参数则不然。显然,这取决于您以及您最终想要什么。
    猜你喜欢
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 2021-11-03
    • 2021-10-07
    • 2023-03-11
    • 2021-08-03
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多