From 31b7a0520ef86102e3b6b7c10e8fe112589a152c Mon Sep 17 00:00:00 2001 From: James Hensman Date: Fri, 30 Nov 2012 11:59:22 +0000 Subject: [PATCH] sparseGPLVM demo now working --- GPy/examples/sparse_GPLVM_demo.py | 6 +++--- GPy/kern/kern.py | 2 +- GPy/kern/rbf.py | 2 +- GPy/models/sparse_GPLVM.py | 9 +++------ 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/GPy/examples/sparse_GPLVM_demo.py b/GPy/examples/sparse_GPLVM_demo.py index ba96b9bc..af125d6e 100644 --- a/GPy/examples/sparse_GPLVM_demo.py +++ b/GPy/examples/sparse_GPLVM_demo.py @@ -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() diff --git a/GPy/kern/kern.py b/GPy/kern/kern.py index 617a5a10..cc63dffc 100644 --- a/GPy/kern/kern.py +++ b/GPy/kern/kern.py @@ -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) diff --git a/GPy/kern/rbf.py b/GPy/kern/rbf.py index 658130b3..a9abf09d 100644 --- a/GPy/kern/rbf.py +++ b/GPy/kern/rbf.py @@ -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): diff --git a/GPy/models/sparse_GPLVM.py b/GPy/models/sparse_GPLVM.py index 2ba1a99a..96c3e530 100644 --- a/GPy/models/sparse_GPLVM.py +++ b/GPy/models/sparse_GPLVM.py @@ -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