From a6300fab1038ca64a971dc3a57e3a319feb00fb9 Mon Sep 17 00:00:00 2001 From: James Hensman Date: Wed, 16 Jan 2013 11:21:06 +0000 Subject: [PATCH] fixed up dK_dX in the exponential and Matern kerns --- GPy/kern/Matern32.py | 6 +++--- GPy/kern/Matern52.py | 11 +++++------ GPy/kern/exponential.py | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/GPy/kern/Matern32.py b/GPy/kern/Matern32.py index 8223b37a..377b687f 100644 --- a/GPy/kern/Matern32.py +++ b/GPy/kern/Matern32.py @@ -78,14 +78,14 @@ class Matern32(kernpart): """derivative of the diagonal of the covariance matrix with respect to the parameters.""" target[0] += np.sum(partial) - def dK_dX(self,X,X2,target): + def dK_dX(self,partial,X,X2,target): """derivative of the covariance matrix with respect to X.""" if X2 is None: X2 = X dist = np.sqrt(np.sum(np.square((X[:,None,:]-X2[None,:,:])/self.lengthscales),-1))[:,:,None] ddist_dX = (X[:,None,:]-X2[None,:,:])/self.lengthscales**2/np.where(dist!=0.,dist,np.inf) - dK_dX += - np.transpose(3*self.variance*dist*np.exp(-np.sqrt(3)*dist)*ddist_dX,(1,0,2)) + 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): pass diff --git a/GPy/kern/Matern52.py b/GPy/kern/Matern52.py index 65059a5b..172c0117 100644 --- a/GPy/kern/Matern52.py +++ b/GPy/kern/Matern52.py @@ -33,7 +33,6 @@ class Matern52(kernpart): self.Nparam = self.D + 1 self.name = 'Mat52' self.set_param(np.hstack((variance,lengthscales))) - def get_param(self): """return the value of the parameters.""" @@ -77,12 +76,12 @@ class Matern52(kernpart): """derivative of the diagonal of the covariance matrix with respect to the parameters.""" target[0] += np.sum(partial) - def dK_dX(self,X,X2,target): + def dK_dX(self,partial,X,X2,target): """derivative of the covariance matrix with respect to X.""" if X2 is None: X2 = X dist = np.sqrt(np.sum(np.square((X[:,None,:]-X2[None,:,:])/self.lengthscales),-1))[:,:,None] ddist_dX = (X[:,None,:]-X2[None,:,:])/self.lengthscales**2/np.where(dist!=0.,dist,np.inf) - 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)) + 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): @@ -97,11 +96,11 @@ class Matern52(kernpart): :param F1: vector of derivatives of F :type F1: np.array :param F2: vector of second derivatives of F - :type F2: np.array + :type F2: np.array :param F3: vector of third derivatives of F - :type F3: np.array + :type F3: np.array :param lower,upper: boundaries of the input domain - :type lower,upper: floats + :type lower,upper: floats """ assert self.D == 1 def L(x,i): diff --git a/GPy/kern/exponential.py b/GPy/kern/exponential.py index ba97881e..8ad5b813 100644 --- a/GPy/kern/exponential.py +++ b/GPy/kern/exponential.py @@ -77,7 +77,7 @@ class exponential(kernpart): #NB: derivative of diagonal elements wrt lengthscale is 0 target[0] += np.sum(partial) - def dK_dX(self,X,X2,target): + def dK_dX(self,partial,X,X2,target): """derivative of the covariance matrix with respect to X.""" if X2 is None: X2 = X dist = np.sqrt(np.sum(np.square((X[:,None,:]-X2[None,:,:])/self.lengthscales),-1))[:,:,None]