TypeError при использовании алгоритмов оптимизации scipy с ядром RBF в GaussianProcessRegressor Scikit-learn

Я пытаюсь оптимизировать гиперпараметры, используя 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 в своей работе.

Любая помощь будет оценена. Спасибо.


person santobedi    schedule 17.05.2018    source источник
comment
Привет, я заметил, что у вас есть привычка вставлять код Python в виде фрагментов html или js. Пожалуйста, не делайте этого, потому что браузер все равно не может запустить код Python, а подсветка синтаксиса отсутствует. Смотрите мое редактирование, как правильно форматировать код Python.   -  person kazemakase    schedule 17.05.2018
comment
Что означает 1/obj_func? Обратная функция или обратная величина возвращаемых значений из obj_func?   -  person Vivek Kumar    schedule 18.05.2018
comment
@VivekKumar Это обратная функция.   -  person santobedi    schedule 18.05.2018
comment
Пожалуйста, объясните подробнее (желательно отредактируйте свой вопрос), что должен делать 1/obj_func?   -  person Vivek Kumar    schedule 18.05.2018
comment
@VivekKumar Я спросил этот вопрос, однако ответ не решает мою проблему (хотя он помог мне понять). obj_func там объясняется. Если хотите, я могу переписать и этот вопрос.   -  person santobedi    schedule 18.05.2018
comment
Ну, во-первых, нужно удалить часть (rosen,[10,20,30,40], [0,100]) из GaussianProcessRegressor(...). obj_func будет предоставлен георадаром.   -  person Vivek Kumar    schedule 18.05.2018
comment
@VivekKumar Я сделал. Я использовал gp = GaussianProcessRegressor(kernel=kernel, optimizer= trust_region_optimizer, alpha =1.2, n_restarts_optimizer=10) и все равно получаю TypeError: unsupported operand type(s) for /: 'int' and 'function' . :(   -  person santobedi    schedule 18.05.2018