mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-08 03:22:38 +02:00
[predict] using gp predict in sparse gp and predictive variable
This commit is contained in:
parent
63e1fa05e4
commit
78257d2314
2 changed files with 25 additions and 24 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue