首页 > 解决方案 > 我可以为 GPflow 中的不同数据类型指定不同的内核吗?

问题描述

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

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

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

谢谢你的帮助!

标签: gpflowgaussian-process

解决方案


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

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参数。不同子内核的活动 dims 可能会重叠。

如果您真正想要的是所有维度的相同内核,但只是修复一些长度尺度,请查看如何在 gpflow 中修复内核长度尺度的某些维度?


推荐阅读