首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hyperopt:定义依赖于其他参数的参数

Hyperopt:定义依赖于其他参数的参数
EN

Stack Overflow用户
提问于 2018-10-29 08:28:25
回答 2查看 2.5K关注 0票数 5

我使用的是pythonhyperopt,并且我有一个参数a,它需要大于参数b

例如,我希望我的参数空间像

代码语言:javascript
复制
from hyperopt import hp

space = {"b": hp.uniform(0, 0.5), "a": hp.uniform(b, 0.5)}

这就要求a至少要比b大,我怎么能做到呢?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-24 18:42:58

一个简单的选项是使用hyperopt嵌套参数的能力。因此,您可以根据需要定义一个超参数空间:

代码语言:javascript
复制
space = hp.uniform("a", hp.uniform("b", 0, 0.5), 0.5)

只有"a"的值传递给您优化的函数(因为这是超参数空间),但是hyperopt.fmin()将返回这两个参数。

类似的选项,但要优化的函数接收这两个参数的情况是:

代码语言:javascript
复制
b_var = hp.uniform("b", 0, 0.5)
space = {"b": b_var, "a": hp.uniform("a", b_var, 0.5)}

最后,可以更简单地更改优化函数的输入:参数a可以替换为运行在0到1之间的a_fraction和在b和0.5之间的插值(即a_fraction = 0产量a = ba_fraction = 1给出要优化的修改函数中的a = 0.5 )。因此,参数空间具有通常的形式:

代码语言:javascript
复制
space = {"b": hp.uniform("b", 0, 0.5), "a_fraction": hp.uniform("a_fraction", 0, 1)}

https://github.com/hyperopt/hyperopt/issues/175#issuecomment-29401501有一个有趣的讨论。

票数 12
EN

Stack Overflow用户

发布于 2021-05-04 13:15:17

也许我的发现能帮上忙。我使用HyperOpt来优化分段仿射函数的参数。因此,我需要嵌套参数来正确设置x参数部件:

由于嵌套参数不再适用于HyperOpt,也不适用于Optuna.我向所有有相同问题的人推荐pwlf库

这个库提出了两种提取分段线性函数参数的方法:

  • 通过提供零件的数量
  • 通过提供断点位置

如果像我一样,您有兴趣找到断点位置,您可以提供部件的数量:

代码语言:javascript
复制
import pwlf
import pandas as pd

data = pd.DataFrame.from_dict({
    "x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    "y": [0, 4, 6, 7, 8, 9, 10, 7, 3, 1],
})

model = pwlf.PiecewiseLinFit(data.x, data.y)
nb_parts = 3
model.fit(nb_parts)

print(f"x part intersections: {model.fit_breaks}")
# x part intersections: [0. 1.99 6.00 9.]
print(f"linear coefficient of each part: {model.slopes}")
# linear coefficient of each part: [ 4.00,  1.00, -3.00]
print(f"linear bias of each part: {model.intercepts}")
# linear bias of each part: [-7.11e-06,  5.99e+00,  3.00e+01]

希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53041467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档