From 0c6134a0ae2ab56f6ca98942b4a81c16b75b0ee0 Mon Sep 17 00:00:00 2001 From: Taco de Wolff Date: Mon, 11 Dec 2023 16:13:19 -0300 Subject: [PATCH] Add exact variational expectation implementation for Gamma likelihood --- mogptk/gpr/likelihood.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/mogptk/gpr/likelihood.py b/mogptk/gpr/likelihood.py index d576781..ea21648 100644 --- a/mogptk/gpr/likelihood.py +++ b/mogptk/gpr/likelihood.py @@ -626,11 +626,20 @@ def log_prob(self, X, y, f): p -= self.shape()*self.link(f).log() return p # NxQ + def variational_expectation(self, X, y, mu, var): + # y,mu,var: Nx1 + if self.link != exp: + super().variational_expectation(X, y, mu, var) + + p = -self.shape()*mu + p -= torch.lgamma(self.shape()) + p += (self.shape() - 1.0) * y.log() + p -= y * torch.exp(var/2.0 - mu) + return p.sum() + def conditional_mean(self, X, f): return self.shape()*self.link(f) - #TODO: implement variational_expectation - def conditional_sample(self, X, f): if self.link != exp: raise ValueError("only exponential link function is supported")