From b0f6495ed4400fb5e98ad3046c7b3fe3f036bf08 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Wed, 6 Feb 2013 09:52:54 +0000 Subject: [PATCH] Fixed bug in the product of kernels with tied parameters --- GPy/core/parameterised.py | 7 +++++-- GPy/kern/kern.py | 2 ++ GPy/models/GP.py | 4 +++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/GPy/core/parameterised.py b/GPy/core/parameterised.py index 6e5493ad..ab656f52 100644 --- a/GPy/core/parameterised.py +++ b/GPy/core/parameterised.py @@ -102,6 +102,11 @@ class parameterised(object): else: return expr + def Nparam_transformed(self): + ties = 0 + for ar in self.tied_indices: + ties += ar.size - 1 + return self.Nparam - len(self.constrained_fixed_indices) - ties def constrain_positive(self, which): """ @@ -149,8 +154,6 @@ class parameterised(object): - - def constrain_negative(self,which): """ Set negative constraints. diff --git a/GPy/kern/kern.py b/GPy/kern/kern.py index a00a20e5..5e9273ae 100644 --- a/GPy/kern/kern.py +++ b/GPy/kern/kern.py @@ -236,6 +236,8 @@ class kern(parameterised): X2 = X target = np.zeros(self.Nparam) [p.dK_dtheta(partial[s1,s2],X[s1,i_s],X2[s2,i_s],target[ps]) for p,i_s,ps,s1,s2 in zip(self.parts, self.input_slices, self.param_slices, slices1, slices2)] + + #TODO: transform the gradients here! return target def dK_dX(self,partial,X,X2=None,slices1=None,slices2=None): diff --git a/GPy/models/GP.py b/GPy/models/GP.py index 4eef749e..f8bd27bf 100644 --- a/GPy/models/GP.py +++ b/GPy/models/GP.py @@ -62,7 +62,9 @@ class GP(model): def _set_params(self,p): self.kern._set_params_transformed(p[:self.kern.Nparam]) - self.likelihood._set_params(p[self.kern.Nparam:]) + #self.likelihood._set_params(p[self.kern.Nparam:]) # test by Nicolas + self.likelihood._set_params(p[self.kern.Nparam_transformed():]) # test by Nicolas + self.K = self.kern.K(self.X,slices1=self.Xslices) self.K += self.likelihood.covariance_matrix