高斯过程回归解释行为

2024-09-23 22:24:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究GP回归,但我得到了一些我不理解的行为。 基本上,我想在Oscillatory Genz函数(基本上是一个周期波)上显示GP的收敛性,这让我看到了这张图片Gp convergence, sorry for the missing labels (x axis: num samples, y axis: relative error measure in 2000 points)

这没关系,但我很好奇为什么过了这么久错误才开始消失。绘制生成的GP拟合我得到了这个(忙碌)图GP fit is orange, true function is blue。我不明白的是在它开始捕捉真正的函数之前会发生什么。我认为这与内核有关。这里的图使用了一个长度为1的RBF核(我也尝试了较高和较低的值,但得到了相同的结果)

我有点希望它有一个更平滑的行为,即使它不能捕捉到真实的模型。 那么,我的问题是:为什么我会看到这种“尖峰”行为?我能做些什么来改变它(内核方面还是其他方面)

kernel = RBF(length_scale = 1, length_scale_bounds = (1e-2, 1e2))
gp = GaussianProcessRegressor(kernel=kernel)
gp.fit(X, y)

def genz(x, method = 'default'):
   d = x.shape[1]
   a = 10/d
   w = 1/2
   num_points = x.shape[0]
   funcval = np.empty([1,num_points])        
   for i in range(num_points):
       funcval[0,i] = np.cos(2 * np.pi * w + np.sum(a * x[i,:]))
   return funcval

Tags: 函数inforisnpkernel内核length
1条回答
网友
1楼 · 发布于 2024-09-23 22:24:52

与域空间相比,优化的长度比例似乎非常小。当我在这个图书馆里挖掘的时候,我也觉得很奇怪;改变一些超参数和优化的次数对我也不起作用。通过更改gamma值将内核函数更改为matren可能会有所帮助,但不会太多。如果您真的想要定制,我可能建议您使用类似于torch实现的gpytorch或GPML matlab工具箱

相关问题 更多 >