mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-09 12:02:38 +02:00
sparseGPLVM demo now working
This commit is contained in:
parent
ba84a43ea3
commit
31b7a0520e
4 changed files with 8 additions and 11 deletions
|
|
@ -13,13 +13,13 @@ Q = 1
|
||||||
D = 2
|
D = 2
|
||||||
#generate GPLVM-like data
|
#generate GPLVM-like data
|
||||||
X = np.random.rand(N, Q)
|
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)
|
K = k.K(X)
|
||||||
Y = np.random.multivariate_normal(np.zeros(N),K,D).T
|
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_positive('(rbf|bias|noise)')
|
||||||
m.constrain_bounded('white', 1e-3, 1.0)
|
m.constrain_bounded('white', 1e-3, 0.1)
|
||||||
# m.plot()
|
# m.plot()
|
||||||
|
|
||||||
pb.figure()
|
pb.figure()
|
||||||
|
|
|
||||||
|
|
@ -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)]
|
[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
|
return target
|
||||||
|
|
||||||
def dKdiag_dX(self, X, slices=None):
|
def dKdiag_dX(self, partial, X, slices=None):
|
||||||
assert X.shape[1]==self.D
|
assert X.shape[1]==self.D
|
||||||
slices = self._process_slices(slices,False)
|
slices = self._process_slices(slices,False)
|
||||||
target = np.zeros_like(X)
|
target = np.zeros_like(X)
|
||||||
|
|
|
||||||
|
|
@ -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))
|
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)
|
target += np.sum(dK_dX*partial.T[:,:,None],0)
|
||||||
|
|
||||||
def dKdiag_dX(self,X,target):
|
def dKdiag_dX(self,partial,X,target):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _K_computations(self,X,X2):
|
def _K_computations(self,X,X2):
|
||||||
|
|
|
||||||
|
|
@ -42,13 +42,10 @@ class sparse_GPLVM(sparse_GP_regression, GPLVM):
|
||||||
return sparse_GP_regression.log_likelihood(self)
|
return sparse_GP_regression.log_likelihood(self)
|
||||||
|
|
||||||
def dL_dX(self):
|
def dL_dX(self):
|
||||||
dpsi0_dX = self.kern.dKdiag_dX(self.X)
|
dL_dpsi1 = self.dL_dpsi1 + 2.*np.dot(self.dL_dpsi2,self.psi1)
|
||||||
dpsi1_dX = self.kern.dK_dX(self.X,self.Z)
|
|
||||||
dpsi2_dX = self.psi1[:,None,:,None]*dpsi1_dX[None,:,:,:]
|
|
||||||
|
|
||||||
dL_dX = ((self.dL_dpsi0 * dpsi0_dX).sum(0)
|
dL_dX = self.kern.dKdiag_dX(self.dL_dpsi0,self.X)
|
||||||
+ (self.dL_dpsi1[:,:,None]*dpsi1_dX).sum(0)
|
dL_dX += self.kern.dK_dX(dL_dpsi1.T,self.X,self.Z)
|
||||||
+ 2.0*(self.dL_dpsi2[:, :, None,None] * dpsi2_dX).sum(0).sum(0))
|
|
||||||
|
|
||||||
return dL_dX
|
return dL_dX
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue