Sparse-GPLVM now seems to work beautifully with product kernels

This commit is contained in:
Nicolas 2013-02-21 18:41:59 +00:00
parent 3f924bea8f
commit 5f63ad5524
4 changed files with 27 additions and 5 deletions

View file

@ -106,7 +106,7 @@ class Matern32(kernpart):
dK_dX = - np.transpose(3*self.variance*dist*np.exp(-np.sqrt(3)*dist)*ddist_dX,(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 Gram_matrix(self,F,F1,F2,lower,upper):

View file

@ -104,7 +104,7 @@ class Matern52(kernpart):
dK_dX = - np.transpose(self.variance*5./3*dist*(1+np.sqrt(5)*dist)*np.exp(-np.sqrt(5)*dist)*ddist_dX,(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 Gram_matrix(self,F,F1,F2,F3,lower,upper):

View file

@ -102,7 +102,7 @@ class exponential(kernpart):
dK_dX = - np.transpose(self.variance*np.exp(-dist)*ddist_dX,(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 Gram_matrix(self,F,F1,lower,upper):

View file

@ -82,5 +82,27 @@ class product(kernpart):
self.k1.dK_dX(partial*K2, X, X2, target)
self.k2.dK_dX(partial*K1, X, X2, target)
def dKdiag_dX(self,X,target):
pass
def dKdiag_dX(self,partial,X,target):
target1 = np.zeros((X.shape[0],))
target2 = np.zeros((X.shape[0],))
self.k1.Kdiag(X,target1)
self.k2.Kdiag(X,target2)
self.k1.dKdiag_dX(partial*target2, X, target)
self.k2.dKdiag_dX(partial*target1, X, target)
def dKdiag_dtheta(self,partial,X,target):
"""Compute the diagonal of the covariance matrix associated to X."""
target1 = np.zeros((X.shape[0],))
target2 = np.zeros((X.shape[0],))
self.k1.Kdiag(X,target1)
self.k2.Kdiag(X,target2)
k1_target = np.zeros(self.k1.Nparam)
k2_target = np.zeros(self.k2.Nparam)
self.k1.dKdiag_dtheta(partial*target2, X, k1_target)
self.k2.dKdiag_dtheta(partial*target1, X, k2_target)
target[:self.k1.Nparam] += k1_target
target[self.k1.Nparam:] += k2_target