ValueError при использовании байесовской оптимизации по модели scikit GP
Я использую регрессию гауссовского процесса с 4 входами и одним выходом. Цель состоит в том, чтобы найти оптимальный X, выполнив байесовскую оптимизацию по подобранной модели.
Я подхожу к модели следующим образом:
kernel = C(1.0, (1e-4, 1e4))*RBF(1.0,(1e-3,1e3))
model = GaussianProcessRegressor(kernel = kernel, n_restarts_optimizer = 10,optimizer='fmin_l_bfgs_b')
model.fit(X,Y)
До сих пор я использовал это для оптимизации:
bayesian_optimization = gp_minimize(lambda x: -model.predict(np.array([x])[0]),
[(0.0, 7.0), (0.0, 7.0),(0.0, 7.0),(0.0, 7.0)],
acq_func="EI",
n_calls=15,
n_random_starts=5,
random_state=1234)
Я получаю следующую ошибку:
ValueError: Expected 2D array, got 1D array instead:
array=[3.48364567 5.72486909 4.28478326 5.39951943].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
Не уверен, можно ли вообще решить проблему, я уже пробовал:
bayesian_optimization = gp_minimize(lambda x: -model.predict(np.array([x]).reshape(1,-1)[0]),
[(0.0, 7.0), (0.0, 7.0),(0.0, 7.0),(0.0, 7.0)],
acq_func="EI",
n_calls=15,
n_random_starts=5,
random_state=1234)
а также
bayesian_optimization = gp_minimize(lambda x: -model.predict(np.array([x]).reshape(-1, 1)[0]),
[(0.0, 7.0), (0.0, 7.0),(0.0, 7.0),(0.0, 7.0)],
acq_func="EI",
n_calls=15,
n_random_starts=5,
random_state=1234)
но безуспешно. Есть идеи, как решить такую проблему?
1 ответ
Решение
В первом варианте вы позвонили
model.predict(np.array([x])[0])
, который не работает, когда вы передаете одномерный массив методу прогнозирования. Вместо этого вам нужно
model.predict(np.array([x]))[0]
.
Было бы проще обнаружить эту ошибку, используя неанонимную целевую функцию, например
def objective(x):
x = np.array([x])
return - model.predict(x)[0]