From af40ef8cfb25838ee6286870c70a29accec0b3ee Mon Sep 17 00:00:00 2001 From: Max Zwiessele Date: Wed, 29 Oct 2014 08:23:25 +0000 Subject: [PATCH] [sparse gp] prediction with posterior per dimension activated --- GPy/core/sparse_gp.py | 8 +++++--- GPy/likelihoods/gaussian.py | 5 ++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/GPy/core/sparse_gp.py b/GPy/core/sparse_gp.py index 183971d1..d3a9ee3b 100644 --- a/GPy/core/sparse_gp.py +++ b/GPy/core/sparse_gp.py @@ -346,9 +346,11 @@ def optimize(m, maxiter=1000): mu = np.dot(Kx.T, self.posterior.woodbury_vector) if full_cov: Kxx = kern.K(Xnew) - var = Kxx - np.dot(Kx.T, np.dot(self.posterior.woodbury_inv, Kx)) - #var = Kxx[:,:,None] - np.tensordot(np.dot(np.atleast_3d(self.posterior.woodbury_inv).T, Kx).T, Kx, [1,0]).swapaxes(1,2) - var = var.squeeze() + if self.posterior.woodbury_inv.ndim == 2: + var = Kxx - np.dot(Kx.T, np.dot(self.posterior.woodbury_inv, Kx)) + elif self.posterior.woodbury_inv.ndim == 3: + var = Kxx[:,:,None] - np.tensordot(np.dot(np.atleast_3d(self.posterior.woodbury_inv).T, Kx).T, Kx, [1,0]).swapaxes(1,2) + var = var else: Kxx = kern.Kdiag(Xnew) var = (Kxx - np.sum(np.dot(np.atleast_3d(self.posterior.woodbury_inv).T, Kx) * Kx[None,:,:], 1)).T diff --git a/GPy/likelihoods/gaussian.py b/GPy/likelihoods/gaussian.py index 16feed13..2546b07a 100644 --- a/GPy/likelihoods/gaussian.py +++ b/GPy/likelihoods/gaussian.py @@ -80,7 +80,10 @@ class Gaussian(Likelihood): def predictive_values(self, mu, var, full_cov=False, Y_metadata=None): if full_cov: - var += np.eye(var.shape[0])*self.variance + if var.ndim == 2: + var += np.eye(var.shape[0])*self.variance + if var.ndim == 3: + var += np.atleast_3d(np.eye(var.shape[0])*self.variance) else: var += self.variance return mu, var