From f0b17d7b1aead678b598ca9b0f27e928aea90dec Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Tue, 6 Sep 2016 08:37:21 +0100 Subject: [PATCH] [mrd] init updates and added tests --- GPy/models/mrd.py | 10 ++++------ GPy/testing/model_tests.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/GPy/models/mrd.py b/GPy/models/mrd.py index 029a9d00..4239f7a9 100644 --- a/GPy/models/mrd.py +++ b/GPy/models/mrd.py @@ -195,11 +195,11 @@ class MRD(BayesianGPLVMMiniBatch): fracs = [fracs]*len(Ylist) elif init in "PCA_single": X = np.zeros((Ylist[0].shape[0], self.input_dim)) - fracs = [] + fracs = np.empty((len(Ylist), self.input_dim)) for qs, Y in zip(np.array_split(np.arange(self.input_dim), len(Ylist)), Ylist): - x,frcs = initialize_latent('PCA', len(qs), Y) + x, frcs = initialize_latent('PCA', len(qs), Y) X[:, qs] = x - fracs.append(frcs) + fracs[:, qs] = frcs else: # init == 'random': X = np.random.randn(Ylist[0].shape[0], self.input_dim) fracs = X.var(0) @@ -208,9 +208,7 @@ class MRD(BayesianGPLVMMiniBatch): X /= X.std() return X, fracs - def _init_Z(self, init="permute", X=None): - if X is None: - X = self.X + def _init_Z(self, init, X): if init in "permute": Z = np.random.permutation(X.copy())[:self.num_inducing] elif init in "random": diff --git a/GPy/testing/model_tests.py b/GPy/testing/model_tests.py index c0098ef9..2b969f3e 100644 --- a/GPy/testing/model_tests.py +++ b/GPy/testing/model_tests.py @@ -328,6 +328,41 @@ class MiscTests(unittest.TestCase): m.checkgrad() print(m) + def test_mrd(self): + from GPy.inference.latent_function_inference import InferenceMethodList, VarDTC + from GPy.likelihoods import Gaussian + Y1 = np.random.normal(0, 1, (40, 13)) + Y2 = np.random.normal(0, 1, (40, 6)) + Y3 = np.random.normal(0, 1, (40, 8)) + Q = 5 + m = GPy.models.MRD(dict(data1=Y1, data2=Y2, data3=Y3), Q, + ) + m.randomize() + self.assertTrue(m.checkgrad()) + + m = GPy.models.MRD(dict(data1=Y1, data2=Y2, data3=Y3), Q, initx='PCA_single', + initz='random', + kernel=[GPy.kern.RBF(Q, ARD=1) for _ in range(3)], + inference_method=InferenceMethodList([VarDTC() for _ in range(3)]), + likelihoods = [Gaussian(name='Gaussian_noise'.format(i)) for i in range(3)]) + m.randomize() + self.assertTrue(m.checkgrad()) + + m = GPy.models.MRD(dict(data1=Y1, data2=Y2, data3=Y3), Q, initx='random', + initz='random', + kernel=GPy.kern.RBF(Q, ARD=1), + ) + m.randomize() + self.assertTrue(m.checkgrad()) + + m = GPy.models.MRD(dict(data1=Y1, data2=Y2, data3=Y3), Q, X=np.random.normal(0,1,size=(40,Q)), + X_variance=False, + kernel=GPy.kern.RBF(Q, ARD=1), + likelihoods = [Gaussian(name='Gaussian_noise'.format(i)) for i in range(3)]) + m.randomize() + self.assertTrue(m.checkgrad()) + + def test_model_set_params(self): m = GPy.models.GPRegression(self.X, self.Y) lengthscale = np.random.uniform()