From 0d32652c8876d02aed274c69e976a00733a56265 Mon Sep 17 00:00:00 2001 From: Max Zwiessele Date: Fri, 28 Aug 2015 16:26:55 +0100 Subject: [PATCH] [heteroscedastic gauss] Implemented Heteroscedastic Guassian Lik with @ric70x7 --- GPy/likelihoods/gaussian.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/GPy/likelihoods/gaussian.py b/GPy/likelihoods/gaussian.py index 9abb8cde..ee1f2a5d 100644 --- a/GPy/likelihoods/gaussian.py +++ b/GPy/likelihoods/gaussian.py @@ -48,6 +48,7 @@ class Gaussian(Likelihood): def betaY(self,Y,Y_metadata=None): #TODO: ~Ricardo this does not live here + print "Iam Here" return Y/self.gaussian_variance(Y_metadata) def gaussian_variance(self, Y_metadata=None): @@ -321,3 +322,30 @@ class Gaussian(Likelihood): dF_dv = np.ones_like(v)*(-0.5/lik_var) dF_dtheta = -0.5/lik_var + 0.5*(np.square(Y) + np.square(m) + v - 2*m*Y)/(lik_var**2) return F, dF_dmu, dF_dv, dF_dtheta.reshape(1, Y.shape[0], Y.shape[1]) + +class Heteroscedastic_Gaussian(Gaussian): + def __init__(self, Y_metadata, gp_link=None, variance=1., name='het_Gauss'): + if gp_link is None: + gp_link = link_functions.Identity() + + if not isinstance(gp_link, link_functions.Identity): + print("Warning, Exact inference is not implemeted for non-identity link functions,\ + if you are not already, ensure Laplace inference_method is used") + + super(Heteroscedastic_Gaussian, self).__init__(gp_link, np.ones(Y_metadata['output_index'].shape[0])*variance, name) + + def exact_inference_gradients(self, dL_dKdiag,Y_metadata=None): + return dL_dKdiag[Y_metadata['output_index']][:,0] + + def gaussian_variance(self, Y_metadata=None): + return self.variance[Y_metadata['output_index']] + + def predictive_values(self, mu, var, full_cov=False, Y_metadata=None): + if full_cov: + if var.ndim == 2: + var += np.eye(var.shape[0])*self.variance + if var.ndim == 3: + var += np.atleast_3d(np.eye(var.shape[0])*self.variance) + else: + var += self.variance + return mu, var \ No newline at end of file