def __init__(self, likelihood_or_Y_list, input_dim, num_inducing=10, names=None, kernels=None, initx='PCA', initz='permute', _debug=False, **kw): if names is None: self.names = [ "{}".format(i + 1) for i in range(len(likelihood_or_Y_list)) ] # sort out the kernels if kernels is None: kernels = [None] * len(likelihood_or_Y_list) elif isinstance(kernels, kern): kernels = [ kernels.copy() for i in range(len(likelihood_or_Y_list)) ] else: assert len(kernels) == len( likelihood_or_Y_list), "need one kernel per output" assert all([isinstance(k, kern) for k in kernels]), "invalid kernel object detected!" assert not ('kernel' in kw), "pass kernels through `kernels` argument" self.input_dim = input_dim self.num_inducing = num_inducing self._debug = _debug self._init = True X = self._init_X(initx, likelihood_or_Y_list) Z = self._init_Z(initz, X) self.bgplvms = [ BayesianGPLVM(l, input_dim=input_dim, kernel=k, X=X, Z=Z, num_inducing=self.num_inducing, **kw) for l, k in zip(likelihood_or_Y_list, kernels) ] del self._init self.gref = self.bgplvms[0] nparams = numpy.array( [0] + [SparseGP._get_params(g).size - g.Z.size for g in self.bgplvms]) self.nparams = nparams.cumsum() self.num_data = self.gref.num_data self.NQ = self.num_data * self.input_dim self.MQ = self.num_inducing * self.input_dim Model.__init__(self) self.ensure_default_constraints()
def test_bias_kern(self): N, num_inducing, input_dim, D = 10, 3, 2, 4 X = np.random.rand(N, input_dim) k = GPy.kern.rbf(input_dim) + GPy.kern.white(input_dim, 0.00001) K = k.K(X) Y = np.random.multivariate_normal(np.zeros(N),K,input_dim).T Y -= Y.mean(axis=0) k = GPy.kern.bias(input_dim) + GPy.kern.white(input_dim, 0.00001) m = BayesianGPLVM(Y, input_dim, kernel=k, num_inducing=num_inducing) m.randomize() self.assertTrue(m.checkgrad())