使用 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 的高斯回归的主要内容,如果未能解决你的问题,请参考以下文章

在 sklearn python 中使用高斯过程回归时出错

Sklearn:使用预训练的超参数高斯过程回归

SKlearn:高斯过程回归在学习期间没有改变

sklearn 高斯过程回归器中的优化器调整

PyMC3 贝叶斯线性回归预测与 sklearn.datasets

如何在sklearn的python代码中使用SwarmPackagePy进行回归?