2

我正在研究 GP 回归,但我遇到了一些我不理解的行为。基本上,我想展示 GP 在振荡 Genz 函数(基本上是一个周期波)上的收敛性,这让我看到了这张图片Gp 收敛,抱歉缺少标签(x 轴:num 个样本,y 轴:2000 年的相对误差测量点)

这没关系,但我很好奇为什么错误开始下降之前花了这么长时间。绘制生成的 GP 拟合我得到了这个(忙碌的)图GP 拟合是橙色的,真正的函数是蓝色的。我不明白的是在它开始捕捉真正的功能之前会发生什么。我认为它与内核有关。此处的图使用了 length_scale = 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
4

1 回答 1

0

与其域空间相比,优化后的长度尺度似乎非常小。当我在挖掘这个图书馆时,我也感到很奇怪;更改一些超参数和优化次数对我也不起作用。通过改变伽马值来改变你的内核函数可能会有所帮助,但不是很多。如果您真的想根据需要进行自定义,我可能会建议您使用类似于 Torch 实现的 gpytorch 或 GPML matlab 工具箱。

于 2021-02-04T04:33:54.967 回答