【问题标题】:Can I specify different kernels for different data types in GPflow?我可以为 GPflow 中的不同数据类型指定不同的内核吗?
【发布时间】:2020-11-13 17:25:28
【问题描述】:

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

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

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

感谢您的帮助!

【问题讨论】:

    标签: gpflow gaussian-process


    【解决方案1】:

    您需要在单个数组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 参数。不同子内核的活动 dims 可能会重叠。

    如果您真正想要的是所有维度的内核都相同,但只需修复一些长度尺度,请查看How to fix some dimensions of a kernel lengthscale in gpflow?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2012-10-27
      • 2019-01-14
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2012-09-13
      相关资源
      最近更新 更多