我试图用线性算子执行GP回归,如Särkkä:https://users.aalto.fi/~ssarkka/pub/spde.pdf在这个例子中,我们可以从方程(8)中看到,我需要一个不同的核函数,用于完整协方差矩阵中的四个协方差块(训练和测试数据)
这当然是可能和有效的,但我想将其包含在(最好)GPflow或gpytoch、GPy等的内核定义中
但是,在Gpflow中的内核设计文档中,唯一的可能性是定义一个作用于所有协方差块的协方差函数。原则上,上面的方法应该是直接添加我自己(核函数表达式可以解析导出),但我看不到任何方法将异类核函数合并到回归或核类中。我试图参考其他包,如Gpytorch和Gpy,但同样,内核设计似乎不允许这样做
也许我在这里遗漏了一些东西,也许我对底层实现不够熟悉,无法对此进行评估,但是如果有人以前做过这件事,或者看到了(什么应该是直接的?)实现的可能性,我会很高兴地找到答案
提前非常感谢您的回答
问候
这应该相当简单,但需要构建一个自定义内核。基本上,您需要一个内核,该内核可以知道每个输入对应输出的线性运算符是什么(这是否是函数观察/恒等运算符、积分观察、导数观察等)。您可以通过在输入矩阵} class 中以非常类似的方式使用)
X
中包含一个额外的列来实现这一点,类似于对gpflow.kernels.Coregion
内核所做的操作(请参见this notebook)。然后,您需要使用K
和K_diag
方法定义一个新内核,对于每个线性运算符类型,这些方法在输入矩阵中找到相应的行,并将其传递给相应的协方差函数(使用tf.dynamic_partition
和tf.dynamic_stitch
,这在GPflow的^{完整的实现可能需要半天左右的时间,这超出了我在这里所能做的,但我希望这是一个有用的起点,非常欢迎您加入GPflow slack(GPflow自述文件中的invite链接),并在这里进行更详细的讨论
相关问题 更多 >
编程相关推荐