В настоящее время я пытаюсь найти минимум некоторой функции f(arg1, arg2, arg3, ...)
с помощью оптимизации по Гауссу, используя модуль GPyOpt. Хотя f(...)
принимает много входных аргументов, я хочу оптимизировать только один из них. Как ты это делаешь?
Мое текущее «решение» состоит в том, чтобы поместить f(...)
в фиктивный класс и указать неоптимизируемые аргументы при его инициализации. Хотя это, возможно, самый питоновский способ решения этой проблемы, он также намного сложнее, чем имеет право быть.
Краткий рабочий пример для функции f(x, y, method)
с фиксированными y
(числовым) и method
(строка) при оптимизации x
:
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 , но не повезло).