{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "source": [ "jupyter nbconvert --to slides --reveal-prefix \"http://lab.hakim.se/reveal-js/\"" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "import pods\n", "import mlai\n", "from matplotlib import pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Introduction to Machine Learning and Data Science\n", "\n", "### Data Science in Africa Summer School\n", "\n", "### Makerere University, Kampala, Uganda\n", "\n", "### Neil D. Lawrence\n", "\n", "### 27th June 2016" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Text\n", "\n", "\n", "\n", "@Rogers:book11\n" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "# Another Text\n", "\n", "\n", "![](diagrams/978-0-387-31073-2.png)\n", "\n", "@Bishop:book06\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# What is Machine Learning?\n", "\n", "\n", "**
data + model = prediction
**\n", "\n", " - **data** : observations, could be actively or passively\n", " acquired (meta-data).\n", "\n", " - **model** : assumptions, based on previous experience (other data!\n", " transfer learning etc), or beliefs about the regularities of\n", " the universe. Inductive bias.\n", "\n", " - **prediction** : an action to be taken or a categorization or a\n", " quality score.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Fitting Data\n", "\n", "- **data**" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import numpy as np\n", "\n", "# Create some data\n", "x = np.array([1, 3])\n", "y = np.array([3, 1])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- **model**\n", "$$y=mx + c$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Model Fitting\n", "\n", "$$m = \\frac{y_2- y_1}{x_2-x_1}$$\n", "$$c = y_1 - m x_1$$" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "xvals = np.linspace(0, 5, 2);\n", "\n", "m = (y[1]-y[0])/(x[1]-x[0]);\n", "c = y[0]-m*x[0];\n", "\n", "yvals = m*xvals+c;" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVwAAAFaCAYAAABST+UxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcVOWV//HP6UUWkRA0w+KIYKImGlpAjWwCGnWigpEB\nlIlhcSE6yi/GhKCgMZjEfRk1GhONIKiDgIhRo44RaIFINGy2ijFkUEBUMgiGYANC9/n98XTTW3V3\ndXdV3Vq+79erXl1V9/at57Zy+vRzzz2PuTsiIpJ8eVEPQEQkVyjgioikiAKuiEiKKOCKiKSIAq6I\nSIoo4IqIpEhB1ANoCjN7H9gBlAF73f0b0Y5IRCR+GRVwAQeGuPu2qAciItJUmTilYFEPQESkOTIt\n4DrwspmtMLMJUQ9GRKQpMm1KYYC7f2RmXwL+YGZ/cfelUQ9KRCQeGRVw3f2jiq//Z2YLgG8ASwHM\nTE0hRCQp3D0hU5kZM6VgZm3N7KCK5wcCZwBvVt/H3bP28dOf/jTyMej8dH65eH6JlEkZbidggZlB\nGPfj7v5StEMSEYlfxgRcd38P6BX1OEREmitjphTisW5d1CNIniFDhkQ9hKTS+WW2bD+/RLFEz1FE\nxcy8qMhZvhzato16NCKSLcwMz7WLZvEoKYErroAs+R0iIlkmqwJumzbwyCPw8MNRj0REpK6sCrgP\nPBC+TpwIq1ZFOxYRkdqyKuCOGwcTJsCePTByJGzfHvWIRESqZNVFM3dn924YMCBkuMOGwdNPQ15W\n/VoRkVTSRbMGtG4NTz4JHTrAs8/C7bdHPSIRkSDrMtxKzz0XMty8PFi4EFQmKCLNoQw3DkOHwpQp\nUF4Oo0fDRx9FPSIRyXVZm+EC7NsHZ5wBixfDySeHTLewMKIBikhGUoYbp4ICmD0bunSBpUth6tSo\nRyQiuSyrM9xKy5aFOdyyMnjqKRg+PLVjE5HMpQy3iQYOhNtuC8/Hj8/uJjcikr5yIsOF0F9h1CiY\nPx+KilCTGxGJizLcZjCD6dPhyCPV5EZEopEzARegffuQ4arJjYhEIacCLkDPnmpyIyLRyLmAC2py\nIyLRyJmLZrWpyY2IxEMXzRJATW5EJNVyNsOtpCY3ItIQZbgJpCY3IpIqOZ/hgprciEj9lOEmmJrc\niEgqKMOtRk1uRKQ2ZbhJoiY3Itln0KBB/OEPf4h6GIACbh1XXQUjRsCOHeGmiNLSqEckIi2xadMm\nPkqTq+EKuLWoyY2IJIsCbgxqciMiyaCAWw81uRGRRFPAbYCa3Ei8PvzwQ0aOHEn//v056qijePzx\nx2Put3z5cv7lX/6FG2+8McUjrOvBBx9kwIABHHvssVx77bWUl5cDsG7dOi677DIGDx5M//79KSoq\n4q677tq/fefOndx44430799///d///vfZ8eOHQ1+3syZMxkyZAgDBw6kqKiIX/7ylwDs2rWLiRMn\n0q9fPwYPHsyYMWPYunVrck++mcys0MwuMbOFZvZnMys2s6fN7Mdm1nj1vrtnxSOcSuLt2uXep487\nuA8b5l5WlpSPkQy2Z88eHzhwoK9Zs8bd3c8991wvKCjwd955p86+48aNczPzKVOmpHqYNSxdutTP\nPfdcd3efO3eum5nffPPN/t///d9+5plneklJyf5977nnHjcz//GPf+x//etffeDAgT5r1qz92994\n4w03M//3f//3ej/v4osv9kmTJnlpaam7uy9btszNzG+66SY/++yzffbs2e7u/pvf/MYPOuggHz9+\nfMLOtXv37j5z5sxmf39FbAH4KrAWeBs4watiz0XAB8Dt3licamyHTHkkK+C6u69f796hQ/hp3XJL\n0j5GMtRNN93kv/zlL/e/7tu3r5uZz5s3r86+hx9+uJuZv/jiizGP9e677/pRRx3l3bt3T8jj17/+\ndczPGT58uC9btszd3efNm+dm5l27dvWRI0f6vn37auz7zjvvuJn5oYce6n379o35i6RTp05eWFjo\ne/bsqbPtvvvu8x/+8Id13j/44IM9Ly/PL730Und33759u+fl5bmZ+dixY2OOuzkSEXCBwcCnwCbg\nYK+KO+2BfUA58LQ3Fqca2yFTHskMuO7uzz4bflp5ee6LFyf1oySD7Nu3z4855hj//PPP3d39gw8+\n8Ly8PC8oKPDNmzfX2Pe9995zM/MDDjjAd+7cGcVw3d19165d/uUvf3n/6+uvv97NzLt37x5zXK+9\n9pqbmefl5fnzzz8f85gHHnig5+Xl+SeffFLj/dLSUj/mmGN8165ddd7Pz8/3vLw8f/PNN93dvays\nzC+44AI/99xzfdOmTS09zf0SFHD/DpQBg71m3CkE1lQE4oHeSJwqaOmcRq6obHJz882hyc3q1eFW\nYMltGzZsYOzYsRRWNN+YMWMG7s7QoUPp2rVrjX0XL14MQJ8+fTjwwANTPtZKH330ERMmTNj/unJc\nU6dOjTmulStXAnDKKadw5pln1tm+YcMGSktLad++PR07dqyxbd26dUycOJHWrVvXeH/VqlWUl5fT\ntWtXvv71rwOQl5fHY4891rKTq0dFcGyJQ4AX3f2VWsfdC/SK9yAKuE3ws5/Bn/4Umtycf76a3Agc\nccQRXH311ftfT58+HYDLL7+8zr7FxcUADIm4B2iPHj32j/mzzz7jT3/6E2bGGWecEXP/yoB82mmn\nxdy+aNEiINzRVVtRURFFRUV13n/55ZcB+OY3v9n0E6iwadMm/u3f/o1du3Y1uN8HH3zApEmTmDZt\nWoP7XXjhhVx//fU13luxYkXlUwfuafZg9x8lDaYDEvEgyVMKlT7+2L1LlzC9MGlSSj5SMsTy5cvd\nzPzwww+Pub1bt24Nzt9G4YUXXnAzqzHFUF15ebl/6Utf8ry8PH/99ddj7jN06FA3M3/wwQfj/twB\nAwa4mdW4+JYsLZlSuOaaayqnFHYChd7COKWysCbq1AnmzoX8fLjjDliwIOoRSbqYN28eAMNjdD1a\nv349mzZtorCwkIEDB6Z6aPVauHAhUH+mWVJSwtatW/nCF77ACSecUGf7p59+yksvvURBQUHM845l\nx44dvPbaa5hZizLcVHjrrbcqn77uYfqgRTSl0AyVTW5+9KPQ5ObrXw+3AktuW758ORDmOmuLd/72\nr3/9K8OGDePzzz9PyJiuueYaLr300nq3VwbcU089tcHtgwcPxqxuw6w5c+awd+9ezj77bA455JD9\n73Xr1o1+/frFPObixYspKyvj6KOPrjPPvXfvXqZOncrtabLmVWXtMbAxEcdTwG2mq66CV18NtwCP\nHAnLl0PbtlGPSqK0detWzIwvf/nLdbbFO3971FFH8e677yZhdHV98sknrFmzBjNrNODWl4k+8cQT\nAIwdO3b/e/feey/PPPMMAL/73e+4//77ufTSSxkxYgQAL774IgB9+/atc7zf/e53lJWVNfOMEu9r\nX/sazz//PMDuhvYzs+OAye5+QYMHbOmcRLo8SNEcbnX/+If7kUeG+dzx493Ly1M+BEkjp556qpvZ\n/hsgKr3xxhvepk2btJu/ray/LSoqirn9888/93bt2nleXp6//fbbMfc56KCDvFWrVvtvaFi8eLGP\nGTPG3d0/++yz/ec9YsQIdw+1tgcffLCbmU+qdRHkk08+8d69e/sHH3yQqFN095bN4ZaUlFTO4a7w\n+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\nIv8fTArE8xhOKFcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "\n", "xvals = np.linspace(0, 5, 2);\n", "\n", "m = (y[1]-y[0])/(x[1]-x[0]);\n", "c = y[0]-m*x[0];\n", "\n", "yvals = m*xvals+c;\n", "\n", "ylim = np.array([0, 5])\n", "xlim = np.array([0, 5])\n", "\n", "f, ax = plt.subplots(1,1,figsize=(5,5))\n", "a = ax.plot(xvals, yvals, '-', linewidth=3);\n", "\n", "ax.set_xlim(xlim)\n", "ax.set_ylim(ylim)\n", "\n", "plt.xlabel('$x$', fontsize=30)\n", "plt.ylabel('$y$',fontsize=30)\n", "plt.text(4, 4, '$y=mx+c$', horizontalalignment='center', verticalalignment='bottom', fontsize=30)\n", "plt.savefig('diagrams/straight_line1.svg')\n", "ctext = ax.text(0.15, c+0.15, '$c$', horizontalalignment='center', verticalalignment='bottom', fontsize=20)\n", "xl = np.array([1.5, 2.5])\n", "yl = xl*m + c;\n", "mhand = ax.plot([xl[0], xl[1]], [yl.min(), yl.min()], color=[0, 0, 0])\n", "mhand2 = ax.plot([xl.min(), xl.min()], [yl[0], yl[1]], color=[0, 0, 0])\n", "mtext = ax.text(xl.mean(), yl.min()-0.2, '$m$', horizontalalignment='center', verticalalignment='bottom',fontsize=20);\n", "plt.savefig('diagrams/straight_line2.svg')\n", "\n", "a2 = ax.plot(x, y, '.', markersize=20, linewidth=3, color=[1, 0, 0])\n", "plt.savefig('diagrams/straight_line3.svg')\n", "\n", "xs = 2\n", "ys = m*xs + c + 0.3\n", "\n", "ast = ax.plot(xs, ys, '.', markersize=20, linewidth=3, color=[0, 1, 0])\n", "plt.savefig('diagrams/straight_line4.svg')\n", "\n", "\n", "m = (y[1]-ys)/(x[1]-xs);\n", "c = ys-m*xs;\n", "yvals = m*xvals+c;\n", "\n", "for i in a:\n", " i.set_visible(False)\n", "for i in mhand:\n", " i.set_visible(False)\n", "for i in mhand2:\n", " i.set_visible(False)\n", "mtext.set_visible(False)\n", "ctext.set_visible(False)\n", "a3 = ax.plot(xvals, yvals, '-', linewidth=2, color=[0, 0, 1])\n", "for i in ast:\n", " i.set_color([1, 0, 0])\n", "plt.savefig('diagrams/straight_line5.svg')\n", "\n", "m = (ys-y[0])/(xs-x[0])\n", "c = y[0]-m*x[0]\n", "yvals = m*xvals+c\n", "\n", "for i in a3:\n", " i.set_visible(False)\n", "a4 = ax.plot(xvals, yvals, '-', linewidth=2, color=[0, 0, 1]);\n", "for i in ast:\n", " i.set_color([1, 0, 0])\n", "plt.savefig('diagrams/straight_line6.svg')\n", "for i in a:\n", " i.set_visible(True)\n", "for i in a3:\n", " i.set_visible(True)\n", "plt.savefig('diagrams/straight_line7.svg')\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pods\n", "pods.notebook.display_plots('straight_line{plot}.svg', \n", " directory='./diagrams', plot=(1, 7))\n" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "# $y = mx + c$\n", "\n", "point 1: $x = 1$, $y=3$ $$3 = m + c$$ \n", "point 2: $x = 3$, $y=1$ $$1 = 3m + c$$ \n", "point 3: $x = 2$, $y=2.5$ $$2.5 = 2m + c$$" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "# $y = mx + c + \\epsilon$\n", "\n", "point 1: $x = 1$, $y=3$ \n", "$$3 = m + c + \\epsilon_1$$ \n", "\n", "point 2: $x = 3$, $y=1$ \n", "$$1 = 3m + c + \\epsilon_2$$ \n", "\n", "point 3: $x = 2$, $y=2.5$ \n", "$$2.5 = 2m + c + \\epsilon_3$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Regression Examples\n", "\n", "- Predict a real value, $y_i$ given some inputs\n", " $x_i$.\n", "\n", "- Predict quality of meat given spectral measurements (Tecator data).\n", "\n", "- Radiocarbon dating, the C14 calibration curve: predict age given\n", " quantity of C14 isotope.\n", "\n", "- Predict quality of different Go or Backgammon moves given expert\n", " rated training data.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Olympic 100m Data\n", "\n", "- Gold medal times for Olympic 100 m runners since 1896.\n", "\n", "![image](./diagrams/100m_final_start.jpg)\n", "Image from Wikimedia Commons " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Olympic 100m Data\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nSEUBAIjL3L2/A81ulvRBSSckHZF0yt1va/v8DZJ+4O4NM3uPpD9097d2OE9/FQAABMvdE3kS2HfI\nnXUSsz+QtOzuf96jzHclvcvd/8+GfyAAAOuwkd6V/zr6c0LSeyX95arPLzIzi7a3qRWoBBwAYGg2\nbeDYipn9S0lNSR9091fM7Dckyd3/QlJZ0n8xs+9Lakj65Q3XFgCAGBJ5XAkAQBolPuOJmd1rZsfN\n7HDbvm1m9ng0KHzRzKai/f/CzO43s2+Z2VNm9rG2Y94VDTb/BzP7w6Tr2a8u7XuHmdWiduyLOt2s\nfPbxqA1Hzezqtv2pa1+ctpnZL5jZE9H+J8zs59uOSV3bpPi/u+jzCTN71cw+0rYviPaZ2b+LPvt2\n9Pn50f7Mty9r1xYzu8zMvmZmR6Lfx4ei/Rea2SNm9oyZPWxmb2w7JkvXlljtS/T64u6JviS9W9KV\nkg637ZuX9IvR9nskfS3a/jVJ90fbWyR9V9JE9P5xSdui7S9L2p50XRNs36Kkd0fbH5B0d7T9dklP\nSspJmpT0rF67e05d+2K27Z2SLo62t0p6ru2Y1LUtbvvaPq9IekDSR0Jqn1pfVXxT0hXR+x+V9LqA\n2pepa4ukiyW9M9p+vaTvSPoJSZ+R9DvR/o9K+lS0nbVrS9z2JXZ9SfxOzt0PSXp51e4XJP1ItP1G\nSfW2/ReY2XmSLpB0WtIrZvZmSW9w98ejcnskXZ90XfvRpX2XR/sl6VFJ74u2r1Prf7Smuy+p9Rfx\np9Pavjhtc/cn3f3FaP9TkraYWS6tbZNi/+5kZtdL+ke12reyL5T2XS3pW+5+ODr2ZXf/YUDty9S1\nxd1fdPcno+1XJT0tqSDpWkn3RcXu02t1zdq1JVb7kry+DGuC5o9J+pyZLUv6rKTflSR3/4qkV9T6\nC7kk6bPu/j21Gv9c2/H1aF9aHTGz66LtGyRdFm1forPb8Zxa7Vi9P83t69a2du+T9Hfu3lQgvzsz\ne72k35G0c1X5INon6a2S3MwOmNnfmdlvR/uDaF+Wry1mNqnWHetjki5y9+PRR8clXRRtZ/bass72\ntdvQ9WVYIfcFSR9y9wlJt0XvZWb/Wa1HCW+W9BZJv2VmbxlSnZJ0s6QPmtkTat2Knx5xfZLUs21m\ntlXSpyT9xgjqloRu7dspabe7N5Tt6em6tW+TpH8v6T9Ff77XzGbVmqkoSzq2L6vXlugfV/9d0ofd\n/f+1f+at53NZ+/2cJW77kri+bGQIQRzb3P2qaLsi6Z5o+2ck/bW35r/8JzP7X5LeJel/6uxpwi7V\na484U8fdvyPpFyXJzN6q1jRnUqvO7Xc+l6r1r5C6MtK+Hm2TmV0q6a8k/aq7fzfanZm2SR3b90vR\nR9skvc/MPqPWI/YfmtlJtdqb5fat/P6OSap6NHbVzL4s6Scl/Tdlu30rv7/MXVvMLKdWAPxXd38w\n2n3czC529xejR3UvRfszd22J2b7Eri/DupN71sx+LtqelfRMtH00ei8zu0DStKSj0bPYV8zsp83M\nJP2qpAeVUmb2pujP10n6hKQ/iz7aJ+mXzez86F+Rl0t6PEvt69a2qBfUQ5I+6u61lfLu/oIy0jap\nY/v+XJLcveTub3H3t0j6vKRPuvufZul3J/X8u/kVSVeY2RYz2yTp5yQdCaB9K7MuZeraEtXlC5Ke\ncvfPt320T9JN0fZNeq2umbq2xG1foteXAfSiuV/S82o9NjimVo+nn1Lr+euTkmqSrozKblbrX46H\n1Zr/sr0H27ui/c9K+qOk65lg+26W9CG1egt9R9IfrCr/u1EbjirqYZrW9sVpm1oXlFclfaPt9a/S\n2rZ+fndtx90l6fY0/+76/Lv5K2pNtn5YUa+2UNqXtWuLWo+MfxhdI1f+f9ou6UK1OtQ8I+lhSW9s\nOyZL15ZY7Uvy+sJgcABAsIb1uBIAgKEj5AAAwSLkAADBIuQAAMEi5AAAwSLkAADBIuQAAMH6/4RY\nftDYwo4uAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data = pods.datasets.olympic_100m_men()\n", "f, ax = plt.subplots(figsize=(7,7))\n", "ax.plot(data['X'], data['Y'], 'ro', markersize=10)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Olympic Marathon Data\n", "\n", "\n", "![image](./diagrams/Stephen_Kiprotich.jpg)\n", "Image from Wikimedia Commons \n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Olympic Marathon Data\n", "\n", "- Gold medal times for Olympic Marathon since 1896.\n", "\n", "- Marathons before 1924 didn’t have a standardised distance.\n", "\n", "- Present results using pace per km.\n", "\n", "- In 1904 Marathon was badly organised leading to very slow times." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Olympic Marathon Data\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nkqTvu/sJMyutUuwfJF3u7pGZ3STpIUlXrlTw0KFDS9ulUkml0mpvORx37tmjzfPzKtRq2l+vKysp\nkjR35IimczmdnZjQ3UePLpUn+ACgOzMzM5qZmUn8fc3dVz9o9geSPijpDUlvVePq7AF3v7XNa16U\ndI27v9ay39t91rBFUaTp7dt1cGFh1TJT4+M6cOqUstnsBcGXbw6+TEbVFYIPALCcmcnd132rqu09\nM3f/hLtf7u5XSLpF0hOtQWZmW83M4u1r1QjI11Z4u1Sbm51VoVZrW6ZQq2ludlZRFGnz/LwOLixo\nMg4yScpKmqzXdXBhQRfPzyuKor7XGwDQ/TwzlyQzu83Mbov3lSWdNLNnJX1OjdALTrVSUb5eb1um\nUK+rWql0FXwAgP7rOMzcfWn4vbsfdvfD8fYX3f1n3f0qd7/e3ef6Vdl+OrO4qLXucmXjct0EHwCg\n/1gBJLZlbExrdQpGcblugg8A0H+EWaxQLmsuk2lbpprJqFAudxV8AID+I8xi+WJR1VyubZlqLqd8\nsdhV8AEA+o8wi2WzWZ2dmNDU+Lgez2SWrrwiSY9nMpoaH9frExPKZrNdBR8AoP86XZtxQ7j76NGl\nidDTLROhDzRNhF4KPjVGLRaa5plV43lm54IPANB/bSdNJ/pBKZ803QtWAAGA9Ulq0jRhBgAYmoGs\nAAIAQAgIMwBA8AgzAEDwCDMAQPAIMwBA8AgzAEDwCDMAQPAIMwBA8AgzAEDwCDMAQPAIMwBA8Agz\nAEDwCDMAQPAIMwBA8AgzAEDwCDMAQPAIMwBA8AgzAEDwCDMAQPAIMwBA8AgzAEDwCDMAQPAIMwBA\n8AgzAEDwCDMAQPAIMwBA8AgzAEDwCDMAQPA2DbsCWC6KIs3NzqpaqejM4qK2jI2pUC4rXywqm80O\nu3oAkDrm7oP5IDMf1GeF7M49e7R5fl6FWk35el1ZSZGkuUxG1VxOZycmdPfRo8OuJgAkwszk7rbe\n9+HKLEWiKNLm+XkdXFi4YH9W0mS9rsmFBU3F5bhCA4DzuGeWInOzsyrUam3LFGo1zc3ODqhGABAG\nwixFqpWK8vV62zKFel3VSmVANQKAMBBmKXJmcVFrdR5m43IAgPMIsxTZMjamaI0yUVwOAHAeYZYi\nhXJZc5lM2zLVTEaFcnlANQKAMBBmKZIvFlXN5dqWqeZyyheLA6oRAISBofkpks1mdXZiQlNqjFos\n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\nQwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data = pods.datasets.olympic_marathon_men()\n", "f, ax = plt.subplots(figsize=(7,7))\n", "ax.plot(data['X'], data['Y'], 'ro',markersize=10)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### What is Machine Learning?\n", "\n", "$$\\text{data} + \\text{model} = \\text{prediction}$$\n", "\n", "- $\\text{data}$ : observations, could be actively or passively\n", " acquired (meta-data).\n", "\n", "- $\\text{model}$ : assumptions, based on previous experience (other data!\n", " transfer learning etc), or beliefs about the regularities of\n", " the universe. Inductive bias.\n", "\n", "- $\\text{prediction}$ : an action to be taken or a categorization or a\n", " quality score.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Regression: Linear Releationship\n", "\n", "$$y_i = m x_i + c$$\n", "\n", "- $y_i$ : winning time/pace.\n", "\n", "- $x_i$ : year of Olympics.\n", "\n", "- $m$ : rate of improvement over time.\n", "\n", "- $c$ : winning time at year 0." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Overdetermined System\n", "\n", "![](diagrams/straight_line7.svg)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# $y = mx + c$\n", "\n", "point 1: $x = 1$, $y=3$ $$3 = m + c$$ \n", "point 2: $x = 3$, $y=1$ $$1 = 3m + c$$ \n", "point 3: $x = 2$, $y=2.5$ $$2.5 = 2m + c$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# $y = mx + c + \\epsilon$\n", "\n", "point 1: $x = 1$, $y=3$ \n", "$$3 = m + c + \\epsilon_1$$ \n", "\n", "point 2: $x = 3$, $y=1$ \n", "$$1 = 3m + c + \\epsilon_2$$ \n", "\n", "point 3: $x = 2$, $y=2.5$ \n", "$$2.5 = 2m + c + \\epsilon_3$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### The Gaussian Density\n", "- Perhaps the most common probability density.\n", "\\begin{align*}\n", "p(y| \\mu, \\sigma^2) & = \\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp\\left(-\\frac{(y - \\mu)^2}{2\\sigma^2}\\right)\\\\\n", "& \\buildrel\\triangle\\over = \\mathcal{N}(y|\\mu, \\sigma^2)\n", "\\end{align*}\n", "- The Gaussian density.\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "h = np.linspace(0, 2.5, 1000)\n", "sigma2 = 0.0225\n", "mu = 1.7\n", "p = 1./np.sqrt(2*np.pi*sigma2)*np.exp(-(h-mu)**2/(2*sigma2**2))\n", "f2, ax2 = plt.subplots(figsize=(7, 3.5))\n", "ax2.plot(h, p, 'b-', linewidth=3)\n", "ylim = (0, 3)\n", "ax2.vlines(mu, ylim[0], ylim[1], colors='r', linewidth=3)\n", "ax2.set_ylim(ylim)\n", "ax2.set_xlim(1.4, 2.0)\n", "ax2.set_xlabel('$h/m$', fontsize=20)\n", "ax2.set_ylabel('$p(h|\\mu, \\sigma^2)$', fontsize = 20)\n", "f2.savefig('./diagrams/gaussian_of_height.svg')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Gaussian Density\n", "![](./diagrams/gaussian_of_height.svg)\n", "The Gaussian PDF with $\\mu=1.7$ and variance $\\sigma^2=\n", " 0.0225$. Mean shown as red line. It could represent the heights of a population of\n", " students." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Gaussian Density\n", "$$\n", "\\mathcal{N}(y|\\mu, \\sigma^2) = \\frac{1}{\\sqrt{2\\pi\\sigma^2}} \\exp\\left(-\\frac{(y-\\mu)^2}{2\\sigma^2}\\right)\n", "$$\n", "$\\sigma^2$ is the variance of the density and $\\mu$ is the mean.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Laplace's Idea\n", "\n", "### A Probabilistic Process\n", "\n", "- Set the mean of Gaussian to be a function.\n", " $$p\\left(y_i|x_i\\right)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp \\left(-\\frac{\\left(y_i-f\\left(x_i\\right)\\right)^{2}}{2\\sigma^2}\\right).$$\n", "\n", "- This gives us a ‘noisy function’.\n", "\n", "- This is known as a stochastic process." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Height as a Function of Weight\n", "\n", "- In the standard Gaussian, parametized by mean and variance.\n", "\n", "- Make the mean a linear function of an *input*.\n", "\n", "- This leads to a regression model. \n", " \\begin{align*}\n", " y_i=&f\\left(x_i\\right)+\\epsilon_i,\\\\\n", " \\epsilon_i \\sim &\\mathcal{N}(0, \\sigma^2).\n", " \\end{align*}\n", " \n", "- Assume $y_i$ is height and $x_i$ is weight." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Data Point Likelihood\n", "\n", "- Likelihood of an individual data point\n", " $$p\\left(y_i|x_i,m,c\\right)=\\frac{1}{\\sqrt{2\\pi \\sigma^2}}\\exp \\left(-\\frac{\\left(y_i-mx_i-c\\right)^{2}}{2\\sigma^2}\\right).$$\n", "\n", "- Parameters are gradient, $m$, offset, $c$ of the function and noise\n", " variance $\\sigma^2$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Data Set Likelihood\n", "\n", "- If the noise, $\\epsilon_i$ is sampled independently for each\n", " data point.\n", "\n", "- Each data point is independent (given $m$ and $c$).\n", "\n", "- For independent variables:\n", " $$p(\\mathbf{y}) = \\prod_{i=1}^n p(y_i)$$\n", " $$p(\\mathbf{y}|\\mathbf{x}, m, c) = \\prod_{i=1}^n p(y_i|x_i, m, c)$$\n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### For Gaussian \n", "\n", "- i.i.d. assumption\n", " \n", " $$p(\\mathbf{y}|\\mathbf{x}, m, c) = \\prod_{i=1}^n \\frac{1}{\\sqrt{2\\pi \\sigma^2}}\\exp \\left(-\\frac{\\left(y_i-mx_i-c\\right)^{2}}{2\\sigma^2}\\right).$$\n", " $$p(\\mathbf{y}|\\mathbf{x}, m, c) = \\frac{1}{\\left(2\\pi \\sigma^2\\right)^{\\frac{n}{2}}}\\exp \\left(-\\frac{\\sum_{i=1}^n\\left(y_i-mx_i-c\\right)^{2}}{2\\sigma^2}\\right).$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Log Likelihood Function\n", "\n", "- Normally work with the log likelihood:\n", " $$L(m,c,\\sigma^{2})=-\\frac{n}{2}\\log 2\\pi -\\frac{n}{2}\\log \\sigma^2 -\\sum _{i=1}^{n}\\frac{\\left(y_i-mx_i-c\\right)^{2}}{2\\sigma^2}.$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Error Function\n", "\n", "- Negative log likelihood is the error function leading to an error\n", " function\n", " $$E(m,c,\\sigma^{2})=\\sum _{i=1}^{n}\\left(y_i-mx_i-c\\right)^{2}.$$\n", "\n", "- Learning proceeds by minimizing this error function for the data\n", " set provided." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Connection: Sum of Squares Error\n", "\n", "- Ignoring terms which don’t depend on $m$ and $c$ gives\n", " $$E(m, c) \\propto \\sum_{i=1}^n (y_i - f(x_i))^2$$\n", " where $f(x_i) = mx_i + c$.\n", "\n", "- This is known as the *sum of squares* error function.\n", "\n", "- Commonly used and is closely associated with the\n", " Gaussian likelihood." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Reminder\n", "\n", "- Two functions involved:\n", " - Prediction function: $f(x_i)$\n", " - Error, or Objective function: $E(m, c)$\n", "- Error function depends on parameters through prediction function." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Mathematical Interpretation\n", "\n", "- What is the mathematical interpretation?\n", "\n", " - There is a cost function.\n", "\n", " - It expresses mismatch between your prediction and reality.\n", " $$E(m, c)=\\sum_{i=1}^n \\left(y_i - mx_i -c\\right)^2$$\n", "\n", " - This is known as the sum of squares error." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "### Nonlinear Regression\n", "\n", "- Problem with Linear Regression—$\\mathbf{x}$ may not be linearly\n", " related to $\\mathbf{y}$.\n", "\n", "- Potential solution: create a feature space: define\n", " $\\phi(\\mathbf{x})$ where $\\phi(\\cdot)$ is a\n", " nonlinear function of $\\mathbf{x}$.\n", "\n", "- Model for target is a linear combination of these nonlinear\n", " functions\n", " $$f(\\mathbf{x}) = \\sum_{j=1}^k w_j \\phi_j(\\mathbf{x})$$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\nO167apU91q+3k13at7eF7Rs0yJqeWliY7S3+7392y6mESpSwtYdffFFrC+c2GgyVykTXr9uKJitX\n2jfxEydsis3X16bwGjVyw8o32TArVMQWQli37taRN6/9QNGmjd3UOrvH77Zvt0Fx/vzESzSMsQX3\nhwyBli01hZobaDBUKgsFB9teTewb/NGjNiA2b25np95zjy0fluPeTLNogXysS5dgxw47Vrd5s60/\nWqSI3cg69oND9eo54+dy6ZKdcDN9etJbstWrB8OG2RJwWofYfeW6YGiMaQdMBfIAs0RkUoLHNRgq\nl7lyxabfNm+2geCPP+w0/saNbeqvXj171KrlovRq3FRo7KzQZGqFOkPEjqnu2WOP3bttjysoyL7e\ne+6xE5CaN8++eqDDhw9n48aN5M2bl1WrVlHYyUHAmBhYscKWcPv558SPlyljxxUHD7Z/V1kvICCA\nL7/8kkuXLrF69WoqVqyY7nvlqmBojMkDBAL/As4A24BnRORAnGs0GKocQ8Tuw7h9uw0UsQHj9Gmo\nUQN8fOxRo4btKdWoYYNGenZlSFEGUqEidj/CY8dsz+noUTh0yI75HTxoe3z16tlJKPXq2Z5x7dpZ\n8Bqc1KdPH8aOHUuVKlXSfY/AQBsU58yx44z2bWc0UJU8eQw1apzns8/e57770teVnjx5MlFRUYwa\nNSrRY4cOHWLs2LEULFgQb29vChYsiJ+fH0WSKKwaFhZGs2bN2LNnTzKvI5DRo0dTtWpVjDGcP3+e\n999/n7Jly6brui1btjBz5kwKFizI9evXuX79OmPGjKFu3brpup+zr6NPnz74+flRtWrVJB93RkrB\nEBFxqwNoDvwc5+tRwKgE14hSOV1YmMju3SJffSUydqxIz54iDzwgUqGCSP78IlWqiNx3n8jTT4u8\n9JLIf/4j8sknIt9+K/LrryK7dokcPy5y7py9V0xMEk8SKSLfishDInK7iPxHRIJEwsNFLlwQ+esv\nkX37RDZsEFmyRGTOHJFJk0RGjBDp3l3k4YdFatUSKVhQpGRJkcaNbXtGjRL57DOR334TuXgx235k\nTuvdu7ecOHEiU+518aKIn99lyZOnosB8sR8NRGCCQF3p2DFCfvstbfc8ceKEFCpUSMaOHZvosf37\n90uVKlXkt5s3PXv2rFSrVk38/PwSXbt161Zp0qSJeHl5Jfk8ly9flooVK8r8+fMd5yZMmCB169aV\n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\nAF5pYgjAeGIIwHhiCMB4YgjAeGIIwHhiCMB4YgjAeGIIwHhiCMB4YgjAeGIIwHhiCMB4YgjAeGII\nwHhiCMB4YgjAeGIIwHhiCMB4YgjAeGIIwHhiCMB4YgjAeGIIwHhiCMB4YgjAeGIIwHhiCMB4YgjA\neGIIwHhiCMB4YgjAeGIIwHhiCMB4YgjAeGIIwHhiCMB4YgjAeGIIwHhiCMB4YgjAeGIIwHhiCMB4\nYgjAeGIIwHhiCMB4YgjAeBsZw6q6vaqer6q3LL1lrXZ3d5eewEp4L5B4H1zMxsWwqo4lOZHk90tv\nWTNvfM7zXiDxPriYjYthkq8m+ezSIwDYHhsVw6o6meSp7v750lsA2B7V3UtvuEBVPZDk8iOeOp3k\nVJL3dvffqup3Sd7d3U8f8X+s64cCYBW6u446vroYvpiquj7Jg0n+sX/oyiTnktzY3X9abBgAG29j\nYnjY/pnhDd39zNJbANhsG3XP8JDNrDgAq7OxZ4YA8ErZ5DNDLqKq3l9Vv6iqf1fVu5bew6VVVTdX\n1RNV9euq+tzSe1hGVd1dVX+sqseW3rJmYrjdHktyS5IfLT2ES6uqXpvk60luTnJdkg9W1bXLrmIh\n38ze+4CXIIZbrLuf6O5fLb2DRdyY5Dfd/WR3/yvJd5KcXHgTC+juh5L8eekdayeGsJ3eluTsgcdP\n7R8DjnDZ0gP4/7zEHyk41d33Xuo9rIZPxsHLIIYbrrtPLL2BVTqX5NiBx8eyd3YIHMFl0jmO/BNE\nbK0fJzleVVdX1euSfCDJ9xfeBKslhlusqm6pqrNJbkpyX1X9YOlNXBrd/VySTya5P8kvk3y3ux9f\ndhVLqKpvJ3k4ydur6mxVfWTpTWvkl+4BGM+ZIQDjiSEA44khAOOJIQDjiSEA44khAOOJIQDjiSEA\n44khAOOJIQDjiSEA44khAOP5PkPYMlV1Q5IPZe8Lfq9O8tEkH0vy5ux92/0Xu/u3iw2EFRJD2CJV\ndTzJrd39qf3H9yR5JMmt2bsS9FCSnyb52lIbYY3EELbLp5N85sDjNyR5prsfqaork3wlyT1LDIM1\n832GsEWq6qru/sOBx+eS3N3dX1hwFqyeD9DAFjkUwmuTXJHkh8stgs0ghrC93pPkn0kePn+gqq5Z\nbg6slxjClqiq11fVXVV1/f6hE0ke7e5n959/TS68nwjs8wEa2B7vS3J7kp9U1XNJrknylwPPn0ry\nrSWGwdr5AA1siap6a5K7kjydvd8xvCPJN5I8m73Lpd/r7geXWwjrJYYAjOeeIQDjiSEA44khAOOJ\nIQDjiSEA44khAOOJIQDjiSEA44khAOP9B8axZVgcQyj7AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f, ax = plt.subplots(figsize=(7, 7))\n", "\n", "loc =[[0, 1.4,],\n", " [0, -0.7],\n", " [0.75, -0.2]]\n", "text =['$\\phi(x) = 1$',\n", " '$\\phi(x) = x$',\n", " '$\\phi(x) = x^2$']\n", "mlai.plot_basis(mlai.polynomial, x_min=-1.3, x_max=1.3, fig=f, ax=ax, loc=loc, text=text) \n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Quadratic Basis\n", "\n", " \n" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pods.notebook.display_plots('polynomial_basis{num_basis}.svg', directory='./diagrams', num_basis=(1,3))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Functions Derived from Quadratic Basis\n", "\n", "$$f(x) = {\\color{\\redColor}w_0} + {\\color{\\magentaColor}w_1x} + {\\color{\\blueColor}w_2 x^2}$$\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pods.notebook.display_plots('polynomial_function{func_num}.svg', directory='./diagrams', func_num=(1,3))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcYAAAG/CAYAAADCT3cgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VFX+x/H3Saihd6RbKIqKgNJ2RVwVu65rQf2JwiIK\nu4qFxYLCgq6uqCuWFcuua0XXtRfsBVF6tQJSRClSQ02AkOT8/vhmkjshZSZtZsLn9TznmeTOnTvn\nzsy533vPPcV57xERERGTFOsMiIiIxBMFRhERkQAFRhERkQAFRhERkQAFRhERkQAFRhERkYCEDIzO\nuRrOudnOuUXOuR+cc3+PdZ5ERKRycInaj9E5l+K9T3fOVQG+Av7ivf8q1vkSEZHElpBXjADe+/Sc\nP6sByUBqDLMjIiKVRMIGRudcknNuEbAB+Nx7/0Os8yQiIomvSqwzUFLe+2zgGOdcPeBD51w/7/3U\n0PPOucSsIxYRkXLlvXdFPZ+wV4wh3vvtwBTg2AKeU4px+utf/xrzPCjpe4iHpO8gPlIkEjIwOuca\nO+fq5/xdEzgFWBjbXImISGWQqFWpBwHPOueSsOD+vPf+0xjnSUREKoGEDIze+2+BbrHOhxSvX79+\nsc6CoO8hHug7SBwJ24+xOM45X1n3TURESsY5h6/sjW9ERETKkgKjiIhIgAKjiIhIgAKjiIhIgAKj\niIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhI\ngAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKj\niIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhI\ngAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKjiIhIgAKj\niIhIgAKjiIhIgAKjiIhIgAKjiIhIQMIGRudca+fc5865751z3znnRsQ6TyIikvic9z7WeSgR51xz\noLn3fpFzrjYwH/i9935xzvM+UfdNRETKh3MO770rap2EvWL03q/33i/K+XsXsBhoEdtciYhIokvY\nwBjknGsHdAVmxzYnIiKS6KrEOgOllVON+ipwXc6VY65x48bl/t2vXz/69etXoXkTEZHYmjp1KlOn\nTo3qNQl7jxHAOVcVeBd433v/YL7ndI9RRETCRHKPMWEDo3POAc8CW7z3NxTwvAKjiIiEqeyB8bfA\nNOAbILQTt3rvP8h5XoFRRETCVOrAWBwFRhERya9Sd9cQEREpDwqMIiIiAQqMIiIiAQqMIiIiAQqM\nIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIi\nAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIiIiAQqMIhXsxhtv\npEePHvTp04e0tLRYZ+eA99BDD9G7d286derE2rVrY50diQNVYp0BkQPN1q1befXVV2nTpk3Y8qVL\nlzJ69Gjatm2Lc47Nmzdz33330bRp04i2O2vWLJ588klq1qzJ7t27SU9PZ/To0Rx99NH7rfvjjz8y\nfvx4atasSfXq1alZsybjxo2jdu3auevMmTOHCRMmsHv3btasWUOPHj244447aNGiRYnyvXLlytz3\nTE5OJi0tjQkTJtCsWbMS7Uck+Xv//fcZNmwYXbp0yd3XpKS864EePXpw3XXXcd111zF48GAyMzMj\n+qylkvPeV8pkuyYSfwYNGuRXrVoVtmzbtm2+ZcuWfvLkybnL7r77bn/kkUf6jIyMYre5YMECf9ZZ\nZ/m9e/fmLhs+fLivW7euX7RoUdi633//vW/Tpo2fOXOm99779evX+3bt2vlx48blrjN//nzfv39/\nv337du+997t27fJ9+/b1TZs2Dct7pPleuXKlb9SokX/jjTdyl73wwgu+S5cuPjMzM+r9iDR/999/\nv3fO+aSkJJ+UlJT7t3POO+f8Bx98kLtuQd+LVD45saHo+FHcComaFBglXhV0AB49erRv1qyZz8rK\nyl2Wmprqq1at6h977LFit3n99dd755x/+eWXc5e988473jnnR4wYkbts3759vkOHDv6hhx7KXfbL\nL7/4Jk2a+Icffjh32RlnnOFXrFgR9h4LFy70zjl/8cUXR53vc8891zdq1Chse+np6b5GjRr+mWee\niXo/Is3f8OHD/Zo1a8KCr/feT58+3V977bVhyxQYDwyRBEbdYxSJA6+88go9e/YMq+Zr0KABnTp1\n4pVXXin29d26daNevXo0atQod9muXbsAqFWrVu6y5557jlWrVjFo0KDcZa1bt2bjxo1ce+21ucu+\n+OILTjzxRDZt2pS77JhjjqFevXp8+umnUeU7IyODKVOmcNhhh4XluWbNmrRt25ZXX3016v2INH/J\nycm0bNmS5OTksO3deeed3Hvvvft/kCKo8Y1IzO3cuZPly5fvd88R4KCDDmL+/PnFbmPgwIFs3bqV\nk046KXfZggULqFKlCpdccknuspdeeon27dtTt27dIrd3yCGHsHHjRtLT08OWV69end27d0eV79TU\nVLKysqhRo8Z+69WtW5c5c+ZEvR+R5A/gkUce2e89R40axR133FFgfkRAgVES3JIlS7jmmms4++yz\nefnll8Oeu+CCC5gwYQIAGzdupF27drn/x5Off/4ZoMBgVatWLXbs2MG+ffui2uZPP/3Ec889x6RJ\nkzjqqKMAu23y1Vdf0aRJE7788kvGjBnDDTfcwHnnnceiRYvCXj9r1ix+/vln2rZtm7ts3bp1bNy4\nkR49ekSV7yZNmpCSksKePXv2W2/dunVs3ryZ7OzsiPcj0vwVZPr06XjvOe644wpdR0StUiVhZWVl\n8eCDDzJp0iQeeeQR7r77bgYMGADA9u3befPNNzn33HMBq1Lbu3cv06ZN4+abby7R+w0ZMoQFCxZE\n9ZqHHnqIvn37FrnOjh07AKhWrdp+z4WqD7dt20aTJk2Kfb8pU6Ywe/Zs3nrrLa6//nqGDBmS+9yW\nLVvYu3cvGzZsYPHixdx5552AVUv27duXWbNmccQRRwCQkpJCSkpK2LYffvhhkpKSuOuuu6LO94AB\nA3j77bfD1lm/fj3r1q3DOUdqaiqNGzeOaD8izV9BrrvuOl577bVCnxcB1PhGEtfbb7/t33vvPe+9\n96eeeqq/6KKLcp979913vXMurDHFiy++6AcOHFjh+cwvfyOPWbNmeeecHz9+/H7rDhgwwDvn/K+/\n/hrVe2RmZvqTTz7Z9+rVy2/evNl7b61PnXO+Zs2afs+ePWHrt2rVyp911lmFbm/ZsmW+du3afsyY\nMSXK96ZNm3yHDh38E0884b23RkC3336779atm3fO+dTU1Ij3I9L85ffJJ5/4I444otDn1fjmwIAa\n30hl1rVrV/r378/q1av55JNPuOKKK3KfmzZtGm3atAmramvXrl2R1WyxUtSVYFpaGs456tSpE9U2\nk5OTGTt2LLNnz2bYsGEANGzYEIDDDjuM6tWrh63fsmVLPv744wKrbPfu3cull17K1VdfzR133FGi\n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\nPWZm2nazs+0nF/r5O2cpKckmrE1OtprfKlWs/VC1anZgq1bNfpY1athjzZo2NFitWpZq185LdepY\nql07+uHYvv0WrrzSXvvUU9CuXYk+8YK9jd17PB9rQKUJZyrc7t12iHvmGZu94+KLo6gFqACRVKUq\nMJa3NWts6IgVK6z51nHHxTpHB6b3sQNmP6xxTZTjJQQD2c6d+z/u3Ak7d3jaf/FvTvzkNj4/fDj/\nO3Q0W9Or5z2/M+81lalLZO3aULeupXr1wlP9+nmPKSl2Zfjhhza+6eDBtrxu3TIe6zQVu/c4FXgc\nOK0Mty0RmzPHGnAfeqh17WgVJ3OUKjDGct+ysuCxx6zt+Z//bBOeqdq03HhvV1BpaXlXXWlpkLEW\n2kyEuj/ArCtg5aF5z4Uei0vRBrIWrGUSf+IwljOUfzGTPuW345WAc3b1mT+ohlIw6Napk/d/6Ko1\nePWanBzY8MfYEH59sJOhJjHZvQPa3r1Wxfroo3YVOWxYvu8oBhQYY7Vv334LQ4fa9OFPPmmNbKRQ\n2dnWhXPLFktbt8K2bXmP27fDjh15j8GrtWBVZPD2ngOuAP6O9cAYR5lNFB8hz4W8wkRu4F3O4lb+\nzlYahq2RkpJ3QA9WV4aqL0NVmaFqzRo17NwqVO1Ztao9Vqlif4eqSUPVps7lVal6n1fNGqp2zcy0\nk4lQ2rMnvNo2WKWbnp73WYc++x074u/KN/iZ1qkDjWvCsPVw0jp4/Tj4pivULiCoBgNuKKWkxFcV\nYCJbvBiuusp+c08+afM+xooCY0Xv244ddoX43HNw1112I+UAng8nPd2mCFq7Ftaty0sbNtiN+dDj\nli2RTYMYqSOxW4hVsdrThWW03VDwCl6hFPR38GqmQdJ2jv7f7TT78lU233QvXHYZtes4atWqHD+N\nrKy8ILl9e97Jy7ZtVm362mvWNfeYYyzYbtuWl0Lr76yAfohdsVrVvcCfgO8ieE2VKnnVwPXr23DF\nDRvmpcaN81KTJtC0qXVVUMVQwbKz4V//ssY5l19uV5B16lR8PhQYK2rfvIeXX7b+bP37wz33WCmp\n5DIyYOXK/dMvv1jasqVi89MgGcZXgUv2wUON4b2DoEZOMAtdhQUfQykU8ELLQ1dwocc6dWx5qQLZ\n3LlWj1S7Njz8sLVrr6S+/hquvdauJp94ovgZGbKywgPr9u0WOHfsyEuhAJr///z3bouSBAwF7sDG\nB7iD8hkboF49aN4cWrTISy1bQuvW0KaNpSZNDtyr0Y0b4eabrUH3/ffbcNAV+VkoMFbEvi1aZK1N\nt27NG+vgv7NLAAAgAElEQVS0kklNtf5mP/xgVSJLl9ogwj/9VHZXenXqQKNGlho2tLPz0Jl6qIFG\n8N5S6Aqtdm2onQJ1XoMqf8UaWkwA4vG8JCsL/v1vGDsWLrjAZlBp1CjWuSozW7ZYT6TXXrNdu/LK\nir2flJ1ttRTBQFnQY9avcMJ70P4n+N/R8F4T2L4zL/CGgvPeveWX1xo14OCDLR1yiKX27S0dfPCB\nMdrg9Ok2wmKjRja4Q0WdKyowlue+rV9vdQLvvmtzsgwdmvCjn2RkWOD7+msbnuvbb+1x/fqSba9K\nFWuJ1qqVnTG3aAEHHWRn082a2UV106ZWFVXiA8F0rGN3NeAhIBEa/aam2m/m5ZftNzRsWEIfCTMy\nbMSTv/3Nzv7Hj7eTm7g3FxgB7MN+O/nOaffsyQuSW7daSk21x9D98M2bYdMmS6FbA1lZpctWcrJ1\nYTn88Lx0xBGWYlH1WJ4yM616dfx4OPtsm9aqefPyfU8FxvLYt7Q065wzcaK1N7/tNrukSTB79ljQ\nmzfPRq1YuNCGAM3IiG47bdpYc+xDD807+23b1lKzZuV4xbAE65M4F7tCvITEmyvx22/hpptg+XJr\nunf++QlVv+Y9vPqqNbhu396Gc4tlo4oS8cCLwC3YSdXdQKeSby4724Lnr79aWrfO7rGvWWP323/5\nBX7+2a5MS6JdO+sie/TRdt+2Sxc47LDEv1+9bZs1y3j6aauAu/56u41RHhQYy3LfMjLs1Oauu6Bv\nXzs9Puywstt+OcrKgiVLYPZs61s0Z44dkyMdpKVGDRvuKXTW2qmTNag47LAYjFOwFhgPvAGMAq6l\n4AG/E8knn9i4qzVqWIDs1y/WOSrW1KkWEPfssXFOTz451jkqpd3Y0ID3AedhzZhblN/bbdtmtyJC\n9+VXrIBlyyytXh3dtmrVsgDZrRt0726PRxyRmBVYy5dbJcq0aXbNMXRo2VemKDCWxb5lZsKLL1oT\nqo4d4e67434K8S1bYNYsm9Nu5kxr9xFpy7927exM9OijLR11lF0NxrrvEeuBe4FnsKmhbgESobou\nUtnZMHmy/c7atbM6pT7x1/9x+nS7Rfrzz1Yb/H//l/hXK2FSgXuwsXMHATcB5Vy1l9/u3RYgFy/O\nS99/b/f2ozmZ7drVxhM57jibtSSRriwXLIDRo60tw7hxcOmlZRfoFRhLs28ZGTYl1N13W3OycePi\n8kw+O9sKzPTpMGOGpaVLI3tthw7WYrB7dytExxxjjV7iSjAgDgRuplzP5GNu3z7r7nPnnXZzacyY\nuAiQM2ZYg5olSyxLl19ufScrrbVYFf0LwGCsdqKCA2R+GRlWtkP3/hctsrRhQ2Svr1/fAmTPntCr\nlz3Ge9uvqVPt0LtmjdVQDBxY+itIBcaS7Ftamg3yd++9FjnGjLGq0zixe7ddAU6fbmnmTLunUZzm\nza0g9OxphaN79zi/Nboc+AfwMgdGQMwvI8Nm6733Xmu9dOutcNppFXoP0nt4/33rfbRmjTWxHzw4\nodsJRS8UIJ8HLgZGAnF2B2X9ervCWrDA2gvMnx95dWz79tC7twXK3r3t/mU8VsFOm2bnisuW2V2H\nQYNKfg9SgTGaffv1V/jnP21Yht/+1hpF9O5dfhmM0KZNeUHwq6/sR79vX9GvqVrV7jOEfvC9elkj\nmYRo1zEbu8/zBTac17VAnM/vVq4yM20en3vusS/whhus6WeNGuX2lnv2WIPZiRMtON5yi82WEI8H\nzAqzAbsH+ThwIvAXoGdMc1SkDRvsBHrevLx2BZH0K65Vy06ce/fOO340blz++Y3UzJl2rvjVVzaS\nzjXXWEv3aCgwFrdv3tsn/fjj8M47VpF9/fV2GhUDwWrRUFq2rPjXNW5s3Sf79LHH7t3L9bhZ9nZj\nV4aPApuB64EhaGaEIO/hgw9scIAFC6xVwvDh1g+mjKxda8P7/utfdmI1YkSFX6TGv13YHJAPAo2B\na4ABQJyXN++tkc/s2db+YPZsa4le3Ek25F1VhtKRR8a+zcGyZdY54MUXrZvHsGGWt0h+qwqMhe3b\njh3W0OHxx61H8LBhdm1ewRXuO3faWd3MmXYPZ+ZM6yNVnI4d7aL2N7+x1L59gh68FgP/we4fHgv8\nGTgdiHVDn3i3dKnVbkyebNX8V15pEawEl3SZmVZd+tRTVl112WU25n3HjuWQ78okC5ux5VFgPjYw\n7x+BBBoWec8eC46hRnozZ9rJUXFq17YGPaHaqJ49rWtWLGzZYl08Hn/crnaHD7frm7pFTDquwBjc\nt8xMaxb/3HMwZYq1Lx8+HH73uwppqhXqMjFnjp2tzZwJ331X/Mgx1apZA5nf/MaCYZ8+8VW1EbVt\nwH+Bp4HV2P3DocTdfZuEsHMn/O9/NprOL7/AFVdYZDviiGJf+v33Fleffdb6nA4ZAhddVPk6kFeI\n5cC/sPuQbbDWrBcD8XwPvxCrV4cHygULIruqbNvWqmBDqVs3C6AVJTsbPv3UAuQnn8CZZ1oDsZNP\n3v98UYExM9MuxV57zQ4grVvbpzVgQLlGF+9t3tp58/Lq+efNi6zLRJMmViUQuhpMuGrRguwA3sGq\nS6cCp2It/foDB/J9q7L0ww926vzSS1bzccklNkNsYBbgVavgv/+16qetW+3pwYMjiqMSiUzgI+yk\n7yNs7s+LgHOABD3h2LPHguPMmXldwCK5qnTOGlUfe6xdXXbrZn0ty6vTftDmzXaP/NlnrdHYRRfZ\nCIx9+oRmnTnQA2Pz5jbm2AUXWOuBTqUY0qIQWVlW371woaUFC+wxkpaiSUnWT7BXL/vS+vSxPoMJ\nWS2a33pgChYQPweOx+7FnAPUi2G+KrvsbGuZ8NJL+Fde5evGJ/HWQcN489cerNlSkwsucFxyidU+\nJEqftoS0HXgbOxn8EmuwczZwJjHv9lFaq1fn3aucNcsaBO7ZU/zrkpLsEBzqGtali6XynG9hyRK7\nJnr1VQuYf/gDPProgR4Yly61LhdlwHtrFv3995a++cbSd99F9qOAvC4TPXpYMDzuuEpUdbUPmAN8\nArwH/IhdEZ6Vk+Ktf2QltXWrVSl99BF8+KGnSuYeft98Nuf++jh9qsyhyumn2Awwv/tdHHZaraS2\nAu/mpI+ADsAZwMlAD2x+tAS2b58dB0OtX+fMsQqMSCcYaN7cLhCOOsoa9hx5pAXQsj42Ll1qlYe3\n3XagB8YS7Nu+fVbltHSpnW2EHr//PrKGMSENGlg1QjC1bl1JrgYBMoAF2CDeU4FpwKFYYT8Vu0I8\nkPq7xUhqql0gfvmlNZ5ZvNiuBvv3t3T44Tm/Oe/tyY8+svTVV/bkCSfA8cdbvX1CjPyd4DKwK8gP\nsZPIFUBfrNr1N0A3KkW52bXLBh+YO9euKBcssONoNIfk1q3zBlHv0MFSx47WELs0tR2qSi1g37y3\ng8nPP1vz5Z9+srRihY3T9/PP0Y+O36JF3liFXbvaY7t2lSgIemAlMA9rgTcLC4qHAb/FCvbvsObr\nUm4yMqyWYu5cS3PmWJubnj0tth1/vFXHRzRR7p49dsPoyy8tzZ5tnV179MgbR+zoow+w3vwxsBn4\nDDux/ApryNMN6IW11O4OHELiDZBfgLS0vNF6vv7a0rff2qAl0QhN2XXooXlTdrVrZw2A2rUrfuCS\nAz4wTprkc2ePX7PGDiKrV1sPjZKoUwc6d7Z05JEWDI86KsFbiea3BZu54ltsmvPvgK+xxgPdc1IP\nrOAW0SRaSi4ry07QliyxKqrQFGDLltl4l6G4FYpdZTI027594VF37lw7U2zf3n7kRx+dV8fVtm3s\nO7JVVjuwE8852EnofGw25S7AkTnpKGwGkDgfzi0SWVl2UfLdd5a+/dZq55Yti3xc2Pzq1LGrzVat\n7LFlSxsE4KCD7CKmR49KHBidc6dh3WyTgX977yfke97bpU70Wre240GnTnbp3qmTpUpRFZqBDXP1\nM7AqJ60ElmH3BTOBjljhOworiEcTnxP/JijvrSvtmjVWbR+qtfjpJxs0ecUKa5DQsWPeFENHH21V\nShU6m8nu3XazKDQ453ff2b2FjRvtdL1Dh7zZdg8+2E7XW7WyTmQJX1DiyEbgG+wk9ductBRr0d0B\naI9dVbbLSW2BliR0ley+fVYOfvghb2L0H3+0vyMZwadolTQwOueSsZ/Gydhhfi5wifd+cWCdQgNj\n7dpWa3TIIeHlun17W1bhUymVRjZ2RpmKXe2FHjdgBWoj1kJ0bU7ahrWKaxdIB5NXwJpQKaptKlpG\nhk1om5qaN4Htli0WQ9avtyG6NmzIq73w3mJIu3bhv8EOHex3mJIS6z0qQnq6ndL/+GN4VF+1ynbO\nOdu5Fi2s53ezZtbComlT60rSuLE9Nmxo9V6VejTycuKBTeSd0P5E3onuKqzMN8DGF26JlfmmOakZ\ndrXZMPBYB0iQVsrbt1vQDKVVq6yGJfRYfNVs5Q2MvYG/eu9Py/n/FgDv/T2BdfyVV3patLBL6ZYt\n7YqvTRuoV6+EJ7Q+J2XnpKzAY/6UmS/ty5cyctLenMc9gbQ7J6UB6TlpJzYc1a6cv7fnpJ1ACvYD\nD/7YmxFeEFrmpCYk/Mgy3lvKzraqmPyPWVlWDZOZGf53Zqadie7bZ4Es9Lh3b3jas8cKV+gxLc1S\nero1Kti5My/t2GFz62Vk2DG+QQM75odSkyYWE5o3t/jQokUlv6gKXg6vW2dnA+vXW9q0yc4WQmnr\nVvvwqlWzD69uXasHC6Xate0MoVYtSzVr2g2m0GP16uGpWjULsqHHqlWtd3coJSeH/52cbK048j86\nl/hfThYWOEMnxMET5Q2En0RvwY4xdbCuVPVy/q6dk+pgx5gUoBY2/2lNbBi8UKoGVM95rIa1tA2m\nKvlScgEpKfCYhJ2gR/k1eG8/rdDE0KtXh08a/euvsGhR5Q2MFwCneu+H5vx/GdDTe39tYB1/kCvB\nvkX7kvwfryvg70gegynfMp//+aR8j2UskiFmC1s39H80j5Gk7Oy8R7DjVlJSwce1/Me+/MfH/MfP\n/MfX0HE3dAwOHZdTUuxYHTx2161rwTAlJfGPpTHhvZ1xbN1qATV41rFrlz0XOjMJna2Ezljyn9Hk\nP+PJf0aU/6ypoDOr0A8N8oJkMFgWlyD6x5Dg/8X9mMr6x+aTwNeB7Drg64KvDb4W+BTIrg2kgK+Z\nk1LA50RCXx18jZz/q9qjrwZUAV818JiU83wgKvokwqKiD0XEZPIOcGBRPnRF4vOS8+H/hyUKeDTO\nNyo2MCbquCMRha9Lho3L/bv3cf3o06Of/VNYQAp+F8HAk//vGKjog2405bKw8h3NY1GpsOOTVALO\n5Z15xIvCzsiKO3sLvTaax+B7FvR3YfmrSGX+fqFqteLel/3jYehv3H5xsrCYOHXuDKbOnZm3/PHi\n3zpRrxh7AeMCVam3AtnBBjilnqhYREQqnUi6ayTI7db9zAPaO+faOeeqYYONvR3jPImISCWQkFWp\n3vtM59w12PgRycBTwRapIiIiJZWQVamRUFWqiIjkV5mrUkVERMqFAqOIiEiAAmMcufHGG+nRowd9\n+vQhLS0t1tk54D300EP07t2bTp06sTaS2VlFAlSe40uoPAM451oWta7uMcaRwYMHM378eNq0aRO2\nfOnSpYwePZq2bdvinGPz5s3cd999NI1whs9Zs2bx5JNPUrNmTXbv3k16ejqjR4/m6KOPLnD99PR0\nevXqxTfffFPg83PmzGHChAns3r2bNWvW0KNHD+644w5atGgR9fu+//77DBs2jC5dulCzZk2qV69O\nUmBOmR49evCnP/2pwHzcf//9ZGZmcsstt4Qt79ixI2PHjqVfv37UqlWLefPmMWHCBP75z3/SsWPH\nQj+nwrY3ePBgxo0bR9u2bQt9rUh+5VWeIy1/K1euZPz48dSsWZPk5GTS0tKYMGECzZo1K9F6+RVU\nXqIpz5HuR7SfV3HHL2edoNt5738udOe895Uy2a4llkGDBvlVq1aFLdu2bZtv2bKlnzx5cu6yu+++\n2x955JE+IyOj2G0uWLDAn3XWWX7v3r25y4YPH+7r1q3rFy1atN/6c+bM8ccee6xPSkoqcHvz58/3\n/fv399u3b/fee79r1y7ft29f37Rp07C8R/q+999/v3fO+aSkJJ+UlJT7t3POO+f8Bx98UGA+Vq1a\n5VNSUvz48eP3ey702lCqVq2anzRpUpGfU1HbK+h7ESlOeZTnSMvfypUrfaNGjfwbb7yRu+yFF17w\nXbp08ZmZmVGvl19h5SXS8hzpfkT7eRV3/PLeh4YBaOuLih9FPZnIqbIExtGjR/tmzZr5rKys3GWp\nqam+atWq/rHHHit2m9dff713zvmXX345d9k777zjnXN+xIgRucsWL17szzzzTD9o0CDfq1evQn9Y\nZ5xxhl+xYkXYsoULF3rnnL/44oujft/hw4f7NWvW7FcIp0+f7q+99tpC92vo0KHeOVdgIGvbtq2/\n+uqr/R/+8Ad/8803+yVLlhS6nUi2p8AoJVEe5TnS8nfuuef6Ro0aha2Xnp7ua9So4Z955pmo18uv\nsPISaXmOdD8i/bwiPX55H1lg1D3GOPfKK6/Qs2fPsOqIBg0a0KlTJ1555ZViX9+tWzfq1atHo0Z5\nk7ft2rULgFqBYbg6derEu+++y9NPP03Hjh1DJxf7+eKLLzjxxBPZtGlT7rJjjjmGevXq8emnn0b9\nvsnJybRs2ZLkwPx+u3bt4s477+Tee+8tMA+vv/46J510UqH7fPDBB/P444/z2muvcc899xRZfRrJ\n9kTKSmnLcyTlLyMjgylTpnDYYYeFvbZmzZq0bduWV199Nar18iuqvERaniM9jkT6eUV6/IqUAmMc\n27lzJ8uXL9/vHgXAQQcdxPz584vdxsCBA9m6dWvYD3nBggVUqVKFSy65JOo8HXLIIWzcuJH0fLM9\nV69end2B+V4ifd9HHnlkv/cYNWoUd9xxBzVq1NjvuV27dvH+++8zYMCAqPNekLLenkhhyqI8R1L+\nUlNTycrKKrD81K1blzlz5kS1XlBx5SXS8hzJfpTF51VSJQ6MzrljnHM3O+dedM7NdM4tds4tcc7N\nylk20jlXcOuOCnLNNddw9tln8/LLL4ctv+CCC5gwwYZV3bhxI+3atcv9P578/LPdG65bt+5+z9Wq\nVYsdO3awb9++qLb5008/8dxzzzFp0iSOOuqoqPM0a9Ysfv7557CGKOvWrWPjxo306NGj1O87ffp0\nvPccd9xxBT5/zz33MHr06CLzuHfvXv72t79xww03cNNNN3H++eezbNmyEm9PYm/JkiUqz0RW/po0\naUJKSgp79uzZ7/Xr1q1j8+bNZGdnR7xeULTlpbDyHMl+lMfxL1JRDQmXM0HwFcDN2Mx+X2HTZH6P\nzeqVhM0I2BA4Bfirc+4X4B/AM76017fR5ZOHH36YRx55hLvvvjv3DGf79u28+eabnHvuuYBd+u/d\nu5dp06Zx8803l+j9hgwZwoIFC6J6zUMPPUTfvn2LXGfHjh0AVKu2/1TcoerIbdu20aRJk2Lfb8qU\nKcyePZu33nqL66+/niFDhkSV35CUlBRS8s2i+/DDD5OUlMRdd91V6ve97rrreO211wp8btGiRdSu\nXZuDDz64yG1s2rSJwYMH07KltciePHkyxx9/PF9//XVYS7tItyexlZWVxYMPPsikSZMO+PIcSflL\nTk5mwIABvP12+PDR69evZ926dTjnSE1NpXHjxhGvByUrL4WV50j2oyyPf1Er6gakD2/M0hGYDTwN\ndAOSInhNFaAP8Ao28HeHSN+vNAk4m5zGN6eeeqq/6KKLcm+8vvvuu945F3ZT/MUXX/QDBw4s9GZt\nRcl/s37WrFmFNggZMGCAd875X3/9Nar3yMzM9CeffLLv1auX37x5c4HrXHHFFT6nu0uxli1b5mvX\nru3HjBlT6vf95JNP/BFHHFHgc1lZWf6KK67w+/bty11W2GdT0GtTUlLCGv1Esz01vomtt99+27/3\n3nvee5Xn/Aorf5s2bfIdOnTwTzzxhPfe+3379vnbb7/dd+vWzTvnfGpqalTrlaT8FVWeI9mPkn5e\nxR2/KKvGNznTPP0DuNB7P9h7v8B7n13c67z3md77Gd77C4H/Ax51zhVcR1a2FgKsXr2aTz75hCuu\nuCL3iWnTptGmTZuwS/h27doVWQ0YK0WdCaWlpeGco06dOlFtMzk5mbFjxzJ79myGDRtWqvzt3buX\nSy+9lKuvvpo77rij1O87adKk3A64+T355JMMHjyYKlWiH/c+KSmJxo0b89Zbb5XJ9qRide3alf79\n+6s851NU+WvcuDGzZ89m/fr1jBw5kvHjxzN06FCcc9SsWZMGDRpEtV5JyktR5TmS/SiP41+kit3L\nnGrJU4Dfe+8zS/pG3vulzrmzgdHA3JJuJ8L3WuOcY/LkydSvX59TTz0197lp06ZxwgknhK0/d+5c\nTjvttPLMUok0a9YM5xxbt27d77m0tDTq168f1sKzIEuWLCEjIyOsU32XLl0AeOONN0hPT9+vSiMS\n3nsGDx7MGWecwbhx40r9vvv27ePDDz/khhtu2G9b69ev54cffigwoPp8tfOh6qxp06aFLc/KyiI1\nNTXq7UnstWrVCkDlOaC48gdQv359xo4dG7Zsw4YN9OnTJ6r1SlJeiirPke5HWX5e0So2MHrvs4A7\ny+LNvPd7gLHFrlhGPvroI0466aTcpsNZWVksXLiQgQMHhq333XffMWLECADmzZvH888/z7HHHsv0\n6dMZNWoUhx56aJHvc9VVV7Fw4cKo8vbAAw9w/PHHF7lOrVq16Nq1K7/88st+zy1fvpxjjjmmyNfv\n2LGDrl27kpmZyY8//ph7byD0eXjvycqKYCbtAowZM4bOnTtz22235S57/vnnGThwYIned86cOaSn\np+fezwj69NNPWbJkCeedd17ustBN9//+978sWrSIK664gt///vcsXLiQDh067LeNzZs35+Yjku1d\nfvnlYc9L7JWkPM+ePZvp06ezY8cOZsyYwe23317svcB4Lc9BRZW/wmzatIm1a9cyZsyYIredf72S\nlJeiynOk+1GWn1fUiqpnLS4BhwA3AA1Ks53ySIA/4ogj/C233JJbt7xmzRrvnPPvv/9+7rIlS5b4\nCRMmeO+937Nnj2/btq1fv3699977uXPn+uOOO67QuuqyVtC9rLFjx/qWLVuGLVu+fLl3zu03msuP\nP/7od+/enfv/7t27fdWqVX2HDh381q1bc5fPnTvXO+d8r169CszHFVdcUWQH2f/85z9+7Nix+y2/\n6qqrSvy+zzzzjHfO+ccff7zQ9w1atWpVgfcfLrzwQr9ly5awZQsWLPDOOf+3v/0t6u15r3uM8SLa\n8pyWlha2/iuvvOJTUlL82rVrKyS/ZV2eQ4orf957P3HiRN+0adOwfb3vvvt869atw0ajinS9/Ioq\nL95HVp4j2Y9oPq+Q4o5fVEAH//HA/cCtoQXOuYOdcxV1L7FI3bt3D2umP3nyZBo2bMjq1asBO+Oc\nOHEi1157LWDVMrVr185tudi9e3cWL17MqlWrKjzvIcOHDyctLY0XXnghd9kjjzxC586dGTp0aO6y\nadOm0bFjR37/+9/nLqtRowajRo1ixIgR1K9fP3f5Qw89RJ06dXjssccKfM89e/bgvQ/rlxjy2Wef\nMWrUKFauXMlll12Wmy6++GJ27txZ4vfduHEjUHALtIJkZGSEPYbcdNNNXH311bl5994zceJE+vTp\nw0033RT19iR+RFuely9fzoQJE1i5ciUA/fv3Z/fu3cyYMaPiM5+jNOUZIit/YFWNtWrVyr26Xrhw\nIffffz//+9//wspYpOvlV1x5Ka48R7ofkX5eQUUdvyJWVNQsLgH3YK1OW+VbngTcBpxYmu2XMm9+\n8+bN/tJLL/WDBw/21113nX/rrbf8jBkz/EknneSvv/56f+211/qlS5fmnkk8+eSTvm/fvmFnF61b\nt/bvvvtuoWcfZamwK5NFixb5M888099www3+yiuv9Oeff75fs2ZN2DpLly71zZo183/+85/3e/0z\nzzzjL7nkEj9w4EB/yimn+IsvvtgvW7YsbJ2NGzf6U0891R955JG54xs2adLEn3jiiWHjFDZo0CBs\nDMTg3/nP/iJ535A333zTN2jQwM+fP7/Iz2jHjh3+xBNP9C1atPBJSUm+Ro0avnfv3v7NN9/MXefL\nL7/0F154ob/88sv973//ez927NhCz34j2Z6uGONDtOXZe+9nzpyZ+/f333/vnXMFjhFcHsqjPEda\n/nbv3u1HjRrlBw8e7C+44AJ/yimn+FmzZu2Xl0jXC4mkvHhffHmO5jgSyecV6fHL+8iuGEsbfG4B\nehXx/EOl2X4p81bgF1KUu+++25922mlhy9q3b+9feumlqLdVEjoAxyd9L5XDZZdd5v/yl79U2Pvp\ndxOfIgmMpW2r/gQwyzmXCnwCfA7M8NbIBqB6KbdfoerXrx8Kqrl27dpV7A1kEYlvTz31FC1btuSe\ne+6JdVYkAZT2HuO/gZnAGmAwFhy3OedmO+emAfsPwhfHOnXqxPr163P/z8zMJDU1tULn4cuZK0xE\nysiUKVNISkrinnvuYe/evblDjVUElefEVNrAuMp7P8h7f6H3vhVwONZKdS1QHyh4htk4dfzxx7Np\n06bcm/lffPEFnTt3pn379hWWh/xXrCJScl988QUbNmzgjDPOYP369bz33nv8+uuvFfb+Ks+JqbRV\nqcnBf7z3S4GlwGPOuU5Yn8VbCnphPKpSpQrPP/88d911F3369OHzzz/fb8Di8tSwYUPOO+88qlSp\nwueff15unVclMhMnTuTFF19kx44dVK1aNdbZkSitXLmSs88+O3e6M7AruO3bt1fI+6s8x5dQec5R\n5OjjrjRnNM657lgV6s3e+7TA8iOBzkB3733hbeTLUc5YebF4axERiVPOObz3RdZxl6oq1Xs/H3gA\nuN/Oq2oAAAtuSURBVNc51y7w1OXAS4BarYiISEIp1RVjoRt1riZwBjDVe7+lzN8gsjzoilFERMJE\ncsVYLoExHigwiohIfmVSleqcS3bODSqjDDnn3Iiy2JaIiEh5KDYweptdY4dz7kHnXIn7JTrnGmAT\nFi8u6TZERETKW0TdNbz3rzvntgBfOOcmA8977/efJKsAzrkWwHXA6cAQ7325zsUoIiJSGhH3Y/Te\nf+GcOwWbaHi5c+4nYAbwLbAtJyUBDYFGwBFAX6A58E9sTNX0ss2+iIhI2Yq48Y2zsY3qeu+3O+dq\nAWcCpwDHAO2AetjgrNuAn4CvgA+AL733e8s+68XmV41vREQkTJm2SnXOPQYMAU733n9aBvkrVwqM\nIiKSX1l38N+BddrfEXiDR0uYNxERkbgUTWDsjE0rtTmw7JCyzY6IiEhsRVOVehjwIXAwsAmYiwXG\n0cAi7/2qcspjiagqVURE8ivzkW+cc9WAU4F+QA/gN4GntwOLctLXoeS9z44u22VDgVFERPIr9yHh\nnHPvY3MudsVapx4DdAFa56yyDfgUeBV4NWewgAqhwCgiIvlVRGB8xns/qIDlDbFg2S0nHQdkAH/w\n3i8p8RtGlzcFRhERCRNXg4g7544GRnvvL66g91NgFBGRMJEExohHvillRj4C9gLrKuL9RERESqpU\nExVH4VNsdJwZFfR+IiIiJaL5GEVE5IBR1iPfiIiIVHoKjCIiIgEKjCIiIgEKjCIiIgEJFxidcxc6\n5753zmU557rFOj8iIlK5JFxgBL4FzgOmxTojIiJS+VRIB/+yFBpSzrkiW9uKiIiUSCJeMYqIiJSb\nuLxidM59DDQv4KnR3vt3It3OuHHjcv/u168f/fr1K3XeREQkcUydOpWpU6dG9ZqEHfnGOfc5MNJ7\nv6CQ5zXyjYiIhDkQRr7RjUYRESlTCRcYnXPnOedWA72AKTmTJYuIiJSJhK1KLY6qUkVEJL8DoSpV\nRESkTCkwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiI\nBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgw\nioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiI\nBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgw\nioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCgwioiIBCRkYHTO\n3eecW+yc+9o597pzrl6s8yQiIpVDQgZG4COgs/e+C/AjcGuM8yMiIpVEQgZG7/3H3vvsnH9nA61i\nmR8REak8EjIw5vNH4L1YZ0JERCqHKrHOQGGccx8DzQt4arT3/p2cdW4DMrz3Lxa0jXHjxuX+3a9f\nP/r161f2GRURkbg1depUpk6dGtVrnPe+fHJTzpxzg4ChwEne+z0FPO8Tdd9ERKR8OOfw3rui1onb\nK8aiOOdOA0YBJxQUFEVEREoqIa8YnXPLgGpAas6imd77P+VbR1eMIiISJpIrxoQMjJFQYBQRkfwi\nCYyVoVWqiIhImVFgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBER\nCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBg\nFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBER\nCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBg\nFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBERCVBgFBER\nCUi4wOicu9M597VzbpFz7lPnXOtY50lERCoP572PdR6i4pyr473fmfP3tUAX7/2VBaznE23fRESk\nfDnn8N67otZJuCvGUFDMURvYHKu8iIhI5VMl1hkoCefcXcBAIB3oFePsiIhIJRKXgdE59zHQvICn\nRnvv3/He3wbc5py7BZgIDC5oO+PGjcv9u1+/fvTr16/sMysiInFr6tSpTJ06NarXJNw9xiDnXBvg\nPe/9kQU8p3uMIiISplLeY3TOtQ/8ey6wMFZ5ERGRyicuq1KL8XfnXEcgC1gBDI9xfkREpBJJ6KrU\noqgqVURE8quUVakiIiLlSYFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQk\nQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFR\nREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQk\nQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFR\nREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQkQIFRREQk\nQIFRREQkIGEDo3NupHMu2znXMNZ5kcJNnTo11lkQ9D3EA30HiSMhA6NzrjVwCvBzrPMiRdPBID7o\ne4g9fQeJIyEDI/AAcFOsMyEiIpVPwgVG59y5wBrv/TexzouIiFQ+znsf6zzsxzn3MdC8gKduA0YD\n/b33O5xzPwHHeu+3FLCN+NsxERGJOe+9K+r5uAyMhXHOHQl8CqTnLGoFrAV6eO83xixjIiJSaSRU\nYMwv54qxu/c+NdZ5kf9v7/5BrizjMI5/LwtBXAK3RHgTLYwmg3AWBGkJB5GGCCFocVOQAhEck3AR\nR3VTNzFEnAQFcSghpJIUEV8bgqhG//8c3re4ETmI+nqf5znfz3bfz3LBGS7uP+d5JGkcBnfG+Izh\ntrokaSoNesUoSdLrNvQVo6Zcku1JfknyOMnG3nlmTZKtSa4nuZFkb+88syjJ0SR/JrnWO4tejMWo\npXYN2AZc7B1k1iR5CzgMbAU+BD5PsqFvqpl0jIXfQANhMWpJVdX1qvq9d44Z9Qlws6puV9VD4CTw\nWedMM6eqLgH/9M6hF2cxSuO1GphvxncX5yRN8HbvABq+CS9k+LaqfnjTefQ/b9ZJL8Fi1Curqi29\nM+i5/gDWNOM1LKwaJU3gVqrepImvYdJr9yOwPslckuXADuBM50zS1LMYtaSSbEsyD2wCziY51zvT\nrKiqR8Au4DzwK3Cqqn7rm2r2JDkBXAbeTzKfZGfvTJrMP/hLktRwxShJUsNilCSpYTFKktSwGCVJ\naliMkiQ1LEZJkhoWoyRJDYtRkqSGxShJUsNilCSpYTFKktSwGCVJavg9RmmEknwMfAE8BuaAr4Cv\ngXeA1cD+qrrVLaA0xSxGaWSSrAV2VtWuxfFx4ArwJQu7RJeAq8ChXhmlaeZWqjQ+u4G9zXgl8HdV\nXQHuAN8DxzvkkgbB7zFKI5NkrqpuN+O7wLGq2tcvlTQcrhilkXmmFD8A3gUudAskDYzFKI3bZuAB\ncPm/iSTv9YsjTT+LURqRJCuSfJfko8WpLcDPVXVv8fkyYE+3gNIAeCtVGpdPWSi+n5I8AtYB/zbP\nv8GLN9JEXr6RRiTJKuAg8BfwBDgAHAHuAfeB01XleaM0gcUoSVLDM0ZJkhoWoyRJDYtRkqSGxShJ\nUsNilCSpYTFKktSwGCVJaliMkiQ1LEZJkhpPASLswZlif8dXAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f, ax = plt.subplots(figsize=(7, 7))\n", "\n", "loc = [[-1.25, -0.4],\n", " [0., 1.25],\n", " [1.25, -0.4]]\n", "text = ['$\\phi_1(x) = e^{-(x + 1)^2}$',\n", " '$\\phi_2(x) = e^{-2x^2}$', \n", " '$\\phi_3(x) = e^{-2(x-1)^2}$']\n", "mlai.plot_basis(mlai.radial, x_min=-2, x_max=2, fig=f, ax=ax, loc=loc, text=text) \n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Radial Basis Functions\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pods.notebook.display_plots('radial_basis{num_basis}.svg', directory='./diagrams', num_basis=(1,3))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Functions Derived from Radial Basis\n", "\n", "$$f(x) = {\\color{\\redColor}w_1 e^{-2(x+1)^2}} + {\\color{\\magentaColor}w_2e^{-2x^2}} + {\\color{\\blueColor}w_3 e^{-2(x-1)^2}}$$" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pods.notebook.display_plots('radial_function{func_num}.svg', directory='./diagrams', func_num=(1,3))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Basis Function Models\n", "\n", "- The *prediction function* is now defined as\n", " $$f(\\mathbf{x}_i) = \\sum_{j=1}^m w_j \\phi_{i, j}$$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Vector Notation\n", "\n", "- Write in vector notation,\n", " $$f(\\mathbf{x}_i) = \\mathbf{w}^\\top \\boldsymbol{\\phi}_i$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Log Likelihood for Basis Function Model\n", "\n", "- The likelihood of a single data point is\n", " $$p\\left(y_i|x_i\\right)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp\n", " \\left(-\\frac{\\left(y_i-\\mathbf{w}^{\\top}\\boldsymbol{\\phi}_i\\right)^{2}}{2\\sigma^2}\\right).$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Log Likelihood for Basis Function Model\n", "\n", "- Leading to a log likelihood for the data set of\n", " $$L(\\mathbf{w},\\sigma^2)= -\\frac{n}{2}\\log \\sigma^2\n", " -\\frac{n}{2}\\log 2\\pi -\\frac{\\sum\n", " _{i=1}^{n}\\left(y_i-\\mathbf{w}^{\\top}\\boldsymbol{\\phi}_i\\right)^{2}}{2\\sigma^2}.$$\n", "\n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Objective Function\n", "\n", "- And a corresponding *objective function* of the form\n", " $$E(\\mathbf{w},\\sigma^2)= \\frac{n}{2}\\log\n", " \\sigma^2 + \\frac{\\sum\n", " _{i=1}^{n}\\left(y_i-\\mathbf{w}^{\\top}\\boldsymbol{\\phi}_i\\right)^{2}}{2\\sigma^2}.$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Polynomial Fits to Olympic Data" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\ntPEdXIkAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "basis = mlai.polynomial\n", "\n", "data = pods.datasets.olympic_marathon_men()\n", "f, ax = plt.subplots(1, 2, figsize=(10,5))\n", "x = data['X']\n", "y = data['Y']\n", "\n", "data_limits = [1892, 2020]\n", "max_basis = 7\n", "\n", "ll = np.array([np.nan]*(max_basis))\n", "sum_squares = np.array([np.nan]*(max_basis))\n", "\n", "for num_basis in range(1,max_basis+1):\n", " \n", " model= mlai.LM(x, y, basis, num_basis=num_basis, data_limits=data_limits)\n", " model.fit()\n", " sum_squares[num_basis-1] = model.objective() \n", " ll[num_basis-1] = model.log_likelihood()\n", " mlai.plot_marathon_fit(model=model, data_limits=data_limits, \n", " objective=sum_squares, objective_ylim=[0,8],\n", " fig=f, ax=ax)\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pods.notebook.display_plots('olympic_LM_polynomial{num_basis}.svg', directory='./diagrams', num_basis=(1,7))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Polynomial Fits to Olymics Data" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "import pods\n", "import numpy as np\n", "import scipy as sp\n", "import mlai\n", "from matplotlib import pyplot as plt\n", "max_basis = 7\n", "basis = mlai.polynomial\n", "\n", "data = pods.datasets.olympic_marathon_men()\n", "x = data['X']\n", "y = data['Y']\n", "\n", "data_limits = [1892, 2020]\n", "num_data = x.shape[0]\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "f, ax = plt.subplots(1, 2, figsize=(10,5))\n", "\n", "ll = np.array([np.nan]*(max_basis))\n", "sum_squares = np.array([np.nan]*(max_basis))\n", "\n", "for num_basis in range(1,max_basis+1):\n", " \n", " model= mlai.LM(x, y, basis, num_basis=num_basis, data_limits=data_limits)\n", " model.fit()\n", " sum_squares[num_basis-1] = model.objective()/num_data \n", " ll[num_basis-1] = model.log_likelihood()\n", " mlai.plot_marathon_fit(model=model, data_limits=data_limits, \n", " objective=np.sqrt(sum_squares), objective_ylim=[0, 0.3],\n", " title='Root Mean Square Training Error',\n", " fig=f, ax=ax)\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pods.notebook.display_plots('olympic_LM_polynomial{num_basis}.svg', \n", " directory='./diagrams', num_basis=(1, max_basis))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Overfitting\n", "- Increase number of basis functions we obtain a better 'fit' to the data.\n", "- How will the model perform on previously unseen data?\n", "- Let's consider predicting the future." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\nJYQG18/YEAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f, ax = plt.subplots(1, 2, figsize=(10,5))\n", "\n", "val_start = 20;\n", "x = data['X'][:val_start, :]\n", "x_val = data['X'][val_start:, :]\n", "y = data['Y'][:val_start, :]\n", "y_val = data['Y'][val_start:, :]\n", "num_val_data = x_val.shape[0]\n", " \n", "\n", "ll = np.array([np.nan]*(max_basis))\n", "ss = np.array([np.nan]*(max_basis))\n", "ss_val = np.array([np.nan]*(max_basis))\n", "for num_basis in range(1,max_basis+1):\n", " \n", " model= mlai.LM(x, y, basis, num_basis=num_basis, data_limits=data_limits)\n", " model.fit()\n", " ss[num_basis-1] = model.objective()\n", " f_val, _ = model.predict(x_val)\n", " ss_val[num_basis-1] = ((y_val-f_val)**2).mean() \n", " ll[num_basis-1] = model.log_likelihood()\n", " mlai.plot_marathon_fit(model=model, data_limits=data_limits, \n", " objective=np.sqrt(ss_val), objective_ylim=[0,0.6],\n", " fig=f, ax=ax, prefix='olympic_val',\n", " title=\"Hold Out Validation\",\n", " x_val=x_val, y_val=y_val)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pods.notebook.display_plots('olympic_val_LM_polynomial{num_basis}.svg', \n", " directory='./diagrams', num_basis=(1, max_basis))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Extrapolation\n", "\n", "- Here we are training beyond where the model has learnt.\n", "- This is known as *extrapolation*.\n", "- Extrapolation is predicting into the future here, but could be:\n", " - Predicting back to the unseen past (pre 1892)\n", " - Spatial prediction (e.g. Cholera rates outside Manchester given rates inside Manchester)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Alan Turing\n", "- He was a formidable Marathon runner. \n", "- In 1946 he ran a time 2 hours 46 minutes.\n", "- What is the probability he would have won an Olympics if one had been held in 1946? \n", "![Alan Turing running in 1946](./diagrams/turing_run.jpg)\n", "
*Alan Turing, in 1946 he was only 11 minutes slower than the winner of the 1948 games. Would he have won a hypothetical games held in 1946? Source: [Alan Turing Internet Scrapbook](http://www.turing.org.uk/scrapbook/run.html).*
\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Interpolation\n", "- Predicting the wining time for 1946 Olympics is *interpolation*.\n", "- This is because we have times from 1936 and 1948.\n", "- If we want a model for *interpolation* how can we test it?\n", "- One trick is to sample the validation set from throughout the data set." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f, ax = plt.subplots(1, 2, figsize=(10,5))\n", "\n", "val_start = 20;\n", "\n", "perm = np.random.permutation(data['X'].shape[0])\n", "x = data['X'][perm[:val_start], :]\n", "x_val = data['X'][perm[val_start:], :]\n", "y = data['Y'][perm[:val_start], :]\n", "y_val = data['Y'][perm[val_start:], :]\n", "num_val_data = x_val.shape[0]\n", " \n", " \n", "\n", "\n", "ll = np.array([np.nan]*(max_basis))\n", "ss = np.array([np.nan]*(max_basis))\n", "ss_val = np.array([np.nan]*(max_basis))\n", "for num_basis in range(1,max_basis+1):\n", " \n", " model= mlai.LM(x, y, basis, num_basis=num_basis, data_limits=data_limits)\n", " model.fit()\n", " ss[num_basis-1] = model.objective()\n", " f_val, _ = model.predict(x_val)\n", " ss_val[num_basis-1] = ((y_val-f_val)**2).mean() \n", " ll[num_basis-1] = model.log_likelihood()\n", " mlai.plot_marathon_fit(model=model, data_limits=data_limits, \n", " objective=np.sqrt(ss_val), objective_ylim=[0.1,0.6],\n", " fig=f, ax=ax, prefix='olympic_val_inter',\n", " title=\"Hold Out Validation\",\n", " x_val=x_val, y_val=y_val)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pods.notebook.display_plots('olympic_val_inter_LM_polynomial{num_basis}.svg', \n", " directory='./diagrams', num_basis=(1, max_basis))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Choice of Validation Set\n", "\n", "- The choice of validation set should reflect how you will use the model in practice.\n", "- For extrapolation into the future we tried validating with data from the future.\n", "- For interpolation we chose validation set from data.\n", "- For different validation sets we could get different results." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Leave One Out Error\n", "- Take training set and remove one point.\n", "- Train on the remaining data.\n", "- Compute the error on the point you removed (which wasn't in the training data).\n", "- Do this for each point in the training set in turn.\n", "- Average the resulting error. \n", "- This is the leave one out error." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "f, ax = plt.subplots(1, 2, figsize=(10,5))\n", "\n", "num_data = data['X'].shape[0]\n", "num_parts = num_data\n", "partitions = []\n", "for part in range(num_parts):\n", " train_ind = list(range(part))\n", " train_ind.extend(range(part+1,num_data))\n", " val_ind = [part]\n", " partitions.append((train_ind, val_ind))\n", "\n", " ll = np.array([np.nan]*(max_basis))\n", " ss = np.array([np.nan]*(max_basis))\n", " ss_val = np.array([np.nan]*(max_basis))\n", " for num_basis in range(1,max_basis+1):\n", " ss_val_temp = 0.\n", " for part, (train_ind, val_ind) in enumerate(partitions):\n", " x = data['X'][train_ind, :]\n", " x_val = data['X'][val_ind, :]\n", " y = data['Y'][train_ind, :]\n", " y_val = data['Y'][val_ind, :]\n", " num_val_data = x_val.shape[0]\n", "\n", " model= mlai.LM(x, y, basis, num_basis=num_basis, data_limits=data_limits)\n", " model.fit()\n", " ss[num_basis-1] = model.objective()\n", " f_val, _ = model.predict(x_val)\n", " ss_val_temp += ((y_val-f_val)**2).mean() \n", " mlai.plot_marathon_fit(model=model, data_limits=data_limits, \n", " objective=np.sqrt(ss_val), objective_ylim=[0.1,0.6],\n", " fig=f, ax=ax, prefix='olympic_loo' + str(part) + '_inter',\n", " x_val=x_val, y_val=y_val)\n", " ss_val[num_basis-1] = ss_val_temp/(num_parts)\n", " ax[1].cla()\n", " mlai.plot_marathon_fit(model=model, data_limits=data_limits, \n", " objective=np.sqrt(ss_val), objective_ylim=[0.1,0.6],\n", " fig=f, ax=ax, prefix='olympic_loo' + str(len(partitions)) + '_inter',\n", " title=\"Leave One Out Validation\",\n", " x_val=x_val, y_val=y_val)\n", " " ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pods.notebook.display_plots('olympic_loo{part}_inter_LM_polynomial{num_basis}.svg', \n", " directory='./diagrams', num_basis=(1, max_basis), part=(0,len(partitions)))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### $k$ Fold Cross Validation\n", "\n", "- Leave one out error can be very time consuming.\n", "- Need to train your algorithm $n$ times.\n", "- An alternative: $k$ fold cross validation." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "f, ax = plt.subplots(1, 2, figsize=(10,5))\n", "\n", "num_data = data['X'].shape[0]\n", "num_parts = 5\n", "partitions = []\n", "ind = list(np.random.permutation(num_data))\n", "start = 0\n", "for part in range(num_parts):\n", " end = round((float(num_data)/num_parts)*(part+1))\n", " train_ind = ind[:start]\n", " train_ind.extend(ind[end:])\n", " val_ind = ind[start:end]\n", " partitions.append((train_ind, val_ind))\n", " start = end\n", "\n", " \n", "max_basis = 7\n", "\n", "ll = np.array([np.nan]*(max_basis))\n", "ss = np.array([np.nan]*(max_basis))\n", "ss_val = np.array([np.nan]*(max_basis))\n", "for num_basis in range(1,max_basis+1):\n", " ss_val_temp = 0.\n", " for part, (train_ind, val_ind) in enumerate(partitions):\n", " x = data['X'][train_ind, :]\n", " x_val = data['X'][val_ind, :]\n", " y = data['Y'][train_ind, :]\n", " y_val = data['Y'][val_ind, :]\n", " num_val_data = x_val.shape[0]\n", "\n", " model= mlai.LM(x, y, basis, num_basis=num_basis, data_limits=data_limits)\n", " model.fit()\n", " ss[num_basis-1] = model.objective()\n", " f_val, _ = model.predict(x_val)\n", " ss_val_temp += ((y_val-f_val)**2).mean() \n", " mlai.plot_marathon_fit(model=model, data_limits=data_limits, \n", " objective=np.sqrt(ss_val), objective_ylim=[0.2,0.6],\n", " fig=f, ax=ax, prefix='olympic_' + str(num_parts) + 'cv' + str(part) + '_inter',\n", " title='5-fold Cross Validation',\n", " x_val=x_val, y_val=y_val)\n", " ss_val[num_basis-1] = ss_val_temp/(num_parts)\n", " ax[1].cla()\n", " mlai.plot_marathon_fit(model=model, data_limits=data_limits, \n", " objective=np.sqrt(ss_val), objective_ylim=[0.2,0.6],\n", " fig=f, ax=ax, prefix='olympic_' + str(num_parts) + 'cv' + str(len(partitions)) + '_inter',\n", " title='5-fold Cross Validation',\n", " x_val=x_val, y_val=y_val)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pods.notebook.display_plots('olympic_5cv{part}_inter_LM_polynomial{num_basis}.svg', \n", " directory='./diagrams', num_basis=(1, max_basis), part=(0,5))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Reading\n", "\n", "- Section 1.3-1.5 of @Rogers:book11.\n", " " ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.4" } }, "nbformat": 4, "nbformat_minor": 0 }