使用 sklearn 和 GPFlow 的高斯回归
Posted
技术标签:
【中文标题】使用 sklearn 和 GPFlow 的高斯回归【英文标题】:Gaussian Regression using sklearn and GPFlow 【发布时间】:2020-06-04 07:59:52 【问题描述】:我正在使用 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)
差异非常大。怎么会?
【问题讨论】:
【参考方案1】:我找到了原因。默认情况下,GPFlow 模型的博伊斯方差为 1。如果我将值设置得较低,它就可以工作。
【讨论】:
以上是关于使用 sklearn 和 GPFlow 的高斯回归的主要内容,如果未能解决你的问题,请参考以下文章