GPFlow中的多任务学习缺少输入?

时间:2019-06-03 21:51:42

标签: gpflow

是否可以在缺少某些输入的情况下使用GPFlow进行多任务学习?具体来说,我正在尝试拟合来自多个相关个体的空间数据,但是数据并不是针对所有个体都位于相同的输入位置。我知道我应该在这里进行分层GP,但是它们的伸缩性往往不好。我希望可以代替使用多任务学习,尽管用例不能准确地映射到此方法的典型应用程序上。

2 个答案:

答案 0 :(得分:1)

  

是否可以在缺少某些输入的情况下使用GPFlow进行多任务学习?

当然可以。

GPflow实现此目的的方法是将输出索引堆叠到输入上。例如,假设您在位置[0.1,0.2,0.3]和[0.3,0.4,0.5]处观察到两个输出(0,1),那么您将构造“输入矩阵”

[0.1 0]
[0.2 0]
[0.3 0]
[0.3 1]
[0.4 1]
[0.5 1]

然后,使用“ active_dims”指定内核如何在此矩阵上起作用。可以对此模型起作用的最简单的内核是:

k = gpflow.kernels.Matern32(1,active_dims = [0])* gpflow.kernels.Coregion(1,2,2,active_dims = [1])

这是内在的共区域化模型(请参见Alvarez等,[1])。您可以在GPflow文档here中找到更详细的演示。

请注意,您可能需要一个更强大的模型来进行固有的共区域化:共区域化的线性模型更强大,并且仍然易于实现。

[1] http://eprints.whiterose.ac.uk/114503/1/1106.6251v2.pdf

答案 1 :(得分:0)

GPflow当前没有模型可以做到这一点。但是,GPflow确实提供了轻松实现此目的的工具。两个建议:

  • 使用多输出内核,对于缺少的数据点,将观察方差设置为无穷大。
  • 定义一个多输出内核,并指定一个自定义Kuf,为其请求的输出与相应的输入一起传递。