我试图用线性算子进行GP回归,例如,本文由S rkk:https://users.aalto.fi/~ssarkka/pub/spde.pdf在这个例子中从方程(8)中可以看出,对于完全协方差矩阵中的四协方差块(训练和测试数据),我需要一个不同的核函数。
这绝对是可能的,也是有效的,但我想将其包含在内核定义 of (最好是) GPflow,或GPytorch,GPy等中。
但是,在内核设计的Gpflow文档中,唯一的可能性是定义一个协方差函数,作用于E 116所有E 217E 118协方差块E 219。原则上,上面的方法应该是直接添加我自己(可以解析地导出内核函数表达式),但是我看不到将‘incorporating 异构’内核函数引入回归或内核类的任何方法。我试图咨询其他包,如戈比托尔和Gpy,但内核设计似乎不允许这样做。
也许我在这里遗漏了一些东西,也许我不太熟悉底层的实现来评估它,但是如果有人以前做过这样的事情或者看到了(什么应该是合理的直截了当)?执行的可能性,我会很高兴知道。
非常感谢您的回答。
亲切的问候
发布于 2020-11-26 12:06:36
这应该是相当简单的,尽管需要构建一个自定义内核。基本上,您需要一个内核,它可以为每个输入知道对应输出的线性算子是什么(这是一个函数观察/恒等算子、积分观察、导数观察等等)。您可以通过在输入矩阵X中增加一个列来实现这一点,类似于gpflow.kernels.Coregion内核的实现方式(参见这个笔记本)。然后,您需要使用K和K_diag方法定义一个新内核,对于每一个线性运算符类型,都需要在输入矩阵中找到相应的行,并将其传递给适当的协方差函数(使用tf.dynamic_partition和tf.dynamic_stitch,这在GPflow的班级中以非常类似的方式使用)。
完整的实现可能需要半天左右的时间,这超出了我在这里所能做的范围,但我希望这是一个有用的启动指针,非常欢迎您加入GPflow松弛( GPflow自述中的邀请链接)并在那里进行更详细的讨论!
https://stackoverflow.com/questions/64967921
复制相似问题