如何仅在主块对角线上为协方差矩阵 RBF 加上噪声在 GPflow 中编写自定义内核?

问题描述

所需的协方差矩阵为

enter image description here

其中 t 是一维时间,k={0,1}

来自内核的示例应如下所示:

enter image description here

橙色序列对应k=0,蓝色序列对应k=1。

解决方法

听起来您正在为不同的离散输出寻找内核。您可以在 GPflow 中实现这一点,例如使用 Coregion 内核,其中有一个 tutorial notebook

要构造块对角线(所有非对角线条目为零)的协区域化内核,您可以设置rank=0。请注意,您需要明确指定哪个内核应作用于哪些维度:

import gpflow
k_time = gpflow.kernels.SquaredExponential(active_dims=[0])
k_coreg = gpflow.kernels.Coregion(output_dim=2,rank=0,active_dims=[1])

您可以将它们与笔记本中的 * 或问题中指定的 + 结合使用:

k = k_time + k_coreg

您可以看到 k_coreg 项是您指定的块对角线:评估

test_inputs = np.array([
    [0.1,0.0],[0.5,[0.7,1.0],[0.1,])
k_coreg(test_inputs)

返回

<tf.Tensor: shape=(4,4),dtype=float64,numpy=
array([[1.,1.,0.,0.],[1.,[0.,1.],1.]])>

您可以通过运行获得问题图表中的样本

import numpy as np
num_inputs = 51
num_outputs = 2
X = np.linspace(0,5,num_inputs)
Q = np.arange(num_outputs)
XX,QQ = np.meshgrid(X,Q,indexing='ij')
pts = np.c_[XX.flatten(),QQ.flatten()]

K = k(pts)
L = np.linalg.cholesky(K + 1e-8 * np.eye(len(K)))

num_samples = 3
v = np.random.randn(len(L),num_samples)
f = L @ v

import matplotlib.pyplot as plt
for i in range(num_samples):
    plt.plot(X,f[:,i].reshape(num_inputs,num_outputs))
,

在 GPflow 中,您可以使用由 Squared Exponential (RBF)White 内核组成的 sum 内核来构建此内核。

ng update @angular/cli --migrate-only --from=11.2.0

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...