作者:斗就斗D_994 | 来源:互联网 | 2022-12-01 10:46
我正在使用python
package hyperopt
并且我有一个参数a
,该参数必须大于parameter b
。
例如,我希望我的参数空间像
space = {"b": hp.uniform(0, 0.5), "a": hp.uniform(b, 0.5)}
要求a
至少大于b
,我该怎么做?
提前致谢
1> Eric O Lebig..:
一个简单的选择是使用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_fraction
在0和1之间运行以及在b
和0.5 之间进行插值来替换参数(即,a_fraction = 0
产生a = b
并a_fraction = 1
提供a = 0.5
要优化的内部修改函数)。因此,参数空间具有通常的形式:
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上进行了有趣的讨论。