尝试使用贝叶斯优化包(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,).
我不知道如何解决这个问题。非常感谢您的帮助。
该包会查找命名维度(例如 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 和一些字典将标签映射到它们的索引。