From 31c82a74ce45b7c26fdc5e471409466df6741acd Mon Sep 17 00:00:00 2001 From: Max Zwiessele Date: Mon, 7 Oct 2013 07:41:51 +0100 Subject: [PATCH] parameter_testing --- GPy/testing/parameter_testing.py | 83 +++++++++++++++++++++++--------- 1 file changed, 60 insertions(+), 23 deletions(-) diff --git a/GPy/testing/parameter_testing.py b/GPy/testing/parameter_testing.py index 00b6accf..7972d77f 100644 --- a/GPy/testing/parameter_testing.py +++ b/GPy/testing/parameter_testing.py @@ -8,7 +8,8 @@ from GPy.kern.constructors import rbf, linear, white from GPy.models.gp_regression import GPRegression import numpy from GPy.models.bayesian_gplvm import BayesianGPLVM -from GPy.core.parameter import Parameter, Parameters +from GPy.core.parameter import Param, Parameterized +from GPy.likelihoods.gaussian import Gaussian class Test(unittest.TestCase): @@ -17,40 +18,44 @@ class Test(unittest.TestCase): self.rbf_variance = numpy.random.rand() self.rbf_lengthscale = numpy.random.rand(self.Q) self.linear_variance = numpy.random.rand(self.Q) + self.noise_variance = numpy.random.rand(1) self.kern = (rbf(self.Q, self.rbf_variance, self.rbf_lengthscale, ARD=True) - + linear(self.Q, self.linear_variance, ARD=True)) + + linear(self.Q, self.linear_variance, ARD=True) + + white(self.Q, self.noise_variance)) self.X = numpy.random.rand(self.N, self.Q) + 10 self.X_variance = numpy.random.rand(self.N, self.Q) * .2 K = self.kern.K(self.X) self.Y = numpy.random.multivariate_normal(numpy.zeros(self.N), K + numpy.eye(self.N) * .2, self.D).T - - self.bgplvm = BayesianGPLVM(self.Y, self.Q, self.X, self.X_variance, kernel=self.kern) + + self.bgplvm = BayesianGPLVM(Gaussian(self.Y, variance=self.noise_variance), self.Q, self.X, self.X_variance, kernel=self.kern) self.bgplvm.ensure_default_constraints() + self.bgplvm.tie_params("noise_variance|white_variance") - self.parameter = Parameters([ - Parameters([ - Parameter('X', self.X), - Parameter('X_variance', self.X_variance), - ], - prefix='X'), - Parameter('iip', self.bgplvm.Z), - Parameters([ - Parameter('rbf_variance', self.rbf_variance), - Parameter('rbf_lengthscale', self.rbf_lengthscale) - ], - 'rbf' - ), - Parameter('linear_variance', self.linear_variance), - Parameter('noise_variance', self.linear_variance), + self.parameter = Parameterized([ + Parameterized([ + Param('X', self.X), + Param('X_variance', self.X_variance), + ]), + Param('iip', self.bgplvm.Z), + Parameterized([ + Param('rbf_variance', self.rbf_variance), + Param('rbf_lengthscale', self.rbf_lengthscale) + ]), + Param('linear_variance', self.linear_variance), + Param('white_variance', self.noise_variance), + Param('noise_variance', self.noise_variance), ]) + self.parameter['.*variance'].constrain_positive() + self.parameter['.*length'].constrain_positive() + self.parameter.white.tie_to(self.parameter.noise) def tearDown(self): pass - def testGrepParamNames(self): + def testGrepParamNamesTest(self): assert(self.bgplvm.grep_param_names('X_\d') == self.parameter.grep_param_names('X_\d')) assert(self.bgplvm.grep_param_names('X_\d+_1') == self.parameter.grep_param_names('X_\d+_1')) assert(self.bgplvm.grep_param_names('X_\d_1') == self.parameter.grep_param_names('X_\d_1')) @@ -63,10 +68,42 @@ class Test(unittest.TestCase): assert(self.bgplvm.grep_param_names('dont_match') == self.parameter.grep_param_names('dont_match')) assert(self.bgplvm.grep_param_names('.*') == self.parameter.grep_param_names('.*')) - def testConstraints(self): - assert(self.bgplvm.constraints) + def testGetParams(self): + assert(numpy.allclose(self.bgplvm._get_params(), self.parameter._get_params())) + assert(numpy.allclose(self.bgplvm._get_params_transformed(), self.parameter._get_params_transformed())) + + def testSetParams(self): + self.bgplvm.randomize() + self.parameter._set_params(self.bgplvm._get_params()) + assert(numpy.allclose(self.bgplvm._get_params(), self.parameter._get_params())) + assert(numpy.allclose(self.bgplvm._get_params_transformed(), self.parameter._get_params_transformed())) + self.bgplvm.randomize() + self.parameter._set_params_transformed(self.bgplvm._get_params_transformed()) + assert(numpy.allclose(self.bgplvm._get_params(), self.parameter._get_params())) + assert(numpy.allclose(self.bgplvm._get_params_transformed(), self.parameter._get_params_transformed())) + + def testSlicing(self): + assert(numpy.alltrue(self.parameter.X[:,1] == self.X[:,1])) + assert(numpy.alltrue(self.parameter.X[:,1] == self.X[:,1])) + assert(numpy.alltrue(self.parameter.X_variance[1,1] == self.X_variance[1,1])) + assert(numpy.alltrue(self.parameter.X_variance[:] == self.X_variance[:])) + assert(numpy.alltrue(self.parameter.X[:,:][:,0:2][:,1] == self.X[:,1])) + assert(numpy.alltrue(self.parameter.X[:,1] == self.X[:,1])) + assert(numpy.alltrue(self.parameter.X_variance[1,1] == self.X_variance[1,1])) + assert(numpy.alltrue(self.parameter.X_variance[:] == self.X_variance[:])) + + def testNdarrayFunc(self): + assert(numpy.alltrue(self.parameter.X * self.parameter.X == self.X * self.X)) + assert(numpy.alltrue(self.parameter.X * self.parameter.X == self.X * self.X)) + + if __name__ == "__main__": - # import sys;sys.argv = ['', 'Test.testName'] + import sys;sys.argv = ['', + 'Test.testSlicing', + 'Test.testGetParams', + 'Test.testNdarrayFunc', + 'Test.testSetParams', + ] unittest.main()