Python / GPyOpt: 仅优化一个参数

我目前正在尝试通过高斯优化方法,使用GPyOpt模块来寻找函数f(arg1, arg2, arg3, ...)的最小值。虽然f(...)接受多个输入参数,但我只想优化其中的一个参数。该如何实现呢?

我目前的“解决方案”是将f(...)放入一个虚拟类中,并在初始化时指定不需要优化的参数。虽然这可能是解决这个问题最符合Python风格的方法,但它也比实际需要的复杂得多。

对于函数f(x, y, method)的一个简短工作示例,其中y(一个数值)和method(一个字符串)是固定的,而x是需要优化的参数:

import GPyOptimport numpy as np# 虚拟类class TarFun(object):    # 在初始化对象时固定y    def __init__(self, y, method):        self.y = y        self.method = method    # 实际要最小化的函数    def f(self, x):        if self.method == 'sin':            return np.sin(x-self.y)        elif self.method == 'cos':            return np.cos(x-self.y)# 创建TarFun对象,固定y为2并使用'sin'方法tarFunObj = TarFun(y=2, method='sin')# 描述x的属性space = [{'name':'x', 'type': 'continuous', 'domain': (-5,5)}]# 创建仅优化x的GPyOpt对象optObj = GPyOpt.methods.BayesianOptimization(tarFunObj.f, space)

肯定有更简单的方法。但我找到的所有示例都是优化所有参数的,我无法通过阅读GitHub上的代码找到答案(我以为会在GPyOpt.core.task.space中找到相关信息,但没有找到)。


回答:

GPyOpt原生支持这种方法,称为上下文。你可以描述函数的整个域,然后在调用优化例程时通过上下文字典固定某些变量的值。API看起来像这样:

myBopt.run_optimization(..., context={'var1': .3, 'var2': 0.4})

关于上下文优化的更多细节可以在此教程笔记本中找到。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注