在共同区域回归中结合Matern和Periodic核

时间:2019-07-04 08:47:12

标签: gpflow

我正在尝试构建多维GP回归,最初具有两个输出f1(x),f2(x)。 在一个输出上有些武断,因此我想在这里使用Matern内核:f1'(x)= K_Matern f1(x)。另一个输出f2(x)显示振幅与f1(x)的值有关的季节性:f2'(x)= K_season(x)f1(x)。我一直在尝试通过将两者与Coreg内核结合来构成合适的内核: K_Matern * Coreg * K_season。由于这似乎行不通,所以我想知道我的错误在哪里。

k1 = gpflow.kernels.Matern32(1, active_dims=[0], lengthscales = 1)
k2 = gpflow.kernels.Periodic(1, active_dims=[1], lengthscales = 1)
coreg = gpflow.kernels.Coregion(1, output_dim=2, rank=1, active_dims=[1])
kern = k1 * coreg * k2

lik = gpflow.likelihoods.SwitchedLikelihood([gpflow.likelihoods.StudentT(), gpflow.likelihoods.StudentT()])

X_augmented = np.vstack((np.hstack((X1, np.zeros_like(X1))), np.hstack((X2, np.ones_like(X2)))))
Y_augmented = np.vstack((np.hstack((Y1, np.zeros_like(X1))), np.hstack((Y2, np.ones_like(X2)))))

m = gpflow.models.VGP(X_augmented, Y_augmented, kern=kern, likelihood=lik, num_latent=1)

1 个答案:

答案 0 :(得分:0)

您的k2X_augmentedcoreg)在active_dims=[1]上具有相同的维数-该列是0还是1,具体取决于它所关联的输出到,显然不是您想要的!如果要在不同的输出上使用不同的内核,则需要使用多输出框架,GPflow文档中有一个multi-output notebook。具体来说,您可能需要SeparateIndependentMok([Matern32(1), Periodic(1)])。请注意,在此框架中,您需要为每个输入提供所有输出,并且Y不必为索引输入增加输出X,而是每个输出只有一列(因此在示例中为N x 2)。