Я пытаюсь оптимизировать гиперпараметры, используя trust_region_optimizer
из scipy .Оптимизатор логарифмического правдоподобия внутренне необходимо максимизировать в моем случае.Scipy наименьших квадратов минимизировать целевую функцию, поэтому мне нужно минимизировать обратное значение целевой функции.Ниже приведен мой код:
import numpy as np
from scipy.optimize import minimize,least_squares
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
from scipy.optimize import least_squares,rosen
def trust_region_optimizer(obj_func, initial_theta, bounds):
trust_region_method = least_squares(1/obj_func,initial_theta,bounds,method='trf')
return (trust_region_method.x,trust_region_method.fun)
X=np.random.random((10,4))
y=np.random.random((10,1))
kernel = C(1.0, (1e-5, 1e5)) * RBF(10.0)
gp = GaussianProcessRegressor(kernel=kernel, optimizer = trust_region_optimizer(rosen,[10,20,30,40], [0,100]), alpha =1.2, n_restarts_optimizer=10)
gp.fit(X, y)
Во время выполнения вышеуказанного кода, я получаю следующую ошибку на консоли:
TypeError: unsupported operand type(s) for /: 'int' and 'function'
Однако, если я удаляю kernel
, нетошибка вообще.
Я пытался заменить 1/obj_func
на obj_func
, я получаю следующую ошибку:
ValueError:jac` must be '2-point', '3-point', 'cs' or callable`
Однако я не могу заменить 1/obj_func
на obj_func
вмоя работа.
Любая помощь будет оценена.Спасибо.