代码之家  ›  专栏  ›  技术社区  ›  swmfg

PYMC3中高斯后验过程的解析求解

  •  0
  • swmfg  · 技术社区  · 6 年前

    我习惯于在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 回复  |  直到 6 年前
        1
  •  2
  •   merv    6 年前

    当然。如本教程所述,他们实现了算法2.1 Rasmussen's GPML 他明确地使用了左矩阵除法( \ ,表示使用线性求解。例如,在理论上(即实数系统)

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

    哪里 x 解决 A*x = b . 但在实际计算领域(例如,IEEE浮点),这种等价性会因为 solve(A, b) inv(A) * b .

    左矩阵除法( \ )符号在数字线性代数中是司空见惯的,我敢打赌,对它的偏好最显著的解释是它暗地提醒学生 从不计算逆矩阵 不必要的。

    推荐文章