在PyMC3中解析后验高斯过程

时间:2019-01-14 00:19:04

标签: 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后验是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

好的。如本教程中所述,他们从Rasmussen's GPML实现了算法2.1,并且他明确使用左矩阵除法符号(\),该符号表示要使用线性求解。例如,在理论上(即实数系统),

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

其中x解决A*x = b。但是在实际的计算领域(例如IEEE浮点数)中,这种等效性失效了,因为solve(A, b)inv(A) * b更快并且在数值上更稳定。

左矩阵除法(\)表示法在数值线性代数中很常见,我敢冒险对其偏爱的最明显解释是,它默认提醒学生从不计算矩阵逆,这是不必要的。