python - 使用 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)
差异是相当大的。怎么来的?
解决方案
我发现了原因。默认情况下,GPFlow 模型的博伊斯方差为 1。如果我将值设置得较低,它就可以工作。
推荐阅读
- php - 为什么 Laravel 5.6 中的自定义验证不起作用?
- python - 在 Flask 中使用 Celery 时无法导入名称 App
- mysql - TypeError:无法读取登录路径中未定义的属性“密码”
- python - 运行 main.py: (null),无法打开 main.py,中止
- java - 如何使用 CSS 设置 JavaFX 圆半径?
- ruby-on-rails - 如何修复此错误“gem install bootsnap -v '1.4.4'?
- ionic-framework - 如何在 ziggeo 中为 Ionic 3 框架控制相机重拍
- javascript - 如何在没有评估的情况下顺序测试对象的有效性?
- binary-tree - 比特币默克尔树总是二元的吗?
- ios - iOS - 在设备设置中,如果我更改时间,即使在应用程序后台、已终止状态下它也应该得到通知