python - 有没有办法定义“异构”内核设计以将线性算子合并到 GPflow(或 GPytorch/GPy/...)的回归中?
问题描述
我正在尝试使用线性运算符执行 GP 回归,例如 Särkka 的这篇论文中所述:https://users.aalto.fi/~ssarkka/pub/spde.pdf在这个例子中,我们可以从方程(8 )我需要一个不同的核函数用于完整协方差矩阵中的四个协方差块(训练和测试数据)。
这绝对是可能且有效的,但我想将其包含在(最好)GPflow 或 GPytorch、GPy 等的内核定义中。
但是,在Gpflow中的内核设计文档中,唯一的可能性是定义一个作用于所有协方差块的协方差函数。原则上,上面的方法应该是直接添加我自己(核函数表达式可以解析得出),但我看不到任何将“异构”核函数合并到回归或核类中的方法。我尝试咨询其他软件包,例如Gpytorch和Gpy,但同样,内核设计似乎不允许这样做。
也许我在这里遗漏了一些东西,也许我对底层实现不够熟悉来评估这一点,但如果有人以前做过这个或看到(什么应该是相当直接的?)实现可能性,我会很高兴找出答案。
非常感谢您的回答!
亲切的问候
解决方案
这应该相当简单,尽管需要构建自定义内核。基本上,您需要一个内核,它可以知道每个输入的相应输出的线性算子是什么(这是函数观察/恒等算子、积分观察、导数观察等)。您可以通过在输入矩阵中包含一个额外的列来实现这一点X
,类似于对gpflow.kernels.Coregion
内核的处理方式(请参阅此笔记本)。然后,您需要定义一个新的内核,使用K
和K_diag
方法为每个线性运算符类型找到输入矩阵中的相应行,并将其传递给适当的协方差函数(使用tf.dynamic_partition
and tf.dynamic_stitch
,这在GPflow 的SwitchedLikelihood
类)。
完整的实现可能需要半天左右,这超出了我在这里可以做的,但我希望这是一个有用的起点,非常欢迎你加入 GPflow slack(邀请链接在 GPflow README 中)并在那里更详细地讨论它!
推荐阅读
- c - 如何使“long tv_nsec”和“time_t tv_sec”兼容?
- php - 在 laravel 中使用 DB Facade 时我无法访问模型方法
- java - 在停止当前进程的同时启动外部进程
- python - 无法通过 Shell 在 Django 中查看前端数据库
- function - Erlang 中的伪函数是什么?
- android - 处理android权限
- typescript - 如何公开 props 类型并在样式化组件中使用它
- ios - UIAlertController 标题颜色
- mongodb - mongo : 未授权管理员在管理员上执行以执行命令
- javascript - 如何从 API 的 Javascript 数组中将元素列表显示为 HTML 中的列表?