import notutils as nu from ipywidgets import IntSlider import notutils as nu nu.display_plots('anne-bob-conversation{sample:0>3}.svg', 'https://inverseprobability.com/talks/../slides/diagrams/', sample=IntSlider(0, 0, 7, 1)) import notutils as nu from ipywidgets import IntSlider import notutils as nu nu.display_plots('anne-bob-conversation{sample:0>3}.svg', 'https://inverseprobability.com/talks/../slides/diagrams/', sample=IntSlider(0, 0, 7, 1)) from IPython.lib.display import YouTubeVideo YouTubeVideo('gwf5mAlI7Ug') from IPython.lib.display import YouTubeVideo YouTubeVideo('8FIEZXMUM2I') from IPython.lib.display import YouTubeVideo YouTubeVideo('0sJjdxn5kcI') from IPython.lib.display import YouTubeVideo YouTubeVideo('vJG698U2Mvo') from IPython.lib.display import YouTubeVideo YouTubeVideo('_oGAzq5wM_Q') import notutils as nu nu.display_google_book(id='1YQPAAAAQAAJ', page='PR17-IA2') from IPython.lib.display import YouTubeVideo YouTubeVideo('Kk2MH9O4pXY') import numpy as np p = np.random.randn(10000, 1) xlim = [-4, 4] x = np.linspace(xlim[0], xlim[1], 200) y = 1/np.sqrt(2*np.pi)*np.exp(-0.5*x*x) import matplotlib.pyplot as plt import mlai.plot as plot import mlai fig, ax = plt.subplots(figsize=plot.big_wide_figsize) ax.plot(x, y, 'r', linewidth=3) ax.hist(p, 100, density=True) ax.set_xlim(xlim) mlai.write_figure('gaussian-histogram.svg', directory='./ml') from IPython.lib.display import YouTubeVideo YouTubeVideo('3HJtmx5f1Fc') from IPython.lib.display import YouTubeVideo YouTubeVideo('wa8DU-Sui8Q') import mlai %load -n mlai.Kernel # %load -n mlai.Kernel class Kernel(): """Covariance function :param function: covariance function :type function: function :param name: name of covariance function :type name: string :param shortname: abbreviated name of covariance function :type shortname: string :param formula: latex formula of covariance function :type formula: string :param function: covariance function :type function: function :param \**kwargs: See below :Keyword Arguments: * """ def __init__(self, function, name=None, shortname=None, formula=None, **kwargs): self.function=function self.formula = formula self.name = name self.shortname = shortname self.parameters=kwargs def K(self, X, X2=None): """Compute the full covariance function given a kernel function for two data points.""" if X2 is None: X2 = X K = np.zeros((X.shape[0], X2.shape[0])) for i in np.arange(X.shape[0]): for j in np.arange(X2.shape[0]): K[i, j] = self.function(X[i, :], X2[j, :], **self.parameters) return K def diag(self, X): """Compute the diagonal of the covariance function""" diagK = np.zeros((X.shape[0], 1)) for i in range(X.shape[0]): diagK[i] = self.function(X[i, :], X[i, :], **self.parameters) return diagK def _repr_html_(self): raise NotImplementedError import mlai %load -n mlai.eq_cov # %load -n mlai.eq_cov def eq_cov(x, x_prime, variance=1., lengthscale=1.): """Exponentiated quadratic covariance function.""" diffx = x - x_prime return variance*np.exp(-0.5*np.dot(diffx, diffx)/lengthscale**2) kernel = Kernel(function=eq_cov, name='Exponentiated Quadratic', shortname='eq', lengthscale=0.25) import numpy as np np.random.seed(10) import mlai.plot as plot plot.rejection_samples(kernel=kernel, diagrams='./gp') import notutils as nu from ipywidgets import IntSlider nu.display_plots('gp_rejection_sample{sample:0>3}.png', directory='./gp', sample=IntSlider(1,1,5,1)) %pip install daft import matplotlib # Comment for google colab (no latex available) #matplotlib.rc('text', usetex=True) #matplotlib.rcParams['text.latex.preamble']=[r"\usepackage{amsmath}"] import mlai.plot as plot #plot.deep_nn(diagrams='./deepgp/') import mlai.plot as plot plot.deep_nn_bottleneck(diagrams='./deepgp') %pip install gpy %pip install --upgrade git+https://github.com/SheffieldML/PyDeepGP.git %pip install mlai # Late bind setup methods to DeepGP object from mlai.deepgp_tutorial import initialize from mlai.deepgp_tutorial import staged_optimize from mlai.deepgp_tutorial import posterior_sample from mlai.deepgp_tutorial import visualize from mlai.deepgp_tutorial import visualize_pinball import deepgp deepgp.DeepGP.initialize=initialize deepgp.DeepGP.staged_optimize=staged_optimize deepgp.DeepGP.posterior_sample=posterior_sample deepgp.DeepGP.visualize=visualize deepgp.DeepGP.visualize_pinball=visualize_pinball %pip install pods import numpy as np import pods data = pods.datasets.olympic_marathon_men() x = data['X'] y = data['Y'] offset = y.mean() scale = np.sqrt(y.var()) yhat = (y - offset)/scale import matplotlib.pyplot as plt import mlai.plot as plot import mlai xlim = (1875,2030) ylim = (2.5, 6.5) fig, ax = plt.subplots(figsize=plot.big_wide_figsize) _ = ax.plot(x, y, 'r.',markersize=10) ax.set_xlabel('year', fontsize=20) ax.set_ylabel('pace min/km', fontsize=20) ax.set_xlim(xlim) ax.set_ylim(ylim) mlai.write_figure(filename='olympic-marathon.svg', directory='./datasets') import GPy m_full = GPy.models.GPRegression(x,yhat) _ = m_full.optimize() # Optimize parameters of covariance function xt = np.linspace(1870,2030,200)[:,np.newaxis] yt_mean, yt_var = m_full.predict(xt) yt_sd=np.sqrt(yt_var) import matplotlib.pyplot as plt import mlai.plot as plot import mlai fig, ax = plt.subplots(figsize=plot.big_wide_figsize) plot.model_output(m_full, scale=scale, offset=offset, ax=ax, xlabel="year", ylabel="pace min/km", fontsize=20, portion=0.2) ax.set_xlim(xlim) ax.set_ylim(ylim) mlai.write_figure(figure=fig, filename="olympic-marathon-gp.svg", directory = "./gp", transparent=True, frameon=True) x_clean=np.vstack((x[0:2, :], x[3:, :])) y_clean=np.vstack((yhat[0:2, :], yhat[3:, :])) m_clean = GPy.models.GPRegression(x_clean,y_clean) _ = m_clean.optimize() import matplotlib.pyplot as plt import mlai.plot as plot import mlai fig, ax = plt.subplots(figsize=plot.big_wide_figsize) plot.model_output(m_clean, scale=scale, offset=offset, ax=ax, xlabel='year', ylabel='pace min/km', fontsize=20, portion=0.2) ax.set_xlim(xlim) ax.set_ylim(ylim) mlai.write_figure(figure=fig, filename='./gp/olympic-marathon-gp.svg', transparent=True, frameon=True) import GPy import deepgp hidden = 1 m = deepgp.DeepGP([y.shape[1],hidden,x.shape[1]],Y=yhat, X=x, inits=['PCA','PCA'], kernels=[GPy.kern.RBF(hidden,ARD=True), GPy.kern.RBF(x.shape[1],ARD=True)], # the kernels for each layer num_inducing=50, back_constraint=False) # Call the initalization m.initialize() for layer in m.layers: layer.likelihood.variance.constrain_positive(warning=False) m.optimize(messages=True,max_iters=10000) m.staged_optimize(messages=(True,True,True)) import matplotlib.pyplot as plt import mlai.plot as plot import mlai fig, ax = plt.subplots(figsize=plot.big_wide_figsize) plot.model_output(m, scale=scale, offset=offset, ax=ax, xlabel='year', ylabel='pace min/km', fontsize=20, portion=0.2) ax.set_xlim(xlim) ax.set_ylim(ylim) mlai.write_figure(figure=fig, filename='./deepgp/olympic-marathon-deep-gp.svg', transparent=True, frameon=True) fig, ax = plt.subplots(figsize=plot.big_wide_figsize) plot.model_sample(m, scale=scale, offset=offset, samps=10, ax=ax, xlabel='year', ylabel='pace min/km', portion = 0.225) ax.set_xlim(xlim) ax.set_ylim(ylim) mlai.write_figure(figure=fig, filename='./deepgp/olympic-marathon-deep-gp-samples.svg', transparent=True, frameon=True) m.visualize(scale=scale, offset=offset, xlabel='year', ylabel='pace min/km',xlim=xlim, ylim=ylim, dataset='olympic-marathon', diagrams='./deepgp') import notutils as nu nu.display_plots('olympic-marathon-deep-gp-layer-{sample:0>1}.svg', './deepgp', sample=(0,1)) fig, ax = plt.subplots(figsize=plot.big_wide_figsize) m.visualize_pinball(ax=ax, scale=scale, offset=offset, points=30, portion=0.1, xlabel='year', ylabel='pace km/min', vertical=True) mlai.write_figure(figure=fig, filename='./deepgp/olympic-marathon-deep-gp-pinball.svg', transparent=True, frameon=True) num_low=25 num_high=25 gap = -.1 noise=0.0001 x = np.vstack((np.linspace(-1, -gap/2.0, num_low)[:, np.newaxis], np.linspace(gap/2.0, 1, num_high)[:, np.newaxis])) y = np.vstack((np.zeros((num_low, 1)), np.ones((num_high,1)))) scale = np.sqrt(y.var()) offset = y.mean() yhat = (y-offset)/scale fig, ax = plt.subplots(figsize=plot.big_wide_figsize) _ = ax.plot(x, y, 'r.',markersize=10) _ = ax.set_xlabel('$x$', fontsize=20) _ = ax.set_ylabel('$y$', fontsize=20) xlim = (-2, 2) ylim = (-0.6, 1.6) ax.set_ylim(ylim) ax.set_xlim(xlim) mlai.write_figure(figure=fig, filename='./datasets/step-function.svg', transparent=True, frameon=True) m_full = GPy.models.GPRegression(x,yhat) _ = m_full.optimize() # Optimize parameters of covariance function fig, ax=plt.subplots(figsize=plot.big_wide_figsize) plot.model_output(m_full, scale=scale, offset=offset, ax=ax, fontsize=20, portion=0.5) ax.set_ylim(ylim) ax.set_xlim(xlim) mlai.write_figure(figure=fig,filename='./gp/step-function-gp.svg', transparent=True, frameon=True) layers = [y.shape[1], 1, 1, 1,x.shape[1]] inits = ['PCA']*(len(layers)-1) kernels = [] for i in layers[1:]: kernels += [GPy.kern.RBF(i)] m = deepgp.DeepGP(layers,Y=yhat, X=x, inits=inits, kernels=kernels, # the kernels for each layer num_inducing=20, back_constraint=False) m.initialize() m.staged_optimize() fig, ax=plt.subplots(figsize=plot.big_wide_figsize) plot.model_output(m, scale=scale, offset=offset, ax=ax, fontsize=20, portion=0.5) ax.set_ylim(ylim) ax.set_xlim(xlim) mlai.write_figure(filename='./deepgp/step-function-deep-gp.svg', transparent=True, frameon=True) import mlai.plot as plot fig, ax=plt.subplots(figsize=plot.big_wide_figsize) plot.model_sample(m, scale=scale, offset=offset, samps=10, ax=ax, portion = 0.5) ax.set_ylim(ylim) ax.set_xlim(xlim) mlai.write_figure(figure=fig, filename='./deepgp/step-function-deep-gp-samples.svg', transparent=True, frameon=True) m.visualize(offset=offset, scale=scale, xlim=xlim, ylim=ylim, dataset='step-function', diagrams='./deepgp') import matplotlib.pyplot as plt import mlai.plot as plot import mlai fig, ax=plt.subplots(figsize=plot.big_wide_figsize) m.visualize_pinball(offset=offset, ax=ax, scale=scale, xlim=xlim, ylim=ylim, portion=0.1, points=50) mlai.write_figure(figure=fig, filename='./deepgp/step-function-deep-gp-pinball.svg', transparent=True, frameon=True, ax=ax)