我可以在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可能会重叠。
如果您真正想要的是对所有维度使用相同的内核,但只需修复一些长度尺度,请查看
对于我的模型,有两种不同类型的数据。让我们说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可能会重叠。
如果您真正想要的是对所有维度使用相同的内核,但只需修复一些长度尺度,请查看