Source code for GPy.testing.pep_tests

# Copyright (c) 2014, James Hensman, 2016, Thang Bui
# Licensed under the BSD 3-clause license (see LICENSE.txt)

import unittest
import numpy as np
import GPy

[docs]class PEPgradienttest(unittest.TestCase):
[docs] def setUp(self): ###################################### # # 1 dimensional example np.random.seed(10) N = 20 # sample inputs and outputs self.X1D = np.random.uniform(-3., 3., (N, 1)) self.Y1D = np.sin(self.X1D) + np.random.randn(N, 1) * 0.05 ###################################### # # 2 dimensional example # sample inputs and outputs self.X2D = np.random.uniform(-3., 3., (N, 2)) self.Y2D = np.sin(self.X2D[:, 0:1]) * np.sin(self.X2D[:, 1:2]) + np.random.randn(N, 1) * 0.05 ####################################### # # more datapoints, check in alpha limits, the log marginal likelihood # # is consistent with FITC and VFE/Var_DTC M = 5 np.random.seed(42) self.X1 = np.c_[np.linspace(-1., 1., N)] self.Y1 = np.sin(self.X1) + np.random.randn(N, 1) * 0.05 self.kernel = GPy.kern.RBF(input_dim=1, lengthscale=0.5, variance=1) self.Z = np.random.uniform(-1, 1, (M, 1)) self.lik_noise_var = 0.01
[docs] def test_pep_1d_gradients(self): m = GPy.models.SparseGPRegression(self.X1D, self.Y1D) m.inference_method = GPy.inference.latent_function_inference.PEP(alpha=np.random.rand()) self.assertTrue(m.checkgrad())
[docs] def test_pep_2d_gradients(self): m = GPy.models.SparseGPRegression(self.X2D, self.Y2D) m.inference_method = GPy.inference.latent_function_inference.PEP(alpha=np.random.rand()) self.assertTrue(m.checkgrad())
[docs] def test_pep_vfe_consistency(self): vfe_model = GPy.models.SparseGPRegression( self.X1, self.Y1, kernel=self.kernel, Z=self.Z ) vfe_model.inference_method = GPy.inference.latent_function_inference.VarDTC() vfe_model.Gaussian_noise.variance = self.lik_noise_var vfe_lml = vfe_model.log_likelihood() pep_model = GPy.models.SparseGPRegression( self.X1, self.Y1, kernel=self.kernel, Z=self.Z ) pep_model.inference_method = GPy.inference.latent_function_inference.PEP(alpha=1e-5) pep_model.Gaussian_noise.variance = self.lik_noise_var pep_lml = pep_model.log_likelihood() self.assertAlmostEqual(vfe_lml[0, 0], pep_lml[0], delta=abs(0.01*pep_lml[0]))
[docs] def test_pep_fitc_consistency(self): fitc_model = GPy.models.SparseGPRegression( self.X1D, self.Y1D, kernel=self.kernel, Z=self.Z ) fitc_model.inference_method = GPy.inference.latent_function_inference.FITC() fitc_model.Gaussian_noise.variance = self.lik_noise_var fitc_lml = fitc_model.log_likelihood() pep_model = GPy.models.SparseGPRegression( self.X1D, self.Y1D, kernel=self.kernel, Z=self.Z ) pep_model.inference_method = GPy.inference.latent_function_inference.PEP(alpha=1) pep_model.Gaussian_noise.variance = self.lik_noise_var pep_lml = pep_model.log_likelihood() self.assertAlmostEqual(fitc_lml, pep_lml[0], delta=abs(0.001*pep_lml[0]))