使用2D特征数组作为输入的高斯过程 – scikit-learn

我需要使用Python中的scikit-learn库来实现高斯过程回归(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不应该是一个矩阵,而应该是一个包含2D元素的数组:

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.]])
# 其余代码保持不变
gp.fit(X, y)
# 结果:
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核的文档,以确保使用正确的参数…

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注