# calculate posterior predictive distribution via filtering and smoothing at train & test locations: print('calculating the posterior predictive distribution ...') t0 = time.time() posterior_mean, posterior_var, _ = sde_gp_model.predict() t1 = time.time() print('prediction time: %2.2f secs' % (t1 - t0)) lb = posterior_mean[:, 0] - 1.96 * posterior_var[:, 0]**0.5 ub = posterior_mean[:, 0] + 1.96 * posterior_var[:, 0]**0.5 x_pred = sde_gp_model.t_all test_id = sde_gp_model.test_id print('sampling from the posterior ...') t0 = time.time() posterior_samp = sde_gp_model.posterior_sample(20) t1 = time.time() print('sampling time: %2.2f secs' % (t1 - t0)) print('plotting ...') plt.figure(1, figsize=(12, 5)) plt.clf() plt.plot(x, ground_truth[:, 0, 0], 'k--', label='ground truth') plt.plot(x, y, 'k.', label='observations') plt.plot(x_pred, posterior_mean, 'b', label='posterior mean') plt.fill_between(x_pred, lb, ub, color='b', alpha=0.05, label='95% confidence') plt.plot(sde_gp_model.t_test, posterior_samp[test_id, 0, :], 'b', alpha=0.15) plt.xlim([sde_gp_model.t_test[0], sde_gp_model.t_test[-1]]) plt.legend() plt.title('GP regression via Kalman smoothing') plt.xlabel('time - $t$')
# calculate posterior predictive distribution via filtering and smoothing at train & test locations: print('calculating the posterior predictive distribution ...') t0 = time.time() nlpd = model.negative_log_predictive_density(t=x_test, y=y_test) posterior_mean, posterior_cov = model.predict(t=x_plot) t1 = time.time() print('prediction time: %2.2f secs' % (t1-t0)) print('test NLPD: %1.2f' % nlpd) lb = posterior_mean - 1.96 * posterior_cov ** 0.5 ub = posterior_mean + 1.96 * posterior_cov ** 0.5 link_fn = model.likelihood.link_fn print('sampling from the posterior ...') t0 = time.time() posterior_samp = model.posterior_sample(20, t=x_plot) t1 = time.time() print('sampling time: %2.2f secs' % (t1-t0)) print('plotting ...') plt.figure(1, figsize=(12, 5)) plt.clf() plt.plot(x, y, 'b+', label='training observations') plt.plot(x_test, y_test, 'r+', alpha=0.4, label='test observations') plt.plot(x_plot, link_fn(posterior_mean), 'm', label='posterior mean') plt.fill_between(x_plot, link_fn(lb), link_fn(ub), color='m', alpha=0.05, label='95% confidence') plt.plot(x_plot, link_fn(posterior_samp), 'm', alpha=0.15) plt.xlim(x_plot[0], x_plot[-1]) plt.legend() plt.title('GP classification via Kalman smoothing. Test NLPD: %1.2f' % nlpd) plt.xlabel('time - $t$')
print('calculating the posterior predictive distribution ...') t0 = time.time() posterior_mean, posterior_cov, _, nlpd = model.predict() t1 = time.time() print('prediction time: %2.2f secs' % (t1 - t0)) print('test NLPD: %1.2f' % nlpd) lb = posterior_mean[:, 0, 0] - 1.96 * posterior_cov[:, 0, 0]**0.5 ub = posterior_mean[:, 0, 0] + 1.96 * posterior_cov[:, 0, 0]**0.5 x_pred = model.t_all[:, 0] test_id = model.test_id t_test = model.t_all[test_id] print('sampling from the posterior ...') t0 = time.time() posterior_samp = model.posterior_sample(20) t1 = time.time() print('sampling time: %2.2f secs' % (t1 - t0)) print('plotting ...') plt.figure(1, figsize=(12, 5)) plt.clf() plt.plot(x, y, 'k.', label='training observations') plt.plot(x_test, y_test, 'r.', alpha=0.4, label='test observations') plt.plot(x_pred, posterior_mean[..., 0], 'b', label='posterior mean') plt.fill_between(x_pred, lb, ub, color='b', alpha=0.05, label='95% confidence') plt.plot(t_test, posterior_samp[test_id, 0, :], 'b', alpha=0.15) plt.xlim([t_test[0], t_test[-1]]) plt.legend() plt.title('GP regression via Kalman smoothing. Test NLPD: %1.2f' % nlpd) plt.xlabel('time - $t$')