mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-15 06:52:39 +02:00
Sparse-GPLVM now seems to work beautifully with product kernels
This commit is contained in:
parent
3f924bea8f
commit
5f63ad5524
4 changed files with 27 additions and 5 deletions
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue