Гауссовский процесс с двумерным массивом объектов в качестве входных данных - scikit-learn - PullRequest
0 голосов
/ 06 июня 2018

Мне нужно реализовать GPR (гауссовскую регрессию процесса) в Python с использованием библиотеки scikit-learn.

Мой ввод X имеет две особенности.Ex.X = [x1, x2].И вывод - это одно измерение y = [y1]

Я хочу использовать два ядра;RBF и Matern, так что RBF использует функцию «x1», в то время как Matern использует функцию «x2».Я пробовал следующее:

import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import Matern as M, RBF as R

X = np.matrix([[1.,2], [3.,4], [5.,1], [6.,5],[4, 7.],[ 9,8.], [1.,2], [3.,4], [5.,1], [6.,5],[4, 7.],[ 9,8.],[1.,2], [3.,4], [5.,1], [6.,5],[4, 7.],[ 9,8.]]).T

y=[0.84147098,  0.42336002, -4.79462137, -1.67649299,  4.59890619,  7.91486597, 0.84147098,  0.42336002, -4.79462137, -1.67649299,  4.59890619,  7.91486597, 0.84147098,  0.42336002, -4.79462137, -1.67649299,  4.59890619,  7.91486597]

kernel = R(X[0]) * M(X[1])
gp = GaussianProcessRegressor(kernel=kernel)

gp.fit(X, y)

Но это выдает ошибку

ValueError: Найдены входные переменные с непоследовательным количеством выборок: [2, 18]

Я пробовал несколько способов, но не смог найти решение.Очень ценю, если кто-то может помочь.

1 Ответ

0 голосов
/ 07 июня 2018

Ваш X должен быть не матрицей, а массивом двухмерных элементов:

X = np.array([[1.,2], [3.,4], [5.,1], [6.,5],[4, 7.],[ 9,8.], [1.,2], [3.,4], [5.,1], [6.,5],[4, 7.],[ 9,8.],[1.,2], [3.,4], [5.,1], [6.,5],[4, 7.],[ 9,8.]])

# rest of your code as is

gp.fit(X, y)

# result:

GaussianProcessRegressor(alpha=1e-10, copy_X_train=True,
             kernel=RBF(length_scale=[1, 2]) * Matern(length_scale=[3, 4], nu=1.5),
             n_restarts_optimizer=0, normalize_y=False,
             optimizer='fmin_l_bfgs_b', random_state=None)

Тем не менее, ваше определение ядра не будет делать то, что вы хотите;скорее всего, вам придется изменить его на

kernel = R([1,0]) * M([0,1]) 

, но я не совсем уверен в этом - не забудьте проверить документацию на правильность аргументов RBF и Matern ядра ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...