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

Parameters Hyperopt:定义依赖于其他参数的参数,parameters,hyperopt,Parameters,Hyperopt,我使用的是pythonpackagehyperopt,我有一个参数a,它要求大于参数b 例如,我希望我的参数空间是 from hyperopt import hp space = {"b": hp.uniform(0, 0.5), "a": hp.uniform(b, 0.5)} 这要求a至少大于b,我该怎么做 提前感谢一个简单的选项是使用hyperopt嵌套参数。因此,您可以根据需要定义超参数空间: space = hp.uniform("a", hp.uniform("b", 0, 0.

我使用的是
python
package
hyperopt
,我有一个参数
a
,它要求大于参数
b

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

from hyperopt import hp

space = {"b": hp.uniform(0, 0.5), "a": hp.uniform(b, 0.5)}
这要求
a
至少大于
b
,我该怎么做


提前感谢

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

space = hp.uniform("a", hp.uniform("b", 0, 0.5), 0.5)
只有
“a”
的值被传递给您优化的函数(因为这是超参数空间),但是
hyperopt.fmin()
将返回这两个参数

类似的选项,但要优化的函数同时接收两个参数:

b_var = hp.uniform("b", 0, 0.5)
space = {"b": b_var, "a": hp.uniform("a", b_var, 0.5)}
最后,改变优化函数的输入可能更简单:参数
a
可以替换为
a_分数
在0和1之间运行,并在
b
和0.5之间插值(即,
a_分数=0
产生
a=b
并且
a_分数=1
在待优化的修改函数中给出
a=0.5
)。因此,参数空间具有通常的形式:

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

在上有一个有趣的讨论。

也许我的发现可以帮助某人。我使用HyperOpt优化分段仿射函数的参数。 因此,我需要嵌套参数来正确设置x参数零件:

由于嵌套参数对HyperOpt和Optuna都不起作用(不再),我建议所有有相同问题的人都使用嵌套参数

本lib提出了两种提取分段线性函数参数的方法:

  • 通过提供零件数量
  • 通过提供断点位置
如果您和我一样对查找断点位置感兴趣,可以提供零件数量:

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]

希望有帮助!

一个选择是运行多个评估,然后从满足您约束的案例中选择最小值。这非常全面。非常感谢。我有hyperopt 0.2.3,当我尝试前两个解决方案时,包括将一个hp变量作为另一个参数,我得到
TypeError:len of pyll。应用任何一个未定义或未知
。这是预期的吗?这些解决方案不再有效吗?不幸的是,许多事情似乎已经改变:hyperopt 0.2.3甚至不接受非常简单的
hp.uniform(0,0.5)从原来的问题来看,@ ErculiBigt在当前版本的Hyopopt上有什么想法?不幸的是,你可能想看看最近的和更方便的OpTuna包。我认为这是一个答案(而不是判断质量)。因此,我删除了你自己的声明,你认为它是一个评论。请理解,如果它真的是一个评论,你不应该张贴它。请添加一个演示你如何推荐的LIB可以用来解决这个页面顶部所讨论的问题。只提及一个工具/LIB并不是真正的答案。ort和我很慷慨地判断了这里的“唯一”。但请补充一些信息。