[predict] using gp predict in sparse gp and predictive variable

This commit is contained in:
Max Zwiessele 2015-09-07 14:11:01 +01:00
parent 63e1fa05e4
commit 78257d2314
2 changed files with 25 additions and 24 deletions

View file

@ -205,7 +205,7 @@ class GP(Model):
if kern is None: if kern is None:
kern = self.kern kern = self.kern
Kx = kern.K(self.X, Xnew) Kx = kern.K(self._predictive_variable, Xnew)
mu = np.dot(Kx.T, self.posterior.woodbury_vector) mu = np.dot(Kx.T, self.posterior.woodbury_vector)
if len(mu.shape)==1: if len(mu.shape)==1:
mu = mu.reshape(-1,1) mu = mu.reshape(-1,1)

View file

@ -128,29 +128,30 @@ class SparseGP(GP):
if kern is None: kern = self.kern if kern is None: kern = self.kern
if not isinstance(Xnew, VariationalPosterior): if not isinstance(Xnew, VariationalPosterior):
Kx = kern.K(self._predictive_variable, Xnew) # Kx = kern.K(self._predictive_variable, Xnew)
mu = np.dot(Kx.T, self.posterior.woodbury_vector) # mu = np.dot(Kx.T, self.posterior.woodbury_vector)
if full_cov: # if full_cov:
Kxx = kern.K(Xnew) # Kxx = kern.K(Xnew)
if self.posterior.woodbury_inv.ndim == 2: # if self.posterior.woodbury_inv.ndim == 2:
var = Kxx - np.dot(Kx.T, np.dot(self.posterior.woodbury_inv, Kx)) # var = Kxx - np.dot(Kx.T, np.dot(self.posterior.woodbury_inv, Kx))
elif self.posterior.woodbury_inv.ndim == 3: # elif self.posterior.woodbury_inv.ndim == 3:
var = np.empty((Kxx.shape[0],Kxx.shape[1],self.posterior.woodbury_inv.shape[2])) # var = np.empty((Kxx.shape[0],Kxx.shape[1],self.posterior.woodbury_inv.shape[2]))
for i in range(var.shape[2]): # for i in range(var.shape[2]):
var[:, :, i] = (Kxx - mdot(Kx.T, self.posterior.woodbury_inv[:, :, i], Kx)) # var[:, :, i] = (Kxx - mdot(Kx.T, self.posterior.woodbury_inv[:, :, i], Kx))
var = var # var = var
else: # else:
Kxx = kern.Kdiag(Xnew) # Kxx = kern.Kdiag(Xnew)
if self.posterior.woodbury_inv.ndim == 2: # if self.posterior.woodbury_inv.ndim == 2:
var = (Kxx - np.sum(np.dot(self.posterior.woodbury_inv.T, Kx) * Kx, 0))[:,None] # var = (Kxx - np.sum(np.dot(self.posterior.woodbury_inv.T, Kx) * Kx, 0))[:,None]
elif self.posterior.woodbury_inv.ndim == 3: # elif self.posterior.woodbury_inv.ndim == 3:
var = np.empty((Kxx.shape[0],self.posterior.woodbury_inv.shape[2])) # var = np.empty((Kxx.shape[0],self.posterior.woodbury_inv.shape[2]))
for i in range(var.shape[1]): # for i in range(var.shape[1]):
var[:, i] = (Kxx - (np.sum(np.dot(self.posterior.woodbury_inv[:, :, i].T, Kx) * Kx, 0))) # var[:, i] = (Kxx - (np.sum(np.dot(self.posterior.woodbury_inv[:, :, i].T, Kx) * Kx, 0)))
var = var # var = var
#add in the mean function # #add in the mean function
if self.mean_function is not None: # if self.mean_function is not None:
mu += self.mean_function.f(Xnew) # mu += self.mean_function.f(Xnew)
mu, var = super(SparseGP, self)._raw_predict(Xnew, full_cov, kern)
else: else:
psi0_star = kern.psi0(self._predictive_variable, Xnew) psi0_star = kern.psi0(self._predictive_variable, Xnew)
psi1_star = kern.psi1(self._predictive_variable, Xnew) psi1_star = kern.psi1(self._predictive_variable, Xnew)