From 6c799f92b590c27b1c358740305ccc538aed97e6 Mon Sep 17 00:00:00 2001 From: Michael Clerx Date: Thu, 25 Apr 2019 11:09:12 +0100 Subject: [PATCH 1/3] Added value-based test for twisted gaussian kl divergence. --- pints/tests/test_toy_twisted_gaussian_logpdf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pints/tests/test_toy_twisted_gaussian_logpdf.py b/pints/tests/test_toy_twisted_gaussian_logpdf.py index 51e1704ec..e14909d28 100755 --- a/pints/tests/test_toy_twisted_gaussian_logpdf.py +++ b/pints/tests/test_toy_twisted_gaussian_logpdf.py @@ -57,6 +57,7 @@ def test_sampling_and_kl_divergence(self): s13 = log_pdf1.kl_divergence(samples3) self.assertLess(s11, s12) self.assertLess(s11, s13) + self.assertEqual(s11, 0.0012248323505286152) s21 = log_pdf2.kl_divergence(samples1) s22 = log_pdf2.kl_divergence(samples2) From 5cad7a64eb195848f21004edd11a0541a9d5d46b Mon Sep 17 00:00:00 2001 From: Michael Clerx Date: Thu, 25 Apr 2019 11:10:25 +0100 Subject: [PATCH 2/3] Removed obsolete comment from twisted gaussian, made equation look more like standard one. --- pints/toy/_twisted_gaussian_banana.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/pints/toy/_twisted_gaussian_banana.py b/pints/toy/_twisted_gaussian_banana.py index 947562a6f..f11e4ebec 100644 --- a/pints/toy/_twisted_gaussian_banana.py +++ b/pints/toy/_twisted_gaussian_banana.py @@ -128,22 +128,18 @@ def kl_divergence(self, samples): # - k # ) # - # For this distribution, s1 is the identify matrix, and m1 is zero, - # so it simplifies to - # - # dkl = 0.5 * (trace(s0) + m0.dot(m0) - log(det(s0)) - k)) - # m0 = np.mean(y, axis=0) s0 = np.cov(y.T) s1 = self._sigma m1 = np.zeros(self.n_parameters()) s1_inv = np.linalg.inv(s1) return 0.5 * ( - np.trace(np.matmul(s1_inv, s0)) + - np.matmul(np.matmul(m1 - m0, s1_inv), m1 - m0) - - np.log(np.linalg.det(s0)) + - np.log(np.linalg.det(s1)) - - self._n_parameters) + np.trace(np.matmul(s1_inv, s0)) + + np.matmul(np.matmul((m1 - m0).T, s1_inv), m1 - m0) + + np.log(np.linalg.det(s1)) + - np.log(np.linalg.det(s0)) + - self._n_parameters + ) def n_parameters(self): """ See :meth:`pints.LogPDF.n_parameters()`. """ From 41586ad899a32f193cb55d646ccde2961288eb31 Mon Sep 17 00:00:00 2001 From: Michael Clerx Date: Thu, 25 Apr 2019 11:28:50 +0100 Subject: [PATCH 3/3] Made twisted gaussian test robust against small platform-dependent differences. --- pints/tests/test_toy_twisted_gaussian_logpdf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pints/tests/test_toy_twisted_gaussian_logpdf.py b/pints/tests/test_toy_twisted_gaussian_logpdf.py index e14909d28..42a920f5e 100755 --- a/pints/tests/test_toy_twisted_gaussian_logpdf.py +++ b/pints/tests/test_toy_twisted_gaussian_logpdf.py @@ -57,7 +57,7 @@ def test_sampling_and_kl_divergence(self): s13 = log_pdf1.kl_divergence(samples3) self.assertLess(s11, s12) self.assertLess(s11, s13) - self.assertEqual(s11, 0.0012248323505286152) + self.assertAlmostEqual(s11, 0.0012248323505286152) s21 = log_pdf2.kl_divergence(samples1) s22 = log_pdf2.kl_divergence(samples2)