繁体   English   中英

以二维特征数组为输入的高斯过程 - 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:发现样本数量不一致的输入变量:[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]) 

但我对此不太确定 - 请务必检查文档以获取RBFMatern内核的正确参数......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM