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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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