我正在使用 hyperopt 来搜索算法的超参数。有三个数字需要优化w1
:w2
和w3
。这三个数应满足条件s1+w2+w3=1
。我这样定义搜索空间:
space = {
'w1': hp.unifrom('w1', 0, 1),
'w2': hp.unifrom('w2', 0, 1),
'w3': hp.unifrom('w3', 0, 1),
}
问题是它们不能被总结为 1,这不是我希望的。我怎样才能让它工作?
对我来说,你有两种可能
一、使用softmax
space = {
'w1': hp.uniform('w1', 0, 10), # 10 instead of 1 to cover almost all the space
'w2': hp.uniform('w2', 0, 10),
'w3': hp.uniform('w3', 0, 10),
}
# in your objective function, args is the name of your parameter argument
w1, w2, w3 = scipy.special.softmax([args["w1"], args["w2"], args["w3"]])
二、利用其余比例
space = {
'w1': hp.uniform('w1', 0, 1),
'w2': hp.uniform('w2', 0, 1),
}
# in your objective function, args is the name of your parameter argument
w1 = args["w1"]
w2 = (1 - args["w1"]) * args["w2"]
w3 = (1 - args["w1"]) * (1 - args["w2"])
如果你有 3 个要计算的值,我会说第二个是最好的,但如果你有更多的值,第一个会更好