多维向量的贝叶斯优化

问题描述 投票:0回答:1

尝试使用贝叶斯优化包(https://github.com/fmfn/BayesianOptimization)进行参数优化时遇到困难。目标函数是输入向量,它是一个10维向量,每个条目在(-2,2)之间的约束如下。

def black_box_function(vector):
    s = 0
    for i in range (0, 10):
        s = s + vector[i]/(vector[i+1] + vector[i+2])

    return s

from bayes_opt import BayesianOptimization
pbounds = {'vector': (-2*np.ones(10), 2*np.ones(10))}

optimizer = BayesianOptimization(
    f=black_box_function,
    pbounds=pbounds,
    verbose=2, 
    random_state=1,
)

optimizer.maximize(
    init_points=2,
    n_iter=3,
)

但是出现错误:

ValueError: Output size (1,) is not compatible with broadcast dimensions of inputs (10,).

我不知道如何解决这个问题。非常感谢您的帮助。

python numpy multidimensional-array bayesian
1个回答
0
投票

该包会查找命名维度(例如 x、y),并且不支持您的矢量实现。你可以这样处理:

labels = ["x0", "x1", "x2", ...]
pbounds = {"x0": (-2, 2), "x1": (-2, 2), ... "x9": (-2, 2)}

此外,您还需要修改函数以接受关键字参数而不是 vector 参数。

def black_box_func(x0, x1, x2, ...)

为了减少冗长,您可以在函数中使用 **kwargs 和一些字典将标签映射到它们的索引。

© www.soinside.com 2019 - 2024. All rights reserved.