From d26beb215a5abd7d66befbe6753faa33b03c4668 Mon Sep 17 00:00:00 2001 From: James Hensman Date: Thu, 16 Oct 2014 17:32:37 +0100 Subject: [PATCH] numerical stability in variational expectations --- GPy/likelihoods/bernoulli.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/GPy/likelihoods/bernoulli.py b/GPy/likelihoods/bernoulli.py index f2ff60e5..817c0687 100644 --- a/GPy/likelihoods/bernoulli.py +++ b/GPy/likelihoods/bernoulli.py @@ -177,11 +177,12 @@ class Bernoulli(Likelihood): (the distribution for y_i depends only on inverse link of f_i not on inverse link of f_(j!=i) """ #d2logpdf_dlink2 = -y/(inv_link_f**2) - (1-y)/((1-inv_link_f)**2) - state = np.seterr(divide='ignore') - # TODO check y \in {0, 1} or {-1, 1} #d2logpdf_dlink2 = np.where(y, -1./np.square(inv_link_f), -1./np.square(1.-inv_link_f)) arg = np.where(y, inv_link_f, 1.-inv_link_f) - return -1./np.square(arg) + ret = -1./np.square(np.clip(arg, 1e-3, np.inf)) + if np.any(np.isinf(ret)): + stop + return ret def d3logpdf_dlink3(self, inv_link_f, y, Y_metadata=None): """