[mrd] init updates and added tests

This commit is contained in:
mzwiessele 2016-09-06 08:37:21 +01:00
parent 6d4714cf0e
commit f0b17d7b1a
2 changed files with 39 additions and 6 deletions

View file

@ -195,11 +195,11 @@ class MRD(BayesianGPLVMMiniBatch):
fracs = [fracs]*len(Ylist) fracs = [fracs]*len(Ylist)
elif init in "PCA_single": elif init in "PCA_single":
X = np.zeros((Ylist[0].shape[0], self.input_dim)) 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): 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 X[:, qs] = x
fracs.append(frcs) fracs[:, qs] = frcs
else: # init == 'random': else: # init == 'random':
X = np.random.randn(Ylist[0].shape[0], self.input_dim) X = np.random.randn(Ylist[0].shape[0], self.input_dim)
fracs = X.var(0) fracs = X.var(0)
@ -208,9 +208,7 @@ class MRD(BayesianGPLVMMiniBatch):
X /= X.std() X /= X.std()
return X, fracs return X, fracs
def _init_Z(self, init="permute", X=None): def _init_Z(self, init, X):
if X is None:
X = self.X
if init in "permute": if init in "permute":
Z = np.random.permutation(X.copy())[:self.num_inducing] Z = np.random.permutation(X.copy())[:self.num_inducing]
elif init in "random": elif init in "random":

View file

@ -328,6 +328,41 @@ class MiscTests(unittest.TestCase):
m.checkgrad() m.checkgrad()
print(m) 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): def test_model_set_params(self):
m = GPy.models.GPRegression(self.X, self.Y) m = GPy.models.GPRegression(self.X, self.Y)
lengthscale = np.random.uniform() lengthscale = np.random.uniform()