微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Optuna 中是否有任何等价于 hyperopts 对数正态的?

如何解决在 Optuna 中是否有任何等价于 hyperopts 对数正态的?

我正在尝试使用 Optuna 对我的模型进行超参数调整。

我被困在一个地方,我想定义一个具有对数正态/正态分布的搜索空间。在 hyperopt 中使用 hp.lognormal 是可能的。是否可以使用 suggest_ 的现有 Optuna api 的组合来定义这样的空间?

解决方法

您或许可以利用来自 suggest_float(...,1)(即 U(0,1))的逆变换,因为 Optuna 当前不直接为这两个分布提供 suggest_ 变体。这个例子可能是一个起点 https://gist.github.com/hvy/4ef02ee2945fe50718c71953e1d6381d 请找到下面的代码

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
from scipy.special import erfcinv

import optuna


def objective(trial):
    # Suggest from U(0,1) with Optuna.
    x = trial.suggest_float("x",1)

    # Inverse transform into normal.
    y0 = norm.ppf(x,loc=0,scale=1)

    # Inverse transform into lognormal.
    y1 = np.exp(-np.sqrt(2) * erfcinv(2 * x))

    return y0,y1


if __name__ == "__main__":
    n_objectives = 2  # Normal and lognormal.

    study = optuna.create_study(
        sampler=optuna.samplers.RandomSampler(),# Could be "maximize". Does not matter for this demonstration.
        directions=["minimize"] * n_objectives,)
    study.optimize(objective,n_trials=10000)

    fig,axs = plt.subplots(n_objectives)
    for i in range(n_objectives):
        axs[i].hist(list(t.values[i] for t in study.trials),bins=100)
    plt.show()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。