Это пример кода, необходимого для запуска байесовской оптимизации неизвестной целевой функции «черный ящик» с дискретными точками данных, включенными в пример кода, чтобы вы могли легко изменять числа и легко выполнять собственную оптимизацию. Это предназначено для того, чтобы помочь исследователям быстро и легко проводить свои собственные эксперименты, не тратя много времени на изучение python, numpy, GPyOpt и т. д.
Пример кода 1D
Этот код можно использовать для оптимизации функции 2D-черного ящика, просто заменив ее собственными точками данных.
Примечание: измените данные в
X_данные и Y_данные
изменить границы домена в соответствии с вашими конкретными данными
для вашего конкретного эксперимента выберите функцию сбора данных, которая, по вашему мнению, лучше всего подходит для решения вашей задачи.
Acquisition_type=’__’,
тип используемой функции сбора данных. — «EI», ожидаемое улучшение. — «EI_MCMC», интегрированное ожидаемое улучшение (требуется модель GP_MCMC). — «ИМБ», максимальная вероятность улучшения. — «MPI_MCMC», максимальная вероятность улучшения (требуется модель GP_MCMC). — «LCB», GP — нижняя доверительная граница. — «LCB_MCMC», интегрированная нижняя доверительная граница GP (требуется модель GP_MCMC).
from GPyOpt.methods import BayesianOptimization import numpy as np Y_Data = np.array([ [0.5], [0.59], [0.7], [0.92], [0.86]]) X_Data = np.array([ [2], [3], [4], [8], [16]]) domain = [{'name': 'var_1', 'type': 'continuous', 'domain': (.1,3)}] myBopt = BayesianOptimization( f=None, domain=domain, model_type='GP', X = X_Data, Y = -Y_Data, acquisition_type='EI', verbosity=True, normalize_Y = False, maximize = True, exact_feval = False) x_next = myBopt.suggest_next_locations() print("next point to evaluate") print(x_next) myBopt.plot_acquisition()
вывод должен быть:
следующая точка для оценки
[[11.16726975]]
2D пример кода
Этот код можно использовать для оптимизации функции 2D-черного ящика, просто заменив ее собственными точками данных.
Примечание: измените данные в
xy_init и z_init
для вашего конкретного эксперимента и выберите функцию сбора данных, которая, по вашему мнению, лучше всего подходит для вашей задачи.
Acquisition_type=’__’,
тип используемой функции сбора данных. — «EI», ожидаемое улучшение. — «EI_MCMC», интегрированное ожидаемое улучшение (требуется модель GP_MCMC). — «ИМБ», максимальная вероятность улучшения. — «MPI_MCMC», максимальная вероятность улучшения (требуется модель GP_MCMC). — «LCB», GP — нижняя доверительная граница. — «LCB_MCMC», интегрированная нижняя доверительная граница GP (требуется модель GP_MCMC).
from GPyOpt.methods import BayesianOptimization import numpy as np import GPyOpt xy_init = np.array([ [2, 5], [3, 5.9], [4, 7], [8, 9.2], [1.6, 8.6] ] ) z_init = np.array([[83.9],[72.1],[94.8],[63],[54.4]])*(-1) domain = [{'name': 'xy_init', 'type': 'continuous', 'domain': (0,10)}, {'name': 'z_init', 'type': 'continuous', 'domain': (0,10)}, ] bo_step = GPyOpt.methods.BayesianOptimization( f = None, domain = domain, model_type='GP', acquisition_type='EI', X = xy_init, Y = z_init ) x_next = bo_step.suggest_next_locations() print("Value of (x,y) that next should be evaluated, to minimize the objective func:"+str(x_next)) print("current max") print(np.sum(x_next)) bo_step.plot_acquisition()
вывод будет:
Значение (x,y), которое следует вычислить следующим образом, чтобы минимизировать целевую функцию: [[4,42626 0,53062734]]
текущий максимум
4,956887334695302