有没有一种方法可以定义“异构”内核设计,将线性运算符合并到GPflow(或GPytorch/GPy/…)的回归中?

2024-06-02 07:19:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这当然是可能和有效的,但我想将其包含在(最好)GPflow或gpytoch、GPy等的内核定义中

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

也许我在这里遗漏了一些东西,也许我对底层实现不够熟悉,无法对此进行评估,但是如果有人以前做过这件事,或者看到了(什么应该是直接的?)实现的可能性,我会很高兴地找到答案

提前非常感谢您的回答

问候


Tags: 方法函数https定义线性可能性内核users
1条回答
网友
1楼 · 发布于 2024-06-02 07:19:17

这应该相当简单,但需要构建一个自定义内核。基本上,您需要一个内核,该内核可以知道每个输入对应输出的线性运算符是什么(这是否是函数观察/恒等运算符、积分观察、导数观察等)。您可以通过在输入矩阵X中包含一个额外的列来实现这一点,类似于对gpflow.kernels.Coregion内核所做的操作(请参见this notebook)。然后,您需要使用KK_diag方法定义一个新内核,对于每个线性运算符类型,这些方法在输入矩阵中找到相应的行,并将其传递给相应的协方差函数(使用tf.dynamic_partitiontf.dynamic_stitch,这在GPflow的^{} class中以非常类似的方式使用)

完整的实现可能需要半天左右的时间,这超出了我在这里所能做的,但我希望这是一个有用的起点,非常欢迎您加入GPflow slack(GPflow自述文件中的invite链接),并在这里进行更详细的讨论

相关问题 更多 >