sparseGPLVM demo now working

This commit is contained in:
James Hensman 2012-11-30 11:59:22 +00:00
parent ba84a43ea3
commit 31b7a0520e
4 changed files with 8 additions and 11 deletions

View file

@ -13,13 +13,13 @@ Q = 1
D = 2
#generate GPLVM-like data
X = np.random.rand(N, Q)
k = GPy.kern.rbf(Q, 1.0, 2.0) + GPy.kern.white(Q, 0.0001)
k = GPy.kern.rbf(Q, 1.0, 2.0) + GPy.kern.white(Q, 0.00001)
K = k.K(X)
Y = np.random.multivariate_normal(np.zeros(N),K,D).T
m = GPy.models.sparse_GPLVM(Y, Q, M = 7)
m = GPy.models.sparse_GPLVM(Y, Q, M = 10)
m.constrain_positive('(rbf|bias|noise)')
m.constrain_bounded('white', 1e-3, 1.0)
m.constrain_bounded('white', 1e-3, 0.1)
# m.plot()
pb.figure()

View file

@ -194,7 +194,7 @@ class kern(parameterised):
[p.dKdiag_dtheta(partial[s],X[s,i_s],target[ps]) for p,i_s,s,ps in zip(self.parts,self.input_slices,slices,self.param_slices)]
return target
def dKdiag_dX(self, X, slices=None):
def dKdiag_dX(self, partial, X, slices=None):
assert X.shape[1]==self.D
slices = self._process_slices(slices,False)
target = np.zeros_like(X)

View file

@ -65,7 +65,7 @@ class rbf(kernpart):
dK_dX = np.transpose(-self.variance*self._K_dvar[:,:,np.newaxis]*_K_dist/self.lengthscale2,(1,0,2))
target += np.sum(dK_dX*partial.T[:,:,None],0)
def dKdiag_dX(self,X,target):
def dKdiag_dX(self,partial,X,target):
pass
def _K_computations(self,X,X2):

View file

@ -42,13 +42,10 @@ class sparse_GPLVM(sparse_GP_regression, GPLVM):
return sparse_GP_regression.log_likelihood(self)
def dL_dX(self):
dpsi0_dX = self.kern.dKdiag_dX(self.X)
dpsi1_dX = self.kern.dK_dX(self.X,self.Z)
dpsi2_dX = self.psi1[:,None,:,None]*dpsi1_dX[None,:,:,:]
dL_dpsi1 = self.dL_dpsi1 + 2.*np.dot(self.dL_dpsi2,self.psi1)
dL_dX = ((self.dL_dpsi0 * dpsi0_dX).sum(0)
+ (self.dL_dpsi1[:,:,None]*dpsi1_dX).sum(0)
+ 2.0*(self.dL_dpsi2[:, :, None,None] * dpsi2_dX).sum(0).sum(0))
dL_dX = self.kern.dKdiag_dX(self.dL_dpsi0,self.X)
dL_dX += self.kern.dK_dX(dL_dpsi1.T,self.X,self.Z)
return dL_dX