首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python / GPyOpt:只优化一个参数

Python / GPyOpt:只优化一个参数
EN

Stack Overflow用户
提问于 2018-07-30 22:19:14
回答 2查看 759关注 0票数 1

我目前正在尝试使用GPyOpt模块通过高斯优化找到一些函数f(arg1, arg2, arg3, ...)的最小值。虽然f(...)接受许多输入参数,但我只想优化其中的一个。你怎么做到的?

我目前的“解决方案”是将f(...)放在一个虚拟类中,并在初始化它时指定不需要优化的参数。虽然这可以说是解决这个问题的最pythonesque式的方法,但它也比它应有的复杂得多。

优化f(x, y, method)时使用固定y (数字)和method (字符串)的函数x的简短工作示例

代码语言:javascript
复制
import GPyOpt
import numpy as np

# dummy class
class TarFun(object):
    # fix y while initializing the object
    def __init__(self, y, method):
        self.y = y
        self.method = method
    # actual function to be minimized
    def f(self, x):
        if self.method == 'sin':
            return np.sin(x-self.y)
        elif self.method == 'cos':
            return np.cos(x-self.y)

# create TarFun object with y fixed to 2 and use 'sin' method
tarFunObj = TarFun(y=2, method='sin')
# describe properties of x
space = [{'name':'x', 'type': 'continuous', 'domain': (-5,5)}]
# create GPyOpt object that will only optimize x
optObj = GPyOpt.methods.BayesianOptimization(tarFunObj.f, space)

肯定有一种更简单的方法。但我发现的所有示例都优化了所有参数,并且我无法在github上阅读代码(我以为我可以在GPyOpt.core.task.space中找到信息,但没有运气)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-18 00:29:18

GPyOpt通过上下文原生地支持这一点。你描述你的函数的整个领域,然后在调用优化例程时用上下文字典固定一些变量的值。API看起来像这样:

代码语言:javascript
复制
myBopt.run_optimization(..., context={'var1': .3, 'var2': 0.4})

有关上下文优化的更多详细信息,请参阅此tutorial notebook

票数 1
EN

Stack Overflow用户

发布于 2018-08-09 05:41:59

我会从functools标准库中检出partial函数。它允许您部分指定一个函数,例如:

代码语言:javascript
复制
import GPyOpt
import numpy as np
from functools import partial


def f(x, y=0):
    return np.sin(x - y)


objective = partial(f, y=2)
space = [{'name': 'x', 'type': 'continuous', 'domain': (-5, 5)}]

opt = GPyOpt.methods.BayesianOptimization(
    objective, domain=space
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51596088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档