0

所需的协方差矩阵是

在此处输入图像描述

其中 t 是一维时间,k={0, 1}

来自内核的示例应如下所示:

在此处输入图像描述

橙色序列对应k=0,蓝色序列对应k=1。

4

2 回答 2

1

听起来您正在为不同的离散输出寻找内核。例如,您可以在 GPflow 中使用Coregion内核来实现这一点,其中有一个教程笔记本

要构造块对角的共区域化内核(所有非对角项为零),您可以设置rank=0. 请注意,您需要明确指定哪个内核应该作用于哪些维度:

import gpflow
k_time = gpflow.kernels.SquaredExponential(active_dims=[0])
k_coreg = gpflow.kernels.Coregion(output_dim=2, rank=0, active_dims=[1])

您可以将它们与*笔记本中的内容或+问题中指定的内容结合使用:

k = k_time + k_coreg

您可以看到该k_coreg术语是您指定的块对角线:Evaluating

test_inputs = np.array([
    [0.1, 0.0],
    [0.5, 0.0],
    [0.7, 1.0],
    [0.1, 1.0],
])
k_coreg(test_inputs)

返回

<tf.Tensor: shape=(4, 4), dtype=float64, numpy=
array([[1., 1., 0., 0.],
       [1., 1., 0., 0.],
       [0., 0., 1., 1.],
       [0., 0., 1., 1.]])>

您可以通过运行获得问题中图表中的样本

import numpy as np
num_inputs = 51
num_outputs = 2
X = np.linspace(0, 5, num_inputs)
Q = np.arange(num_outputs)
XX, QQ = np.meshgrid(X, Q, indexing='ij')
pts = np.c_[XX.flatten(), QQ.flatten()]

K = k(pts)
L = np.linalg.cholesky(K + 1e-8 * np.eye(len(K)))

num_samples = 3
v = np.random.randn(len(L), num_samples)
f = L @ v

import matplotlib.pyplot as plt
for i in range(num_samples):
    plt.plot(X, f[:, i].reshape(num_inputs, num_outputs))
于 2021-07-19T09:29:20.970 回答
0

在 GPflow 中,您可以使用由平方指数 (RBF)White内核组成的求和内核来构造此内核。

import gpflow
kernel = gpflow.kernels.SquaredExponential() + gpflow.kernels.White()
于 2021-06-17T13:11:28.813 回答