以二维特征数组作为输入的高斯过程 - scikit-learn
Gaussian process with 2D feature array as input - scikit-learn
我需要使用 scikit-learn 库在 Python 中实现 GPR(高斯过程回归)。
我的输入 X 有两个特征。
前任。 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: Found input variables with inconsistent numbers of samples: [2, 18]
我尝试了几种方法,但找不到解决方案。如果有人能提供帮助,我将不胜感激。
你的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])
我需要使用 scikit-learn 库在 Python 中实现 GPR(高斯过程回归)。
我的输入 X 有两个特征。 前任。 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: Found input variables with inconsistent numbers of samples: [2, 18]
我尝试了几种方法,但找不到解决方案。如果有人能提供帮助,我将不胜感激。
你的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])