def test_covariance(self): gc = GaussianCovariance() x = np.array([[x1,x2] for x1 in range(10) for x2 in range(10)]) #np.atleast_2d(np.linspace(0, 10, 30)).T theta = np.log(np.array([2,0.01,0.04,0.04])) cov = gc.cov_matrix(x,theta) cov_super = Covariance.cov_matrix(gc,x,theta) self.assertLessEqual(np.abs((cov-cov_super-0.01*np.eye(100))).sum(),1e-10) dcov = gc._d_cov_matrix_d_theta(x,theta,2) dcov_super = Covariance._d_cov_matrix_d_theta(gc,x,theta,2) self.assertLessEqual(np.abs((dcov-dcov_super)).sum(),1e-10) #np.count_nonzero(cov-cov_super) t = GaussianProcess.get_realisation(x, GaussianCovariance(), theta) #t = y + 0.1 * np.random.randn(len(x)) #-> vt = 0.01 dndt = gc._d_nll_d_theta(x,t,theta) print(dndt) dndt_est = [] for j in range(len(theta)): d = np.zeros(len(theta)) d[j] = 1e-5 #d = np.log(1+d/np.exp(theta)) # Addition of log: log(x+y) = log(x) + log(1+y/x) dndt_est.append( (gc._negativeloglikelihood(x,t,theta+d) - gc._negativeloglikelihood(x,t,theta-d))/2e-5 ) dndt_est = np.array(dndt_est) print(dndt_est) print(np.abs(dndt_est - dndt)) self.assertTrue((np.abs(dndt_est - dndt) < 5e-1).all())
def test_spgp_nll(self): x = np.array([[x1,x2] for x1 in range(10) for x2 in range(10)]) #np.atleast_2d(np.linspace(0, 10, 30)).T w = np.array([0.04,0.04]) v = 2 vt = 0#.01 theta = np.zeros(2+len(w)) theta[0] = np.log(v) theta[1] = np.log(vt) theta[2:2+len(w)] = np.log(w) y = GaussianProcess.get_realisation(x, GaussianCovariance(), theta) t = y + 0.1 * np.random.randn(len(x)) #-> vt = 0.01 spgpcov = SPGPCovariance(10) gc = GaussianCovariance() theta = spgpcov.get_theta(x,t) theta_gc = gc.get_theta(x,t) start = time.time() res_g = gc._negativeloglikelihood(x,t,theta_gc) print("Gaussian NLL: ",res_g) print("Time: ",time.time()-start) start = time.time() res = Covariance._negativeloglikelihood(spgpcov,x,t,theta) print("My NLL: ",res) print("Time: ",time.time()-start) res_s = spgpcov._negativeloglikelihood(x,t,theta) print("Snelson NLL: ", res_s) print("Time: ", time.time()-start) self.assertAlmostEqual(res,res_s,delta=2e-1)