在 PyMC3 中解析地求解高斯过程后验

Solving Gaussian Process posterior analytically in PyMC3

我习惯在 GPFlow 中进行高斯过程回归,它可以让您通过分析求解后验:

import gpflow as gp
from gpflow.kernels import RBF, White, Periodic, Linear
k = RBF(x.shape[1]) + White(x.shape[1])
m = gp.models.GPR(x, y, k)
self.model = m
m.compile()
opt = gp.train.ScipyOptimizer()
opt.minimize(m)

我最近搬到了 PyMC3 并试图完成与上述相同的事情。我在文档中找到了这段代码 (https://docs.pymc.io/notebooks/GP-slice-sampling.html#Examine-actual-posterior-distribution):

# Analytically compute posterior mean
L = np.linalg.cholesky(K_noise.eval())
alpha = np.linalg.solve(L.T, np.linalg.solve(L, f))
post_mean = np.dot(K_s.T.eval(), alpha)

最终我想使用 GP 对看不见的数据进行回归。使用 np.linalg 是解析求解 GP 后验的正确方法吗?

当然可以。如教程中所述,他们从 Rasmussen's GPML 实现了算法 2.1,他明确使用了左矩阵除法符号 (\),这表明使用线性求解。例如理论上(即实数制),

A\b === A^(-1) * b === x

其中 x 求解 A*x = b。但在实际的计算领域(例如 IEEE 浮点数)中,这种等价性被打破,因为 solve(A, b)inv(A) * b.

更快且数值更稳定

左矩阵除法 (\) 符号在数值线性代数中很常见,我敢打赌,对其偏爱的最显着解释是它默认提醒学生 never不必要地计算逆矩阵