From 5b433a3f73504604240b4425b699987d53a9408e Mon Sep 17 00:00:00 2001 From: Ricardo Date: Mon, 15 Jul 2013 18:09:26 +0100 Subject: [PATCH] random changes --- GPy/core/gp.py | 7 ++++++- GPy/likelihoods/ep.py | 3 ++- GPy/likelihoods/noise_models/gaussian_noise.py | 11 ++++++++--- GPy/likelihoods/noise_models/noise_distributions.py | 3 +++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/GPy/core/gp.py b/GPy/core/gp.py index 5172d9e7..8d52a984 100644 --- a/GPy/core/gp.py +++ b/GPy/core/gp.py @@ -98,7 +98,12 @@ class GP(GPBase): Note, we use the chain rule: dL_dtheta = dL_dK * d_K_dtheta """ - return np.hstack((self.kern.dK_dtheta(dL_dK=self.dL_dK, X=self.X), self.likelihood._gradients(partial=np.diag(self.dL_dK)))) + #return np.hstack((self.kern.dK_dtheta(dL_dK=self.dL_dK, X=self.X), self.likelihood._gradients(partial=np.diag(self.dL_dK)))) + if not isinstance(self.likelihood,EP): + tmp = np.hstack((self.kern.dK_dtheta(dL_dK=self.dL_dK, X=self.X), self.likelihood._gradients(partial=np.diag(self.dL_dK)))) + else: + tmp = np.hstack((self.kern.dK_dtheta(dL_dK=self.dL_dK, X=self.X), self.likelihood._gradients(partial=np.diag(self.dL_dK)))) + return tmp def _raw_predict(self, _Xnew, which_parts='all', full_cov=False,stop=False): """ diff --git a/GPy/likelihoods/ep.py b/GPy/likelihoods/ep.py index 50df599a..aaa03938 100644 --- a/GPy/likelihoods/ep.py +++ b/GPy/likelihoods/ep.py @@ -77,7 +77,8 @@ class EP(likelihood): self.noise_model._set_params(p) def _gradients(self,partial): - return np.zeros(0) # TODO: the EP likelihood might want to take some parameters... + #return np.zeros(0) # TODO: the EP likelihood might want to take some parameters... + return self.noise_model._gradients(partial) def _compute_GP_variables(self): #Variables to be called from GP diff --git a/GPy/likelihoods/noise_models/gaussian_noise.py b/GPy/likelihoods/noise_models/gaussian_noise.py index 389363a3..40db423c 100644 --- a/GPy/likelihoods/noise_models/gaussian_noise.py +++ b/GPy/likelihoods/noise_models/gaussian_noise.py @@ -28,6 +28,10 @@ class Gaussian(NoiseDistribution): def _set_params(self,p): self.variance = p + def _gradients(self,partial): + return np.zeros(1) + #return np.sum(partial) + def _preprocess_values(self,Y): """ Check if the values of the observations correspond to the values @@ -57,13 +61,14 @@ class Gaussian(NoiseDistribution): return 1./(1./self.variance + 1./sigma**2) def _mass(self,gp,obs): - return std_norm_pdf( (self.gp_link.transf(gp)-obs)/np.sqrt(self.variance) ) + #return std_norm_pdf( (self.gp_link.transf(gp)-obs)/np.sqrt(self.variance) ) + return stats.norm.pdf(obs,self.gp_link.transf(gp),np.sqrt(self.variance)) #FIXME def _nlog_mass(self,gp,obs): - return .5*((self.gp_link.transf(gp)-obs)**2/np.sqrt(self.variance) + np.log(2*np.pi*self.variance)) + return .5*((self.gp_link.transf(gp)-obs)**2/self.variance + np.log(2.*np.pi*self.variance)) def _dnlog_mass_dgp(self,gp,obs): - return (self.gp_link.transf(gp)-obs)/np.sqrt(self.variance) * self.gp_link.dtransf_df(gp) + return (self.gp_link.transf(gp)-obs)/self.variance * self.gp_link.dtransf_df(gp) def _d2nlog_mass_dgp2(self,gp,obs): return ((self.gp_link.transf(gp)-obs)*self.gp_link.d2transf_df2(gp) + self.gp_link.dtransf_df(gp)**2)/self.variance diff --git a/GPy/likelihoods/noise_models/noise_distributions.py b/GPy/likelihoods/noise_models/noise_distributions.py index 45f92950..bc4d89d6 100644 --- a/GPy/likelihoods/noise_models/noise_distributions.py +++ b/GPy/likelihoods/noise_models/noise_distributions.py @@ -43,6 +43,9 @@ class NoiseDistribution(object): def _set_params(self,p): pass + def _gradients(self,partial): + return np.zeros(0) + def _preprocess_values(self,Y): """ In case it is needed, this function assess the output values or makes any pertinent transformation on them.