diff --git a/GPy/mappings/additive.py b/GPy/mappings/additive.py index 1c86b680..0fb72ca4 100644 --- a/GPy/mappings/additive.py +++ b/GPy/mappings/additive.py @@ -23,9 +23,10 @@ class Additive(Mapping): assert(mapping1.input_dim==mapping2.input_dim) assert(mapping1.output_dim==mapping2.output_dim) input_dim, output_dim = mapping1.input_dim, mapping1.output_dim - Mapping.__init__(self, input_dim=input_dim, output_dim=output_dim) + super(Additive, self).__init__(input_dim=input_dim, output_dim=output_dim) self.mapping1 = mapping1 self.mapping2 = mapping2 + self.link_parameters(self.mapping1, self.mapping2) def f(self, X): return self.mapping1.f(X) + self.mapping2.f(X) diff --git a/GPy/mappings/linear.py b/GPy/mappings/linear.py index c105dd81..26504830 100644 --- a/GPy/mappings/linear.py +++ b/GPy/mappings/linear.py @@ -33,7 +33,7 @@ class Linear(Mapping): return np.dot(X, self.A) def update_gradients(self, dL_dF, X): - self.A.gradient = np.dot( X.T, dL_dF) + self.A.gradient = np.dot(X.T, dL_dF) def gradients_X(self, dL_dF, X): return np.dot(dL_dF, self.A.T) diff --git a/GPy/testing/baseline/bayesian_gplvm_magnification.npz b/GPy/testing/baseline/bayesian_gplvm_magnification.npz index 86f03dba..a9158607 100644 Binary files a/GPy/testing/baseline/bayesian_gplvm_magnification.npz and b/GPy/testing/baseline/bayesian_gplvm_magnification.npz differ diff --git a/GPy/testing/baseline/gplvm_magnification.npz b/GPy/testing/baseline/gplvm_magnification.npz index f1844df9..79ebe836 100644 Binary files a/GPy/testing/baseline/gplvm_magnification.npz and b/GPy/testing/baseline/gplvm_magnification.npz differ diff --git a/GPy/testing/meanfunc_tests.py b/GPy/testing/meanfunc_tests.py index 815c024f..53482a7a 100644 --- a/GPy/testing/meanfunc_tests.py +++ b/GPy/testing/meanfunc_tests.py @@ -28,10 +28,49 @@ class MFtests(unittest.TestCase): A linear mean function with parameters that we'll learn alongside the kernel """ + X = np.linspace(-1,10,50).reshape(-1,1) + + Y = 3-np.abs((X-6)) + Y += .5*np.cos(3*X) + 0.3*np.random.randn(*X.shape) + + mf = GPy.mappings.PiecewiseLinear(1, 1, [-1,1], [9,2]) + + k =GPy.kern.RBF(1) + lik = GPy.likelihoods.Gaussian() + m = GPy.core.GP(X, Y, kernel=k, likelihood=lik, mean_function=mf) + self.assertTrue(m.checkgrad()) + + def test_parametric_mean_function_composition(self): + """ + A linear mean function with parameters that we'll learn alongside the kernel + """ + X = np.linspace(0,10,50).reshape(-1,1) Y = np.sin(X) + 0.5*np.cos(3*X) + 0.1*np.random.randn(*X.shape) + 3*X - mf = GPy.mappings.Linear(1,1) + mf = GPy.mappings.Compound(GPy.mappings.Linear(1,1), + GPy.mappings.Kernel(1, 1, np.random.normal(0,1,(1,1)), + GPy.kern.RBF(1)) + ) + + k =GPy.kern.RBF(1) + lik = GPy.likelihoods.Gaussian() + m = GPy.core.GP(X, Y, kernel=k, likelihood=lik, mean_function=mf) + self.assertTrue(m.checkgrad()) + + def test_parametric_mean_function_additive(self): + """ + A linear mean function with parameters that we'll learn alongside the kernel + """ + + X = np.linspace(0,10,50).reshape(-1,1) + Y = np.sin(X) + 0.5*np.cos(3*X) + 0.1*np.random.randn(*X.shape) + 3*X + + mf = GPy.mappings.Additive(GPy.mappings.Constant(1,1,3), + GPy.mappings.Additive(GPy.mappings.MLP(1,1), + GPy.mappings.Identity(1,1) + ) + ) k =GPy.kern.RBF(1) lik = GPy.likelihoods.Gaussian() diff --git a/travis_tests.py b/travis_tests.py index 3c1c5c95..d44a1638 100644 --- a/travis_tests.py +++ b/travis_tests.py @@ -36,5 +36,5 @@ matplotlib.use('agg') import nose, warnings with warnings.catch_warnings(): warnings.simplefilter("ignore") - nose.main('GPy', defaultTest='GPy/testing/', argv=['', '--show-skipped']) + nose.main('GPy', defaultTest='GPy/testing/plotting_tests.py', argv=['', '--show-skipped'])