1

我正在尝试构建一个多维 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)
4

1 回答 1

0

您在与( )k2相同的维度上运行- 这是 0 或 1 的列,具体取决于它与哪个输出相关,显然不是您想要的!如果要在不同的输出上使用不同的内核,则需要使用多输出框架,GPflow 文档中有一个多输出笔记本。具体来说,您可能想要一个. 请注意,在此框架中,您需要为每个输入提供所有输出,而不是用索引到输出增加 X,Y 每个输出有一列(因此在您的示例中为 N x 2)。X_augmentedcoregactive_dims=[1]SeparateIndependentMok([Matern32(1), Periodic(1)])

于 2019-07-19T15:59:29.437 回答