mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-09 03:52:39 +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
|
||||
#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()
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue