我曾经在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后验是正确的方法吗?
答案 0 :(得分:2)
好的。如本教程中所述,他们从Rasmussen's GPML实现了算法2.1,并且他明确使用左矩阵除法符号(\
),该符号表示要使用线性求解。例如,在理论上(即实数系统),
A\b === A^(-1) * b === x
其中x
解决A*x = b
。但是在实际的计算领域(例如IEEE浮点数)中,这种等效性失效了,因为solve(A, b)
比inv(A) * b
更快并且在数值上更稳定。
左矩阵除法(\
)表示法在数值线性代数中很常见,我敢冒险对其偏爱的最明显解释是,它默认提醒学生从不计算矩阵逆,这是不必要的。