1

我正在使用 hyperopt 来搜索算法的超参数。有三个数字需要优化w1w2w3。这三个数应满足条件s1+w2+w3=1。我这样定义搜索空间:

space = {
        'w1': hp.unifrom('w1', 0, 1),
        'w2': hp.unifrom('w2', 0, 1),
        'w3': hp.unifrom('w3', 0, 1),
}

问题是它们不能被总结为 1,这不是我希望的。我怎样才能让它工作?

4

1 回答 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 个要计算的值,我会说第二个是最好的,但如果你有更多的值,第一个会更好

于 2020-12-24T11:50:39.200 回答