diff --git a/GPy/testing/inference_tests.py b/GPy/testing/inference_tests.py new file mode 100644 index 00000000..c7efa821 --- /dev/null +++ b/GPy/testing/inference_tests.py @@ -0,0 +1,71 @@ + +""" +The test cases for various inference algorithms +""" + +import unittest, itertools +import numpy as np +import GPy + + +class InferenceXTestCase(unittest.TestCase): + + def genData(self): + D1,D2,N = 12,12,50 + np.random.seed(1234) + + x = np.linspace(0, 4 * np.pi, N)[:, None] + s1 = np.vectorize(lambda x: np.sin(x)) + s2 = np.vectorize(lambda x: np.cos(x)**2) + s3 = np.vectorize(lambda x:-np.exp(-np.cos(2 * x))) + sS = np.vectorize(lambda x: np.cos(x)) + + s1 = s1(x) + s2 = s2(x) + s3 = s3(x) + sS = sS(x) + + s1 -= s1.mean(); s1 /= s1.std(0) + s2 -= s2.mean(); s2 /= s2.std(0) + s3 -= s3.mean(); s3 /= s3.std(0) + sS -= sS.mean(); sS /= sS.std(0) + + S1 = np.hstack([s1, sS]) + S2 = np.hstack([s3, sS]) + + P1 = np.random.randn(S1.shape[1], D1) + P2 = np.random.randn(S2.shape[1], D2) + + Y1 = S1.dot(P1) + Y2 = S2.dot(P2) + + Y1 += .01 * np.random.randn(*Y1.shape) + Y2 += .01 * np.random.randn(*Y2.shape) + + Y1 -= Y1.mean(0) + Y2 -= Y2.mean(0) + Y1 /= Y1.std(0) + Y2 /= Y2.std(0) + + slist = [s1, s2, s3, sS] + slist_names = ["s1", "s2", "s3", "sS"] + Ylist = [Y1, Y2] + + return Ylist + + def test_inferenceX_BGPLVM(self): + Ys = self.genData() + m = GPy.models.BayesianGPLVM(Ys[0],5,kernel=GPy.kern.Linear(5,ARD=True)) + + x,mi = m.infer_newX(m.Y, optimize=False) + self.assertTrue(mi.checkgrad()) + + m.optimize(max_iters=10000) + x,mi = m.infer_newX(m.Y) + + self.assertTrue(np.allclose(m.X.mean, mi.X.mean)) + self.assertTrue(np.allclose(m.X.variance, mi.X.variance)) + + +if __name__ == "__main__": + unittest.main() \ No newline at end of file