首页 > 解决方案 > 使用 sklearn 和 GPFlow 的高斯回归

问题描述

我在 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)

使用 sklearn 和 GPFlow 的 GPR

差异是相当大的。怎么来的?

标签: pythonpython-3.xtensorflowmachine-learningscikit-learn

解决方案


我发现了原因。默认情况下,GPFlow 模型的博伊斯方差为 1。如果我将值设置得较低,它就可以工作。


推荐阅读