{ "metadata": { "name": "", "signature": "sha256:5e0841b22a0a50af6088ca65ccd2c38cc3eb87f6e17827fc42d44c5746c4d3de" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Inroduction to Bayesian Regression\n", "\n", "## Gaussian Process Winter School, Genova, Italy\n", "### 19th January 2015\n", "### Neil D. Lawrence\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### This Notebook\n", "\n", "The aim of this notebook is to study Bayesian approaches to regression. As in previous sessions, first extract both the olympic years and the pace of the winning runner into 2-dimensional arrays with the data points in the rows of the array (the first dimension). First let's load in the data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "data = pods.datasets.olympic_marathon_men()\n", "x = data['X']\n", "y = data['Y']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 71 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Prior Distribution\n", "\n", "In the Bayesian approach, the first thing we do is assume a prior distribution for the parameters, $\\mathbf{w}$. In the lectures we took this prior to be \n", "\n", "$$\\mathbf{w} \\sim \\mathcal{N}(\\mathbf{0}, \\alpha \\mathbf{I})$$\n", "\n", "In other words, we assumed for the prior that each element of the parameters vector, $w_i$, was drawn from a Gaussian density as follows\n", "\n", "$$w_i \\sim \\mathcal{N}(0,\\alpha)$$\n", "\n", "Let's start by assigning the parameter of the prior distribution, which is the variance of the prior distribution, $\\alpha$." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# set prior variance on w\n", "alpha = 4.\n", "# set the degree of the polynomial basis set\n", "degree = 5\n", "# set the noise variance\n", "sigma2 = 0.01" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 72 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have the prior variance, we can sample from the prior distribution to see what form we are imposing on the functions *a priori*. To do this, we first sample a weight vector, then we multiply that weight vector by our basis to compute the the functions. Firstly we compute the basis function matrix. We will do it both for our training data, and for a range of prediction locations (`x_pred`). " ] }, { "cell_type": "code", "collapsed": false, "input": [ "num_data = x.shape[0]\n", "num_pred_data = 100 # how many points to use for plotting predictions\n", "x_pred = np.linspace(1890, 2016, num_pred_data)[:, None] # input locations for predictions" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 73 }, { "cell_type": "markdown", "metadata": {}, "source": [ "now let's build the basis matrices.\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def polynomial(x, degree):\n", " '''Build the polynomial basis matrix with n rows and p columns.'''\n", " degrees = np.arange(degree+1)\n", " # python broad casts the 'power' operation to give us a matrix of the right size.\n", " return x**degrees\n", " \n", "Phi = polynomial(x, degree)\n", "Phi_pred = polynomial(x_pred, degree)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 74 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sampling from the Prior\n", "\n", "Now we will sample from the prior to produce a vector $\\mathbf{w}$ and use it to plot a function which is representative of our belief *before* we fit the data. To do this we are going to use the properties of the Gaussian density and a sample from a *standard normal* using the function `np.random.normal`.\n", "\n", "## Scaling Gaussian-distributed Variables\n", "\n", "First, let's consider the case where we have one data point and one feature in our basis set. In otherwords $\\mathbf{f}$ would be a scalar, $\\mathbf{w}$ would be a scalar and $\\boldsymbol{\\Phi}$ would be a scalar. In this case we have \n", "\n", "$$f = \\phi w$$\n", "\n", "If $w$ is drawn from a normal density, \n", "\n", "$$w \\sim \\mathcal{N}(\\mu_w,c_w)$$\n", "\n", "and $\\phi$ is a scalar value which we are given, then properties of the Gaussian density tell us that \n", "\n", "$$\\phi w \\sim \\mathcal{N}(\\phi\\mu_w,\\phi^2c_w)$$\n", "\n", "Let's test this out numerically. First we will draw 200 samples from a standard normal," ] }, { "cell_type": "code", "collapsed": false, "input": [ "w_vec = np.random.normal(size=200)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 75 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can compute the mean of these samples and their variance" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print 'w sample mean is ', w_vec.mean()\n", "print 'w sample variance is ', w_vec.var()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "w sample mean is 0.00494696284395\n", "w sample variance is 0.988556096645\n" ] } ], "prompt_number": 76 }, { "cell_type": "markdown", "metadata": {}, "source": [ "These are close to zero (the mean) and one (the variance) as you'd expect. Now compute the mean and variance of the scaled version," ] }, { "cell_type": "code", "collapsed": false, "input": [ "phi = 7\n", "f_vec = phi*w_vec\n", "print 'True mean should be phi*0 = 0.'\n", "print 'True variance should be phi*phi*1 = ', phi*phi\n", "print 'f sample mean is ', f_vec.mean()\n", "print 'f sample variance is ', f_vec.var()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True mean should be phi*0 = 0.\n", "True variance should be phi*phi*1 = 49\n", "f sample mean is 0.0346287399076\n", "f sample variance is 48.4392487356\n" ] } ], "prompt_number": 77 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you increase the number of samples then you will see that the sample mean and the sample variance begin to converge towards the true mean and the true variance. Obviously adding an offset to a sample from `np.random.normal` will change the mean. So if you want to sample from a Gaussian with mean `mu` and standard deviation `sigma` one way of doing it is to sample from the standard normal and scale and shift the result, so to sample a set of $w$ from a Gaussian with mean $\\mu$ and variance $\\alpha$,\n", "\n", "$$w \\sim \\mathcal{N}(\\mu,\\alpha)$$\n", "\n", "We can simply scale and offset samples from the *standard normal*." ] }, { "cell_type": "code", "collapsed": false, "input": [ "mu = 4 # mean of the distribution\n", "alpha = 2 # variance of the distribution\n", "w_vec = np.random.normal(size=200)*np.sqrt(alpha) + mu\n", "print 'w sample mean is ', w_vec.mean()\n", "print 'w sample variance is ', w_vec.var()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "w sample mean is 3.87126565982\n", "w sample variance is 2.01735342523\n" ] } ], "prompt_number": 78 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here the `np.sqrt` is necesssary because we need to multiply by the standard deviation and we specified the variance as `alpha`. So scaling and offsetting a Gaussian distributed variable keeps the variable Gaussian, but it effects the mean and variance of the resulting variable. \n", "\n", "To get an idea of the overal shape of the resulting distribution, let's do the same thing with a histogram of the results. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "# First the standard normal\n", "z_vec = np.random.normal(size=1000) # by convention, in statistics, z is often used to denote samples from the standard normal\n", "w_vec = z_vec*np.sqrt(alpha) + mu\n", "# plot normalized histogram of w, and then normalized histogram of z on top\n", "plt.hist(w_vec, bins=30, normed=True)\n", "plt.hist(z_vec, bins=30, normed=True)\n", "plt.legend(('$w$', '$z$'))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 79, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 79 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now re-run this histogram with 100,000 samples and check that the both histograms look qualitatively Gaussian.\n", "\n", "## Sampling from the Prior\n", "\n", "Let's use this way of constructing samples from a Gaussian to check what functions look like *a priori*. The process will be as follows. First, we sample a random vector $K$ dimensional from `np.random.normal`. Then we scale it by $\\sqrt{\\alpha}$ to obtain a prior sample of $\\mathbf{w}$. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "K = order + 1\n", "z_vec = np.random.normal(size=K)\n", "w_sample = z_vec*np.sqrt(alpha)\n", "print w_sample" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 0.99430486 0.11778525 -0.23942415 1.37786878 -0.85252837 -1.01166726]\n" ] } ], "prompt_number": 80 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can combine our sample from the prior with the basis functions to create a function," ] }, { "cell_type": "code", "collapsed": false, "input": [ "Phi_pred.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 81, "text": [ "(100, 6)" ] } ], "prompt_number": 81 }, { "cell_type": "code", "collapsed": false, "input": [ "f_sample = np.dot(Phi_pred,w_sample)\n", "plt.plot(x_pred.flatten(), f_sample.flatten(), 'r-')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 82, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAEGCAYAAACHGfl5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHxJJREFUeJzt3Xmc1WXZx/HPpYCIEKSIyCaIiCLKOmyCTGKKuFBqaioK\nJG6B2lMZak+iZeKWZYao4VamJqBI4oLoKBqyDzuKhkuaqT2ulRtczx/3Dx3wDMzMOTP375zzfb9e\n8+LM79xnzjXnNYf7XNe9mbsjIiLFbbvYAYiISHzqDERERJ2BiIioMxAREdQZiIgI6gxERIQUdQZm\ndquZ/dPMVlSh7UFmtsTMPjOzY7e4r52ZPWZmq81slZntUXtRi4gUhtR0BsBtwNAqtn0FOA34U4b7\n7gSudPcuQAnwVm7CExEpXKnpDNx9LvBuxWtm1tHMHjazRWb2tJl1Ttq+4u4rgI1btO8CbO/uc5J2\n/3H3/9bRryAikrdS0xlU4mZgnLv3Bn4MTNpG+72B98xsWlJGusrM0v47iohEVy92AJUxs8ZAf+A+\nM9t0ucE2HlYPGAR0B14D7gVGArfWTpQiIoUhtZ0BIWt5z917bKNdxc2VXgPK3f1lADN7AOiHOgMR\nka2qcQnFzK42szVmtszMpptZ06203d7MlprZzKr+fHf/AFhvZsclP8PM7IAtf3TytckioJmZNU++\nHwKsqupziogUq2zq6Y8B+7l7N+AF4MKttD0PWM3mn+I3Y2Z3A38FOpvZa2Y2CjgZ+J6ZlQMrgaOT\ntiVm9hpwHHDTpumo7r4B+BEwx8yWJ893Sxa/o4hIUbBcbGFtZt8GjnX3UzLc1wa4Hbgc+B93Pyrr\nJxQRkZzK1Uyb0cCsSu67jjATaGMl94uISGRbHUA2s9lAywx3XeTuM5M2FwOfuvtXFoCZ2ZHAW+6+\n1MxKcxCviIjUgqzKRGY2EhgDDHH3jzPc/0tgBPA50BD4GjDN3U/N0FZHromI1IC727ZbbV02s4mG\nEso/wzN1BADufpG7t3X3DsCJwBOZOoIK7fP265JLLokeQzHGrvjjfyn+uF+5ks2YwW+BxsDsZNro\nJAAza2VmD1XyGH36FxFJoRovOnP3TpVcfwM4IsP1p4Cnavp8IiJSe7RvT46UlpbGDqHG8jl2UPyx\nKf7CkJN1BrlgZp6WWERE8oWZ4TEHkEVEpHCoMxARkSLpDEaNghtugA0bYkciIpJKxdEZ/OhHMHUq\nlJTAc8/FjkZEJHWKozPYbz948snQKRx7LJx+OrzzTuyoRERSozg6AwAzOOkkWL0aGjeGLl3g5pth\no/bPExEp3qmly5bBOefA55/DpEnQq1fdPbeISI5oamm2unWDuXPhzDPhiCPg+9+H996LHZWISBTF\n2xkAbLcdjB4dSkcbNsC++8Kdd0JKsiURkbpSvGWiTBYsgLPPDmMKkyaFgWcRkRRTmag29OkTOoTj\nj4fSUrjgAvjoo9hRiYjUOnUGW9p++zB+sGIF/OMfITu4/36VjkSkoKlMtC1lZWHW0Z57wvXXh39F\nRFJCZaK6UloK5eVw4IFhBfMvfgGffBI7KhGRnFJnUBUNGsCFF8LixWFMoVs3eOKJ2FGJiOSMykQ1\nMWMGnHsuDBoE114Lu+0WOyIRKVIqE8U0fHhYm9CmDXTtCjfeqB1RRSSvKTPI1sqVYYD5449h8mTo\n2TN2RCJSRJQZpEXXrvDUU2Gx2uGHw/nnwwcfxI5KRKRa1Bnkglk4QGfVKvjww7Aj6tSpWpsgInlD\nZaLaMHduyBT22COcsNahQ+yIRKRAqUyUZoMGwZIl4d+SEpg4ET79NHZUIiKVUmZQ29avh7Fj4eWX\nwwDzoEGxIxKRApKrzECdQV1wh+nT4bzzYOhQuPJK2GWX2FGJSAFQmSifmIWzl1evhp12Cpvf6dwE\nEUkRZQYxLFoUTlhr2jSUjvbeO3ZEIpKnlBnks969Yf78sJJ5wAC49FJtficiUakziKVevTCGUF4e\nvrp1C9tli4hEoDJRWsyYAePGwcEHwzXXQPPmsSMSkTygMlGhGT48rGD++tfDAPMdd2iAWUTqjDKD\nNFq8GM44QwPMIrJNygwKWa9eYYD56KPDAPNll2mAWURqlTqDtKpXL+yAumRJmIrao0fY80hEpBao\nTJQPKq5gHjYsrGD++tdjRyUiKRC9TGRmV5vZGjNbZmbTzaxpJe2amdnUpO1qM+tX83CL1KYVzKtW\nQf36YYD53ns1wCwiOVPjzMDMvgnMcfeNZjYRwN3HZ2h3B/CUu99qZvWAndz9/QztlBlU1bx5MGYM\ntGsHkyZB+/axIxKRSKJnBu4+2903Jt/OB9ps2SbJFga5+63JYz7P1BFINfXvH8YSBg4Mq5l/9Sv4\n/PPYUYlIHsvVAPJoYFaG6x2At83sNjNbYma3mFmjHD1ncWvQAC66KGQJDz0EffuGDkJEpAbqbe1O\nM5sNtMxw10XuPjNpczHwqbv/qZKf3xMY6+4LzezXwHjgZ5meb8KECV/cLi0tpbS0tAq/QpHr1Ake\nfzwsUjv8cDj11LDXUSP1uSKFqKysjLJa2Lomq9lEZjYSGAMMcfePM9zfEpjn7h2S7wcC4939yAxt\nNWaQrbfegh/8IGQLkyfDoYfGjkhEaln0MQMzGwr8GBieqSMAcPc3gdfMbNMS2kOAVTV9TtmGFi3g\nrrvCoPKZZ8KIEfD227GjEpE8kM2YwW+BxsBsM1tqZpMAzKyVmT1Uod044C4zWwYcAPwyi+eUqhg6\nFFauDJ1D1646SEdEtkmLzgrdokVhGuquu4bS0Z57xo5IRHIoeplI8kTv3rBgAQwZAn36hO2xNQ1V\nRLagzKCYvPhiGEt47z2YMgW6d48dkYhkSZmBVN9ee4VpqGPHhplG48fDf/8bOyoRSQF1BsXGDEaN\nguXLYf16OOAAePLJ2FGJSGQqExW7Bx+E738fDjsMrr5au6GK5BmViSQ3jj467Ia6ww5hGuq0abEj\nEpEIlBnIl555Bk4/Hbp0gRtugFatYkckItugzEByb+BAKC8PnUG3bvD732uxmkiRUGYgmS1bFrKE\nJk3gllugY8fYEYlIBsoMpHZ16xY2vDviiLA99rXXarGaSAFTZiDb9tJLYUuLDz8Mi9UOOCB2RCKS\nUGYgdadjR5gzJ6xeHjIEfvYz+OST2FGJSA6pM5CqMQtjCMuWhQVrPXqEMpKIFASViaT63OG+++C8\n8+CEE+Dyy2GnnWJHJVKUVCaSeMzg+OPDmQn/+hfsv3/Y80hE8pYyA8nerFlw1llh87trroFmzWJH\nJFI0lBlIegwbFrKE+vXDlhYPPhg7IhGpJmUGkltlZWGguaQErr8+nLAmIrVGmYGkU2lpmG3UunUY\nS7jnHm1pIZIHlBlI7Zk/H0aPhk6d4MYbYffdY0ckUnCUGUj69e0LS5aEDKFbN7j9dmUJIimlzEDq\nxtKlIUto2RJuugnatYsdkUhBUGYg+aVHD1iwIGyT3atX6BA2bowdlYgklBlI3Vu9OmQJjRqFMxP2\n3DN2RCJ5S5mB5K8uXeDZZ8P6hD59whRUZQkiUSkzkLheeCFkCWZw661h5pGIVJkyAykMe+8NTz0F\nxx0H/fuHQ3Q2bIgdlUjRUWYg6fHSS/C974WzEm67DfbZJ3ZEIqmnzEAKT8eO8MQTMGIEDBoEV12l\nLEGkjigzkHRavz7scfTvf4csYd99Y0ckkkrKDKSwdegQzkgYNQoOOgiuvBI+/zx2VCIFS5mBpN/L\nL4cs4YMPQpaw336xIxJJDWUGUjzat4fZs0OHUFoKV1yhLEEkx5QZSH555ZXQKbz/ftj4rkuX2BGJ\nRKXMQIrTHnvAY4+FKaiDB8PEicoSRHKgxp2BmV1tZmvMbJmZTTezppW0u9DMVpnZCjP7k5ntUPNw\nRQirlc88ExYuDIPMBx4Ia9bEjkokr2WTGTwG7Ofu3YAXgAu3bGBm7YExQE933x/YHjgxi+cU+dKm\nsYRNM460LkGkxmrcGbj7bHfftLvYfKBNhmYfAJ8BjcysHtAIeL2mzynyFWZw1lkhS3jkkbBF9tq1\nsaMSyTu5GjMYDcza8qK7/x9wLfAq8Abwnrs/nqPnFPlS+/ahZDRiROgQtMeRSLVsdTaRmc0GWma4\n6yJ3n5m0uZhQBjo2w+M7AjOBQcD7wH3AVHe/K0NbzSaS3HjppbAT6oYNYV2CdkKVApar2UT1tnan\nu39zG0GMBIYBQypp0hv4q7v/K2k/HRgAfKUzAJgwYcIXt0tLSyktLd3a04tk1rEjPPkk3HBD2An1\nZz+DsWNhO02ek/xXVlZGWVlZzn9ujdcZmNlQQglosLu/U0mbboT/+EuAj4HbgQXu/rsMbZUZSO6t\nWwcjR0L9+uG8BJ2qJgUmDesMfgs0Bmab2VIzm5QE1srMHgJw92XAncAiYHnyuJuzeE6R6unUCZ5+\nGo48MpyqNnky6EOHyFdoBbIUj9WrQ5bQrBlMmQJt28aOSCRracgMRPJLly7w17+Glcs9e4bBZX0A\nEQGUGUixWr4cTjsN2rSBm2+G3XePHZFIjSgzEMnGAQfA/PnQowd07w733KMsQYqaMgORhQtDltC1\nK0yaBM2bx45IpMqUGYjkSkkJLF4M7dqFjOHBB2NHJFLnlBmIVDR3bphxNGgQ/OY30DTjZrwiqaHM\nQKQ2DBoEy5bBjjvC/vuH/Y5EioAyA5HKPPpoOFVt+HC48krYaafYEYl8hTIDkdp22GFhCur774dZ\nR/PmxY5IpNYoMxCpiunT4ZxzwkE6EybADjqwT9JBmYFIXTrmmDCWsGZN2ONo+fJtP0Ykj6gzEKmq\n3XaD+++HH/wAhgyBiRN1gI4UDJWJRGri1VdDyejjj+GOO2CvvWJHJEVKZSKRmNq1g9mz4YQToF8/\nuPFGbWcheU2ZgUi21q4NZy/vskvYGrt169gRSRFRZiCSFvvsE7bG7t8/bI19zz2xIxKpNmUGIrm0\ncGHIEnr0gN/9DnbeOXZEUuCUGYikUUkJLFkCLVqETe8efTR2RCJVosxApLY8/jiMHg1HHw1XXQWN\nGsWOSAqQMgORtDvkkLBQ7d13Q9lowYLYEYlUSpmBSF34859h3Dg4+2y4+GKoXz92RFIgcpUZqDMQ\nqStvvBEWqr37LvzhD9C5c+yIpACoTCSSb1q1gkceCUdsHnhgOGJTH4AkJZQZiMTw/PNhCurOO8Ot\nt4aOQqQGlBmI5LPOneHZZ6Fv3zC4PG1a7IikyCkzEIntuedCljBgAFx/vc5dlmpRZiBSKPr1g6VL\noWFD6N4d5s6NHZEUIWUGImkycyaccQaMHAmXXgoNGsSOSFJOmYFIITrqqLBQbdWqkDGsXh07IikS\n6gxE0qZFC5gxI5y5PHgw/Pa3sHFj7KikwKlMJJJm69bBKadAs2Zw222agipfoTKRSDHo1AmeeebL\nsxKmT48dkRQoZQYi+WLevDAF9aCD4De/gSZNYkckKaDMQKTY9O8fpqCahYVqzz0XOyIpIMoMRPLR\n9OlhgPmss+CnP4V69WJHJJFo11KRYrdpF9QPPoA//hE6dowdkUQQvUxkZj83s2VmVm5mc8ysbSXt\nhprZWjNbZ2Y/qXmoIrKZVq3g4YfhxBPDmoTbbtMuqFJjNc4MzKyJu3+Y3B4HdHP307dosz3wPHAI\n8DqwEPiuu6/J8POUGYjU1IoVcPLJsPfecPPNYTdUKQrRM4NNHUGiMfBOhmZ9gBfd/WV3/wy4Bxhe\n0+cUkUrsv384VrNtW+jWDebMiR2R5JmsZhOZ2eVm9ipwGjAxQ5PWwGsVvv97ck1Ecq1hQ7juOpgy\nBU49FS64AD75JHZUkie22hmY2WwzW5Hh6ygAd7/Y3dsBtwPXZfgRqvuI1LVDDw37G73wQpiOuuYr\nVVmRr9jqfDR3/2YVf86fgFkZrr8OVBxYbkvIDjKaMGHCF7dLS0spLS2t4tOLyGaaN4f774dbbgmL\n1C67LExDtaxLyxJZWVkZZWVlOf+52Qwgd3L3dcntcUAfdx+xRZt6hAHkIcAbwAI0gCxSt9auDYPL\nrVuHEtKuu8aOSHIo+gAycEVSMioHSoEfJoG1MrOHANz9c2As8CiwGrg3U0cgIrVon33CVhb77hsO\nz3n00dgRSQpp0ZlIMXniCTjtNDjuOJg4EXbYIXZEkqU0ZAYikm8OPhjKy+HVV6FvXx2eI19QZyBS\nbHbZBaZOhbFjw+E5N96olcuiMpFIUXv+eTjpJGjTJgwuN28eOyKpJpWJRCR7nTuHweXOncPgslYu\nFy1lBiISPP44jBwZMoVf/AIaNIgdkVSBMgMRya1DDgmH56xdCwMGhBXMUjTUGYjIl3bdFWbMgNGj\n4cADtS12EVGZSEQyW7kSvvtd6NIFbroJmjWLHZFkoDKRiNSurl3DttgtWoTB5WefjR2R1CJlBiKy\nbTNnwpgxcPbZcPHFOnM5RXQGsojUrTfeCOckfPppOHO5XbvYEQkqE4lIXWvVCh57DI44AkpKYNq0\n2BFJDikzEJHqW7AgDC4fckg4Xa1Ro9gRFS1lBiIST58+YU3Cv/8NvXvD8uWxI5IsqTMQkZr52tfC\n2MH48TBkCPzud1qTkMdUJhKR7K1bByeeGDa8u/XWsDOq1AmViUQkPTp1Chve7bVXWJPw1FOxI5Jq\nUmYgIrn18MNhO4szzoD//V+tSahlWmcgIun15pswYgR8/DHcdZfWJNQilYlEJL1atoRHH4Ujjwyz\nje6/P3ZEsg3KDESkdj33XFiTcPjhcO21sOOOsSMqKMoMRCQ/9OsX1iS88w707Qtr1sSOSDJQZyAi\nta9ZM7j3Xhg3DgYNCtNPVQlIFZWJRKRurVoFJ5wABxwAkyeHxWtSYyoTiUh+2m+/sLdRkybQsycs\nWhQ7IkGdgYjE0KhROD3tiitg2LCw2Z0qA1GpTCQica1fH7ayaNEinLncvHnsiPKKykQiUhg6dIC5\nc2GffULZ6OmnY0dUlJQZiEh6PPwwjBoF55wTjtfcfvvYEaWetqMQkcL0+utw8smw3XZhi+xWrWJH\nlGoqE4lIYWrdGubMgcGDoVevsK2F1DplBiKSXmVlYcO7U06Byy6D+vVjR5Q6ygxEpPCVlsKSJbBs\nWbj96quxIypY6gxEJN123RX+8hf41regpAQefDB2RAVJZSIRyR/z5oUdUL/9bbjySmjQIHZE0alM\nJCLFp3//UDb629/gwAPDv5ITWXUGZvZzM1tmZuVmNsfM2mZo09bMnjSzVWa20szOzeY5RaTI7bwz\nPPBAmH7arx9MnRo7ooKQVZnIzJq4+4fJ7XFAN3c/fYs2LYGW7l5uZo2BxcC33H3NFu1UJhKR6lm4\nMOyAOmwYXHMNNGwYO6I6l4oy0aaOINEYeCdDmzfdvTy5/RGwBtAqEhHJXklJKBu9+SYMGAAvvhg7\noryV9ZiBmV1uZq8CpwETt9G2PdADmJ/t84qIAOHgnPvug+99L3QIf/5z7Ijy0jbLRGY2G2iZ4a6L\n3H1mhXbjgc7uPqqSn9MYKAN+4e4PZLjfL7nkki++Ly0tpbS0tAq/gohIYskSOP54OPRQ+NWvCrJs\nVFZWRllZ2RffX3rppenam8jM2gGz3L1rhvvqA38BHnb3X1fyeI0ZiEj23n8fxoyBdetCltCpU+yI\nalUqxgzMrOKrPBxYmqGNAVOA1ZV1BCIiOdO0aThvecyYUDa6997YEeWFbGcTTQU6AxuAl4Cz3f0t\nM2sF3OLuR5jZQOBpYDmw6ckudPdHtvhZygxEJLeKoGykLaxFRKri/ffh9NPDTKP77oO99oodUU6l\nokwkIpJ6TZuGsYPTTw8rmO+7L3ZEqaTMQESKx6JFmy9S22GH2BFlTZmBiEh19e4NixeH09QGDoT1\n62NHlBrqDESkuDRrBtOmhQNz+vWDGTNiR5QKKhOJSPGaPz+UjY45BiZOzMstsVUmEhHJVt++Yfrp\nunXhzOUiPklNnYGIFLeddw6lomOOgT59YNas2BFFoTKRiMgmzzwTTlI75RT4+c+hXr3YEW2TFp2J\niNSGt94KB+d89hncfTfsvnvsiLZKYwYiIrWhRQt45BH4xjegVy944onYEdUJZQYiIpV5/HEYMQLG\njoULL4Tt0vf5WWUiEZG68PrrcOKJ0KQJ/OEPsMsusSPajMpEIiJ1oXXrUCrq2hV69oTnnosdUa1Q\nZiAiUlUzZoRzEi6+GM49FyzrD+RZU5lIRCSGv/0NvvMd6NgRfv97+NrXooajMpGISAx77gnPPhsW\nq5WUwIoVsSPKCXUGIiLV1bAhTJ4MP/0pHHww3HFH7IiypjKRiEg2Vq6E446Dgw6C66+v86M1VSYS\nEUmDrl1h4cJwvOaAAWFMIQ+pMxARyVaTJnDPPTByZDgjYebM2BFVm8pEIiK5NG9eOCPh5JPrZLM7\nTS0VEUmrt9+Gk06CDRvCZne77VZrT6UxAxGRtNp117DZ3cCBYbO7Z56JHdE2KTMQEalNs2bBqFEw\nfjycf37OVy2rTCQiki9efjlMP+3QAaZMyemqZZWJRETyRfv2oVS0adXyqlWxI/oKdQYiInWhYUO4\n6aZwLkJpaRhYThGViURE6lp5ORx7LAwbBtdeCw0a1PhHqUwkIpKvuneHxYvhlVdg8GD4+99jR6TO\nQEQkimbN4IEH4OijwzhC5LOWVSYSEYlt01nL558PF1xQremnmloqIlJIXnstTD9t1Qpuvx2aNq3S\nwzRmICJSSNq2haefht13D2WjlSvr9OmVGYiIpM2dd4YtsceN22ZTlYlERCR+mcjMfm5my8ys3Mzm\nmFnbrbTd3syWmln+bfItIlIEshkzuMrdu7l7d+AB4JKttD0PWA0U7Ef/srKy2CHUWD7HDoo/NsVf\nGGrcGbj7hxW+bQy8k6mdmbUBhgG/B3K7XV+K5PMfVD7HDoo/NsVfGLI6gsfMLgdGAP8B+lXS7Drg\nx0DutukTEZGc2mpmYGazzWxFhq+jANz9YndvB9xO+E9/y8cfCbzl7ksp4KxARCTf5WQ2kZm1A2a5\ne9ctrv+SkDl8DjQkZAfT3P3UDD+jYMcTRERqU9SppWbWyd3XJbfHAX3cfcRW2g8GfuTuR9XoCUVE\npNZkM5voiqRkVA6UAj8EMLNWZvZQJY/Rp38RkRRKzaIzERGJp9b2JjKzW83sn2a2osK1Pma2IFmA\nttDMSpLrDc3sbjNbbmarzWx8hcf0SjKQdWb2m9qKt4rxdzOzeUmcD5pZkwr3XZjEuNbMDs2n+M3s\nm2a2KLm+yMy+kU/xV7i/nZl9ZGY/jBl/Df52DkjuW5nc3yBW7NWNP6Xv3bZm9qSZrUpe03OT6zsn\nk2JeMLPHzKxZhcek5v1b3fhz9v5191r5AgYBPYAVFa6VAYcltw8HnkxujwTuTm7vCKwH2iXfLyCM\nRwDMAobWVsxViH8hMCi5PQq4LLndBSgH6gPtgRf5MuvKh/i7Ay2T2/sBf6/wmNTHX+H+qcC9wA9j\nxl/N174esAzYP/n+68B2+fLap/S92xLontxuDDwP7AtcBVyQXP8JMDG5nar3bw3iz8n7t9YyA3ef\nC7y7xeV/AJv2ZW0GvF7h+k5mtj2wE/Ap8IGZ7Q40cfcFSbs7gW/VVswVVRJ/p+Q6wOPAscnt4YQ3\nxGfu/jLhj6lvvsTv7uXu/mZyfTWwo5nVz5f4AczsW8DfCPFvuhYl/mrGfiiw3N1XJI9919035tFr\nn8b37pvuXp7c/ghYA7QGjgbuSJrdUSGeVL1/qxt/rt6/db2F9XjgWjN7FbgauAjA3R8FPiD8Yb0M\nXO3u7xFegIrnwb2eXItllZkNT25/B9i0H1MrNo/z74Q4t7ye1vgrOhZY7O6fkSevv5k1Bi4AJmzR\nPk3xV/ba7w24mT1iZovN7MfJ9TTFDpXEn/b3rpm1J2Q584Hd3P2fyV3/BHZLbqf2/VvF+Cuq8fu3\nrjuDKcC5Hhaq/SD5HjM7hZBi7g50AH5kZh3qOLaqGA2cY2aLCOnbp5Hjqa6txm9m+wETgTMjxFYV\nlcU/AbjO3f9Dehc3VhZ7PWAgcFLy77fN7GDSN/MuY/xpfu8mHxKmAef55tvn4KFukrbXeDPVjT/b\n929W21HUQB93PyS5PZWwXxHAAOB+d98AvG1mzwK9gGeANhUe34YvS0t1zt2fBw4DMLO9gSOSu15n\n80/ZbQg98uvkR/yb9pCaDoxw9/XJ5bTHPyy5qw9wrJldRSg/bjSz/xJ+n1TEv5XX/jXgaXf/v+S+\nWUBP4I+kJHbY6mufyveumdUn/Ef6B3d/ILn8TzNr6e5vJiWUt5LrqXv/VjP+nLx/6zozeNHC4jOA\ng4EXkttrk+8xs50I+xytTepgH5hZXzMzwmrmB4jEzHZN/t0O+ClwY3LXg8CJZtYg+VTUCViQL/En\nsxIeAn7i7vM2tXf3f5Du+CcncR7k7h3cvQPwa+Byd5+Uptd/K387jwL7m9mOZlYPGAysSlPsUPlr\nTwrfu8nzTQFWu/uvK9z1IHBacvu0CvGk6v1b3fhz9v6txRHxu4E3COnka4QZCL0Jta9yYB7QI2m7\nA+GT0ApgFZvPBumVXH8RuL624q1C/KOBcwkj+88Dv9yi/UVJjGtJZkzlS/yEN/dHwNIKX83zJf4t\nHncJ8D8xX/8a/O2cDKxM4pyYZ387aXzvDgQ2Jv/PbPp7HgrsTBj8fgF4DGhW4TGpef9WN/5cvX+1\n6ExEROq8TCQiIimkzkBERNQZiIiIOgMREUGdgYiIoM5ARERQZyAiIqgzEBER4P8BgbogSxwZJJ8A\nAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 82 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Take a careful look at the scale of this plot on the $y$-axis. This shows the recurring problem with the polynomial basis. Our prior allows relatively large coefficients for the basis associated with high polynomial degrees. Because we are operating with input values of around 2000, this leads to output functions of very high values. One fix for this is to rescale our inputs to be between -1 and 1 before applying the model. This is a disadvantage of the polynomial basis. Let's change our polynomial basis to allow us to scale and offset the inputs." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def polynomial(x, degree, loc, scale):\n", " degrees = np.arange(degree+1)\n", " return ((x-loc)/scale)**degrees\n", "\n", "scale = np.max(x) - np.min(x) \n", "loc = np.min(x) + 0.5*scale\n", "\n", "Phi = polynomial(x, degree, loc, scale)\n", "Phi_pred = polynomial(x_pred, degree, loc, scale)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 87 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's take a look to see if our samples are a little more sensible." ] }, { "cell_type": "code", "collapsed": false, "input": [ "f_sample = np.dot(Phi_pred,w_sample)\n", "plt.plot(x_pred.flatten(), f_sample.flatten(), 'r-')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 88, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 88 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's loop through some samples and plot various functions as samples from this system," ] }, { "cell_type": "code", "collapsed": false, "input": [ "num_samples = 10\n", "K = order+1\n", "for i in xrange(num_samples):\n", " z_vec = np.random.normal(size=K)\n", " w_sample = z_vec*np.sqrt(alpha)\n", " f_sample = np.dot(Phi_pred,w_sample)\n", " plt.plot(x_pred.flatten(), f_sample.flatten())\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nYII=\n", "text": [ "" ] } ], "prompt_number": 89 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The predictions for the mean output can now be computed. We want the expected value of the predictions under the posterior distribution. In matrix form, the predictions can be computed as\n", "\n", "$$\\mathbf{f} = \\boldsymbol{\\Phi} \\mathbf{w}.$$\n", "\n", "This involves a matrix multiplication between a fixed matrix $\\boldsymbol{\\Phi}$ and a vector that is drawn from a distribution $\\mathbf{w}$. Because $\\mathbf{w}$ is drawn from a distribution, this imples that $\\mathbf{f}$ should also be drawn from a distribution. Let's work out what that distributions should be. \n", "\n", "## Computing the Posterior\n", "\n", "In the lecture we went through how to compute the posterior distribution for $\\mathbf{w}$. This distribution is also Gaussian,\n", "\n", "$$p(\\mathbf{w} | \\mathbf{y}, \\mathbf{x}, \\sigma^2) = \\mathcal{N}\\left(\\mathbf{w}|\\boldsymbol{\\mu}_w, \\mathbf{C}_w\\right)$$\n", "\n", "with covariance, $\\mathbf{C}_w$, given by\n", "\n", "$$\\mathbf{C}_w = \\left(\\sigma^{-2}\\boldsymbol{\\Phi}^\\top \\boldsymbol{\\Phi} + \\alpha^{-1} \\mathbf{I}\\right)^{-1}$$ \n", "\n", "whilst the mean is given by\n", "\n", "$$\\boldsymbol{\\mu}_w = \\mathbf{C}_w \\sigma^{-2}\\boldsymbol{\\Phi}^\\top \\mathbf{y}$$\n", "\n", "Let's compute the posterior covariance and mean, then we'll sample from these densities to have a look at the posterior belief about $\\mathbf{w}$ once the data has been accounted for. Remember, the process of Bayesian inference involves combining the prior, $p(\\mathbf{w})$ with the likelihood, $p(\\mathbf{y}|\\mathbf{x}, \\mathbf{w})$ to form the posterior, $p(\\mathbf{w} | \\mathbf{y}, \\mathbf{x})$ through Bayes' rule,\n", "\n", "$$p(\\mathbf{w}|\\mathbf{y}, \\mathbf{x}) = \\frac{p(\\mathbf{y}|\\mathbf{x}, \\mathbf{w})p(\\mathbf{w})}{p(\\mathbf{y})}$$\n", "\n", "We've looked at the samples for our function $\\mathbf{f} = \\boldsymbol{\\Phi}\\mathbf{w}$, which forms the mean of the Gaussian likelihood, under the prior distribution. I.e. we've sampled from $p(\\mathbf{w})$ and multiplied the result by the basis matrix. Now we will sample from the posterior density, $p(\\mathbf{w}|\\mathbf{y}, \\mathbf{x})$, and check that the new samples fit do correspond to the data, i.e. we want to check that the updated distribution includes information from the data set. First we need to compute the posterior mean and *covariance*." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# compute the posterior covariance and mean\n", "w_cov = np.linalg.inv(1/sigma2*np.dot(Phi.T, Phi) + 1/alpha*np.eye(order+1))\n", "w_mean = np.dot(w_cov, 1/sigma2*np.dot(Phi.T, y))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 90 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before we were able to sample the prior values for the mean *independently* from a Gaussian using `np.random.normal` and scaling the result. However, observing the data *correlates* the parameters. Recall this from the first lab where we had a correlation between the offset, $c$ and the slope $m$ which caused such problems with the coordinate ascent algorithm. We need to sample from a *correlated* Gaussian. For this we can use `np.random.multivariate_normal`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "w_sample = np.random.multivariate_normal(w_mean.flatten(), w_cov)\n", "f_sample = np.dot(Phi_pred,w_sample)\n", "plt.plot(x_pred.flatten(), f_sample.flatten(), 'r-')\n", "plt.plot(x, y, 'rx') # plot data to show fit." ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 91, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 91 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's sample several functions and plot them all to see how the predictions fluctuate." ] }, { "cell_type": "code", "collapsed": false, "input": [ "for i in xrange(num_samples):\n", " w_sample = np.random.multivariate_normal(w_mean.flatten(), w_cov)\n", " f_sample = np.dot(Phi_pred,w_sample)\n", " plt.plot(x_pred.flatten(), f_sample.flatten())\n", "plt.plot(x, y, 'rx') # plot data to show fit." ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 92, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 92 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sum of Gaussian-distributed Variables\n", "\n", "The sum of Gaussian random variables is also Gaussian, so if we have a random variable $y_i$ drawn from a Gaussian density with mean $\\mu_i$ and variance $\\sigma^2_i$, \n", "\n", "$$y_i \\sim \\mathcal{N}(\\mu_i,\\sigma^2_i)$$\n", "\n", "Then the sum of $k$ independently sampled values of $y_i$ will be drawn from a Gaussian with mean $\\sum_{i=1}^k \\mu_i$ and variance $\\sum_{i=1}^k \\sigma_i^2$,\n", "\n", "\n", "$$\\sum_{i=1}^k y_i \\sim \\mathcal{N}\\left(\\sum_{i=1}^k \\mu_i,\\sum_{i=1}^k \\sigma_i^2\\right).$$\n", "\n", "Let's try that experimentally. First let's generate a vector of samples from a standard normal distribution, $z \\sim \\mathcal{N}(0,1)$, then we will scale and offset them, then keep adding them into a vector `y_vec`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "K = 10 # how many Gaussians to add.\n", "num_samples = 1000 # how many samples to have in y_vec\n", "mus = np.linspace(0, 5, K) # mean values generated linearly spaced between 0 and 5\n", "sigmas = np.linspace(0.5, 2, K) # sigmas generated linearly spaced between 0.5 and 2\n", "y_vec = np.zeros(num_samples)\n", "for mu, sigma in zip(mus, sigmas):\n", " z_vec = np.random.normal(size=num_samples) # z is from standard normal\n", " y_vec += z_vec*sigma + mu # add to y z*sigma + mu\n", "\n", "# now y_vec is the sum of each scaled and off set z.\n", "print 'Sample mean is ', y_vec.mean(), ' and sample variance is ', y_vec.var()\n", "print 'True mean should be ', mus.sum()\n", "print 'True variance should be ', (sigmas**2).sum(), ' standard deviation ', np.sqrt((sigmas**2).sum()) " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Sample mean is 24.8368840173 and sample variance is 18.8344977239\n", "True mean should be 25.0\n", "True variance should be 17.9166666667 standard deviation 4.2328083664\n" ] } ], "prompt_number": 93 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, we can histogram `y_vec` as well." ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.hist(y_vec, bins=30, normed=True)\n", "plt.legend('$y$')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 94, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEACAYAAACwB81wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAE8JJREFUeJzt3X+s3Xd93/HnKw5ZY1jIqlbJcEwcLZ6aBKakTJ61teMw\nKDIGJRl/NFgUSqQtFo1L6FgXHKHmhj+YaMXKskgmW90pQFarBQncLU3WqRyNSsyQ1s4Px2bx1LA4\nLIF1CcGpWtn4vT/O1+nJje895/ieH/ee7/MhXeV8v9/P9/v9fPLxfd3v+Xx/paqQJM2/82ZdAUnS\ndBj4ktQSBr4ktYSBL0ktYeBLUksY+JLUEkMFfpJtSY4meTLJ7WdZ/lNJvpHkL5N8rG/+xiRfS3I4\nyeNJPjLOykuShpdB1+EnWQd8G3gH8AzwLWBHVR3pK/OTwOXAjcDzVfWZZv6lwKVVdSjJ64A/AW7s\nX1eSNB3DHOFvAY5V1VNVdRLYB9zQX6Cqvl9VDwMnF81/tqoONZ9PAEeAN4yl5pKkkQwT+BuAp/um\njzfzRpJkE3AdcGDUdSVJKzdM4K/42QvNcM6XgNuaI31J0pSdP0SZZ4CNfdMb6R3lDyXJa4AvA1+s\nqq+cZbkP85Gkc1BVGaX8MEf4DwObk2xKcgFwE7B/ibKv2HmSAHuBJ6rqs0vtoKrm9ufOO++ceR1s\nn+1rY/vmuW1V53acPPAIv6pOJdkFPASsA/ZW1ZEkO5vl9zZX43wLuAg4neQ24GrgWuAXgEeTHGw2\nubuqHjyn2kqSztkwQzpU1R8Af7Bo3r19n5/llcM+Z/wx3twlSauCYTxhnU5n1lWYKNu3ts1z++a5\nbedq4I1XE69AUrOugyStNUmoEU/aDjWkI0lrUe+6kbVvXAfFBr6kubbWRxDG+UfLMXxJagkDX5Ja\nwsCXpJYw8CVphhYWFvjOd74zlX15WaakudVcuviqeZM2TKY9/vjjfPjDH+bgwYNccMEFXHPNNTz4\n4IO89rWvfUW5s7Whb/5IjTHwJc2tpQN/kplz9oBebMuWLbz73e/m9OnT7Nixg6NHj/LOd76T9evX\nv3JrYwx8h3QkaQYOHz7Me9/7Xs477zwuvPBCbrzxxleF/bh5Hb4kzcBb3vIW7rjjDl7/+tfzox/9\naCr79Ahfkmbg/vvvZ/369Xz1q1/l2muv5aMf/SinTp2a6D4dw5c0t1bzGP4Zd911F5dffjmf+MQn\n2L17N7feeusrt+YYviTNj7e97W28//3v57HHHpvofgx8SZqBT33qU5w40XvF94kTJ/j617/Om970\nponu05O2klpo9k/RPHbsGNdccw0vvvgie/bs4V3vehc7d+6c6D4dw5c0t5Ya/15NPvnJT/KhD32I\nN77xjWdd7o1XkjSEtRD4g3jSVpI0MsfwpRGM8hyWtX5kqflj4EsjGybIZ39SUFrMIR1JagkDX5Ja\nwiEdSXNtGs+/XysMfElzyxPnr+SQjiS1hIEvSS0xMPCTbEtyNMmTSW4/y/KfSvKNJH+Z5GOjrCtJ\nmp5lH62QZB3wbeAdwDPAt4AdVXWkr8xPApcDNwLPV9Vnhl23KeejFbRmDP8s9bV/S79Wt0k8WmEL\ncKyqnqqqk8A+4Ib+AlX1/ap6GDg56rqSpOkZFPgbgKf7po8384axknUlSWM2KPBX8p3U77OStIoM\nug7/GWBj3/RGekfqwxh63YWFhZc/dzodOp3OkLuQpHbodrt0u90VbWPQSdvz6Z14fTvwXeCbnOXE\na1N2Afhh30nbodb1pK3WEk/aarU4l5O2yx7hV9WpJLuAh4B1wN6qOpJkZ7P83iSX0rsC5yLgdJLb\ngKur6sTZ1h29WZKkcfCNV9IIPMLXauEbryRJSzLwJaklDHxJagkDX5JawsCXpJYw8CWpJQx8SWoJ\nA1+SWsJ32kr4omu1g4EvvWy4O2iltcohHUlqCQNfklrCIR2tGqOMo/tgMml0Br5WGcfRpUlxSEeS\nWsLAl6SWMPAlqSUMfElqCQNfklrCwJekljDwJaklDHxJagkDX5JawsCXpJYw8CWpJQx8SWoJA1+S\nWsLAl6SWMPAlqSUGBn6SbUmOJnkyye1LlLm7Wf5Ikuv65u9OcjjJY0n+U5K/Mc7KS5KGt2zgJ1kH\n3ANsA64GdiS5alGZ7cCVVbUZuAXY08zfBPxz4Ker6s3AOuB9Y66/JGlIg47wtwDHquqpqjoJ7ANu\nWFTmeuA+gKo6AFyc5BLgReAksD7J+cB64JlxVl6SNLxBgb8BeLpv+ngzb2CZqvp/wGeA/w18F3ih\nqv7byqorSTpXg95pO+ybol/1ktEkfwf4KLAJ+AHwe0neX1X3Ly67sLDw8udOp0On0xlyt5LUDt1u\nl263u6JtpGrpTE+yFVioqm3N9G7gdFV9uq/M54BuVe1rpo8CbwU6wM9V1T9r5n8A2FpVty7aRy1X\nB7VHEoZ9ifm4/82Msu9xv2jdf/86F0moquH/oTF4SOdhYHOSTUkuAG4C9i8qsx/4YFOBrfSGbp4D\nvg1sTXJher9N7wCeGKVy0tpWQ/xI07PskE5VnUqyC3iI3lU2e6vqSJKdzfJ7q+qBJNuTHANeAm5u\nlh1K8nl6fzROA38K/PsJtkWStIxlh3SmUgGHdNSYvyGd2bRF7TCJIR1J0pww8CWpJQZdlimtWb1h\nGklnGPiac+d8K4k0dxzSkaSWMPAlqSUc0pFmbJRzDV7CqZUw8KWZ8zyDpsMhHUlqCQNfklrCwJek\nljDwJaklPGkrrSHDXtHj1Tw6GwNfWlPG+/IVtYuBrzXJ5+RIozPwtUZ5pCuNypO2ktQSBr4ktYSB\nL0ktYeBLUksY+JLUEga+JLWEgS9JLWHgS1JLGPiS1BIGviS1hIEvSS1h4EtSSwwM/CTbkhxN8mSS\n25coc3ez/JEk1/XNvzjJl5IcSfJEkq3jrLwkaXjLBn6SdcA9wDbgamBHkqsWldkOXFlVm4FbgD19\ni/8t8EBVXQX8PeDIGOsuSRrBoCP8LcCxqnqqqk4C+4AbFpW5HrgPoKoOABcnuSTJ64Gfrarfbpad\nqqofjLf6kqRhDQr8DcDTfdPHm3mDylwGXAF8P8l/TPKnSf5DkvUrrbAk6dwMegHKsC/GXPymiWq2\n/dPArqr6VpLPAh8Hfm3xygsLCy9/7nQ6dDqdIXertcC3U0kr1+126Xa7K9pGlnvZcXOSdaGqtjXT\nu4HTVfXpvjKfA7pVta+ZPgq8ld4fgW9U1RXN/J8BPl5V71m0j/KFy/OtF/jDvqFqFuVmue/J1NHf\nqfmXhKoa6Whq0JDOw8DmJJuSXADcBOxfVGY/8MGmAluBF6rquap6Fng6yd9tyr0DODxK5SRJ47Ps\nkE5VnUqyC3gIWAfsraojSXY2y++tqgeSbE9yDHgJuLlvE78M3N/8sfhfi5ZJkqZo2SGdqVTAIZ25\n55DOOMqNtk1/p+bfJIZ0JElzwsCXpJYw8CWpJQx8SWoJA1+SWsLAl6SWGPRoBbXMKI9B8NI/aW0x\n8HUWw14/LmktcUhHklrCwJekljDwJaklDHxJaglP2kpzaNirrbzSql0MfGkueaWVXs0hHUlqCQNf\nklrCwJekljDwJaklDHxJagkDX5JawsCXpJYw8CWpJQx8SWoJA1+SWsLAl6SWMPAlqSUMfElqCQNf\nklpiYOAn2ZbkaJInk9y+RJm7m+WPJLlu0bJ1SQ4m+f1xVVqSNLplAz/JOuAeYBtwNbAjyVWLymwH\nrqyqzcAtwJ5Fm7kNeILhHtAtSZqQQUf4W4BjVfVUVZ0E9gE3LCpzPXAfQFUdAC5OcglAksuA7cBv\n4dsWJGmmBgX+BuDpvunjzbxhy/wm8KvA6RXUUZI0BoNecTjsMMzio/ckeQ/wvao6mKSz3MoLCwsv\nf+50OnQ6yxbXKjHse1MlrVy326Xb7a5oG1nuJcZJtgILVbWtmd4NnK6qT/eV+RzQrap9zfRRoAN8\nBPgAcAr4MeAi4MtV9cFF+yhfpLx69EJ82PehjnI8MM5tWsdxlfN3b+1KQlWNdNQ1aEjnYWBzkk1J\nLgBuAvYvKrMf+GBTga3AC1X1bFXdUVUbq+oK4H3AHy0Oe0nS9Cw7pFNVp5LsAh4C1gF7q+pIkp3N\n8nur6oEk25McA14Cbl5qc+OsuCRpNMsO6UylAg7prCoO6azWcpPZt797a9ckhnQkSXPCwJekljDw\nJaklDHxJagkDX5JawsCXpJYw8CWpJQY9S0dzwufeSDLwW2XYm3YkzSMDX2qxSXzz8+7d1cvAl1pt\nEo910GrlSVtJagkDX5JawsCXpJYw8CWpJQx8SWoJA1+SWsLAl6SWMPAlqSUMfElqCQNfklrCRyus\ncT4FU9KwDPy54DNOJA3mkI4ktYSBL0ktYeBLUksY+JLUEga+JLXEUIGfZFuSo0meTHL7EmXubpY/\nkuS6Zt7GJF9LcjjJ40k+Ms7KS5KGNzDwk6wD7gG2AVcDO5JctajMduDKqtoM3ALsaRadBH6lqq4B\ntgK3Ll5XkjQdwxzhbwGOVdVTVXUS2AfcsKjM9cB9AFV1ALg4ySVV9WxVHWrmnwCOAG8YW+0lSUMb\nJvA3AE/3TR9v5g0qc1l/gSSbgOuAA6NWUpK0csME/iivtT/rekleB3wJuK050pckTdkwj1Z4BtjY\nN72R3hH8cmUua+aR5DXAl4EvVtVXzraDhYWFlz93Oh06nc4Q1ZpfPh9H0mLdbpdut7uibaRq+QP4\nJOcD3wbeDnwX+Cawo6qO9JXZDuyqqu1JtgKfraqt6SXXfcCfV9WvLLH9GlSHtun9bxvli9Wwz9KZ\nRblZ7ts6zmLf/j5PRxKqaqSjw4FH+FV1Ksku4CFgHbC3qo4k2dksv7eqHkiyPckx4CXg5mb1fwT8\nAvBokoPNvN1V9eAolZQkrdzAI/yJV8Aj/FfxCH/a5Wa577VQx9G26e/zdEzkCF+SRjHsOSj/MEyf\ngS9pzHw/w2rls3QkqSUMfElqCQNfklrCwJekljDwJaklDHxJagkvy5Q0E16vP30GvqQZ8Xr9aXNI\nR5JawsCXpJYw8CWpJQx8SWoJA1+SWsLAl6SWMPAlqSW8Dl/SqjbsDVqjaOvNXAa+pFVuEq+AbCcD\nf4omcaQiScMy8KfOIxBJs2Hgj4FH7pLWAgN/bDxyl7S6eVmmJLWEgS9JLeGQjqTWaevLVwx8SS3U\nznNurQv8Ua+ombe/8JKGN2/fBAaO4SfZluRokieT3L5Embub5Y8kuW6UdWejhvyR1G7zlRPLBn6S\ndcA9wDbgamBHkqsWldkOXFlVm4FbgD3DrtsO3VlXYMK6s67AhHVnXYEJ6866AhPUnXUFVp1BQzpb\ngGNV9RRAkn3ADcCRvjLXA/cBVNWBJBcnuRS4Yoh1x+LQoUP80i/9K06dGveWx6ELdGZch0nqYvvW\nsi7z274u89u2czMo8DcAT/dNHwf+wRBlNgBvGGLdsXj++ed59NHneOml3xhQsoA/HGnb3kUraVxG\nyZNJnBcYFPijPKZupk6dOs5FF/27AaWKF18cdcvtPJsvaVJmlymDAv8ZYGPf9EZ6R+rLlbmsKfOa\nIdYFxncU/Vd/9Z+HLDnK/oYtu1y5u8a8vXMtO6lydy1barL7Hle55coubt9qrOO5lruL4fpvEvue\nxv+fpdo23n2PlmGT2OZwBgX+w8DmJJuA7wI3ATsWldkP7AL2JdkKvFBVzyX58yHWpao8PJakKVg2\n8KvqVJJdwEPAOmBvVR1JsrNZfm9VPZBke5JjwEvAzcutO8nGSJKWlrVyw4AkaWWm+vC0JL+d5Lkk\nj/XN+/Ekf5jkfyb5r0kunmadxmmJ9i0kOZ7kYPOzbZZ1PFdJNib5WpLDSR5P8pFm/lz03zLtm5f+\n+7EkB5IcSvJEkn/dzJ+X/luqfXPRf9C7t6lpw+830yP33VSP8JP8LHAC+HxVvbmZ9+vA/62qX2/u\nxv1bVfXxqVVqjJZo353AD6vq38y0civU3FtxaVUdSvI64E+AG+kN4a35/lumfT/PHPQfQJL1VfUX\nSc4H/hj4l/Tuo1nz/QdLtu/tzE///QvgLcDfrKrrzyU7p3qEX1VfB55fNPvlG7ea/944zTqN0xLt\ngzm4brOqnq2qQ83nE/RuoNvAnPTfMu2DOeg/gKr6i+bjBfTOqz3PnPQfLNk+mIP+S3IZsB34Lf66\nPSP33Wp4Hv4lVfVc8/k54JJZVmZCfrl5ztDetfqVuV9z5dV1wAHmsP/62vc/mllz0X9JzktyiF4/\nfa2qDjNH/bdE+2A++u83gV8FTvfNG7nvVkPgv6x640vzdhZ5D73HTFwL/B/gM7Otzso0wx1fBm6r\nqh/2L5uH/mva9yV67TvBHPVfVZ2uqmvp3Svzj5O8bdHyNd1/Z2lfhznovyTvAb5XVQdZ4tvKsH23\nGgL/uWb8lCR/G/jejOszVlX1vWrQ+zq2ZdZ1OldJXkMv7L9QVV9pZs9N//W174tn2jdP/XdGVf0A\n+C/0xoPnpv/O6Gvf35+T/vuHwPVJ/gz4HeCfJPkC59B3qyHw9wO/2Hz+ReAry5Rdc5qOOOOfAo8t\nVXY1S++2v73AE1X12b5Fc9F/S7VvjvrvJ84MZyS5EPg54CDz039nbd+ZQGysyf6rqjuqamNVXQG8\nD/ijqvoA59B3075K53eAtwI/QW/M6deArwK/C7wReAr4+ap6YWqVGqOztO9Oeo/ru5be160/A3b2\njbutGUl+BvjvwKP89VfH3cA3mYP+W6J9d9C7O3we+u/N9E7sndf8fKGqfiPJjzMf/bdU+z7PHPTf\nGUneCnysuUpn5L7zxitJaonVMKQjSZoCA1+SWsLAl6SWMPAlqSUMfElqCQNfklrCwJekljDwJakl\n/j/PcBcKg35rZQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 94 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Matrix Multiplication of Gaussian Variables\n", "\n", "Matrix multiplication is just adding and scaling together, in the formula, $\\mathbf{f} = \\boldsymbol{\\Phi} \\mathbf{w}$ we can extract the first element from $\\mathbf{f}$ as\n", "\n", "$$f_i = \\boldsymbol{\\phi}_i^\\top \\mathbf{w}$$\n", "\n", "where $\\boldsymbol{\\phi}$ is a column vector from the $i$th row of $\\boldsymbol{\\Phi}$ and $f_i$ is the $i$th element of $\\mathbf{f}$. This vector inner product itself merely implies that \n", "\n", "$$f_i = \\sum_{j=1}^K w_j \\phi_{i, j}$$\n", "\n", "and if we now say that $w_i$ is Gaussian distributed, then because a scaled Gaussian is also Gaussian, and because a sum of Gaussians is also Gaussian, we know that $f_i$ is also Gaussian distributed. It merely remains to work out its mean and covariance. We can do this by looking at the expectation under a Gaussian distribution. The expectation of the mean vector is given by\n", "\n", "$$\\langle\\mathbf{f}\\rangle_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} = \\int \\mathbf{f} \\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C}) \\text{d}\\mathbf{w} = \\int \\boldsymbol{\\Phi}\\mathbf{w} \\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C}) \\text{d}\\mathbf{w} = \\boldsymbol{\\Phi} \\int \\mathbf{w} \\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C}) \\text{d}\\mathbf{w} = \\boldsymbol{\\Phi} \\boldsymbol{\\mu}$$\n", "\n", "Which is straightforward. The expectation of $\\mathbf{f}=\\boldsymbol{\\Phi}\\mathbf{w}$ under the Gaussian distribution for $\\mathbf{f}$ is simply $\\mathbf{f}=\\boldsymbol{\\Phi}\\boldsymbol{\\mu}$, where $\\boldsymbol{\\mu}$ is the *mean* of the Gaussian density for $\\mathbf{w}$. Because our prior distribution was Gaussian with zero mean, the expectation under the prior is given by\n", "\n", "$$\\langle\\mathbf{f}\\rangle_{\\mathcal{N}(\\mathbf{w}|\\mathbf{0},\\alpha\\mathbf{I}}) = \\mathbf{0}$$\n", "\n", "The covariance is a little more complicated. A covariance matrix is defined as\n", "\n", "$$\\text{cov}\\left(\\mathbf{f}\\right)_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} = \\langle\\mathbf{f}\\mathbf{f}^\\top\\rangle_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} - \\langle\\mathbf{f}\\rangle_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})}\\langle\\mathbf{f}\\rangle_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})}^\\top$$\n", "\n", "we've already computed $\\langle\\mathbf{f}\\rangle_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})}=\\boldsymbol{\\Phi} \\boldsymbol{\\mu}$ so we can substitute that in to recover\n", "\n", "$$\\text{cov}\\left(\\mathbf{f}\\right)_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} = \\langle\\mathbf{f}\\mathbf{f}^\\top\\rangle_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} - \\boldsymbol{\\Phi} \\boldsymbol{\\mu} \\boldsymbol{\\mu}^\\top \\boldsymbol{\\Phi}^\\top$$\n", "\n", "So we need the expectation of $\\mathbf{f}\\mathbf{f}^\\top$. Substituting in $\\mathbf{f} = \\boldsymbol{\\Phi} \\mathbf{w}$ we have\n", "\n", "$$\\text{cov}\\left(\\mathbf{f}\\right)_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} = \\langle\\boldsymbol{\\Phi}\\mathbf{w}\\mathbf{w}^\\top \\boldsymbol{\\Phi}^\\top\\rangle_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} - \\boldsymbol{\\Phi} \\boldsymbol{\\mu} \\boldsymbol{\\mu}^\\top \\boldsymbol{\\Phi}^\\top$$\n", "\n", "$$\\text{cov}\\left(\\mathbf{f}\\right)_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} = \\boldsymbol{\\Phi}\\langle\\mathbf{w}\\mathbf{w}^\\top\\rangle_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} \\boldsymbol{\\Phi}^\\top - \\boldsymbol{\\Phi} \\boldsymbol{\\mu} \\boldsymbol{\\mu}^\\top \\boldsymbol{\\Phi}^\\top$$\n", "\n", "Which is dependent on the second moment of the Gaussian,\n", "\n", "$$\\langle\\mathbf{w}\\mathbf{w}^\\top\\rangle_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} = \\mathbf{C} + \\boldsymbol{\\mu}\\boldsymbol{\\mu}^\\top$$\n", "\n", "that can be substituted in to recover,\n", "\n", "$$\\text{cov}\\left(\\mathbf{f}\\right)_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} = \\boldsymbol{\\Phi}\\mathbf{C} \\boldsymbol{\\Phi}^\\top$$\n", "\n", "so in the case of the prior distribution, where we have $\\mathbf{C} = \\alpha \\mathbf{I}$ we can write\n", "\n", "$$\\text{cov}\\left(\\mathbf{f}\\right)_{\\mathcal{N}(\\mathbf{w}|\\mathbf{0},\\alpha \\mathbf{I})} = \\alpha \\boldsymbol{\\Phi} \\boldsymbol{\\Phi}^\\top$$\n", "\n", "This implies that the prior we have suggested for $\\mathbf{w}$, which is Gaussian with a mean of zero and covariance of $\\alpha \\mathbf{I}$ suggests that the distribution for $\\mathbf{w}$ is also Gaussian with a mean of zero and covariance of $\\alpha \\boldsymbol{\\Phi}\\boldsymbol{\\Phi}^\\top$. Since our observed output, $\\mathbf{y}$, is given by a noise corrupted variation of $\\mathbf{f}$, the final distribution for $\\mathbf{y}$ is given as \n", "\n", "$$\\mathbf{y} = \\mathbf{f} + \\boldsymbol{\\epsilon}$$\n", "\n", "where the noise, $\\boldsymbol{\\epsilon}$, is sampled from a Gaussian density: $\\boldsymbol{\\epsilon} \\sim \\mathcal{N}(\\mathbf{0},\\sigma^2\\mathbf{I})$. So, in other words, we are taking a Gaussian distributed random value $\\mathbf{f}$,\n", "\n", "$$\\mathbf{f} \\sim \\mathcal{N}(\\mathbf{0},\\alpha\\boldsymbol{\\Phi}\\boldsymbol{\\Phi}^\\top)$$\n", "\n", "and adding to it another Gaussian distributed value, $\\boldsymbol{\\epsilon} \\sim \\mathcal{N}(\\mathbf{0},\\sigma^2\\mathbf{I})$, to form our data observations, $\\mathbf{y}$. Once again the sum of two (multivariate) Gaussian distributed variables is also Gaussian, with a mean given by the sum of the means (both zero in this case) and the covariance given by the sum of the covariances. So we now have that the marginal likelihood for the data, $p(\\mathbf{y})$ is given by\n", "\n", "$$p(\\mathbf{y}) = \\mathcal{N}(\\mathbf{y}|\\mathbf{0},\\alpha \\boldsymbol{\\Phi} \\boldsymbol{\\Phi}^\\top + \\sigma^2\\mathbf{I})$$\n", "\n", "This is our *implicit* assumption for $\\mathbf{y}$ given our prior assumption for $\\mathbf{w}$.\n", "\n", "### Computing the Mean and Error Bars of the Functions\n", "\n", "You should now know enough to compute the mean of the predictions under the posterior density. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "# compute mean under posterior density\n", "f_pred_mean = np.dot(Phi_pred, w_mean)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 95 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can plot these predictions alongside the real data," ] }, { "cell_type": "code", "collapsed": false, "input": [ "# print the error and plot the predictions\n", "plt.plot(x_pred, f_pred_mean)\n", "plt.plot(x, y, 'rx')\n", "ax = plt.gca()\n", "ax.set_title('Predictions for Order ' + str(order))\n", "ax.set_xlabel('year')\n", "ax.set_ylabel('pace (min/km)')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 96, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEZCAYAAABmTgnDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XucVXW9//HXG1BExEaPiooX7OC9vIsXNKcyEvBWmlp5\nzcyjeahzUn+VlZRhHq28pJXnUF5OVqc0DYW8Owp4wQsgSojW4AUFNZlQQXDg8/vju0Y2w8zsPTP7\nOvN+Ph7rMWuvtfZan71h78/+fr/r+/0qIjAzM+tIn0oHYGZm1c/JwszM8nKyMDOzvJwszMwsLycL\nMzPLy8nCzMzycrKwqiPpekkXZesHS5rbxfP8QtJ3ihtd3mt+RtLLkt6WtHs5r90RSadKmlLpOKx2\nOVlYl0iaL2lp9qW4UNJ1kgYW6fSRLUTElIjYqYB41voyjIizIuKHRYqpUD8Gzo6IQRExqxgnlHS4\npOmS3pH0pqTfSBpSjHN3I6brJS3P/v3flrREkioZk5WWk4V1VQCHR8QgYC9gH2CtX/GS+nXx/DX3\nxZN9WW4DzOni89f6PEo6FrgJ+CnwL8CuwHJgqqS6ds7TtyvX70xcpH///8qS4qCI2DDcw7dHc7Kw\nbouIV4E7SV9kSFol6WxJzwPPZdsOlzRT0mJJ0yR9tOX5kvaU9FT26/T3wHo5++olvZzzeGtJf5L0\nevYr+2eSdgJ+CRyQ/cp9Kzv2g+qs7PEZkp6X9A9Jf5a0Rc6+VZLOlDQvi/HqnH3DJD0oqUnSG1mM\na5DUH3gb6AvMyl47knaW1JCd8xlJR+Q85/qsqmyypHeA+lbnFPAT4KKI+H1ELI+IRcCXgXeA/8iO\nOzV7T38q6U3gQkkbS5oo6Z+SHgP+tdW5d5J0T/ZezJX0uULjyj1NO9utJ4oIL146vQCNwCez9a2B\nZ4DvZ49XAXcBdUB/YE9gEbAv6Qvm5Oz56wDrAi8CXyN90R4DrAB+kJ2rHng5W+8LzCJ9gQ7Izn1g\ntu8UYEqrGK/LOc8ngDeAPbJrXgU8mHPsKmAisGH2el4HRmb7fgd8K1tft+Wa7bwvq4APZ+vrAC8A\n3wT6AR8HlgA7ZPuvB5qAA7LH/Vuda6fsfNu2cZ1xwMPZ+qnA+8BXST8A1wN+ny0DSEn8FeCh7PiB\nwMvZe9Yne0/eAHYuJK6c9/Yf2fIE8NlK/5/0UtrFJQvrKgG3SVoMTAEagItz9v8oIpoiYjnwFeDa\niHg8khtJVSkHAPsD/SLiyohYGRG3AI+3c83hwBbAeRGxLNIv7Ydz4unIF4FfRcTMiFgBfItUEtkm\n55hLImJJRLwMPED6EoWUvIZKGhIRK3Kumc/+wMCIuCQimiPiAeAO4PM5x9wWEY8AZO9Vrk2yv6+1\nce6FOfsBXo2IayJiFSlxfBb4XvY+PQvcwOr36HCgMSJuiIhVETET+BPwuZzzdRQXpGQ7DNgU+C5w\nvaQD238rrNY5WVhXBXBURGwUEUMj4pxWXyov56xvC3wjq4pZnCWYrUhf/FsCC1qd+8V2rrk18GL2\nhdhZW+SeNyLeJf0qzm0oXpizvhQYlK2fT/qinZ5VJZ1W4DW3ZM33gSyGLVvCaGN/rjdzYm9tC1Jp\noEXueTYllWRyt72Us74tsF+rf48vAIMLjIuImBERi7Nk8xdSu8pnO3qO1TYnCyuV3MbOl4DxWWJp\nWTaIiP8j/WpufWfPtu2c82Vgm3YacPM1rr4KDG15kN259S+snajWPnHEooj4SkQMAc4Efi7pw/me\nl11z61Z3CW1byDUzz5Gqj47L3Zg1OB8D3JcbZs76G0AzqbG9Re76S6QquNx/j0ER8dUC47JeyMnC\nyuF/gH+TNFzJQEljJG0APAw0SxoraR1JnyW1bbRlOim5XCJpfUnr5VR9LAK2krROzvFiddXL74DT\nJO2eNUZfDDwaEbm/uGn13LQifU7SVtnDJtIXcyGlm0dJJZTzs9dWT6oCamkg77DqLCICOBf4jqTP\nZ693c2ACsAFweTvPW0mqVhonaYCkXUjtEy0JZRKwg6QTs7jWkbRvdqNA3rgg3aUlaQNJfSSNJFXz\nTcz3PKtdThZWCmv8yo+IJ4EzgKuBt4DnSY3cRERL/fqppGqh44Bb2jpf9iV4BKmu/CVSSaPlV/d9\nwLPAQkmv5zyv5bn3kerWbyH94t8OOKG9mHOfS7ot+FFJbwN/BsZGxPx8rz17bUcAo0i/9q8GToqI\neW1co+2TRfwBOIl059Ob2WvsD4yIiMUdnOccUkJZCPw6W1rO+TYwkvT6F5AS8I9IjfcFxQWMJZV6\nFgP/BXw5Ih7K8xyrYUo/Xkp4AWk+6Q6QlcD7ETG81f560gfw79mmW6L8HanMzKwDXe0w1RkB1EfE\nWx0c82BEHFmGWMzMrAvKVQ2Vrw7UnXvMzKpYOZJFAPdKekLSGe3sP1DSrKzH6C5liMnMzDqhHNVQ\nIyLiNUmbAvdImhsRuQO+PQVsHRFLJY0CbgN2KENcZmZWoJI3cK9xMelC4J2I+EkHxzQCe+e2cUjy\nAGVmZl0QEUWp5i9pNVR2L/ygbH0g6Xa92a2OGdzSaUnScFICW6sxvNLjonRnufDCCyseQ2+Nv5Zj\nd/yVX2o9/mIqdTXUYODWLBf0A26KiLslnQkQEdcCxwJnSWomdWA6ob2TmZlZZZQ0WUREI6sHY8vd\nfm3O+jXANaWMw8zMusc9uMugvr6+0iF0Sy3HX8uxg+OvtFqPv5jK2sDdVZKiFuI0M6smkohaaOA2\nM7OewcnCzMzycrIwM7O8nCzMzCwvJwszM8vLycLMzPJysjAzs7ycLMzMLC8nCzMzy8vJwszM8nKy\nMDOzvJwsKmnSJGhqWnNbU1PabmZWRZwsKmnECLjggtUJo6kpPR4xorJxmZm14lFnK60lQZx3Hlx2\nGYwfD3V1lY7KzHqAYo4662RRDebPh+22g8ZGGDq00tGYWQ/hIcp7kqamVKJobEx/W7dhmJlVASeL\nSmqpgho/PpUoxo9fsw3DzKxKuBqqkiZNSo3ZuW0UTU0wbRqMGVO5uMysR3CbhZmZ5eU2CzMzKysn\nCzMzy8vJwszM8nKyMDOzvJwszMwsLycLMzPLy8nCzMzyKnmykDRf0tOSZkia3s4xV0l6XtIsSXuW\nOiYzM+ucfmW4RgD1EfFWWzsljQaGRcT2kvYDfgHsX4a4zMysQOWqhuqoB+GRwA0AEfEYUCdpcFmi\nMjOzgpQjWQRwr6QnJJ3Rxv4hwMs5j18BtipDXGZmVqByVEONiIjXJG0K3CNpbkRMaXVM65KHB4Iy\nM6siJU8WEfFa9vcNSbcCw4HcZLEA2Drn8VbZtjWMGzfug/X6+nrq6+tLEK2ZWe1qaGigoaGhJOcu\n6aizktYH+kbE25IGAncD34+Iu3OOGQ2cExGjJe0PXBER+7c6j0edNTPrpGKOOlvqksVg4FZJLde6\nKSLulnQmQERcGxGTJY2W9ALwLnBaiWMyM7NO8nwWZmY9lOezMDOzsnKyMDOzvHp9srj/fnj22UpH\nYWZW3Xp9sli4EA49FJ5+utKRmJlVr3J0yqtqX/gC9O0LI0fCnXfCHntUOiIzs+rT65MFwPHHQ79+\n8OlPw+TJsPfelY7IzKy6OFlkjjkmlTDGjHEJw8ysNSeLHEcfDStXwqhRcPfd8NGPVjoiM7Pq4GTR\nyjHHQHNzqpK6917YZZdKR2RmVnlOFm04/nh4//3U6N3QAMOGVToiM7PKcrJox4knwrJl8KlPwYMP\nwjbbVDoiM7PKcbLowBlnwLvvpn4YDz0Em29e6YjMzCrDySKPr38d3n47VUk9+CBstFGlIzIzKz+P\nOluACDj3XHjkEbjnHhg4sGKhmJkVrJijzjpZFCgCTj8dFiyAiROhf/+KhmNmlpeTRYU0N8Nxx6Xe\n3r/7XerEZ2ZWrTyfRYX06we//S288QaMHZtKG2ZmvYGTRSettx78+c+p/eKiiyodjZlZefhuqC7Y\ncEP4y19gxAjYdFM466xKR2RmVlpOFl00eHAaP+rgg9P6Zz9b6YjMzErHyaIbPvxhuP32NI7UJpvA\nxz5W6YjMzErDbRbdtNde6c6oz30OZs+udDRmZqXhZFEEhx4KV1wBo0fDyy9XOhozs+JzNVSRfP7z\n8OqraS6MKVM8LIiZ9SzulFdEEfCf/wlPPQV33ZVuszUzqxT34K5iq1alUkYE/P730McVfWZWIe7B\nXcX69IEbb4TXX0+DD5qZ9QROFiXQvz/cemuqirr88kpHY2bWfW7gLpGNNkq9vA88EIYMSQMQmpnV\nqpKXLCT1lTRD0u1t7KuX9M9s/wxJ3yl1POW0zTYwaRKcc066Q8rMrFaVo2TxNWAOMKid/Q9GxJFl\niKMidt8dbroJjj0WGhpg550rHZGZWeeVtGQhaStgNDABaK9Fvigt9dXsU5+CSy9NnfZee63S0ZiZ\ndV6pq6EuB84DVrWzP4ADJc2SNFnSLiWOp/smTYKmpjW3NTWl7R045ZQ0096YMWlObzOzWlKyaihJ\nhwOvR8QMSfXtHPYUsHVELJU0CrgN2KGtA8eNG/fBen19PfX17Z2yxEaMgAsugPHjoa4uJYqWx7km\nTUrH1tV9sOmCrzbxoanTOO64MUycCOusU+bYzaxHa2hooKGhoSTnLlmnPEkXAycBzcB6wIbALRFx\ncgfPaQT2joi3Wm2vrk55LQnivPPgsstWJ462jmmVVJq/P56jTqlj881hwgRQj6+EM7NKqbke3JIO\nAc6NiCNabR9MKn2EpOHAHyJiaBvPr65kATB/Pmy3HTQ2wtChbR/TTlJ55x2or4cjjoALLyxjzGbW\nqxQzWXRYDSVpHWAk8DFgKKmN4UXgIeCuiGjuxLUiO+eZABFxLXAscJakZmApcEIn46+Mpqb05d/Y\n2H7JAtK2885bnVSyYzbYINVSHXBAur32tNPKHL+ZWSe1W7KQ9F3gGOARYDrwKqlBfAtgOLA/cHNE\n/LDkQVZTyaKd6qUOq6Laqa567jk45BC4/no47LDyvgwz6/nKUg0l6Ujg9va+pSX1AQ6PiInFCKQj\nVZUs2mi4pqkJpk1LtzrlbisgqTz8MBx1VBoaZK+9yvg6zKzHq7k2i+6qqmRRqEKTCmkcqXPOgalT\nU42VmVkxlDVZSNoX+DapzaKljSMiYrdiBFCImkwWnXT11fCzn6VcsskmlY7GzHqCcieLecC5wDPk\ndK6LiPnFCKAQvSFZAHzzm/DQQ3DvvbD++pWOxsxqXbmTxbSIGFGMi3VVb0kWq1alnt5LlsAtt0A/\njwlsZt1Q7mQxEjgeuBdYkW2OiPhTMQIoRG9JFgArVsDhh6e2i1/+0p32zKzryp0sbgJ2BJ5lzWqo\nsvUO6E3JAtLYUYccAkcfDd/7XqWjMbNaVbZOeZl9gJ161bd1hQ0aBJMnp4mTttgCzjij0hGZWW9X\nSLJ4GNiFVLKwMtl8c7jzzlTC2Gyz1BfDzKxSCqmGmgv8K9AILM82+9bZMnn88TQPxq23wkEHVToa\nM6sl5W6z2Ja1JyiKiHixGAEUojcnC4C774aTToL77oOPfKTS0ZhZrShmsihk8qNDI2J+7gKcVYyL\nW2FGjoTLL4dRo+DFsqVoM7PVCmmzOFbS8oj4DYCka4ABpQ3LWvvCF+DNN1PimDoVNt200hGZWW9S\nSLL4LDBR0kpgFLA4Ir5U2rCsLWPHwhtvpBLG/ffDhhtWOiIz6y06GnV245yHg4A/A1OB7wG0ns2u\nlHp7m0WuCDjrLJg3L91eu956lY7IzKpVuYYon082YVHLppzHEREfLkYAhXCyWNPKlalaasUK+OMf\nPSyImbWtXMliSEQsKMZFusvJYm0rVqS+F5ttBtddB30KuVXBzHqVciWLycC/AA8AdwJTOzmNatE4\nWbRt6dLU4L3XXnDllR5HyszWVJZbZyNiNFAPPEhq5H5U0q2SviJpm2Jc3Ao0aVKaOClXUxPrPzCJ\nO+6AKVM8hpSZlVaHlRcRsSwi/hIRYyNiH+AbwDrANZKmlyVCSzPuXXDB6oTRMkXriBHU1aVOezff\nDJdeWtkwzazn6vK0qpL6R8Ty/Ed2n6uhWJ0gzjsPLrtsrbm8FyyAj30MvvENOPvsCsZpZlWj3MN9\nHANcAgxm9bAfERFlu8vfySIzf36a6KKxEYYOXWt3Y2MaePAHP4BTTy13cGZWbco93MelwJERsWFE\nDMoWdwcrt6amVKJobEx/W7dhkPLIPfekAshvf1uBGM2sxyokWSyMiL+WPBJrX0sV1PjxqUQxfvya\nbRg5dtwxtWF84xupHcPMrBgKqYa6EtgcuA1Pq1oZkyalRu6cNgqammDaNBgzps2nzJwJn/40XHtt\nmnHPzHqfcrdZXJ+trnGgp1Wtfk88kXLJ//wPHHlkpaMxs3Ira7KoBk4WXff44ylh/PrXcPjhlY7G\nzMqpXD24/19E/Jekn7WxOyJibDECKISTRfdMn54SxXXXtVtrZWY9ULnuhpqT/X2ynaUgkvpKmiHp\n9nb2XyXpeUmzJO1Z6HmtcMOHwx13wJe+BBMnVjoaM6tF7Y5XGhG3Z3+v7+Y1vkZKPINa75A0GhgW\nEdtL2g/4BbB/N69nbRg+PLWTjxmTRq39zGcqHZGZ1ZK8t85K2jcbE2qGpNnZ8nQhJ5e0FTAamMDa\n83gDHAncABARjwF1kgYXHr51xj77wF/+kubD+MMfKh2NmdWSQmZCuAk4F3gGWNXJ818OnAe014lv\nCPByzuNXgK2ARZ28jhVor71SP4zDDoNly+CUUyodkZnVgkKSxRsR0emabkmHA69HxAxJ9R0d2upx\nmy3Z48aN+2C9vr6e+vqOTmkd2W23NC3rpz4F777rsaTMeoqGhgYaGhpKcu5C+lmMBI4H7qUTnfIk\nXQycBDQD65FKF7dExMk5x/wSaIiI32eP5wKHRMSiVufy3VAl8Pe/w6GHwr/9G5x/fqWjMbNiK3en\nvJuAHYFnyamG6kynPEmHAOdGxBGtto8GzomI0ZL2B66IiLUauJ0sSmfBglTCOOoouPhiT6Bk1pMU\nM1kUUg21D7BTEb6tA0DSmQARcW1ETJY0WtILwLtA2XqFWzJkCDz0EIwalUYQufpq6Nu30lGZWbUp\npGRxHfDjiHi2PCG1GYNLFoXowhhSLZYsWT2n9403Qv/+JY7VzEqu3EOUHwDMlDSvs7fOWpl1MKNe\nPhtumG6rbW6G0aNT8jAza1FIyWJoW9sjYn7xw2k3BpcsCpVnRr18Vq6Ef/93ePRRmDwZNt+8hLGa\nWUmVa2yoQRHxdp5A8h5TDE4WnZRnRr18IuCHP0xjSU2eDDvtVPQIzawMylUNdaukaySNlLRxzsX/\nRdKnJf0CuLUYQVgRFTCjXj4SfPe7cOGFaZrWKVNKEKeZ1ZQOq6EkfQL4AjAC2DLb/CowFbgpIhpK\nHWAWh0sWhcidUa+ubu3HXXDPPfDFL8JVV8EJJxQ5XjMrKc9nYW3rxt1QHXn6aTjiCPjyl+E738np\ni1Gi65lZcThZWNm99lq6tXbHHWHChOzW2hKUZMyseMp966wZW2wBDz4Iy5fDxz8OCxeSEsL48SlB\nzJ/vRGHWg7lkYZ2yalW6U2rCBPjTn9Kw5929+8rMSqPsJQtJB0s6LVvfVNJ2xbi41Z4+feB734Mr\nr0xDhPzhv7t/95WZVb9CJj8aB5wPfCvbtC7wmxLGZDXgM5+BhtuaWHHeBXxr1XjeHzJ0dZWUE4ZZ\nj1NIyeIzwFGkgf6IiAW0MUWq9T67Nk3j8FnjefqlOj75SVj4XtaGMW1apUMzsyIrJFksj4gPhiaX\nNLCE8VgtGTOGuqF13H47fOITqf3ioafrfNusWQ9USLL4o6RrSfNjfwW4jzSnthmQ2jHGjYNf/QqO\nPx4uuSQ1hJtZz1HQ3VDZbHkjs4d3RcQ9JY1q7ev7bqga8corKWF86ENw/fVpyHMzq4xyz5S3HbAw\nIpZljwcAgz3qrLXn/ffTuFI33JCWQw+tdERmvVO5k8WTwAERsSJ73B+YFhH7FCOAQjhZ1Kb77oOT\nT05jS110kSdUMiu3cvez6NuSKAAiYjmwTjEubj3bJz8JM2fCc8/BfvvBsxWba7GbJk1a+3bgpqa0\n3ayXKCRZvCnpqJYH2fqbpQvJepJNN4XbboNzzoH6erj88hps/O7GDIRmPUUh1VDDgJtYPUT5K8BJ\nEfFCiWPLjcHVUD3A3/4Gp56a1q+7DoYNq2g4ndPNGQjNKqEio85KGgRERLxTjAt3hpNFjcsZynzV\nqjQ3xlU/aOKnx0zjiF+OoW/fSgdYII+BZTWmEmNDHQ6cBfynpO9J+l4xLm69RE41Tp8+8PVTm3hq\n1AX8z5wRHHggzJ5d6QALUIQZCM1qWSFjQ10LHAeMBZStb1viuKwnaWMo87prxnP7lDq+/OXU+/vG\n4yex7LUqbUTOnadj6FCPgWW9UiFtFrMj4qOSno6I3SRtANwZEQeVJ0RXQ/UY7VTjvPoqfPvsJj55\n/wUMnjCekcdV2URKnhHQalS5q6GWZX+XShoCNAObF+PiVsWKfbtoB9U4W24J199Wx5bXjef1r1zA\nV0bOZ8m/V0migJQQWsdR5zGwrJeJiA4X4LvARsAxwCJgIXBRvucVc0lhWlktXhxx9tnpb1uPS3Su\n9+Y2RkDs/qHG+Pa3I95+u+svway3y747i/I9nLdkEREXRcTiiLgF2AbYMSK+W6rkZVWimFOmTpu2\n5nPr2hnKvKmJ/lel0sfUoy7j9XlN7LRTus125cpuvyIz64ZC2iwGAGcDBwEBTAF+ERHvlT68D2KI\nfHFaiZTrdtHWbRTZ48ePHs9/fL+OJUtS7dXI9yehg9x+YFaIcrdZ3AjsAlwFXA3sCvxvISeXtJ6k\nxyTNlDRH0o/aOKZe0j8lzciW73TmBVgJlfN20XZKH/uumMaUKWkI9LFj4YhLRrDwdPemNiu7fPVU\nwJxCtnXw/PWzv/2AR4GDWu2vBybmOUdR6u+sE4rZZlEk778fMWFCxK5DFscdQ8+OZ+5orHhMZtWM\ncrZZAE9JOqDlgaT9gSc7kYyWZqvrAn2Bt9o4rCjFJCuiQtsZyqhfPzj9dHjihTpeP/k8dj18O86Y\ndx5P/b0K7pgy6+EKSRb7ANMkvShpPvAwsI+k2ZKezvdkSX0kzSTdSfVARMxpdUgAB0qaJWmypF06\n+RqsFKr4dtH13mvitDcv472/NvLv713GiYc3MWoUPPQQuGnLrDT6FXDMYd25QKT5u/eQ9CHgLkn1\nEdGQc8hTwNYRsVTSKOA2YIfW5xk3btwH6/X19dTX13cnLKtVOQ3h69XVsdvt45n9zQv4zc7jOf30\nOjbbDM49F448ktoZc8qsSBoaGmhoaCjJuQseSLAoF5O+CyyLiB93cEwjsHdEvJWzLcoZp1WxDnpT\nrzxsDLfcAj/5Cbz1Fnz963DKKbDBBpUL16ySyj6QYFdJ2kRSXbY+APgUMKPVMYMlKVsfTkpgbbVr\nmHVYPda3Lxx3HDz6aJrO9YEHYNttU9KYN68y4a7FEylZjSppsgC2AO7P2iweA26PiPsknSnpzOyY\nY4HZ2TFXACeUOCbr4SQ48EC4+WaYMQMGDoSDD05zgf/xj7BiRf5zlIwnUrIaVdZqqK5yNZR11/Ll\n8Kc/wX//N8yZAyeeCKedBh/5SAWC8URKViYVmfyokpwsrJjmzUtDiNx4YxrE8OST4fjjYbPNyhiE\nJ1KyMqiZNguzarTDDvCjH8FLL8FFF8Fjj6Vto0fD//4vLFnShZN2pi3CEylZDXKysF6rb1847DD4\nzW/glVfgi19MbRpbbQVHH522F/w9XmhbhCdSshrlaiizVpqa4LbbUhtHQwMccEBKHkcckRJJh0/M\n1xbhiZSsjNxmYVYmb78Nd94JEyfC5MnpVtwxY2DUKNhvvzY6/rktwqqI2yzMymTQIPjc51JbxqJF\ncMUV8P77cNZZqUH8+ONhwgR48UWqsy3C/TqsSFyyMOuiBQvgnnvg7rth+t1NfL85zb9xwKg6Pr5n\nE5tdWQVTw7YzT0jF47KycDWUWZVZdfsk5mw0gnufqOP++2HKFBi2SRMnD5vGxieOYcSIVIWlSoyv\n7H4dvZaThVmVW7kSZs+GBx9MiWPq1DTE+ogRqcH8gANgzz1h3XXLFJDbUnolJwuzGhMBf/sbPPww\nPPJIWp5/HnbbLTWUDx8O++4Lw4aVoPThkkWv5WRh1gO88w48+WTqFDh9Ojz+eOoQuM8+adl777QM\nHdqNBOI2i17NycKsh1q0CJ54IiWRlr/LlqUqq732Sn/32AN23LHA+Trcr6NXc7Iw60UWLUqj5z71\nVPo7Ywa89loaBHGPPdKy++6pSstzd1guJwuzXm7JEnj6aZg5My2zZsGzz8KQISlx7L57SiK77Qbb\nbFOhu7Cs4pwszHqyLlYdNTenEXVnzVpzWbYsJY2WJLL77rDrrjBgQBlei1WUk4VZT1bkRuk33lg7\ngcybl+6kbanCaqnOGjy4BK/HKsbJwqynK/HtrsuXw1//umYCmTkz9ftoSR4tjenbbw99PDBQTXKy\nMOsNytyRLiIN1T5zZmpEb/n75pupGqvlbqy99oJddiljh0LrMicLs56uijrSLV68OnG03JHV2JgS\nxl57re4P8tGPQv/+FQnRtwi3w8nCrCerREe6Tn7Zvvtuqrp66qnUF+TJJ+GFF2DnnVPi2Gef1CP9\nIx+BddYpTchrKOQ964UJpZjJgoio+iWFadZL3HFHxOLFa25bvDht78pxhVi8OOLss1efr/XjArz7\nbsQjj0RcdVXEKadE7LprxPrrRwwfHvHVr0Zcf33Es89GNDd3PryCtMTc2Nh27EV4jbUm++4syvew\nSxZmtarYJZASVH29806qtnr88dXLG2+k6quW8bCGD4etty5SX5B87TxVVL1XDq6GMrOk2F9+xWhU\nz1Pd849/pKFMWsbDmj49HdKSOFqSyMYbd/K6hb4XxbpxoALVWs3NcMMNqQPmT3+a/3hXQ5nZao2N\nEZD+dke+apzOnqfA6p5VqyJefDHi5psjzj8/4pBDIgYNihg2LOK/PnZH/PzixTF1aqrm+uB8rava\nCr1mIa9yriZ2AAALx0lEQVSx0Oq9MlZrNTdH/Pa3EdtvH/Hxj0dMm1bY8yhiNVTFE0FBQTpZmLWt\n3F/wnf0i7WJczc2pfeM3Vy+Ohl3Pjvo9FseAAREjdl0c9+10dvzqJ4vj8ccj3nuvE3F1NqEUkgSK\n9f63Y8mSiCuvjPjXf43Yf/+Ie+/t3POdLMysuL9sS/FrOl+Jp5PXfG9uYyw89uyY8OPFcdppEbvt\nFjFgQMSee0Z8+csRP/95amD/oATS1evlvq5CkkCxSnaZVavS6zjrrIiNN4449thUkli1qvPncrIw\ns+LeDdUZhXyRduaYbiSepUvTF+s110ScfnrEHnukBLLTThEnnBBx8cXp7XjxxS582RaSBIpUsmhu\njnj44YhvfztVNe2wQ8RFF0XMn9+l033AycLMKqujL9JiV+N08gt5+fKIWbMibrgh4txzI0aOjNhi\ni9QOMnx4xGmnRVxyScStt0bMmROxbFkbJyl2smuluTlixoyIn/0s4vjjIz6/4R1x4C6L41vfinj0\n0SyxFSHxFzNZlOxuKEnrAQ8C/YF1gT9HxLfaOO4qYBSwFDg1Ima0cUyUKk4z66R8dx119i6hju5O\nKuLtwW+9BXPmpOW551YvL70Em20GH/4wbLstbL9pE5954gJe/Mp4NhlWxxYDmtj8ZxewzqXj0UaF\nv8733ktDpSxYkF5iYyPMnZvmZp87N90ufPDBcNBB8PE9m9jm2uJ3xKyZW2clrR8RSyX1A6YC50bE\n1Jz9o4FzImK0pP2AKyNi/zbO42RhVg3K3bejDLenNjenMbH+/veUOPrfO4lH+oygcXEdixbBwoWw\n8h9N7P3eNB7eaAwDB6bh3QcMgH79Vp9nxYo0HPyyZSnE5cthk03SHCNDh6Zlhx3SsCi77gqDBnXy\nveiCmkkWH1xEWp9UyjglIubkbP8l8EBE/F/2eC5wSEQsavV8JwuzalDML+8amx98xYoU4rvvwnvv\npaSwcmXaF5EGVmxJInV1KRlochFLWV1QM/0sgD7ATOBt4NI29t8OHJjz+F5g7zaO61qFnZlVr0o1\n0JdThW/DpYhtFiUdpT4iVkXEHsBWwMck1bdxWOus5yKEWW8wZszaJYi6up41qF9dXSopXXBBKjW0\nV3LKLVUNHbr6OU1NlYi6Tf3yH9J9EfFPSZOAfYCGnF0LgK1zHm+VbVvLuHHjPlivr6+nvr6+2GGa\nmRVfXV1qh2ipXmqrim3atDWTSEuS6WT1XkNDAw0NDcWJu5VS3g21CdAcEU2SBgB3Ad+PiPtyjslt\n4N4fuCLcwG1mPUkFBy8sZptFKauhtgDulzQTeAy4PSLuk3SmpDMBImIy8HdJLwDXAmeXMB4zs/Kq\ngeqlQnnUWTOzUqnwhEs1d+tsdzlZmJl1Xq1UQ5mZWQ/hZGFmZnk5WZiZWV5OFmZmlpeThZmZ5eVk\nYWZmeTlZmJlZXk4WZmaWl5OFmZnl5WRhZmZ5OVmYmVleThZmZpaXk4WZmeXlZGFmZnk5WZiZWV5O\nFmZmlpeThZmZ5eVkYWZmeTlZmJlZXk4WZmaWl5OFmZnl5WRhZmZ5OVmYmVleThZmZpaXk4WZmeXl\nZGFmZnk5WZiZWV4lTRaStpb0gKRnJT0jaWwbx9RL+qekGdnynVLGZGZmnVfqksX7wH9ExK7A/sBX\nJe3cxnEPRsSe2fLDEsdUdg0NDZUOoVtqOf5ajh0cf6XVevzFVNJkERELI2Jmtv4O8FdgyzYOVSnj\nqLRa/w9Xy/HXcuzg+Cut1uMvprK1WUgaCuwJPNZqVwAHSpolabKkXcoVk5mZFaZfOS4iaQPgZuBr\nWQkj11PA1hGxVNIo4DZgh3LEZWZmhVFElPYC0jrAHcBfIuKKAo5vBPaOiLdytpU2SDOzHioiilLN\nX9KShSQBvwLmtJcoJA0GXo+IkDSclMDeyj2mWC/WzMy6ptTVUCOAE4GnJc3Itn0b2AYgIq4FjgXO\nktQMLAVOKHFMZmbWSSWvhjIzs9pXkR7ckn4taZGk2TnbhkuannXMe1zSvtn29ST9TtLTkuZI+mbO\nc/aWNFvS85KurHD8u0t6JItzoqRBOfu+lcU4V9LIWopf0qckPZFtf0LSx2sp/pz920h6R9I3ai1+\nSbtl+57J9q9bqfg7+X+nGj+7bXYUlrSxpHskzZN0t6S6nOdUzee3s/EX9fMbEWVfgINJt9HOztnW\nAHw6Wx8FPJCtnwr8LlsfADQC22SPpwPDs/XJwGEVjP9x4OBs/TTgB9n6LsBMYB1gKPACq0t0tRD/\nHsDm2fquwCs5z6n6+HP23wz8H/CNWoqfVFU8C/ho9ngjoE+l4u9k7NX42d0c2CNb3wB4DtgZuBQ4\nP9v+/4BLsvWq+vx2If6ifX4rUrKIiCnA4labXwM+lK3XAQtytg+U1BcYCKwAlkjaAhgUEdOz424E\nji5p4Jl24t8+2w5wL3BMtn4U6QPzfkTMJ/1n269W4o+ImRGxMNs+BxggaZ1aiR9A0tHA30nxt2yr\nlfhHAk9HxOzsuYsjYlWl4u9k7NX42W2ro/AQ4EjghuywG3LiqarPb2fjL+bnt5oGEvwm8BNJLwGX\nkRrCiYi7gCWk/3jzgcsioon0Br2S8/wF2bZKeVbSUdn654Cts/UtWTPOV0hxtt5erfHnOgZ4MiLe\np0bef6U+PucD41odXxPxk/ochaQ7JT0p6bxsezXF32bs1f7Z1ZodhQdHxKJs1yJgcLZetZ/fAuPP\n1a3PbzUli18BYyNiG+A/ssdIOpFUhN0C2A44V9J2FYuyfV8Czpb0BKl4uKLC8XRWh/FL2hW4BDiz\nArEVor34xwGXR8RSqntYmfbi7wccBHwh+/sZSZ8gjXxQLdqMvZo/u9mPiFtIHYXfzt0XqV6mmt7f\ntXQ2/mJ8fsvSg7tAwyPi0Gz9ZmBCtn4gcGtErATekDQN2BuYCmyV8/ytWF11VXYR8RzwaQBJOwBj\nsl0LWPNX+lakjL6A2ogfSVsBfwJOiojGbHO1xz862zUcOEbSpaTqzVWSlpFeTzXH3/L+vww8FFnf\nI0mTgb2A31Al8Xfw3lflZ1epo/AtwP9GxG3Z5kWSNo+IhVkVzevZ9qr7/HYy/qJ9fqupZPGCpEOy\n9U8A87L1udljJA0kjV47N6uHWyJpP0kCTiINFVIRkjbN/vYBvgP8Its1EThB0rrZr6rtgem1En92\nV8Uk4P9FxCMtx0fEa1R3/L/M4vxYRGwXEdsBVwDjI+LntfL+A3cBH5U0QFI/4BDg2WqKv733nir8\n7GbXa6uj8ETglGz9lJx4qurz29n4i/r5LXXrfTst+r8DXiUVV18m3UGxD6nubSbwCLBndmx/0q+o\n2cCzrHk3y97Z9heAqyoY/5eAsaQ7E54DLm51/LezGOeS3fFVK/GTPvzvADNylk1qJf5Wz7sQ+M9a\nev+z478IPJPFekkl4+/k/51q/OweBKzKvmda/j8fBmxMapyfB9wN1OU8p2o+v52Nv5ifX3fKMzOz\nvKqpGsrMzKqUk4WZmeXlZGFmZnk5WZiZWV5OFmZmlpeThZmZ5eVkYWZmeTlZmJVB1rvZrGb5P7BZ\nK5K+L+lrOY/HSxor6TylCbpmSRqXs//WbGKZZySdkbP9HUk/ljSTNNSFWc1ysjBb26+Bk+GDEsHx\nwEJgWEQMJw0Lvbekg7PjvxQR+wD7AmMlbZRtXx94NCL2iIiHy/oKzIqsmkadNasKEfGipH9I2oM0\nM9kMUiIYKWlGdthAYBgwBfhaNsESpBFKtyfNQraSNDqoWc1zsjBr2wTSAJeDSSWNTwI/ioj/zj1I\nUn22b/+IeE/SA8B62e73woOvWQ/haiiztt1KGs1zH+BO0lDhX8qG2kbSkGxo7g2BxVmi2Am3TVgP\n5ZKFWRsi4n1J95MSQQD3SNoZeCQN/8/bwImkRPJvkuaQhuh+JPc0ZQ7brGQ8RLlZG7KG7SeBYyPi\nb5WOx6zSXA1l1oqkXYDngXudKMwSlyzMzCwvlyzMzCwvJwszM8vLycLMzPJysjAzs7ycLMzMLC8n\nCzMzy+v/A6BBTpo4UQSlAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 96 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Computing the Error\n", "\n", "We can also compute what the training error was. First compute the expected output under the posterior density," ] }, { "cell_type": "code", "collapsed": false, "input": [ "f_mean = np.dot(Phi, w_mean)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 97 }, { "cell_type": "markdown", "metadata": {}, "source": [ "These can be used to compute the error\n", "\n", "$$E(\\mathbf{w}) = \\frac{n}{2} \\log \\sigma^2 + \\frac{1}{2\\sigma^2} \\sum_{i=1}^n \\left(y_i - \\mathbf{w}^\\top \\phi(\\mathbf{x}_i)\\right)^2 \\\\\\\n", "E(\\mathbf{w}) = \\frac{n}{2} \\log \\sigma^2 + \\frac{1}{2\\sigma^2} \\sum_{i=1}^n \\left(y_i - f_i\\right)^2$$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# compute the sum of squares term\n", "sum_squares = ((y-f_mean)**2).sum()\n", "# fit the noise variance\n", "error = (num_data/2*np.log(sigma2) + sum_squares/(2*sigma2))\n", "print 'The error is: ',error" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "The error is: -6.26873167309\n" ] } ], "prompt_number": 98 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have the fit and the error, let's plot the fit and the error.\n", "\n", "### Computing Error Bars\n", "\n", "Finally, we can compute error bars for the predictions. The error bars are the standard deviations of the predictions for $\\mathbf{f}=\\boldsymbol{\\Phi}\\mathbf{w}$ under the posterior density for $\\mathbf{w}$. The standard deviations of these predictions can be found from the variance of the prediction at each point. Those variances are the diagonal entries of the covariance matrix. We've already computed the form of the covariance under Gaussian expectations, \n", "\n", "$$\\text{cov}\\left(\\mathbf{f}\\right)_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu},\\mathbf{C})} = \\boldsymbol{\\Phi}\\mathbf{C} \\boldsymbol{\\Phi}^\\top$$\n", "\n", "which under the posterior density is given by\n", "\n", "$$\\text{cov}\\left(\\mathbf{f}\\right)_{\\mathcal{N}(\\mathbf{w}|\\boldsymbol{\\mu}_w,\\mathbf{C}_w}) = \\boldsymbol{\\Phi}\\mathbf{C}_w \\boldsymbol{\\Phi}^\\top$$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# compute the error bars\n", "f_pred_cov = np.dot(Phi_pred, np.dot(w_cov, Phi_pred.T))\n", "f_pred_var = np.diag(f_pred_cov)[:, None]\n", "f_pred_std = np.sqrt(f_pred_var)\n", "\n", "# plot mean, and error bars at 2 standard deviations\n", "plt.plot(x_pred.flatten(), f_pred_mean.flatten(), 'b-')\n", "plt.plot(x_pred.flatten(), (f_pred_mean+2*f_pred_std).flatten(), 'b--')\n", "plt.plot(x_pred.flatten(), (f_pred_mean-2*f_pred_std).flatten(), 'b--')\n", "plt.plot(x, y, 'rx')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 99, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 99 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }