代码之家  ›  专栏  ›  技术社区  ›  Larry Baynes

多维向量的贝叶斯优化

  •  0
  • Larry Baynes  · 技术社区  · 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,).
    

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

    1 回复  |  直到 1 年前
        1
  •  0
  •   Matt Prodani    1 年前

    这里的贝叶斯优化适用于多个标量参数和此包,不支持您的矢量实现。类似地,边界是在每个参数上定义的,而不是在向量上定义的。你可以这样做:

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

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

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

    为了使其不那么冗长,您可以使用 **夸尔格 在你的函数和一些dict中,将标签映射到它们的独立项。