我可以在GPflow中为不同的数据类型指定不同的内核吗?

Can I specify different kernels for different data types in GPflow?

对于我的模型,有两种不同类型的数据。让我们说X1类型的数据和X2类型的数据。

是否可以为两种数据类型实现不同的内核?那么从X1类型的数据开始,使用内核X1,从X2类型的数据开始,使用内核X2? (我用的是VGP机型)

背景是我知道两种数据类型之一的超参数,但不知道另一种数据类型的超参数。

感谢您的帮助!

您需要将所有数据收集到一个数组 X 中,但您可以使用内核构造函数的 active_dims 参数定义作用于此数组不同维度的内核,如中所示one of the notebook tutorials。您必须考虑不同内核之间需要什么样的协方差,例如该笔记本示例中的加法内核是一个非常强的约束,您可能希望将它们相乘:

N, D1 = X1.shape
N, D2 = X2.shape
X = np.concatenate([X1, X2], axis=-1)
assert X.shape == (N, D1 + D2)
k1 = gpflow.kernels.Matern32(lengthscales=np.ones(D1), active_dims=slice(0, D1))
k2 = gpflow.kernels.SquaredExponential(lengthscales=np.ones(D2), active_dims=slice(D1, D1+D2))
kernel = k1 * k2

您可以将上述切片对象或显式维度列表(例如 [0,1,2, 8,9])传递给 active_dims 参数。不同子内核的active dims可能会重叠。

如果您真正想要的是对所有维度使用相同的内核,但只需修复一些长度尺度,请查看