mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-06 18:42:39 +02:00
[statespace] changed tests to check model integrity with GP model
This commit is contained in:
parent
13cf717231
commit
7984e17805
1 changed files with 160 additions and 152 deletions
|
|
@ -20,7 +20,7 @@ class StateSpaceKernelsTests(np.testing.TestCase):
|
||||||
|
|
||||||
def run_for_model(self, X, Y, ss_kernel, kalman_filter_type = 'regular',
|
def run_for_model(self, X, Y, ss_kernel, kalman_filter_type = 'regular',
|
||||||
use_cython=False, check_gradients=True,
|
use_cython=False, check_gradients=True,
|
||||||
optimize=True, optimize_max_iters=1000,predict_X=None,
|
optimize=True, optimize_max_iters=250, predict_X=None,
|
||||||
compare_with_GP=True, gp_kernel=None,
|
compare_with_GP=True, gp_kernel=None,
|
||||||
mean_compare_decimal=10, var_compare_decimal=7):
|
mean_compare_decimal=10, var_compare_decimal=7):
|
||||||
|
|
||||||
|
|
@ -31,34 +31,35 @@ class StateSpaceKernelsTests(np.testing.TestCase):
|
||||||
if check_gradients:
|
if check_gradients:
|
||||||
self.assertTrue(m1.checkgrad())
|
self.assertTrue(m1.checkgrad())
|
||||||
|
|
||||||
if optimize:
|
if 1:#optimize:
|
||||||
m1.optimize(optimizer='lbfgsb',max_iters=optimize_max_iters)
|
m1.optimize(optimizer='lbfgsb',max_iters=2)
|
||||||
|
|
||||||
if compare_with_GP and (predict_X is None):
|
if compare_with_GP and (predict_X is None):
|
||||||
predict_X = X
|
predict_X = X
|
||||||
|
|
||||||
if (predict_X is not None):
|
self.assertTrue(compare_with_GP)
|
||||||
x_pred_reg_1 = m1.predict(predict_X)
|
|
||||||
x_quant_reg_1 = m1.predict_quantiles(predict_X)
|
|
||||||
|
|
||||||
if compare_with_GP:
|
if compare_with_GP:
|
||||||
|
np.random.seed(254856)
|
||||||
m2 = GPy.models.GPRegression(X,Y, gp_kernel)
|
m2 = GPy.models.GPRegression(X,Y, gp_kernel)
|
||||||
m2.optimize(optimizer='lbfgsb', max_iters=optimize_max_iters)
|
#m2.randomize()
|
||||||
#print(m2)
|
m2.optimize(max_iters=optimize_max_iters)
|
||||||
|
|
||||||
|
m1[:] = m2[:]
|
||||||
|
|
||||||
|
if (predict_X is not None):
|
||||||
|
x_pred_reg_1 = m1.predict(predict_X)
|
||||||
|
x_quant_reg_1 = m1.predict_quantiles(predict_X)
|
||||||
|
|
||||||
x_pred_reg_2 = m2.predict(predict_X)
|
x_pred_reg_2 = m2.predict(predict_X)
|
||||||
x_quant_reg_2 = m2.predict_quantiles(predict_X)
|
x_quant_reg_2 = m2.predict_quantiles(predict_X)
|
||||||
|
|
||||||
# Test values
|
np.testing.assert_array_almost_equal(x_pred_reg_1[0], x_pred_reg_2[0], 3)
|
||||||
#print np.max(np.abs(x_pred_reg_1[0]-x_pred_reg_2[0]))
|
np.testing.assert_array_almost_equal(x_pred_reg_1[1], x_pred_reg_2[1], 3)
|
||||||
np.testing.assert_almost_equal(np.max(np.abs(x_pred_reg_1[0]- \
|
np.testing.assert_array_almost_equal(x_quant_reg_1[0], x_quant_reg_2[0], 3)
|
||||||
x_pred_reg_2[0])), 0, decimal=mean_compare_decimal)
|
np.testing.assert_array_almost_equal(x_quant_reg_1[1], x_quant_reg_2[1], 3)
|
||||||
|
np.testing.assert_almost_equal(m1.log_likelihood(), m2.log_likelihood(), 3)
|
||||||
|
np.testing.assert_array_almost_equal(m1.gradient, m2.gradient, 2)
|
||||||
|
|
||||||
# Test variances
|
|
||||||
#print np.max(np.abs(x_pred_reg_1[1]-x_pred_reg_2[1]))
|
|
||||||
|
|
||||||
np.testing.assert_almost_equal(np.max(np.abs(x_pred_reg_1[1]- \
|
|
||||||
x_pred_reg_2[1])), 0, decimal=var_compare_decimal)
|
|
||||||
|
|
||||||
def test_Matern32_kernel(self,):
|
def test_Matern32_kernel(self,):
|
||||||
np.random.seed(234) # seed the random number generator
|
np.random.seed(234) # seed the random number generator
|
||||||
|
|
@ -73,7 +74,7 @@ class StateSpaceKernelsTests(np.testing.TestCase):
|
||||||
predict_X=X,
|
predict_X=X,
|
||||||
compare_with_GP=True,
|
compare_with_GP=True,
|
||||||
gp_kernel=gp_kernel,
|
gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=10, var_compare_decimal=7)
|
mean_compare_decimal=5, var_compare_decimal=5)
|
||||||
|
|
||||||
def test_Matern52_kernel(self,):
|
def test_Matern52_kernel(self,):
|
||||||
np.random.seed(234) # seed the random number generator
|
np.random.seed(234) # seed the random number generator
|
||||||
|
|
@ -87,7 +88,7 @@ class StateSpaceKernelsTests(np.testing.TestCase):
|
||||||
self.run_for_model(X, Y, ss_kernel, check_gradients=True,
|
self.run_for_model(X, Y, ss_kernel, check_gradients=True,
|
||||||
optimize = True, predict_X=X,
|
optimize = True, predict_X=X,
|
||||||
compare_with_GP=True, gp_kernel=gp_kernel,
|
compare_with_GP=True, gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=8, var_compare_decimal=7)
|
mean_compare_decimal=5, var_compare_decimal=5)
|
||||||
|
|
||||||
def test_RBF_kernel(self,):
|
def test_RBF_kernel(self,):
|
||||||
np.random.seed(234) # seed the random number generator
|
np.random.seed(234) # seed the random number generator
|
||||||
|
|
@ -95,13 +96,14 @@ class StateSpaceKernelsTests(np.testing.TestCase):
|
||||||
plot = False, points_num=50, x_interval = (0, 20), random=True)
|
plot = False, points_num=50, x_interval = (0, 20), random=True)
|
||||||
X.shape = (X.shape[0],1); Y.shape = (Y.shape[0],1)
|
X.shape = (X.shape[0],1); Y.shape = (Y.shape[0],1)
|
||||||
|
|
||||||
ss_kernel = GPy.kern.sde_RBF(1,active_dims=[0,])
|
ss_kernel = GPy.kern.sde_RBF(1, Y.var(), X.ptp()/2., active_dims=[0,])
|
||||||
gp_kernel = GPy.kern.RBF(1,active_dims=[0,])
|
gp_kernel = GPy.kern.RBF(1, Y.var(), X.ptp()/2., active_dims=[0,])
|
||||||
|
|
||||||
self.run_for_model(X, Y, ss_kernel, check_gradients=True,
|
self.run_for_model(X, Y, ss_kernel, check_gradients=True,
|
||||||
predict_X=X,
|
predict_X=X,
|
||||||
gp_kernel=gp_kernel,
|
gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=1, var_compare_decimal=1)
|
optimize_max_iters=1000,
|
||||||
|
mean_compare_decimal=2, var_compare_decimal=2)
|
||||||
|
|
||||||
def test_periodic_kernel(self,):
|
def test_periodic_kernel(self,):
|
||||||
np.random.seed(322) # seed the random number generator
|
np.random.seed(322) # seed the random number generator
|
||||||
|
|
@ -170,22 +172,25 @@ class StateSpaceKernelsTests(np.testing.TestCase):
|
||||||
self.run_for_model(X, Y, ss_kernel, check_gradients=True,
|
self.run_for_model(X, Y, ss_kernel, check_gradients=True,
|
||||||
predict_X=X,
|
predict_X=X,
|
||||||
gp_kernel=gp_kernel,
|
gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=10, var_compare_decimal=7)
|
mean_compare_decimal=5, var_compare_decimal=5)
|
||||||
|
|
||||||
def test_exponential_kernel(self,):
|
def test_exponential_kernel(self,):
|
||||||
np.random.seed(234) # seed the random number generator
|
np.random.seed(12345) # seed the random number generator
|
||||||
(X,Y) = generate_linear_data(x_points=None, tangent=1.0, add_term=20.0, noise_var=2.0,
|
(X,Y) = generate_linear_data(x_points=None, tangent=1.0, add_term=20.0, noise_var=2.0,
|
||||||
plot = False, points_num=50, x_interval = (0, 20), random=True)
|
plot = False, points_num=10, x_interval = (0, 20), random=True)
|
||||||
|
|
||||||
X.shape = (X.shape[0],1); Y.shape = (Y.shape[0],1)
|
X.shape = (X.shape[0],1); Y.shape = (Y.shape[0],1)
|
||||||
|
|
||||||
ss_kernel = GPy.kern.sde_Exponential(1, active_dims=[0,])
|
ss_kernel = GPy.kern.sde_Exponential(1, Y.var(), X.ptp()/2., active_dims=[0,])
|
||||||
gp_kernel = GPy.kern.Exponential(1, active_dims=[0,])
|
gp_kernel = GPy.kern.Exponential(1, Y.var(), X.ptp()/2., active_dims=[0,])
|
||||||
|
|
||||||
|
Y -= Y.mean()
|
||||||
|
|
||||||
self.run_for_model(X, Y, ss_kernel, check_gradients=True,
|
self.run_for_model(X, Y, ss_kernel, check_gradients=True,
|
||||||
predict_X=X,
|
predict_X=X,
|
||||||
gp_kernel=gp_kernel,
|
gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=5, var_compare_decimal=6)
|
optimize_max_iters=1000,
|
||||||
|
mean_compare_decimal=2, var_compare_decimal=2)
|
||||||
|
|
||||||
def test_kernel_addition(self,):
|
def test_kernel_addition(self,):
|
||||||
#np.random.seed(329) # seed the random number generator
|
#np.random.seed(329) # seed the random number generator
|
||||||
|
|
@ -249,25 +254,27 @@ class StateSpaceKernelsTests(np.testing.TestCase):
|
||||||
return ss_kernel, gp_kernel
|
return ss_kernel, gp_kernel
|
||||||
|
|
||||||
ss_kernel, gp_kernel = get_new_kernels()
|
ss_kernel, gp_kernel = get_new_kernels()
|
||||||
|
|
||||||
|
#import ipdb;ipdb.set_trace()
|
||||||
self.run_for_model(X, Y, ss_kernel, kalman_filter_type = 'svd',
|
self.run_for_model(X, Y, ss_kernel, kalman_filter_type = 'svd',
|
||||||
use_cython=True, optimize_max_iters=10, check_gradients=True,
|
use_cython=True, optimize_max_iters=10, check_gradients=True,
|
||||||
predict_X=X,
|
predict_X=X,
|
||||||
gp_kernel=gp_kernel,
|
gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=-1, var_compare_decimal=-1)
|
mean_compare_decimal=2, var_compare_decimal=2)
|
||||||
|
|
||||||
ss_kernel, gp_kernel = get_new_kernels()
|
ss_kernel, gp_kernel = get_new_kernels()
|
||||||
self.run_for_model(X, Y, ss_kernel, kalman_filter_type = 'regular',
|
self.run_for_model(X, Y, ss_kernel, kalman_filter_type = 'regular',
|
||||||
use_cython=False, optimize_max_iters=10, check_gradients=True,
|
use_cython=False, optimize_max_iters=10, check_gradients=True,
|
||||||
predict_X=X,
|
predict_X=X,
|
||||||
gp_kernel=gp_kernel,
|
gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=-1, var_compare_decimal=-1)
|
mean_compare_decimal=2, var_compare_decimal=2)
|
||||||
|
|
||||||
ss_kernel, gp_kernel = get_new_kernels()
|
ss_kernel, gp_kernel = get_new_kernels()
|
||||||
self.run_for_model(X, Y, ss_kernel, kalman_filter_type = 'svd',
|
self.run_for_model(X, Y, ss_kernel, kalman_filter_type = 'svd',
|
||||||
use_cython=False, optimize_max_iters=10, check_gradients=True,
|
use_cython=False, optimize_max_iters=10, check_gradients=True,
|
||||||
predict_X=X,
|
predict_X=X,
|
||||||
gp_kernel=gp_kernel,
|
gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=-1, var_compare_decimal=0)
|
mean_compare_decimal=2, var_compare_decimal=2)
|
||||||
|
|
||||||
def test_forecast(self,):
|
def test_forecast(self,):
|
||||||
"""
|
"""
|
||||||
|
|
@ -317,21 +324,22 @@ class StateSpaceKernelsTests(np.testing.TestCase):
|
||||||
use_cython=False, optimize_max_iters=30, check_gradients=True,
|
use_cython=False, optimize_max_iters=30, check_gradients=True,
|
||||||
predict_X=X_test,
|
predict_X=X_test,
|
||||||
gp_kernel=gp_kernel,
|
gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=0, var_compare_decimal=-1)
|
mean_compare_decimal=2, var_compare_decimal=2)
|
||||||
|
|
||||||
|
|
||||||
ss_kernel, gp_kernel = get_new_kernels()
|
ss_kernel, gp_kernel = get_new_kernels()
|
||||||
self.run_for_model(X_train, Y_train, ss_kernel, kalman_filter_type = 'svd',
|
self.run_for_model(X_train, Y_train, ss_kernel, kalman_filter_type = 'svd',
|
||||||
use_cython=False, optimize_max_iters=30, check_gradients=False,
|
use_cython=False, optimize_max_iters=30, check_gradients=False,
|
||||||
predict_X=X_test,
|
predict_X=X_test,
|
||||||
gp_kernel=gp_kernel,
|
gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=-1, var_compare_decimal=-1)
|
mean_compare_decimal=2, var_compare_decimal=2)
|
||||||
|
|
||||||
ss_kernel, gp_kernel = get_new_kernels()
|
ss_kernel, gp_kernel = get_new_kernels()
|
||||||
self.run_for_model(X_train, Y_train, ss_kernel, kalman_filter_type = 'svd',
|
self.run_for_model(X_train, Y_train, ss_kernel, kalman_filter_type = 'svd',
|
||||||
use_cython=True, optimize_max_iters=30, check_gradients=False,
|
use_cython=True, optimize_max_iters=30, check_gradients=False,
|
||||||
predict_X=X_test,
|
predict_X=X_test,
|
||||||
gp_kernel=gp_kernel,
|
gp_kernel=gp_kernel,
|
||||||
mean_compare_decimal=-1, var_compare_decimal=-1)
|
mean_compare_decimal=2, var_compare_decimal=2)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print("Running state-space inference tests...")
|
print("Running state-space inference tests...")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue