我在Python语言中使用Sklearn和GPFlow执行高斯回归。我注意到,对于相同的内核和相同的输入,我得到了非常不同的输出。我必须为sklearn内核添加一个块,因为否则矩阵是奇异的。代码如下:
import matplotlib.pyplot as plt
import numpy as np
# Tensor Flow
import tensorflow as tf
import gpflow
from gpflow.utilities import print_summary
# sklearn
from sklearn.gaussian_process import GaussianProcessRegressor; from sklearn.gaussian_process.kernels import RBF
train_x = np.linspace(0, 1, 20)[:,np.newaxis]
train_y = np.sin(train_x*2*np.pi)
eucl_temp = np.zeros((20,2))
eucl_temp[:,0] = train_x[:,0]
from scipy.spatial.distance import pdist
EUCL_DIST = pdist(eucl_temp, 'euclidean')
L_Kernel = (np.mean(EUCL_DIST)/np.sqrt(2))
kernelRBF = gpflow.kernels.SquaredExponential(variance=1.0, lengthscale = L_Kernel)
m_BEFORE = gpflow.models.GPR(data=(train_x, train_y), kernel=kernelRBF, mean_function=None)
mean_Before, var = m_BEFORE.predict_y(train_x)
kernelRBF = RBF( L_Kernel )
gpr = GaussianProcessRegressor(kernel= kernelRBF, optimizer = None, alpha = 1e-15).fit(train_x, train_y)
h = gpr.predict(train_x, return_std=False)

差异是相当巨大的。怎么会这样?
发布于 2020-02-21 02:26:15
我找到原因了。默认情况下,GPFlow模型的博伊西方差为1。如果我将该值设置得更低,则它是有效的。
https://stackoverflow.com/questions/60312389
复制相似问题