Source code for GPy.testing.lfm_tests

# This will become a regression test for LFMs.

import os
import pickle

import matplotlib.pyplot as plt

import numpy as np

import scipy.io as sio

import GPy
from GPy import kern

basedir = os.path.dirname(os.path.relpath(os.path.abspath(__file__)))
result_dir = os.path.join(basedir, 'testresult','.')
baseline_dir = os.path.join(basedir, 'baseline','.')

baseline_file = os.path.join(baseline_dir, 'toyDataBatchNLFM1.mat')

# Load baseline / test data
toydata_baseline = sio.loadmat(baseline_file)

# Extract data from `.m` file
x_temp = toydata_baseline['XTemp']
x_test_temp = toydata_baseline['XTestTemp']
y_temp = toydata_baseline['yTemp']
y_test_temp = toydata_baseline['yTestTemp']

# Re-arrange data
x = x_temp[0, 0:3].tolist() # Observed x (training set)
y = y_temp[0, 0:3].tolist() # Observed y (training set)
x_test = x_test_temp[0, 0:3].tolist() # Observed x (test set)
y_test = y_test_temp[0, 0:3].tolist() # Observed y (test set)

[docs]def test_multioutput_optimisation(): # build kernel k_lfmxlfm = [GPy.kern.LFMXLFM(input_dim = 1) for i in range(9)] cov_dict = {(0,0): k_lfmxlfm[0], (0,1): k_lfmxlfm[1], (0,2): k_lfmxlfm[2], (1,0): k_lfmxlfm[3], (1,1): k_lfmxlfm[4], (1,2): k_lfmxlfm[5], (2,0): k_lfmxlfm[6], (2,1): k_lfmxlfm[7], (2,2): k_lfmxlfm[8]} Xm, Ym, Im = GPy.util.multioutput.build_XY(x, y) # build model likelihoods = [GPy.likelihoods.Gaussian(variance=0.1) for i in range(9)] m = GPy.models.MultioutputGP(X_list = x, Y_list = y, kernel_list = k_lfmxlfm, likelihood_list = likelihoods, kernel_cross_covariances = cov_dict) # plot initial covariance matrix cov = m.kern.K(Xm, Ym) plt.imshow(cov) # save image for manual check plt.savefig(os.path.join(result_dir, "covplot_pre.png")) # randomise model # m.randomize() # this causes the test to error # optimise model m.optimize() # plot post-optimisation covariance matrix cov = m.kern.K(Xm, Ym) plt.imshow(cov) # save image for manual check plt.savefig(os.path.join(result_dir, "covplot_post.png"))