首页 > 解决方案 > 有没有办法定义“异构”内核设计以将线性算子合并到 GPflow(或 GPytorch/GPy/...)的回归中?

问题描述

我正在尝试使用线性运算符执行 GP 回归,例如 Särkka 的这篇论文中所述:https://users.aalto.fi/~ssarkka/pub/spde.pdf在这个例子中,我们可以从方程(8 )我需要一个不同的核函数用于完整协方差矩阵中的四个协方差块(训练和测试数据)。

这绝对是可能且有效的,但我想将其包含在(最好)GPflow 或 GPytorch、GPy 等的内核定义中。

但是,在Gpflow内核设计文档中,唯一的可能性是定义一个作用所有协方差块的协方差函数。原则上,上面的方法应该是直接添加我自己(核函数表达式可以解析得出),但我看不到任何异构”核函数合并到回归或核类中的方法。我尝试咨询其他软件包,例如GpytorchGpy,但同样,内核设计似乎不允许这样做。

也许我在这里遗漏了一些东西,也许我对底层实现不够熟悉来评估这一点,但如果有人以前做过这个或看到(什么应该是相当直接的?)实现可能性,我会很高兴找出答案。

非常感谢您的回答!

亲切的问候

标签: pythonregressiongpflowgaussian-processgpytorch

解决方案


这应该相当简单,尽管需要构建自定义内核。基本上,您需要一个内核,它可以知道每个输入的相应输出的线性算子是什么(这是函数观察/恒等算子、积分观察、导数观察等)。您可以通过在输入矩阵中包含一个额外的列来实现这一点X,类似于对gpflow.kernels.Coregion内核的处理方式(请参阅此笔记本)。然后,您需要定义一个新的内核,使用KK_diag方法为每个线性运算符类型找到输入矩阵中的相应行,并将其传递给适当的协方差函数(使用tf.dynamic_partitionand tf.dynamic_stitch,这在GPflow 的SwitchedLikelihood)。

完整的实现可能需要半天左右,这超出了我在这里可以做的,但我希望这是一个有用的起点,非常欢迎你加入 GPflow slack(邀请链接在 GPflow README 中)并在那里更详细地讨论它!


推荐阅读