import matplotlib.pyplot as plt plt.rcParams.update({'font.size': 22}) %pip install --upgrade git+https://github.com/lawrennd/ods import pods %pip install --upgrade git+https://github.com/lawrennd/mlai.git import mlai %pip install gpy import numpy as np import GPy np.random.seed(101) N = 50 noise_var = 0.01 X = np.zeros((50, 1)) X[:25, :] = np.linspace(0,3,25)[:,None] # First cluster of inputs/covariates X[25:, :] = np.linspace(7,10,25)[:,None] # Second cluster of inputs/covariates # Sample response variables from a Gaussian process with exponentiated quadratic covariance. k = GPy.kern.RBF(1) y = np.random.multivariate_normal(np.zeros(N),k.K(X)+np.eye(N)*np.sqrt(noise_var)).reshape(-1,1) m_full = GPy.models.GPRegression(X,y) _ = m_full.optimize(messages=True) # Optimize parameters of covariance function import matplotlib.pyplot as plt import mlai import mlai.plot as plot from mlai.gp_tutorial import gpplot fig, ax = plt.subplots(figsize=plot.big_wide_figsize) plot.model_output(m_full, ax=ax, xlabel='$x$', ylabel='$y$', fontsize=20, portion=0.2) xlim = ax.get_xlim() ylim = ax.get_ylim() mlai.write_figure(figure=fig, filename='sparse-demo-full-gp.svg', directory='./gp/') kern = GPy.kern.RBF(1) Z = np.hstack( (np.linspace(2.5,4.,3), np.linspace(7,8.5,3)))[:,None] m = GPy.models.SparseGPRegression(X,y,kernel=kern,Z=Z) m.noise_var = noise_var m.inducing_inputs.constrain_fixed() display(m) fig, ax = plt.subplots(figsize=plot.big_wide_figsize) plot.model_output(m, ax=ax, xlabel='$x$', ylabel='$y$', fontsize=20, portion=0.2, xlim=xlim, ylim=ylim) mlai.write_figure(figure=fig, filename='sparse-demo-constrained-inducing-6-unlearned-gp.svg', directory='./gp/') _ = m.optimize(messages=True) display(m) fig, ax = plt.subplots(figsize=plot.big_wide_figsize) plot.model_output(m, ax=ax, xlabel='$x$', ylabel='$y$', fontsize=20, portion=0.2, xlim=xlim, ylim=ylim) mlai.write_figure(figure=fig, filename='sparse-demo-constrained-inducing-6-learned-gp.svg', directory='./gp/') m.randomize() m.inducing_inputs.unconstrain() _ = m.optimize(messages=True) fig, ax = plt.subplots(figsize=plot.big_wide_figsize) plot.model_output(m, ax=ax, xlabel='$x$', ylabel='$y$', fontsize=20, portion=0.2,xlim=xlim, ylim=ylim) mlai.write_figure(figure=fig, filename='sparse-demo-unconstrained-inducing-6-gp.svg', directory='./gp/') m.num_inducing=8 m.randomize() M = 8 m.set_Z(np.random.rand(M,1)*12) _ = m.optimize(messages=True) fig, ax = plt.subplots(figsize=plot.big_wide_figsize) plot.model_output(m, ax=ax, xlabel='$x$', ylabel='$y$', fontsize=20, portion=0.2, xlim=xlim, ylim=ylim) mlai.write_figure(figure=fig, filename='sparse-demo-sparse-inducing-8-gp.svg', directory='./gp/') print(m.log_likelihood(), m_full.log_likelihood())