{ "metadata": { "celltoolbar": "Slideshow", "name": "", "signature": "sha256:3a9caec19271c384dc650b7cec891e8e01bbabd71a3d96df36e9400b95bbd9f8" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Penalized Linear Regression in Python" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "## Luis Pedro Coelho" ] }, { "cell_type": "raw", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "
\n", "Homepage: luispedro.org
\n", "Email: luis@luispedro.org
\n", "@luispedrocoelho
\n", "github/luispedro
\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Notes on the presentation\n", "\n", "This presentation is an Ipython Notebook, which you get at [github.com/luispedro/PenalizedRegression](https://github.com/luispedro/PenalizedRegression) or view using the [NBViewer](http://nbviewer.ipython.org/github/luispedro/PenalizedRegression/blob/master/PenalizedRegression.ipynb).\n", "\n", "\n", "## Dependencies\n", "\n", "To run this, you need\n", "\n", "- ipython, version 2\n", "- numpy\n", "- matplotlib (for the plots)\n", "- scikit-learn" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Preliminary imports\n", "\n", "We will import `numpy` using the `np` abbreviation and `matplplotlib.pyplot` using the `plt` abbreviation:\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from IPython.display import display" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "We also need to perform some magic to get plots inline:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Regression\n", "\n", "Regression can be used generically to mean \"any type of learning from data.\"\n", "\n", "More commonly, though, it is used to mean *learn to predict a **numeric** output from variables*. As opposed to **classification** which learns to predict a categorical output.\n", "\n", "### Examples\n", "\n", "- predicting prices\n", "- predicting blood sugar levels\n", "- predicting product ratings (collaborative filtering)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Example: Boston House prices\n", "\n", "The goal is to predict house prices in Boston based on variables such as\n", "\n", "1. number of rooms\n", "2. crime rate in area\n", "3. pupil teacher ratio\n", "4. ..." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Loading data\n", "\n", "The `boston` dataset comes built in with scikit-learn:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.datasets import load_boston\n", "boston = load_boston()" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "You can use `print(boston.DESCR)` to see more information on the dataset." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Split into testing & training\n", "\n", "For all our analyses, it will be important to have split training & testing data." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Scikit-learn makes this easy:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.cross_validation import train_test_split \n", "train_data, test_data, train_target, test_target = \\\n", " train_test_split(boston.data, boston.target, train_size=.8)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- `train_data` is our training data with corresponding target variable `train_target`.\n", "- `test_data` and `test_target` are the equivalent testing variables." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Having a peak at the data\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is always a good idea to peak around, get a feeling for the data.\n", "\n", "Extremely important to look out for anomalies (real data is rarely clean)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(train_data.shape)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(404, 13)\n" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "_=plt.hist(train_target, bins=100)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We can look at specific elements in the input data, such as the number of rooms:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "RoomNr_Index = 5\n", "\n", "fig,ax = plt.subplots()\n", "ax.scatter(train_data[:,RoomNr_Index], train_target)\n", "ax.set_xlabel(\"Number of rooms\")\n", "ax.set_ylabel(\"House price\")\n", "pass" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\naN3a5JFHvFx9dQpJSappfX1p4zRvbnHuuUfmYVwug6lTPdEG9yNHBqqt+PnmG4N77vGwbZud22/3\nMW5ckK5d9exfk/g0tBP4TAgxTEr5H2AMsPpwb3j//fejXrk0Tpcor+fOnUuPHj0a7PPWrXsfm83G\nvHmDoz//5pvan69nz6E8+GByNO4+d24SkyaV8Pnna6p8v9MJ7dt/xPLl7cnKak779mZc73/ZmG5l\nP2/XzmT+/Dz++tfmNG9ucs89Pj7+uOrzPftsUlQK/MorU+jatYCCgqrvR33b39hfa/vj/7qm1HuJ\naCQc9IKUcrAQIhuVKHYB/wNyq6sOSvQS0bIOrC4UFqqkY2amVW2Vz9EmEICrr3azZInaEtu6dZiV\nKwvj2vugJpS9X+vW1eze+/2q5v9wdf833ZTMwoWx7PlbbxUwYEDdw22H40ifnXij7Y8vtSkR1fsE\nGinbttm46SYPe/bYmDmzmNNOa9g69J07bbz0kov8fINLLimpl/LHUKhmm64sC0wzputTGTW5X4EA\nbNhg58sv7XTrFqZv38p3IlfG1q02Lrggld27bdx8s59rr/VHK4U0msaGdgIJTjgMEyem8NZbKvzg\ndFqsW1dAly6JE4P+/nsD0zRo08asMNBaltLrf+ABN9nZYa6/voQOHSq/th07bPztb25+/tngrrv8\nFWbfeXkGfr/F7bensHJl9fertIS1VJRuxYpC+vev+Ww+L8+guFj1760ugazRxJvaOAG9x7EeqWut\nsWlSrtImFCLacrGhKGv73r0Ga9fa+fRT+yHib5Wzbp2doUMzGDgwnVdfdVawfft2Natet87JM8+4\neeKJyktZAwGYOjWZxYuTWLPGxXnnpfLdd7H7smWLjcsv97B6tbPC/dqzZ1+F833/vQ3TVMeFwwbf\nf1+7x79lS4tOnRrGASR6nbq2P3HQTqAR4nTCtGk+WrQwcTgsHn64uEZyCvVBfj7cfnsy48enc9pp\nabz5prPa4w8cgFtuSaGw0CAYNLjqqhR++KH8Y+bzQUlJbNCuSowtEKDcew8eNAgEYu+bM8dNixbw\n7LNufve7YPR+zZ5djMv1fYXzde5skpys8hoejxV32Q6NpjGgZbDqkSNJLPXtG+bddwsIBAxatTJx\nuQ7/nqNJqe15eTaWLVMzdcsymDvXzZgxwajk86HY7ZCSYgIqgO92g91ePqHcoYPJlVf6mTfPTWqq\n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\n+bXw/625vYVQEmuKAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Using IPython Notebook for exploration" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.html.widgets import interact\n", "from scipy import stats" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use the same plotting code, just generalized to take an `index` argument and wrapped with `interact`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "@interact(index=(0, train_data.shape[1]))\n", "def plot_scatter(index):\n", " fig,ax = plt.subplots()\n", " x, y = train_data[:,index], train_target\n", " ax.scatter(x, y)\n", " ax.set_xlabel(boston.feature_names[index])\n", " ax.set_ylabel(\"House price\")\n", " print(\"Correlation: {0[0]:.1} (p-value: {0[1]:.1})\".format(stats.pearsonr(x, y)))\n", " return fig" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Correlation: -0.4 (p-value: 6e-16)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "The `interact` features are the killer app for Ipython notebook." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Can we build a model, then?\n", "\n", "We have now poked around the data, can we build a predictive model?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Ordinary Least Squares Linear Regression\n", "\n", "Let $x$ be our inputs and $y$ our outputs.\n", "\n", "### Simple 1-D version\n", "\n", "Our *generative* model of the data is simply that given an input $x$, we obtain $y$ by\n", "\n", "1. multiply by $\\beta$,\n", "2. adding a constant ($c$)\n", "3. adding some noise ($\\epsilon$)\n", "\n", "$$y = \\beta x + c + \\epsilon$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### Multidimensional linear regression\n", "\n", "Instead of a single input variable, we can have multiple inputs, $x_1$, $x_2$, ... $x_n$:\n", "\n", "$$y = \\sum_j \\beta_j x_j + c + \\epsilon$$\n", "\n", "We can write the same using vector notation as:\n", "\n", "$$y = {\\boldsymbol \\beta}^T {\\bf x} + c + \\epsilon$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Least squares regression\n", "\n", "- In real life, we have observations and want to fit a model.\n", "- When we have more observations than datapoints, there is very little chance that a model will fit perfectly.\n", "- Therefore, we **minimise the fitting error**.\n", "\n", "$$y_i = {\\boldsymbol \\beta}^T {\\bf x}_i + c + \\epsilon_i$$\n", "\n", "We can measure the error as the sum of squared errors:\n", "\n", "$$ E = \\sum_i \\epsilon^2_i $$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "The criterion is thus\n", "\n", "$$ \\beta^{*} = \\arg\\min_{\\boldsymbol \\beta} \\sum_i ({\\boldsymbol \\beta}^T {\\bf x}_i + c - y_i)^2 $$\n", "\n", "which we can write in short form as:\n", "\n", "$$ \\beta^{*} = \\arg\\min_{\\boldsymbol \\beta} \\sum_i \\epsilon^2_i $$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### A few notes on the square function\n", "\n", "\n", "Pretty obvious but it'll come in handy later too:\n", "\n", "- larger error are penalized much more heavily than small error\n", "- doubling the error quadruples the penalty" ] }, { "cell_type": "code", "collapsed": false, "input": [ "E = np.linspace(0, 2, 100)\n", "squared_error_figure, ax = plt.subplots(figsize=(6,6))\n", "ax.plot(E, E**2)\n", "ax.plot([0,1], [1,1], 'k-')\n", "ax.plot([1,1], [0,1], 'k-')\n", "ax.set_xlim(0,4.)\n", "ax.set_xlabel('$E$')\n", "ax.set_ylabel('$E^2$')\n", "pass" ], "language": "python", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAGBCAYAAACXe53tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmUVOWd//E3NDs0+767gIKIiihGW3CfJIpjzDxJjOOM\njon4S2aOo5kxjhmTX/JLJpnkxIyTBWdQx2QSNT6JSVwSFxQJ5YLKIgiyg0CzNXTTO73e3x9dJGXT\nW1Xfus99qj6vczzHW7eo+vhI9bfr+70LiIiIiIiIiIiIiIiIiIiIiIiIiIiI5IUert7YGDMaWAVc\nbq3dkvL4QuA+oBF4xFr7kKOIIiKS1NPFmxpjegP/BVS38fj9wJXAAuC2ZFERERGHnBQL4HvAYmB/\nq8dnANusteXW2gYgAcyPOpyIiHxY5MXCGHMzUGKtfTH5UGorbDBQnrJdCQyJKJqIiLSjl4P3vAUI\njDFXAGcDPzXGXGutPURLoShMeW4hUNbeC73wwgtBQUFBVsOKiOSg5VdcccUl6fyByIuFtXbB8X83\nxiwDFiULBcAmYJoxZhgt84z5tLSs2lRQUMCcOXOyGVckbff/cTenjuzPtTNHuY4i0qbVq1cv6PxZ\nH+ZqZpGqhzHmBmPM55NziruAF4DXgYetta3nGt5JJBKuI3SJDzl9yPju/koa92/p/Ikx4MN6gnLG\ngYs21J9Yay9N/uvmlMeeBZ51k0ikew5V1VPT0MyoPoHrKCKhcnaeRRiWLl0aqA0lcbJ0aylv7C7n\nvstPch1FpF2rV6/miiuuSOvnfxzaUCI54939lZw1bpDrGCKhU7GIgC99TB9yxj3ju/urmD1uUOxz\nHqec4fIlZyZULERCcrCynmMNzUwZ2s91FJHQaWYhEpIXtxzh7T0VfEXzCok5zSxEHFq7v4qzxhd2\n/kQRD6lYRMCXPqYPOeOaMQgC3t335+F2XHO2ppzh8iVnJlQsREKwv7KepiBg4pC+rqOIZIVmFiIh\n+MOmw6zdX8W/XDrVdRSRTmlmIeLI2v1VnK3zKySHqVhEwJc+pg8545jx+Lzi7JThdhxztkU5w+VL\nzkyoWIh0057yOnoX9GRsYR/XUUSyRjMLkW56emMJW0pq+KcFU1xHEekSzSxEHFi7r+pDLSiRXKRi\nEQFf+pg+5IxbxuYgYN3+Ss4a/+Hhdtxytkc5w+VLzkyoWIh0w87SWgr79mLUQM0rJLdpZiHSDb9e\nf4i95ce4o2iy6ygiXaaZhUjE1u6r5BzNKyQPqFhEwJc+pg8545SxsTlg/YGW+1e0FqecHVHOcPmS\nMxMqFiIZ2nq4hrGFfRjav7frKCJZp5mFSIYeW3OAirpGbr9gousoImnRzEIkQmv3V+r8CskbKhYR\n8KWP6UPOuGSsa2xmc0kNZ45t++KBccnZGeUMly85M6FiIZKBjQermTqsHwP7FLiOIhIJzSxEMvDI\n2/vo0QNumTvedRSRtGlmIRKRNTq/QvKMikUEfOlj+pAzDhmr6hrZffQYM0cPbPc5ccjZFcoZLl9y\nZkLFQiRN6w5UcfqogfTppY+P5A/NLETS9OPX9zJiYC8+c9ZY11FEMqKZhUgENK+QfKRiEQFf+pg+\n5HSd8Uh1A2W1DZw6YkCHz3Ods6uUM1y+5MyEioVIGtbsq+SscYUU9PS6gyuSNq//xmtmIVH77vIP\nmDFqAAtnjnIdRSRjmlmIZFEQBKwtrmTOBM0rJP/0ivoNjTEFwBJgOhAAt1trN6TsvxO4FShJPrTI\nWrsl6pxhSiQSFBUVuY7RKR9yusy4p7yOnj1h/OC+nT7Xh7UE5QybLzkzEXmxAK4Bmq21RcaYBcC3\ngOtS9s8BbrLWrnGQTaRda4pbjoLq0cPr7q1IRiJvQ1lrfwcsSm5OBcpaPeVc4F5jzApjzD1RZssW\nX37T8CGny4yr93W9BeXDWoJyhs2XnJlwMrOw1jYZYx4F/hN4rNXux2kpJpcBRcaYqyOOJ3KCpuaA\ndfurdP8KyVvOBtzW2ptpmVssMcb0T9n1gLW21FrbADwHnNPR66Qe15xIJGK5ffyxuORpb3vx4sWx\nytPW9uLFi528/+aSGgb1qGfDqpVden7r//eu1iuu65nuttYz/O10Rd58NcbcBEy01n7bGDMYWAvM\ntNYeM8YMAdYBM4Ea4EngYWvt8229li+HziYSfgy9fMjpKuPPV++npqGZ2+ZN6NLzfVhLUM6w+ZIz\nk0NnXRSL/sCjwFigN/BtYBAwyFq7xBhzA3AnUAcstdZ+vb3X8qVYiP/uenYLnz17LHMnDnYdRaTb\nMikWkR8NZa2tBT7dwf7HaZlbiMRCTX0T24/UMqudW6iK5AOdlBeB7vQJo+RDThcZ1x2o4rRRA+iX\nxiXJfVhLUM6w+ZIzEyoWIp1YrbO2RXRtKJHO3Go38uVLpzJ9ZMdXmhXxha4NJRKykup6yo81cuqI\n/p0/WSSHqVhEwJc+pg85o864OnmJj55pXuLDh7UE5QybLzkzoWIh0oFVeyuYo8NlRTSzEGlPcxDw\n6V+8x4+vO43Rg/q4jiMSGs0sREK0/Ugtg/sWqFCIoGIRCV/6mD7kjDLjquIKzs2wBeXDWoJyhs2X\nnJlQsRBpx6q9lZyr8ytEAM0sRNpU29DEZx57jyc+O4v+vQtcxxEJlWYWIiFZf6CK6SMHqFCIJKlY\nRMCXPqYPOaPK+M7e7l3iw4e1BOUMmy85M6FiIdKGd/ZmPtwWyUWaWYi0crCynr//3WZ+eeOstM/c\nFvGBZhYiIXinuII5E9K/xIdILlOxiIAvfUwfckaRcdXeCuZO7N4hsz6sJShn2HzJmQkVC5EUTc0B\na/dVMWeC5hUiqbz+nq2ZhYRtw8EqfvjaHh68fobrKCJZo5mFSDe9s7eSuToKSuQEKhYR8KWP6UPO\nbGd8Z29FKMXCh7UE5QybLzkzoWIhklR+rJE9R49xxpiBrqOIxI5mFiJJy7aXsWx7Kd+46hTXUUSy\nSjMLkW4IqwUlkotULCLgSx/Th5zZyhgEAauKwysWPqwlKGfYfMmZCRULEWBHaS39exUwfnBf11FE\nYkkzCxHgiXcPcKS6kS9eONF1FJGs08xCJENv76nkvEm6K55Ie1QsIuBLH9OHnNnIWF3fxLYjNcwe\nF16x8GEtQTnD5kvOTKhYSN5bU1zJzNED6ddLHweR9mhmIXnvByt2M2VYP66fNdp1FJFIaGYhkqYg\nCHh7TwXn6fwKkQ6pWETAlz6mDznDzrir7Bi9CnowcUi4h8z6sJagnGHzJWcmVCwkr729p4LzJw2m\nh+6KJ9KhyD8hxpgCYAkwHQiA2621G1L2LwTuAxqBR6y1D7X3WppZSHf907NbMbNHM2/yENdRRCLj\ny8ziGqDZWlsE/CvwreM7jDG9gfuBK4EFwG3GGE0dJSuq65vYeqSGs8br/AqRzkReLKy1vwMWJTen\nAmUpu2cA26y15dbaBiABzI82Yfh86WP6kDPMjNk8ZNaHtQTlDJsvOTPRy8WbWmubjDGPAp8A/ipl\n12CgPGW7ElB/QLJi5Z5yzp+ko6BEusLZgNtaezMtc4slxpj+yYfLgdSeQCEf/uZxgtRKnkgkYrld\nVFQUqzztbR9/LC552tpunTXT1wuCgNe2H6bg0Nas5C0qKorFekW1ntne1npm5/OeDhcD7puAidba\nbxtjBgNrgZnW2mPJmcUGYB5QDbwOLLTW7m/rtTTglkxtO1zDt17Zxf98aqbrKCKR82XA/SvgbGPM\ncuB54A7gE8aYzyfnFHcBL9BSKB5ur1D4pDvVPEo+5Awr41vJQ2azxYe1BOUMmy85MxH5zMJaWwt8\nuoP9zwLPRpdI8tFbeyr46zljXccQ8YbXZyKpDSWZqDjWyN/8cgNP3ngmfXTxQMlDvrShRJx6e28F\nZ40rVKEQSYM+LRHwpY/pQ84wMr61p4LzJ2f3kFkf1hKUM2y+5MyEioXklabmgHf2Zne4LZKLNLOQ\nvLLhQBU/fH0vD15/uusoIs5oZiHSiZV7KpinbxUiaVOxiIAvfUwfcnY348rd5ZFcYdaHtQTlDJsv\nOTOhYiF542BlPaW1jZw2aoDrKCLe0cxC8sbTG0vYVFLD3QumuI4i4pRmFiIdeGtPBRdoXiGSERWL\nCPjSx/QhZ6YZaxuaeO9AFedOjKZY+LCWoJxh8yVnJlQsJC+s3VfFtJEDGNinwHUUES9pZiF54Qcr\ndjN5aD8+eabu0iuimYVIG5qDgJW7y7kggkNmRXKVikUEfOlj+pAzk4zbDtcysE8BE4b0zUKitvmw\nlqCcYfMlZyZULCTnvRnRiXgiuUwzC8l5X/jNJm6/YCKzxw1yHUUkFjSzEGmlpLqeg1X1nDFmoOso\nIl5TsYiAL31MH3Kmm/HND8o5f9JgCnpG+yXah7UE5QybLzkzoWIhOe2N3eV8RPMKkW7TzEJyVk19\nE599/D1+ccMsnYwnkkIzC5EUq4srOX30QBUKkRCoWETAlz6mDznTyfiGwxPxfFhLUM6w+ZIzEyoW\nkpOamgPe2lOheYVISDSzkJy0/kAVP3ljL4s/oXtti7SmmYVI0hsf6CgokTCpWETAlz6mDzm7kjEI\nAl7/oJwLp7grFj6sJShn2HzJmQkVC8k5e47W0dDUzCkj+ruOIpIzNLOQnPPEuwc4XN3A3184yXUU\nkVjSzEIEeH2X2xaUSC5SsYiAL31MH3J2lvFIdQPFFXXMHlcYUaK2+bCWoJxh8yVnJlQsJKe8sbuc\nuRMH0yviCweK5DqvP1GaWUhr9z6/jY9OH8H8k4e5jiISW5pZSF6rrm9i48Fq5k4c7DqKSM7pFfUb\nGmN6A48AU4C+wDettc+k7L8TuBUoST60yFq7JeqcYUokEhQVFbmO0SkfcnaU8a09FcwaO4gBMbhw\noA9rCcoZNl9yZiLyYgHcCJRYa28yxgwD1gLPpOyfA9xkrV3jIJt47PVdR7lIR0GJZIWLNpQFvpry\n/o2t9p8L3GuMWWGMuSfSZFniy28aPuRsL2N9UzPvFFc6u8psaz6sJShn2HzJmYnIi4W1ttpaW2WM\nKaSlcHyl1VMeBxYBlwFFxpiro84o/lm7r5KThvVj2IDerqOI5CQnA25jzCTgFeBn1tonWu1+wFpb\naq1tAJ4DzunotVKPa04kErHcPv5YXPK0t7148eJY5Wlre/HixW3uf21XOeOCUuf5Wv+/jkue9rbb\nW8+4bWs9w99OV+SHzhpjxgCvAl+w1i5rtW8IsA6YCdQATwIPW2ufb+u1fDl0NpHwY+jlQ862MjY1\nB9zw2Hs8cO10xg3u6yjZh/mwlqCcYfMlZyaHzrooFg8ABtic8vASYKC1dokx5gbgTqAOWGqt/Xp7\nr+VLsZDsWre/isVv6t4VIl3lRbEIk4qFACx+Yy+F/Xrx1+eMdR1FxAs6KS+mutMnjJIPOVtnDIKA\n1z44StHUeBwFdZwPawnKGTZfcmZCxUK8tvVILb179mTK0H6uo4jkNLWhxGuPvL2PIAi49fwJrqOI\neENtKMkrQRCQ2HWUopOGuo4ikvNULCLgSx/Th5ypGT84eoy6xmamjxzgMFHbfFhLUM6w+ZIzEyoW\n4q3EzqMUTR1Kjx5ed1NFvOD1p0wzi/x2+1Ob+OKFEzlz7CDXUUS8opmF5I3i8jrKahuYOXqg6ygi\neUHFIgK+9DF9yPmnawXtOspFU4dSENPbp/qwlqCcYfMlZyZULMRLK3Ye5WIdBSUSmXj+WtZFmlnk\npwOVdfzD77bwxGdnxfabhUicaWYheSGx8ygXThmiQiESIRWLCPjSx/QhZyKRYMWu+LegfFhLUM6w\n+ZIzEyoW4pXyhh4Ul9dx9vhC11FE8orX3+M1s8g/v1p/iA/KavnS/Cmuo4h4SzMLyXkrdpYx/6Rh\nrmOI5B0Viwj40seMe85DVfXsOlzNORPi34KK+1oep5zh8iVnJlQsxBsrdh7ltMJGeukoKJHIef2p\n08wiv9zx9Gb++pxxnDdpsOsoIl7TzEJy1sHKeorL67xoQYnkIhWLCPjSx4xzzhU7y7ho6lDefP01\n11G6JM5rmUo5w+VLzkyoWIgXlu88yvyYn4gnkss0s5DY07WgRMKlmYXkpD/uOErRVF0LSsQlFYsI\n+NLHjGvOV3eUseDklhPx4pqxNeUMl3K6p2Ihsba3/BilNQ26daqIY15/r9fMIvf9fM0Bymsb+eKF\nE11HEckZmllIzlm+o4xLTtZRUCKuqVhEwJc+Ztxy7iytpaa+iRljBv7psbhlbI9yhks53VOxkNh6\ndXsZl5w8jJ49vO6WiuQErz+FmlnkriAIuPnJjfzr5ScxbeQA13FEcopmFpIzNpXUUNCzB6eO6O86\nioigYhEJX/qYccp5vAXVo1ULKk4ZO6Kc4VJO93p19gRjzBzgn4CdwLeACcCnrLXfynI2yVNNzQHL\nd5TxvaunuY4iIkmdFgtgIbAImATcCfwncAkthSNtxpjewCPAFKAv8E1r7TMp+xcC9wGNwCPW2ocy\neZ84KSoqch2hS+KSc93+KoYP6M2kof1O2BeXjJ1RznApp3tdaUOtA2ZYazcCj9NSKLpz4PuNQIm1\ndj7wUeBHx3ckC8n9wJXAAuA2Y8zobryXeOiV7aVcdorusy0SJ10pFu8BFyX/fSkwEbAAxpjxxphr\nkz/ku8oCX015/8aUfTOAbdbacmttA5AA5qfx2rHkSx8zDjnrG5t5/YNyFrRTLOKQsSuUM1zK6V6n\nxcJau9Va+4Pk5k+stYuttd9N7tsHvAZ8zRjz3a68obW22lpbZYwppKVwfCVl92CgPGW7EhjS0eul\n/s9JJBLa7sb2+vXrnef56UsrOXl4f0YN7NPm/vXr18dmvXJhW+uZv+uZrrSOszXGfM5a+5Ax5kbg\nTGAZ8LK1ttEY8wdr7ce6+DqTgKeAH1trH015/EzgO9baq5Pb9wMJa+1Tbb2OzrPIPd9YuoPzJg7m\nY6ePdB1FJGdFcZ5FAGCt/QUwAtgKFCT3/aErL2CMGQO8CNydWiiSNgHTjDHDjDF9aGlBvZFmRvFU\nVV0jq4sruVh3xBOJnXSLxeeMMTcaY0YCq6y1O6y1dcl91V18jXtpaS191RizLPnPZ40xn0/OKe4C\nXgBeBx621u5PM2PsdOerX5Rc51yxq5xzxhcyqG/7B+m5zthVyhku5XSvK4fOpiql5VDa7wENxpjp\ntMwsXuvqC1hr7wDu6GD/s8CzaeaSHPDKtlKunTnKdQwRaUO6xeKr1tpVAMaYM4BLgRuAB4F+wMPh\nxssNvhx77TJnSXU9O0prmTdpcIfP01qGSznD5UvOTKRVLI4XiuS/bwA2AD8yxvQAvh1yNskjy7aV\nUTR1KH166Qo0InEUyifTWhsAj4XxWrnIlz6my5wvbyvl8lM7PxFPaxku5QyXLzkzEdqvcdbadWG9\nluSX7UdqqG5oYpbusy0SW7qfhTj33yuL6d2zB7ecN951FJG8oPtZiHeamgNe2V7K5acOdx1FRDqg\nYhEBX/qYLnKu2VfJqIF9mDzsxCvMtkVrGS7lDJcvOTOhYiFOvbS1lCv0rUIk9jSzEGeq65u48fH3\n+Omnz2BIv3RP+RGRTGlmIV5J7DrKWeMKVShEPKBiEQFf+phR53xxSylXTkuvBaW1DJdyhsuXnJlQ\nsRAn9lfWsfvoMc6f3PHlPUQkHjSzECf+d/V+Ko418sULJ7mOIpJ3NLMQLwRBwNKtpVw5bYTrKCLS\nRSoWEfCljxlVzvUHqulT0JNpI/un/We1luFSznD5kjMTKhYSuRe3HOGq6cPp0cPrLqhIXvH606qZ\nhX9qG5q48fENPPRXMxg+oLfrOCJ5STMLib0/7jzKrLEDVShEPKNiEQFf+phR5HxhyxGump75YFtr\nGS7lDJcvOTOhYiGRKS4/RnF5HRdMHuI6ioikSTMLicwjb++jsTngtnkTXEcRyWuaWUhsNTUHvLS1\nlKum6wqzIj5SsYiAL33MbOZcVVzBqIG9mTos/XMrUmktw6Wc4fIlZyZULCQSz28+wl+cpjO2RXyl\nmYVkXVlNA7f+6n1+/pkzGNCnwHUckbynmYXE0kvbSrlo6hAVChGPqVhEwJc+ZjZyBkHA85uP8NGQ\nWlD5vJbZoJzh8iVnJlQsJKvWH6imZ48ezBw90HUUEekGzSwkq/791V2cOmIAnzxztOsoIpKkmYXE\nSsWxRt7cXZH2rVNFJH5ULCLgSx8z7Jwvbyvl/EmDGdyvV2ivma9rmS3KGS5fcmZCxUKyIggCfr/5\nCB/TuRUiOUEzC8mKDQeq+P6K3Tz8VzN0kyORmMlkZhFefyANxph5wHestZe2evxO4FagJPnQImvt\nlqjzSfc9t+kwHz9thAqFSI6IvA1ljLkbWAL0bWP3HOAma+2lyX9yolD40scMK2fFsUbe2F3Bld24\nb0V78m0ts005w+VLzky4mFlsA66n7RbYucC9xpgVxph7oo0lYVmaHGwPCXGwLSJuRV4srLVPAY3t\n7H4cWARcBhQZY66OLFgWFRUVuY7QJWHkDIKAZ98/zDUzRoaQ6ET5tJZRUM5w+ZIzE3E7GuoBa22p\ntbYBeA44p7M/kPq1L5FIaNvx9s9ffIOCnj2YNWZgLPJoW9vabns7XU6mj8aYqcDj1tqPpDw2BFgH\nzARqgCeBh621z7f3Or4cDZVIJLz4jSOMnN98eSezxw3i2pmjQkr1Yfm0llFQznD5ktO3M7gDAGPM\nDcaYz1try4F7gGXAH4H3OioUEj9HahpYXVzJ5afqjG2RXOP1cY2+fLPIFz9fc4CSqnruvHiy6ygi\n0gHfvllIDmlqDvj9+4e5dmZ2Btsi4paKRQS6M1SKUndyvvFBOWMK+3DKiAEhJjpRPqxllJQzXL7k\nzISKhYTimfdLWJilw2VFxD3NLKTbdpcd459/v5X//cwZ9CnQ7x8icaeZhTjx9PslfPz0kSoUIjlM\nn+4I+NLHzCRndX0Ty7aXcc3p0bSgcnktXVDOcPmSMxMqFtItL20tZc74QkYM7O06iohkkWYWkrHm\nIOBW+z5fmj+ZWWMHuY4jIl2kmYVE6p29FfTv3ZMzxgx0HUVEskzFIgK+9DHTzfnbDSVcd8aoSG9w\nlKtr6YpyhsuXnJlQsZCM7Dl6jG2Ha7nk5GGuo4hIBDSzkIz88LU9FPYt4Oa5411HEZE0aWYhkais\na+TVHWUszNJlyEUkflQsIuBLH7OrOf+w6QjzJg1mxIDoD5fNtbV0TTnD5UvOTKhYSFoamwN+t7GE\n62aNdh1FRCKkmYWkZdn2Mp59/zDfv2aa6ygikiHNLCSrgiDg1+sP8ckzNasQyTcqFhHwpY/ZWc73\nDlZTVd/EBZOHRJToRLmylnGhnOHyJWcmVCyky369/hDXzxpFzwhPwhORePD6U6+ZRXT2lh/jzmda\n7lnRr5d+xxDxmWYWkjW/Xn+Ia2aMVKEQyVP65EfAlz5mezmP1jawfMdRro3BbVN9X8u4Uc5w+ZIz\nEyoW0qmnNx7m4pOGMszBSXgiEg+aWUiHahua+JtfbuQHC6cxcUg/13FEJASaWUjont98hDPHDlSh\nEMlzKhYR8KWP2TpnY3PAU++V8KnZYxwlOpGvaxlXyhkuX3JmQsVC2vXq9jLGFvbh9NG6E55IvtPM\nQtrUHAQs+vUmFl0wgbkTB7uOIyIh0sxCQrNydwW9C3pw7oRC11FEJAZULCLgSx/zeM4gCHh87QE+\nc9aYSO+v3RW+rWXcKWe4fMmZCRULOcHafVVU1Tdx0dShrqOISEzE69fGNGlmkR3//NxWrpw2nKum\nj3AdRUSyQDML6baNB6s5UFnPZacOdx1FRGJExSICvvQxE4kEv1hzgE+fNYZePeP5pdOntfSBcobL\nl5yZ6OXqjY0x84DvWGsvbfX4QuA+oBF4xFr7kIt8+ai4tic7y2r52pUnuY4iIjHj5JuFMeZuYAnQ\nt9XjvYH7gSuBBcBtxpjR0ScMV1FRkesIXbIxGMunZo+hT0F8v3D6spbKGS7ldM/VT4VtwPWcOGCf\nAWyz1pZbaxuABDA/6nD5aPuRGjYfruZjp2moLSInclIsrLVP0dJmam0wUJ6yXQm4u+FzSHzoY/58\n9QHOG1RN35jf3MiHtQTlDJtyuudsZtGOciD1lOFCoKyjPzB8uI7aCdO8p5/+01fp43/x47S9fv36\nWOXxfVvrmb/rmS5nh7wYY6YCj1trP5LyWG9gAzAPqAZeBxZaa/e39Ro6zyIcX39pB7PHDeLW+adT\nWlrqOo6IZJmP51kEAMaYG4wxn0/OKe4CXqClUDzcXqGQcGw9XMOmkho+frr7W6aKSHzF82D6LvLl\nm0UikYjtURL3vbCduRMH85dnjGL48OGx/2YR57VMpZzhUs5w+fjNQhx6/1A1O0pr+djpOgJKRDqm\nbxZ57Mu/38bFJw3lmhktLSgfvlmISPfpm4V02dp9lRysquOjOq9CRLpAxSICcTv2OggCHn1nPzfN\nGRfba0C1J25r2R7lDJdyuqdikYdW7qmguqGJS04e5jqKiHjCr18rW9HMIn1NzQH/5zebuGXueD4y\n5cMnx2tmIZIfNLOQTi3bXsaA3gVcMHmw6ygi4hEViwjEpY9Z39TMT1ft5+/OGx+7e2t3VVzWsjPK\nGS7ldE/FIo88s/EwU4f1Y/a4Qa6jiIhn/Pz1Mkkzi66rqmvkFvs+37v6VKYO69/mczSzEMkPmllI\nu3757kEumDy43UIhItIRFYsIuO5jHqys5/ebj/C3545zmiMMrteyq5QzXMrpnopFHvifd/bxlzNH\nMXJgH9dRRMRTmlnkuM0l1fzfl3byiJlB/94FHT5XMwuR/KCZhXxIEAQ8+GYxf3vuuE4LhYhIR1Qs\nIuCqj/nHnUepa2zmymm5c+tZX3rCyhku5XRPxSJH1TU289Bb+1g0bwIFnl0sUETix+ufIppZtO/n\nq/ezs+wY911+Upf/jGYWIvlBMwsB4FBVPb/dUMJt509wHUVEcoSKRQSi7mMuWVnMtTNHMaYw9w6V\n9aUnrJzhUk73VCxyzJriSjaV1PCps8a4jiIiOUQzixzS0NTM//nNZm6eO46iqUPT/vOaWYjkB80s\n8txvN5S6idVoAAAMVUlEQVQwelBvLmp1UyMRke5SsYhAFH3MQ1X1/PLdg3zxI5O8vVdFV/jSE1bO\ncCmneyoWOeLBN/fyl2eMYsKQvq6jiEgO8vpXUM0sWry5u5wH3yzmv68/nT69Mq//mlmI5AfNLPJQ\nbUMTP3p9D3dcNKlbhUJEpCP66RKBbPYxf7ZqP7PHDuKcCYVZe4848aUnrJzhUk73VCw8trmkmle2\nl3HbPJ2pLSLZpZmFpxqbA/7+t5sws8dw+anhXFVWMwuR/KCZRR755bsHGTGgD5edMsx1FBHJAyoW\nEQi7j7mztJbfbijhjqLcPqeiLb70hJUzXMrpnoqFZ5qaA+5fsZub545j9KDcu1CgiMST17+W5uPM\n4vG1B1i7r4rvfOyU0L9VaGYhkh8ymVn0ylaY9hhjegI/AWYDdcDnrLXbU/bfCdwKlCQfWmSt3RJ1\nzjjacaSWp94r4cfXnZZ37ScRcctFG+o6oI+19kLgHuD7rfbPAW6y1l6a/Mf7QhFGH7O+qZnvLv+A\nW88bn9ftJ196wsoZLuV0z0WxuAh4HsBauxKY22r/ucC9xpgVxph7og4XVz9btZ+xhX34i+nhHCYr\nIpIOF8ViMFCRst2UbE0d9ziwCLgMKDLGXB1luGwoKirq1p9ft7+KpdtK+cc8PPqpte6uZVSUM1zK\n6Z6LYlEBpF6boqe1tjll+wFrbam1tgF4DjinoxdL/dqXSCRybvul5Qm+u3wXd108mfdWrczq+x1/\nLE7//drWtrazs52uyH9NNcZcDyy01t5ijLkAuM9ae3Vy3xBgHTATqAGeBB621j7f1mv5cjRUIpHI\n6DeOIAj45iu7GN6/N1+8cGIWkn2YD0dDZbqWUVPOcClnuLw4Ggr4DXClMea15PYtxpgbgEHW2iXJ\nOcUyWo6UWtpeocgHf9h8hL1Hj/HlBVNcRxGRPOd1A9yXbxaZ2Flay92/38b3r57G5GH9InlPH75Z\niEj36dpQOaK2oYl/e2UXnzt/fGSFQkSkIyoWEUhnqBQEAT98bQ/TRw3gqmk6TLa17gzooqSc4VJO\n91QsYuYPm4+w7Ugt/3CRDpMVkfjw+qdRrs0sNh2q5r4Xd3D/NdOYNDT69pNmFiL5QTMLj5XVNvD/\nXt7JPxZNclIoREQ6omIRgc76mI3NAd98eRdXTBvORVOHRpTKT770hJUzXMrpnopFDCx+Yy8D+/Tk\nb88d5zqKiEibNLNw7OmNJTy98TAPXDudgX0KnGbRzEIkP/hyBrckvbO3gsfWHOAHC90XChGRjqgN\nFYG2+pg7S2v591c/4CuXn8S4wX0dpPKTLz1h5QyXcrqnYuHA4ep67ntxO1/4yATOHDvIdRwRkU5p\nZhGxqrpG7np2K5edOozPnDXWdZwP0cxCJD/oPIuYq2ts5msv7eTs8YV8evYY13FERLpMxSICiUQi\neS7FTkYM6MXtF0zQpTwy5EtPWDnDpZzuqVhEoDmA7y3/gAC4+5Kp9FShEBHPqFhkWXMQ8HYwidKa\nBu67/CR69VSh6A4f7kIGyhk25XRPxSKLmoOABxJ7KC6v4xtXnUzfXlpuEfGTfnplSVNzwH+s2MOe\n8mNcPfgQ/XvrpLsw+NITVs5wKad7KhZZ0Ngc8N3lH7C/so5v/cUp9FWdEBHPed1Aj+N5FnWNzfzb\nK7toCgLuu/wkr1pPOs9CJD/oPAvHquoa+Zfnt9Gvd0++doVfhUJEpCP6aRaSg5X13PnMVqaNHMCX\nL5lC74I/L20u9zGj5staKme4lNM9XXU2BJsOVfP1pTv51OzRfGLWaNdxRERCp5lFN728rZQH3yzm\nrosn85EpQ5xm6S7NLETyg+5nEaHG5oAlbxXz5gflfPfjp3LS8P6uI4mIZI1mFhkoqa7n7ue2svdo\nHT+67rROC0Uu9zGj5staKme4lNM9fbNI0xsflPMfid1cd8YoPn3WGF3nSUTygtc/6aKcWdTUN/Ff\nK4tZs6+SLy+Ywhk5eNMizSxE8oPOs8iS1cUVLHpqE81BwOJPnJ6ThUJEpCMqFh0oq2ng31/dxQ9W\n7OEfLprIl+ZPYWCf9K/dkct9zKj5spbKGS7ldE8zizbUNzXz9IYSnnj3IFdNH8F/f/J0XQhQRPKa\nZhYpmpoDlu8o49FV+5kytB+fnzeByUP7hfb6caeZhUh+0HkWGWpsDnh1exlPvHuQQX0K+NLFkzlr\nfKHrWCIisZHXM4uKY408+e5Bbn5yAy9sOcLtF0zgBwunhV4ocrmPGTVf1lI5w6Wc7kX+zcIY0xP4\nCTAbqAM+Z63dnrJ/IXAf0Ag8Yq19KMz3b2hqZnVxJUu3lfLO3kounDKEr15+MtNHDQjzbUREckrk\nMwtjzPXANdbavzPGzAP+xVp7XXJfb2AjMBeoAV5LPvdQW6/V1ZlF+bFG1hRXsnJPOW/tqWDy0H5c\nesowLj1lGIV91Yk7TjMLkfzgy8ziIuB5AGvtSmPM3JR9M4Bt1tpyAGNMApgP/KorLxwEAWW1jRRX\n1LGztJbtR2rZeKiaw9UNzBozkPMnDeaWueMZPahPyP9JIiK5zUWxGAxUpGw3GWN6Wmubk/vKU/ZV\nAh1eyvWfn9tKbUMzFXWNlNY00K9XTyYM6cvUYf05eXh/rp4xkpOH96dXT3cHfiUSCYqKipy9fy7x\nZS2VM1zK6Z6LYlEBpE6QjxcKaCkUqfsKgbIOXmv5DeMqF3z4oWZaxh3VUAdVu2Hd7m5n7pYBAwaw\nevVqtyG6YOnSpbHP6ctaKme4lDN0y9P9Ay6KxWvAQsAaYy4A1qXs2wRMM8YMA6ppaUF9r70XuuKK\nKy7JYk4REUlyMeDuwZ+PhgK4BTgXGGStXWKMuQb4Ki2H9T5srV0cdUYREREREREREREREYlc7C8k\n6PqM7xBz3gncCpQkH1pkrd0SedCWLPOA71hrL231eCzWMiVPeznjtJa9gUeAKUBf4JvW2mdS9sdi\nTbuQ0/maGmMKgCXAdCAAbrfWbkjZH5e17Cyn87VMZYwZDawCLk/Nke56+nBtqOuAPtbaC4F7gO8f\n35H8ANwPXAksAG5LLowL7eZMmgPcZK29NPmPqx9ud9PyF71vq8fjtJbt5kyKxVom3QiUWGvnAx8F\nfnR8R8zWtN2cSXFY02uAZmttEfCvwLeO74jZWrabMykOawn8ad3+i5ajS1s/ntZ6+lAsPnTGNy2X\nAjnuT2d8W2sbgONnfLvQUU5oOeLrXmPMCmPMPVGHS7ENuJ4Tv1XGaS2h/ZwQn7UEsLQcvQctn6fG\nlH1xWtOOckIM1tRa+ztgUXJzKh8+xyo2a9lJTojBWqb4HrAY2N/q8bTX04di0eYZ3yn70jrjO4s6\nygnwOC1/wS4DiowxV0cZ7jhr7VOc+IMC4rWWHeWEmKwlgLW22lpbZYwppOUH8ldSdsdmTTvJCTFZ\nU2ttkzHmUeA/gcdSdsVmLaHDnBCTtTTG3EzLt8kXkw+l/uKV9nr6UCzCPOM7mzrKCfCAtbY0WcWf\nA86JNF3n4rSWnYnVWhpjJgGvAD+z1j6RsitWa9pBTojRmlprb6ZlHrDEGNM/+XCs1hLazQnxWctb\ngCuNMcuAs4GfprSa0l5PHy65GtoZ31nWbk5jzBBgnTFmJi1X070MeNhJyvbFaS3bFbe1NMaMAV4E\nvmCtXdZqd2zWtKOccVlTY8xNwERr7beBWlqu3RMkd8dpLdvNGZe1BLDW/ulSSMmCsSjlCt5pr6cP\nxeI3tFTH15LbtxhjbuDPZ3zfBbzAn8/4bt2bi0vOe4BltBwptdRa+7yjnMcd/8sdx7VM1VbOOK3l\nvbR8ff+qMeb4TGAJMDBma9pZzjis6a+AR40xy4HewB3AJ4wxcfv72VnOOKxlW3p48HkXERERERER\nERERERERERERERERERERERERERHxX+zvZyHiE2PMucA3gOHAQ7R8xoYCX6DlfgI7HcYTyZgPl/sQ\n8Ya1dpUxphJ4zFr7i+OPG2OqgH3ukol0jw9XnRXxzXxarrmDMebG5GOvWGvr3EUS6R61oURCZIw5\nA/g98G1aboJzxFrr+gY4It2mbxYi4boU+LW19kFaCsYyAGPMeKepRLpJxUIkXJfQcm8TgGLgZWPM\nCE68za6IV1QsREJijOkBLCBZLKy1ddbaRuBO4A8us4l0l2YWIiEwxswGPgt8EfjH5MMDgY8B6621\nd7vKJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIR+v8Oy3lC/VU38gAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 62 }, { "cell_type": "code", "collapsed": false, "input": [ "display(squared_error_figure)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Historical note\n", "\n", "This method of least squares was first developed to estimate the motion of cellular bodies by Gauss who was officially an astronomer. He also proved that least squares is optimal under *Gaussian* noise.\n", "\n", "![Gauss](http://upload.wikimedia.org/wikipedia/commons/thumb/9/9b/Carl_Friedrich_Gauss.jpg/330px-Carl_Friedrich_Gauss.jpg)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Today we would call this the *criterion of least squares* as method seems to imply that we have an algorithm to solve the problem." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Using OLS on the boston data with scikit-learn" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn import linear_model\n", "linreg = linear_model.LinearRegression()" ], "language": "python", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1D version" ] }, { "cell_type": "code", "collapsed": false, "input": [ "_=linreg.fit(train_data[:,RoomNr_Index:RoomNr_Index+1], train_target)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "fig,ax = plt.subplots()\n", "ax.scatter(train_data[:,RoomNr_Index], train_target)\n", "ax.plot([4, 9], linreg.predict([[4],[9]]), 'k-')\n", "ax.set_xlabel(\"Number of rooms\")\n", "_=ax.set_ylabel(\"House price\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEQCAYAAAC0v9O7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4FGXXh++ZbekBYgApoUkJUpQmHVQEBV4QdbCgAiqK\noCB+UpWmiCCCiEpRUVRUcJQqKkUFDBCkk9BBkE5IIG2zfef7Y0JCJEh6suG5rytXMrs7M7+dzMyZ\n55zznAMCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAJBoSEVx04VRRkN/A8wAR8B\nm4AFgBeIBQarqqoVhzaBQCC42ZGLeoeKonQEWqmq2hroCNQEpgNjVFVtj26seha1LoFAIBDoFLlh\nADoDMYqiLANWAiuApqqqbkx//xegUzHoEggEAgFgLIZ9hgNVge7oo4WVZHVppQKhxaBLIBAIBBSP\nYYgHDqiq6gYOK4piBypf9X4wkFgMugQCgUBA8RiGKGAoMENRlEpAAPCboigdVFXdADwA/Ha9lVev\nXq0ZDIaiUSoQCASlhw2dOnXqmJMPFldW0lTgbvQYx2jgBPApYAb2AwOul5W0bt06rUmTJkWkVCAQ\nCEoHO3fupFOnTjm65xfHiAFVVUdm83LHotZRHERFRdG2bdvilpFnhP7ixZf1+7J28H39uaE4spIE\nAoFAUIIpFldSfhCuJIFAIMg9uXEliRGDQCAQCLIgDEMRExUVVdwS8oXQX7z4sn5f1g6+rz83CMMg\nEAgEgiyIGINAIBDcBIgYg0AgEAjyjDAMRYyv+ymF/uLFl/X7snbwff25QRgGgUAgEGRBxBgEAoHg\nJkDEGAQCgUCQZ4RhKGJ83U8p9Bcvvqzfl7WD7+vPDcIwCAQCgSALIsYgEAgENwEixiAQCASCPCMM\nQxHj635Kob948WX9vqwdfF9/bhCGQSAQCARZEDEGgUAguAkQMQaBQCAQ5BlhGIoYX/dTCv3Fiy/r\n92Xt4Pv6c4MwDAKBQCDIgogxCAQCwU2AiDEIBAKBIM8Iw1DE+LqfUugvXnxZvy9rB9/XnxuMxbFT\nRVF2Aknpi38D7wALAC8QCwxWVVUrDm0CgUBws1PkMQZFUfyAzaqqNrnqtRXAe6qqblQUZQ6wWlXV\nZdmtL2IMAoFAkHtyE2MojhFDYyBAUZTV6ft/HWiiqurG9Pd/AToD2RoGQdHidMKuXQZOnZK57TYv\nd9zhKW5J/8mBAzL79hkID9do2tRNUFBxKyoYUlNh+3YjFy9KNGzooV49b4Ft+59/ZHbuNODnB82a\nuQkPz/lg/cQJme3bDUgSlC/vweWSuXRJonp1LxcuSIBE06ZuKlbMvQNA02D3bgNHj8pUq+blzjs9\nmEy53kwGZ89KHDli4MwZGYtFo2VLN5UrC8dEdhSHYbAC01RVna8oSm3g13+9nwqEFr2soiEqKoq2\nbdsWt4wcs2OHge7dg9E0iYAAje++O0m7diHFLStbjh2T6dUrmLg4PXS2YEEqPXq4snzG147/Fdau\nNfHss7qVq1DBy88/p1CjRv6NQ0KCxODBAWzerN9xX3nFxpgxdow5uDPExUk891wAO3eaMBg0PvrI\nyosvBgISISFehgxxMGmSP889Z+ett2xs25a7Y79nj4GuXYNxOCRkWWPVqhTuuitvDyZWKyxaZGbv\nXiMrVpgBePBBBx98kEZwcM624avnTl4ojuDzYeAbAFVVjwAJQIWr3g8GEv9rA1cHgaKionxqOSYm\npkTpudHy7t1uNE0ffaalSZw4oZUofVcvX7ggZRgFgPXrjezYscOnj39UVBQ7d+7k998zH5UvXJA5\nf14qkO0fORKfYRQAVq40s2fP3zla//JliZ079XXDwjR27TJyxTudnCzjSb+Hr1plJikp93pPnpRx\nOPT1vF6Jo0cNef6+SUkSKSkSGzdmWrxffjFz8OCFYv//FuVyTimOGMMLQCNVVQcrilIJ+A09AP2u\nqqobFEWZC/ymqqqa3foixlC0REfrIwavVyIoSOPnn5Np0KDg3BgFyfHjMt27B3PunAxoLFxopWtX\n1w3X8wVWrjTRt6/+NF65soeVK1OpXj3//4dLl+C554JYv16/wQ8fbmP48JyNGC5elOjbN5DoaBOy\nrDFnjpWBAwPRNImyZb0MGuTg7bf9efFFO2PH2vDzy522vXsNPPBAMDabhNGojxiaN8/7iOGzz8zE\nxJhYskQfMfTu7eC999JKjbvxRuQmxlAchsEIfAFUS39pBPqo4VPADOwHBlwvK0kYhqLF5dL9vKdP\n6zGGhg1Ldozh0CGZAwcM3HKL7pMODCxuRQWD1Qo7dxpISJCpX99DnToFZ5xPnZLYtcuIn59GkyYe\nbrkl5373kydlduwwIMtXYgwSCQl6TODCBQlJgiZNPJQvn7cYw969Bv7+W6ZqVT2+lZICv/1mYvt2\nI127umjd2p0jIwZw/rzEkSMyZ8/KWCxw111ubr315okxlGjDkF983TBERfm2n1LoL15Kqv4LFySW\nLzexe7eRxx5z0ratG/lfjurcaD99WsLphEqVtCwjjVWrTDz1lP6IbzBorF2bUmQJESX12OcUMfNZ\nIBAUKatXmxg1KpBFiywoShD79uX91rJ9u4H27UNo3jyUb74xY7dnvnf0aOZ2PR6J+Hife7b1CYRh\nKGJ8+YkDhP7ipqTqP3TIkPG3yyVlBJuvJifanU4YN86fxEQZTZMYPjyAEycyb1Pt27sJDNTdP7Vr\nu7nttqKLd5XUY18YFMvMZ4FAULp48EEnX31lwWqVaNPGRc2aebthGwxQtmym399iIUsM4c47Paxd\nm0x8vEREhJeIiJsnRlCUiBFDEZOX1LGShNBfvJRU/c2b6zfsX35J5pNPrFSqdO0NOyfaDQYYN85G\n+/Yu6tb1sHBhKrVqZTUy9ep5advWU+RGoaQe+8JAjBgEAkGOSErS57KUK6dhsVz7fkHNxq5b18u3\n36bickFoqZ3qWrLxuciNr2clCQS+yLFjMq++GsCePQZeecXOs886cjxjWFAyEFlJAoGgQFm2zMyf\nf5pITpZ5880A9u0z3Hglgc8iDEMR4+t+SqG/eClq/XFxEl99ZSIxMeuDppYH976vHnuPx8Pnn3/O\nCy+8UNxSigxhGAQCwXXZsMHIK68EUq6cRtOmLoKCNMaMsXH77VknlTkc4C2ZlVLyRXR0NPfccw9L\nliy5qdJVRYxBIBBcl+nT/Xj7bX8kSaNXLxcDBthp3NiTMRvZ5YJ164xMn+5PgwZuhg1zUK2a71uI\nc+fOMWHCBDZt2sTEiRN56KGHkCSfu11mQcQYBAJBgXDffU7KlPGiaRKnT0tUruzNUqLi4EGZp58O\nYudOI1995cd335kLbN/JyXD5coFtLkc4nU5mzZpFu3btqFKlCtHR0Tz88MM+bxRyizAMRYyv+lmv\nIPQXL0Wtv1EjL2vXprBmTTJffGGlSpWswQWbTcLjybxpnj17/RtobrTv2SPzv/8F0aVLCJs2FU1W\n/bp162jbti2bNm1i9erVjB07lqCrSq/6+rmTG8Q8BoFA8J/8e4LZ1dx2m4dnn7Uzf74f5cp5eeYZ\nZ773l5QEQ4YEEBOjlwLv0yeQqKjka4xSQXHixAlef/11Dh48yOTJk+nSpUuh7MeX8LnxkYgxCAQF\ng90OsbEGEhMl6tb1ULVq3m68SUlw6ZKE2axRuXL+dV26BPffH8LRo3pKrMWisXVrMhERBRu7SEtL\nY+bMmcyfP5/BgwczaNAg/HLbNMKHEDEGgUBwQ377zcQDDwQxZYo/06b5ce5c7rehabpxeecdf374\nwfKfrqScUq4czJiRRnCwhsWiMW+elcqVC84oaJrG8uXLadmyJceOHWPDhg28+uqrpdoo5BZhGIoY\nX/dTCv3FS0HqX7TIxKRJdipU8HLpkszJk7mftHbwoMwjjwTzww8WJk4MyOiOlh250d62rZtNm5LY\nujWZbt1cGApoPt2BAwfo1asX7777LrNnz2b+/PlUqVIlR+v6+rmTG0SMQSC4SXn0USdvvx2QUTL7\n5EmZN99MIyyMHHfqS06WMvoyA+zfX3AzovWYQsHEFZKTk5kyZQqqqvLaa6/x7LPPYsxp67ebEDFi\nKGJ8fZKM0F+8FKT+evW8nD2beQs4fVpmzRoz3bsHs39/zm4NNWp4uf9+PeDs76/x1FOO6342N9r3\n7ZNZuNDM2rVGkpJyvNo1eL1evvnmG+666y5SU1PZvHkzL7zwQp6Mgq+fO7lBmEyB4CalWjUvkyal\nMXRoAJIEL77oQFXNpKRInDkjU7u2l0uXJAIDNa7K2sxC+fIaM2emceKEnZAQrUAqrP79t0yvXsHE\nx+vGae7cVHr3duV6Ozt37mTkyJFomsY333yDSFrJOWLEUMT4up9S6C9eClK/yQSK4mTjxmSWLUth\n1SojR48aCAnxUrWqh88/N9OhQwjPPBPI339fP6hcvrxGixaeGxqFnGqPi5MyjALA+vWmnH2hdOLj\n4xkyZAh9+vShX79+rFmzpkCMgq+fO7lBGAaB4CbGzw8aNPBy110epk61MX9+Kj/9lEJKiszo0QHE\nxcmsW2fmxx+zacBQSFSq5KVmTXf6kkb37i4SE+Gff2SSk6+/ntvtZt68ebRq1YqgoCC2bt1Knz59\nkGVxm8stwpVUxPi6n1LoL14KS7/ZDHfd5QH0oHN0tIGrpzk58z9vLcfaIyI0Fi9O5eBBA+XKaVSq\n5GHAgCD++MNIz55OJk2yceutWYPSUVFRjBw5kvDwcFasWEFkZGT+BedRf2lAmFKBoISyZYuBJ58M\nZOJEP/75p2jnokZGehg+3IbRqNGokZvevQvAMuSCWrU0unVz06qVh+3bTfz2mwmvV2LpUgu7d2dm\nPp05c4Znn32WQYMGMWLECJYuXVooRuFmQxiGIsbX/ZRCf9Fw5IiMogTz889mPvjAn88/1ydfFZX+\n0FAYOtTOjh1J/PhjKrVr5z+onFft/04gMhrB4XAwY8YMOnToQK1atYiOjqZnz56FWuzOV86dgqDY\nXEmKopQHdgD3Al5gQfrvWGCwqqpF2+lbIChBpKbq/ZWvcPCgnKfmOPkhIAACAor/MmzRwk3fvnZW\nrzajKA4SE1fRuvUYIiMjWbduHdWrVy9uiaWOYhkxKIpiAuYBVnRH5gxgjKqq7dOXexaHrqLA1/2U\nQn/RUK2aN2NOgJ+fxssvO5Ak39GfHXnVfuutGpMn21iwYBf79/dk2rSxTJ06lYULFxapUfDlY59b\nisuVNA2YA1ypztJEVdWN6X//AnQqFlUCQQmhXDkYPz6N335L5o8/kmnTxn3jlYqY+HiJc+ekQh/J\npKam8t57b/HEE51p164NUVFRdOokbhGFSZEbBkVR+gEXVVVdk/6SRNYqr6lAaFHrKip83U8p9Bcd\n5crBnXd6qFvXyxXXeUnRv3u3gS5dgunQIYTVq405auuZW+2apvHjjz/SsmVLTp8+zZ9//smQIUMw\nmwuuGVBuKCnHvigojhhDf0BTFKUTcAfwJRB+1fvBQOJ/bSAqKipjWHfln+UryzExMSVKj9BfsvT5\ngv6AgHBGjGjK8eN6dlC/fkFERydTvbq3wPZXtmxZRo0axdmzZxkyZAjPP/98sX3f0rScU4q1H4Oi\nKH8AA9FdS9NVVd2gKMpc4DdVVdXs1hH9GASC4sVqhe7dg9mzR3+uNJk0oqOTqVEj/5lLiYmJvPPO\nOyxdupRRo0bRt29fDAVVWvUmx9f6MWjA/wETFUXZjD6K+aF4JQkEgusRGAjTp6dRtaqHMmW8fPFF\nKtWq5c8oeDwevvzyS1q2bInb7SY6OppnnnlGGIViolhnPquqevdVix2LS0dRcrUbzBcR+ouXkqK/\nSRMPa9em4HZDxYoaOak6cT3t27ZtY+TIkZjNZhYvXkzjxo0LQXH+KSnHvigQJTEEglLApUv6xK+Q\nkKLbZ/ny+UtHunDhAm+++Sbr169n3Lhx9O7du1AnqAlyTklwJd1U+PoTh9BfvGSn/88/jXTpEsL/\n/hfE3r0l95Ju27YtSUlw6pSbDz/8mDZt2hAWFsaWLVt49NFHS7xR8PVzJzeIEYNA4MOcPi3x5JNB\npKRIgIGhQwNYsSKV4ODiVnYthw/L9Ou3hSNHXuW22yqxdOnPNGxYp7hlCbKh5D5elFJ8PRda6C9a\nTp+W2LLFwLvvWli61MTWrQeyvO/xSDiuapqWlibjyVlXziLl1KlTPPpoXw4efBGPZzKHDq3B4/Gt\nYne+du7kB2EYBIISyu7dBjp1CqFnz2DcbomPPvLj4sVaWT5TpYqXefOsWCwaISFeZsywUqZMMQnO\nBpvNxrvvvkvHjh0pU6YBsB94ECj8GdOCvCMMQxHj635Kob9ocLth4kQ/4uJk3G6J997z44EHXCQl\nZe2xaTBA9+4utmxJZtWqFCpW9OLKfRfMAkfTNFatWkXr1q3Zt28f69evZ86c4dSvb8LPT2PSJBt1\n6pTAoc1/4CvnTkEgYgyCmxpNgz17DBw9KlO1qpc77/RQTBUXsiBJ+nyBKxiNYDRqNG6c9WaqabB3\nr4G9ew3Y7TB/voVJk2xUqOAlIICMctlerz4xLSgICjvGe/jwYUaPHs2ZM2d4//336dixY/o7XpYv\nT8Vmg/BwDUvRNYUT5BIxYihifN1PWdr0x8Ya6NYtmOefD6Jr12B27CgZE6oMBnjjDRt33eUiIsLD\n3LlW/vc/JykpWfXv2WOga9dghg0L5PXXAxg92sayZWbuvjuUu+8OYfNmA3FxMGmSH/ffH8Ls2RaS\nkgpHc3JyMuPGjaNbt27ce++9/Pnnn1cZBf3Yh4VpVKnim0bB18/93CAMg+Cm5tQpCZtNf4TWNImD\nB0uGYQCoV8+LqqaycmUKHTq4qVVLw/OvyPLJkzIOh67f65XQNIlFi/S7blqaxIwZfhw+bGDmTH8O\nHDAwdmwAu3YVrKNA0zS+//57WrVqRUJCAlFRUQwaNAiTyVSg+xEUHcKVVMT4up+ytOmPiPASGKhh\ntUrIskZkZNH7va1WSEyUCA3VCMoaQiAmxsDgwYHIMsyZY71Gf7VqXvz9NWw2CYNBIyREy1gGqFxZ\nIzExq+/IZsubzr//ljl9WqJCBY26dXUX1d69exk5ciQOh4MvvviCFi1aXHf90nbulGaEYRDc1DRo\n4GXVqhSOHZOpUsXLHXcUrWE4f15i8mR/li41c//9TiZMsFG5spbx3jPPBHHhgj6wHzAgkHnzrPj5\nQcOGHmQZGjXysGpVCufOSYSEaLjd8PnnqcyebaFiRY3y5b2EhWk0aOAmNtbIPfe4aNQo99/xyBGZ\nhx4K4swZAyEhXr7++iTLlr3JqlWrGD16NE8++aSoa1SKEK6kIsbX/ZSlUX+jRh569XLRvLmHovZ+\n7NxpYOFCC1arxI8/Wti+PfNZTdPA6cz8rMsloapmOncOJjpavwlLEtxxh4ewMI2HHw6mV68QJk70\n45FHnOzfb2D6dH9SU0FVU9myJYl586wZhic3HD4sc+aMAfCQnDyPPn2aYzQaiY6OznEF1NJ47pRW\nhGEQCIqR/8oQuvVWjXfeSSM4WCM01Msrr9hZvtyMyyXx++9ZLdiGDSacTn1jBw+asFr1eMlTTzlo\n1Mib4f4JC8vb5AG9LtKfQDNgERMmrGDq1KmUKUmTJgQFRo5cSYqiKEBj4B2gh6qq3xWqqlKMr/sp\nhf6C5c47PTz9tJ2lSy088ICTZs2ytvAMCNDo189BixYuRo8OICFBf5Zr2DCrO+j22zPXs1g07rrL\nzc6dyZQt670mbpFbzp07xyefTCAsbDNNm07mySd70aFD7luNlrRjn1t8XX9uuGFGs6Ioo4H7gCpA\na/THhu9UVX2zkLVli2jUIyhtWK2QlKQHn6+euwBw+TJERZk4c0aiQQMPW7eaqFfPQ5s2riwznJOS\nYP16Izt2GKlb10uVKh7atvWQH7e/0+lk7ty5zJo1i759+zJs2DCC8mtlBMVGQTfqeQzoClhVVY0H\nWgJP5EPfTY2v+ymF/oInMBAqVbrWKACULQv33uuiYUMPhw7JNG2ayAMPuK4pexEaCtHRRhYtsjBk\nSAC9ewdz5IjE7t0yW7caiIu7NjMpLk7KEsO4mnXr1tG2bVs2b97M6tWrGTt2bL6NQkk89rnB1/Xn\nhpwYBpeqqvYrC6qqJgHXOZ0EAkFBomnw119GVqwwk5YmM2dOGHv36sOAY8ckoqIMHDumX8ZnzhiI\nj5fRNAmTCY4cMfLAAyE88EAIr73mz8WLunE4fVri//4vgLvvDmHmTD8uX87c34kTJ+jTpw8jR47k\nrbfeYtGiRdSqVesaXYLSTU5cSUuAz4G3gFbobThbqqr6v0LWli3ClSS4mYiNlencOQS7Xb9UJ0xI\no25dNxERGj17BhMfL1Ohgpfly5NJTZV55JEgEhNl3nwzjS1bjPzyS2Z9jzVrkmnWzMPixSZefDHz\n6X/JkhRatEhm5syZzJ8/n8GDBzNo0CD8/PyK/PsKCo/cuJJyEnx+GfgaaARYgWiEK0kgyBdxcRKx\nsQaMRmjUyH3diqgXL8oZRgHgn39kunb1EhNjICJCn9x26pSBffuM9Orl4vffUzh0SOLkSQNVq2b2\nYQ4I0AgO1jOSrmQv6WhERS1jyJAxNG/enA0bNlClSpXC+MoCH+KGriRVVc8APYEQoBzwkKqq/xS2\nsNKKr/sphf78k5ICb7/tz8svB7Jpk5FNm4ykpUFCgsThw3KWeED16l5q1NAzgEwmja5dbdSsqREQ\nAOHhXrp2ddGvn53y5XUj4O+v8corgbjd+oS3QYNsPPywA1VNyZit3Lati1atXEAsFSvew8qV7zB7\n9mzmz59fqEahJBz7/ODr+nPDDQ2Doii9gV2qqlqB8kCsoig9Cl2ZQFBKSUiQWLXKyNChdj76yI+n\nnw5i0yYj/fsH0rJlKI8/HsTx47pxqFHDi6paUdUU1qxJITh4GwcPyvTtG8Tq1WbmzfOjShW9KixA\nUJBGkyYeJkzwJz5eJjLSw5QpabRqlZneGhaWRLVqQwkN7cizz97Ppk0bbqpUTMGNyYkr6Q2gI4Cq\nqkcURWkCrEj/EeQSX78Ahf78ExwM/fo5+PxzS0ZNoz17DERF6ZPWdu3S005r1NAbK9Ss6aVmzStu\noeZER0tZ3EEnT8oEBOh/BwbC22/baN/ehdMp0bKlh7Aw0vchsWDBdyxfPhGrtTsu1wEuXw7CarUT\nGlr437skHPv84Ov6c0NOspJkVVVPX1lQVfUUOQhaCwSC7AkL0+jTx0mZMpkxgH+XoZYkrttwp0YN\nL/ffrycGBgZqPPFE1iTB6tW9vPCCk5dfdlCrlr6PJUt2c++99/PDDwuoXXsJLtdnQDizZ/tz/Lgo\ngCDISk7OiIuKogxUFMWoKIpBUZRngQuFLay04ut+SqG/YKhRQ2P69DTatXPSuLGbatU8jBiRRmSk\nh/79HaxbZ2L37mtnp0VFRVGhgsbMmWmsWZPMb78l06LF9YvixcfHM2TIEF577XG83heoUiWKWrWa\nZrxvNmsUVfJRSTn2ecXX9eeGnLiSXgAWAR+lL+8gH1lJiqIYgE+BOoAGDAQcwALAC8QCg1VVFR1h\nBaWSlBS9QZDNJtGqlV719KWXgmjc2E2/fnYWLPDjwAEDnTvrhf2yo3x5jfLlr28Q3G438+fP5733\n3kNRFFT1L3r3rsKhQzI9eth4/HEHx47JjBxpp04d73W3I7g5uaFhUFX1MNBEUZSygFtV1ZR87rM7\n4FVVta2iKB2Ayemvj1FVdaOiKHPQs6CW5XM/JRJf91MK/fnD5YLPP7cwcaIeFOjf3058vExqqoQs\n666h+HiJwEAtww10NVf0u92webORlStNNG3qpnNnF+XK6Z+Jiopi5MiRhIeHs2LFCiIjIwFYuTKF\nw4cN3Hqrhzvv1LddlG1Mi/vY5xdf158brmsYFEUZqarqVEVRPkR/sr/yugRoqqoOycsOVVVdrijK\nT+mL1YHLQCdVVTemv/YL0JlSahgEpZ9z5ySsVomKFa8tYHfihMTHH2f6br75xsIHH1i5/XYjNWp4\nGTMmgNmz06hZ00W9etffR2ysgYcfDsLjkZg/HxYsSKVp0xOMGzeObdu28dZbb9GjRw+kq8q31q/v\npX59MToQ3Jj/ijEkpv+OBxKy+ckzqqp6FEVZAHwAfEPWYHYqUAQ5EsWDr/spS6P+8+clfv3VyK+/\nGrlwIX95FQcOSIwb58/AgQG8+66FxMSs7589K2fpEteggZtWrVzs2mVk3Dh/kpNlxozx5/Tp7J/Z\nruhPSJDweK5odfDll9Pp0KEDtWrVIjo6mp49e2YxCiWB0njulFauO2JQVXVe+p+3qar6VEHvWFXV\nfoqiVAD+Aq4OfwWTaZSyJSoqKmNYd+Wf5SvLMTExJUrPza5/27b9fP11YxYu1B/tn3jCSt++u2ne\nvH6Ot28ymWjQ4C7MZr0V5+nT+qzkgACJHTsclCmzn6ZN7wQgPt5G69YmGjb04HZD16424uLOcfJk\nKFeej/z9Yft2Ix07uomOzl7/bbe1p359N/v3/4okvYLDUY9169Zx+vRpdu7cWWKOt1guWcs5JSe1\nkvYAd6qqWiBjUEVRngKqqKr6jqIoIcBu4AgwWVXVDYqizAV+U1VVzW59UStJUJCcOSPRunUoKSn6\npRAUpLFlS1KOu5y5XPDrrybefdePyEgPNWt6efddfwAeecRBly5OYmMNDBzooEIFfX8ffujH5s1G\nOnd2MWCAgwoVNDZuNPLaawGYTPDss3asVnj55axpqE6n3vHt6FEDQUGH+PzzURw/fpz/+78p9Ot3\nT8EeGEGpo6BrJZ1Hn+0cjV4rCfIRYwB+ABYoirIBMAFDgYPAp4qimIH96Z8RCAqd0FCNzp2d/Pij\nPpGgc2cnISE3NgoJCRAdbUKSNPr3D8Trldi3z0jfvg6qV/dw4oSB+HiJEydkKlbUjUfNml7sdgmj\nUZ+dvHmzkR49XFSo4KF9ezcLF6Zw/LgBj4dss5F27TLQrZuEpk0CPuWxx15h/PhvaNpUtG4XFCw5\nOaO2pP8Jzyu6AAAgAElEQVRcuVqkq/7ONaqq2oBHs3mrY1636Utc7QbzRUqb/qAgmDDBRvfuLjQN\nmjd3Exx84+38/LOJoUODGDPGhteb+RCWlqa7goKCNHr2dOFywfvv+zFggJ0HHwxE0yQee8zB+fMy\n0dEmzp6106iRvm6dOhp16mTfGU3TNH74YQmaNhb9UtlLjRplefhhC2vWpPhEymlpO3dKMzlJV52g\nKIoRvbqqG4gtKLeSQFASqFxZo3Ll60wzvgq3m/RS1iYiIrx07uxk924Djz3mYNEiC+HhXgYOtGM2\na2iaxLx5foSEaLRs6eb77y1omm5AFi2yMHq0jd27DVSrduNLad++fYwaNYoLF5Ixmb7F5WpHYKBG\nQICN5GSZ+HiJOnXyfRgEggxyEmNoCywGPOhZTE6gl6qqewpZW7aIGIOguNi1y0DnzsEZ2UATJ6bx\n1lv+9OnjoG9fB7fcolGlSuZgOiEB9u83Mm2abiB+/lmfNHDrrR4++cRK2bLaf6aPJiYm8s4777B0\n6VJGjRrF00/3Zd8+MwcOyMTHy8ya5UfZsl5UNZWICDEfVPDfFHSM4SPgGVVVVwMoivI/YC56055S\nyaFDMh99ZMHplBg61C5yvwXAv1NEweGAxYtTqFlTy/bJPywM2rRxExycRmqqRGSkh8REiX79HNx+\ne9bPX7oES5eaWbPGRPv2Dvbu/ZLff3+LHj26ER0dTbn02WuNG3uIjPSwd6+BOnWs1K7tFUZBUODk\nxDBoV4wCgKqqKxVFeasQNRUrSUkwdGgAf/2lV7rcvdvAqlWp3HJLwVx8vu6nLK36T52S2LnTiMWi\n0bSpG0mSOHdOIjRUy7jx3nabl9q13Rw5YiQwUOPee90Z5a6vhyzDHXdc6YNw/c/+9ZeR4cMDgWjW\nrn2JiAgzjzyylHfeicxWf7Nm/73fkkhpPXdKIzkpordTUZQnrywoitIN2Ft4kooXu13i+PHM4mUn\nTxqw2YpRkKDQSUiAoUMD6d8/iCeeCOaPP0y89FIAHTqE0qVLCPv365dJ9epevv/eyvLlyaxdm3xD\no3CFpCSw26993e2GxET999GjF4F+wMPAKzz++Dqs1iYkJ1+/yqpAUFjkJMZwGqgEJKPHGcoCLvSC\nd5qqqgGFqvBfFHaMweOB77838dJLgWgaTJ2aRt++ziKtKSPQiYuTOH5cJiREo149L4U1kffYMYnm\nzTN7a44fn5ZRywjg9ddt/N//ZXNnvwFeL6xda2TChAAqV/YwebItI3soPl5i3jwLS5dKVKz4AbGx\n7+Lx9MdqHU+9egE8+KCTBg08TJrkR5s2boYNs1OpknAZCfJOQccYbo6xUzoGAzz0kIsGDZLxeqF2\nba8wCsVAXJzEsGEB/PKLGT8/jR9+SKF168Jxn5Qtq9G+vYuNG3X3YZUqXvSMbP0aqlgxb/s9elTm\n6aeDcLkkDh0yMG2axptv2vj5ZxOhoRrTp28ChvD331UZPnwtDz9ci4QEDYslFYcD+vYNJj5e5uBB\nI82bu+ndWwwdBEVDTtJVTxSBjhKFxQINGxZOwNnX/ZRFpf/ECZlfftEtst0usWCBhdat0/K93ez0\nlysHs2ZZ2bXLiNmsceedbj77zMqnn/rRtq2Le+7Jfm7BjXC7s7qBLl2S+PRTCzNnxtGgwRB0j+z7\nQE9MJhv+/q6MFpzr1hmJj8/09Fqt0nX1+wq+rB18X39uEK2bBCWSkBANf/9M18nttxdusDUiQp+Q\n9sADbipW1EeNK1ak8Prrdm69NW8unOrVvUyaZAM0ypXzMnToZT77bCrQhPDwhtx11x7gQZo29RAR\n4aVs2cyHkQYNPPTq5Uj/20379nkzTgJBXihZ5RdzgJjHcHOgaRAdbeDrry3Uq+fhkUecheJj93r1\nzKEtWwwsW2amWTM3HTq4KF/+xuuBvu5/kZQEf/8t8ddfq5gz53X8/e/k0KGZQFVWrkwhKEgPTNeo\n4b1mn4mJkJCgx1jCw7N+9yu6BYKcUtAxBhRFCQBqAfsAS3pZC4Gg0JAkaNXKQ6tW+XcfeTz6jdRk\nynwtKQmWLTPz448munbVS1eYTBpff20mOVlvlNOqlZuICI2//5ZwOiWqVfNisUBsrMShQ0YWLTJx\nzz36KKNWrWuNlt0OH310nOnTRyNJp3jrrQ944on2xMQYMBpT+eYbC3FxMiNG2DOMwqlTEsnJei+H\nsDCy9IUGPWj9/fdmfv3VSJ8+Trp3dxEYmO9DJBBk4YbPHIqitASOAj8DVYAziqK0KWxhpRVfr+nu\na/r375d54olAHnooiJ07DWzZsgXQy1oPGxZIVJSZMWMCKV9eY/Zsf6KizAwfHoDHA3v3GtmwwUi7\ndiG89loAP/9sZN8+iQkTAti+3UD//i4sFokzZ2SOHdPrJLndkJwMSUnJDB8+npkzu9Cp072MGBHN\n/v33Y7FAy5Ye5s3z49tv/Vi3zoyiBHHypMT+/TJduoTQrl0or74akG1viPXrXbzxRgBRUWZefDGQ\n3bt9p4Cer507/8bX9eeGnAxG3wPuA+JVVT2J3u95ZqGqEggKgJQUfbLi2rVmNm0y8cQTQfj53caf\nfxr45x/5X5+9+iYscfasgT/+MLJggZmXXnJQtqzG++8HsGuXCatVonJljb59gxg5MpDnngvi4EEj\ns2dbeP11P1q2XEmjRq1ISornlVe28vvvw5k6NZgqVTx4vXpA+sSJzP0nJUk4nbBypZnz5/XXV660\ncOjQtZfn5ctXvyaRlFSQR0wg0MmJYQhQVXXflQVVVX9FL5ctyAO+ntVQ0vV7PHpHtsREvX/BxYuZ\np/jlyxKSVIFRo/ypW9eTUcm0Vi03t9/uoWJF3W3TrJmblBSJuDiZBg3cJCTI/PyzmQMHDLz6agBD\nhzoICdF47jk7kqRx6ZKEx6ORkLCbTz+9j/PnPyQlZQk9enxCpUoV0tOd9ZnVO3ca2L/fwOTJVqpX\n92A2a4werQe4K1S42m2kZesiat/eSJUqeiC+aVMXDRr4TrmWkn7u3Ahf158bcjIOdSqKUvbKgqIo\ndclH2W2BwOmErVt1N02zZm7atnVf0xs5L7hcsHy5iddf1yeUzZ6dxpQpVvr2DcZo1JgzJw2bDbp0\ncbNjh4FBgxw4nQ6OHzfw1FOBLFiQyqlTMlu3mvjqKxNTptiIiHCzcGHmZaJpEgcOyEyeHEDTpi6G\nDrVzyy0XmT79LY4fX0GjRhPZu/d5QOb4cRsLFph5/nkHGzcaue02Lz17hgAaEyfa6N/fTrVqXlq3\ndhMYCPfd5+Lll+1s2WLkhRfsWTKx4uIkDh2SCQiAlSuTuXxZpkIFLc8ZUwLBf5GTEcPbwAagiqIo\ni9B7M7xdqKpKMb7upywI/Xv3GujVK4gZM/x54olgtm0rGD/5kSMyL7wQyMWLMrt3m3j3XX86dfKw\neXMSn31m5Z9/dHdRs2ZuDh/WS52MGBHInDl+XLpkYN48P44ckXn4YQeff57Gli0mzpwx0KWLK300\nodGvn51Ll/Tg8I4dMikpc3njjWbExPiRmnqQBx98muBgiQ4dXMTHS5w7Z+C229z06+fgiy8s6Uol\nZs3y49QpA/36BRMbq3//ypV1g7FyZQoPP+zCL73h7aVLMHq0Pz17hnDffcFs22bijju8PmcUxLnv\nO9zQMKiquhK9gMt4IApoq6qq6LCWDcnJejmN554LZNkyE1brjde5GblwQcrS3Ob06ayn4alTEu+9\n58fAgQH89Zdetyo2VmbIEH/Gj/fj77+zz7jTNP3nCi6XPpP98mWZlStNHD5spHv3EKZO9adFCzfh\n4RpBQZkrVK3qoX17F0lJEo88EszXX1sYPjwQf38vU6daWbIkhYcfdhAR4aV//3WEhTUlKupHYB3w\nIVCWEydkvv46hXLlvHz6qYX27V107uymWzcXdetmjgBuu83LhQtytt/fYsmyyIULMkuXZhqVOXP8\nRP0uQaFyw0c1RVEkwKOq6mxFUR4GHlEU5QNVVUXY61/s2GFk4EDdJ7JkiYnly1Np1y7rxCRf91MW\nhP7atb1UrOjl/HmZ4GCNRo2yTl5bsMDC++/rfZN//tnM6tXJ9O4dnBGYPXHCwCefWK+5gUoSvP9+\nGjabRFSUgVdftSNJepG8u+92M22aP/fe62bfPgPnzsmUK+dl/vxUVNVMpUoaSUkyGzeaKVs201i8\n/LKDl14KSk8TTeWpp1KwWkfi77+egQPfpHHjR3j/fX/27NHTXevX9zJlih8jRzp4/HEnFSt6mTjR\nD7tdYsYMK0uWWJAk3QU0dqw/wcEaDRv+9+S94GCNSpU8nD2rG8mWLd0ZowlfQpz7vkNOxvDzABRF\nmYn+WLQamA88Uoi6fJKLF7Nmtly65HPzB4uEOnW8rFyZzMmTBipW9BIZmTWAGhubWd02NVXCatUD\nylc4eNCA3a4/WbtcegMdq1ViyJAAzpwxABoffJDGpEl+zJih99OIjZXo2NHFnj16X+ZatTz8/ruZ\nxo3t7N9vYP16vfnNpElpVK3qIThYIyVF788cHy8xYkQy8+d/iNU6k4YNnyE0NIb33y9L5coeZs5M\n459/HJhMMGOGPyEhGlWreoiNNbJ+vYmwMPjoIzP167vZtMmIzQa9ejmZOjWN1q3dN+z3UaWKxvff\np7JihZnwcC/33+8qtIKCAgHkLMbQFBgIPAh8papqf6BaoaryURo39lCpkv70V726O9syDr7op0xN\nJSMtsqD016qlcffd7muMAsCgQQ7MZv2pXVEcVK7szahuKssab7yRRkiI/tmdOw107RrM9u3GdKMA\nILF1q5Hz5w3s3WugalWNuDiZzz7zY9s2I1Om+GEySezda+Dbby1MmZLGww87mTQpjV9/NXHypMyr\nr9oYPdpGZKSHOnVWMXt2c06c2IQsb6F794lERen5GGfOGNi40UhcnN6mc+BAO198kcqcOX706xfE\nuHEBxMQY0ntKS+zZY+DwYSNTpwawYIGF0FCNHTsMHDuWeac/e1Zi+3ZDlpTW+vW9jBplp379DVSu\n7FuxhSuUtHPf49HjNw5Hzj5f0vQXJjkZMciqqnoVRbkPeCf9NTHXMhvq1vXy00+pXLggceutpaOz\nVmyszLBhAaSmykyblobJVPiZyu3aufnjj2RSUiRq1vRyyy3w0kt2unVzkpYmsXevkdWrwd/fy8GD\nRrxeCa8XwsK8JCToN9PISA+33eYhPNzLtm3yv+I9eobPvn1G9u0zUqOGh3vvdXLokN6/uU4dD2lp\n8Ndfp5gxYyQpKQeIiJiO3d6DKVPs3Hqrm6urrwYGwgcf+NGokZsXXnBy+rTETz9lluT9808jr71m\np1o1DyNH2pk61R+jUWP0aBujR/vz008WQkO9LFuWQpky0LdvIHv3GgkP97J0aUqWEYXH43sNekoi\nqamwaJGZOXP8aNHCzejRtlJxvRYUOTEMRxVF+QW9JMZ6RVG+oRQ36skv1at7qV79+u/7kp/SaoVh\nwwLYsUM3Bn36BPHnny0p7GxlWeaakURoqO466tEjmNRU/YY8blwawcEaBoPGxx9bmDvXSmyskaAg\njV9+MdG7t4Mvv9TLTgwYYKdqVQ+nThlo185FUlLm03jVqhrDhgVy5oyB8uW9PP/8Jf744z1iYj7h\noYdeIijoO/r1k3jxRZmEBJnNmw2MGmXn119NNG/u5vx5GZtNIjFR1+V0anTo4OL77/UgSOfOLh54\nwEnt2l48Hjf33+/EYtHnVfz0k/6ZpCSZVavMNGniZu9e/bK8eFFmyxYj9es7M7T60vnzb0qS9thY\nAyNG6M+3x48baNbMzbPPOv9znZKkv7DJiWHoD/QC/lRV1akoShTwZeHKEpQE3G6wWjNvoDYb6T2P\ni+fJ6uJFKcMoABw7ZuDvv2XeestGcLAeF5AkDY9Hn/UcGAj79hlo395N//5BvPyynebN3ZhMGmfP\nSgQFWShTxktyspQRm4iLW8KsWa9itbaif/+tdO5cEasV/v5bZsGCFM6elZk6NYhKlbw0auSmdm03\nY8cG0rixi3r1dGPm56e3BH3jDRteL4SEeKlTx0t8vITBAI0b65/bvduALGsZGVrVq3soU0Yjay8I\n8RRbGDj/ZQOyznwX5CTGYAZWAcmKopQDvgd8MCeiZOBLfsrQUJg2zUpwsIbRqDF7tpWLF7fneXtW\nK2zebGDNGiOnT+f8QjxzRmLNGiMWC0RE6FleBoNGw4Zutm83Mn++mTvu8DJ1qj/vvBPAhAn+DBjg\npHZtF507O/n2WzMOh0RYmMazzwbx0EMhjB8fyJdfpvDkk/b0m3Es0Al4k0ce+YT69b8hJSWC6GgD\nW7caCQmBI0cM3HqrbnzOnpX59Vcz4eHw3nupvP22LSO7qFIljT59HBw4IHPxosR997n47TcjLVuG\n0r59CNHReizk9ts9fPddKt26OXnzzTTuucdN48YeFiyw0q2bk2nTrLRsmbU5jy+dP/+mJGmvX99L\nv352QKNuXTddu964CVJJ0l/Y5GTEEJ/Na2fRC+rlGkVRTMDn6AFsCzAJOAAsQG8XGgsMVlVVPCqV\nANq08RAVlYTHI1G5spetW/Ne7XT5cr1lKki0bevis8+slC//3//m+HiJoUMD+f13ExaLxldfpabH\nE3RjtWhRCrVrezl0yMDmzbrLS9MkVNXE8eMyHTq4iInJzAa6MuJISJA5dUqibt3LjB49jYCAb6lV\nawz9+j1DQoKR3r2dTJjgz7ffpjJrlh9z5+puo9Gj0/j221R++slMmzYuOnRwUabMtbobNfLy6af6\nsTp5Uua554JwOiVsNolXXw3kl1+SCQ2F++5zc999WVOae/Rw0aOH6NZWmNxyiz6Z8KWX7AQFccPz\n8GYjJxPc5Cs/6COFJ4CF+dhnH+CiqqrtgfuBj4HpwJj01ySgZz62X6LxRT9l1aoa1at7MZnyrt/p\nhC+/9OOKiyQqykRcnF5RdMkSE5s2GbKdtBUXJ/H77/oN3+GQeOcdf2rV0t1GtWt7SUqSGTgwkORk\nifDwzLhEZKSXJUvM9O0bxAsv2Jk710pY2BU3DUiSh4MHv2bw4OacP5+GJO3D630Zr9dAs2Ye9u+X\nGDnSxtGjMps26fvfts3I+fMyXbq4+fDDNB57LHujcC1alpLfZrM3z70UfPH8uUJJ0x4cDDVrajk2\nCiVNf2GSq1oEqqo6gUWKogwHRuVxnypwZea0DLiAJqqqbkx/7RegM7Asj9sXlEDi4+Guu1xs22ak\nfn03bdrovv7u3UPSM4n0XP1OnbI+PZcpo1Grlptjx/RTtU0bF08/HUT9+h4ee8zJM88E4u8PcXFO\nPv7Yyl9/GSlb1ktsrJGTJ2VMJkhLk3jppUBq1/YyebKNHTt2smfPMH7+Gfr1+56FC9swcqSdlBQn\nFSqA263RrJmXixclwsM1Wrd2ZYxGQkOv/W7Hj8tcvqyPqCpUuPYmExGhsXBhKkOHBhAYqPHBBzaC\ngwv8EAsEBUZOZj6Xu2pRApoDOXpOyg5VVa3p2w1GNxJvoJf2vkIqkM3lVzrw9b6xedW/ZImFixdl\nPvkklT17DKxebcZk0mMYAwfqbpaoKOM1hqFSJY1vvrESFaVnGx07JnP//U4iIjwkJ0uAxIsv2vjg\nA//0LCo7lSp5CQ11Ua+eG7dbomxZDYcD4uIusmTJaA4f/pUWLSby5JOPsWiRP3PmWBk0KDAjU+nT\nT1OZNs2P8+f1WMCMGVYSEyXuvddF06ZZ9cXEyPTqFcylSzLt2rmYPdua7TyDDh3crFuXgtGo5XCU\nkT2+fP74snbwff25IScD2virfi6iZySNyc9OFUWpCvyOPmHuO/TYwhWCgcT/Wv/qIFBUVJRPLcfE\nxJQoPUWhf9u2bVy8KLF4sYWLFyU+/tifo0cNzJ7th80mM3iwHgRs08bNpk2brlk/Lm4jjz/upHJl\nD2FhGqrqxw8/+FGmjP40b7HA+fMyo0fb+fhjP/r3D2buXAsVK2pcuCAzfryJxx6bRmJiQ06eLENQ\n0H4efbQPdet6ef55O3Y7WdJXt20zppfKzlzu0sXF88/bOXz4zyz6Vq6ES5f0df/808SOHWnXPR63\n3KIRG3tznz9iuXiXc0qR52gpilIBWA8MUlX1j/TXVgDTVVXdoCjKXOA3VVXV7NYXPZ99k337ZB55\nJJhhw2yMGpU5P/KNN9Jo2dKNpsGdd3oICMh+/U2bDERHG5k82R9N00/bxx6zU768xp13epg61cL9\n97uZOdMfk0lj0iQb8+ebOX9+I35+L1OlSjhm8wdERzcGwGjU+PXXZAYNCmDAACfvvefPhQsykqQx\nd66VyZP9+ecfPYV10iQbFSt66NHDjfFfY+xFi0wMGqTXx5IkjTVrUmjaVExCE5Q8CrTns6IoBuA1\n4IH0z68F3lZV1f2fK16fMeiuonGKooxLf20oMEtRFDOwn8wYhKCUcPvtXtauTSY5WY81bN1qokkT\nN2lpEmYzNGt27c3UbtdrJPn5aZw5I6NpUpbqqU6nRMWKHhYvNjF1ahqnTumun7Zt3ajqOQ4fHgNE\nk5r6Hp9/fh9TpmRaHY8Hjh41cPiwifHjjYwZY6NCBS8hIRoLF5oZNy6N1FSJihU1qlf3UL26do1R\nAL0434QJaezbJ/P0084bFsQTCHyBG1oPRVGmAo2BuYABeB44oKrqK4WsLVt8fcQQFeXbfsqC0P/7\n7wa2bzdy4oSBCxck5s5NIzw8q1/eatWrrI4f70/58l7mz7fy/vt+1Kvn5eRJiebN3dSq5eHIEYlb\nb5Xw9/diNsORIx7Wrp3Fpk0f4nYPAkZhMPjz7rtWwsM1RowIJCFBYvLkNIKCvJw8aSQ62sjGjUa2\nbEnG44Evv7Rw9qxEu3Zu5szx45NPrDRporflzC6b6OJFiSVLTGzZYuKJJxzcfbebwqoc4svnjy9r\nB9/XX6AjBvSRQrP0jCQURfkJvSRGsRgGQe7wePRZux6PXq6jsMs1OxxgMmV/A71Cq1YegoIgNdVD\nvXqea4wC6JrHjvUHJB580MXs2RZat3bToIGbb76xMHZsIDVquHnlFTvPP6+7cgYP/p5Fi0ZTqVIk\nr7++ni+/jCQhQWby5DRU1YTdrv+tl7F289BDoVy4IPPYYw5++imZqlW9jBjhz9df6wdpwwYTzz3n\nYOJEP15/3cY77/jTpImH/v0dlCunsWuXgYQEfTb26NG6e+ynn0ysWZNCkyYld+Sgafr/yRdLdwuK\nhpwYBumKUQBQVdWhKMp/FxURXJeifOLQNFi71kjfvkG43TBjRhqPP+7MEljNLdfT7/HAb78Zee89\nfyIj3Qwb5qB69ezLSfv7Q4sW/33j9PfX6N7dwaZNen+EuXP9WLUKxoxJY/lyvb7Q8eNGDh0yEhR0\niNTUV/nqqyM8/fR0wsI6ARKPP+6gZk0PERFuXnvNw4YNJs6dk6hTx838+f4ZjXIWLbLQuLGbP/6Q\nOHAg85JISpIxmyEoCN56K4BNm0xs2AABARqNG+v9HY4fN/DQQ5mXg9ebWTOpMMjv+XPqlMTHH/ux\nY4eRwYPtdO3qytf5kBt8+WkbfF9/bsiJYdijKMr7wEforqfBiCJ6PsGlSxKjRwfgcuk3quHDA+jY\n0U21agXfQP7QIZknnwzC7ZbYvt3ILbdojB1rz9O29u2T+fZbM+3be2jTxkb9+h7uuMPE7t1XsoWu\n1BJKZffuCaSmLgBGMmHC11SubMJg0Hj1VT+efNLFkSNGUlJkGjZ0YbPBjz9aCA/X0ie76UiShs0m\n8emnfrzxho3duw243RKPPuogORleftlO9+6ZEw8OHTKweLGZvn2dTJ4sExnpoUwZD4mJBlq0cFGn\nzrVGLyVF7x1Rrtw1bxUpK1ea+eQTfajw7LOBrFuXwp13ltzRjaB4yIlhGAzMAjajp7euBl4uTFGl\nmaL0U5rNGhUretOza6BsWS2jz0FeuZ7+tDQJt/v67TpzSkoKjB3rT8uWnozql2FhXqZPT2PrVgMN\nGrgZPz6NTz9dTlLSCAID2/DWW9FERlZAVc0sXmzBbNaYOTONL780s3Wr7uzv189OTIyREydkRo70\n57vvrJw4IRMba0RRHPz4o5nLl2V++snMzJlpxMVJVKjgoVs3N3Y79OjhZNkyvTx2ixYeli41Y7PB\nxIl2jh2T+eKLNEJCvFSsqF3Ti3nfPpmhQwNITJR57700OnRw57nRTn7Pn6sbHmmaRFreK5zkGl/3\n0fu6/txwQ8OQ3sKzbxFoERQwwcF6q8s33/QnNVViwgRboTWQr1XLw4ABdj791I8yZby88EIOu5/8\nC5dL933HxmYaloQEmYMHDXTs6Obxx48jy0Pw80ti/PjP6dmzBX/9JeN2ayxerLuYnE6J7783Ychs\nBMfGjSbGjrVht4PRCEajlylT0lizxsS5czL79hmwWDQef9zB6NEBOBwSixenEBICISEwbZqN555z\nEB1t5LPPzLz+uo2ICC979xpJSYFt2ww0bw6RkVmT9dLSYMSIAHbuzCxdvnlzcqGM2nJC795Ovv9e\nL0Xeu7eDOnWKR4egZHPd5xZFUVZetXhl7J7xW1XVHoWsLVt8PSupOPB4wOul0DJlrpCUBGfOyAQG\nkq8b359/GoiJMfLGG3rwuWZND/fcE8fx4xPYsGEZkZFjOXv2eYYPdxEe7mXPHhNBQV5mzfLPKJI3\nYIAdTYPPPtPdJqNHpxEZ6WHMmACSkmTGjk2jQwcXd91VhiZN3HTp4qJMGS+K4uTcORmLBWrWvPY7\nxMRI/POPkQEDAnE4JJ5/3s7Jk3qlVUnSmDUrjWPHZJo29dCxo14Ir2vXYGJi9GcwWdZYsSKFiAgv\nVaoUT+G2U6ckUlL0ZlJlyxaLBEExUFBZST+SaQgmAuPINCSiFKEPYTCQ5ek5txw4IHP8uEzlynrj\n+utlHIWGQmho/p9A27b1UKWKl3r1PMTEQHT0V3zzzZt06tSNhx7ahdEYxsiRDqpXd7Nzp4lZsyyE\nhdTmlcIAACAASURBVGmMH5/Gpk1GqlXz0rWri4oVvdxzjwtZ1st1DxkSxOnT+oEYMyaANWuSCQ/3\nsnOnkZ07jfTrZyckBMqUyfwOZ89KxMQY8PODO+5wc/vtGosXG+ne3UVkpIcKFbzppTl018yXX1oo\nU0Zj5kw/li1LoX17D+++m8bjjwdhteqF+V57LZBy5bx89pm1WPotVK2aWUxQIMiO6xoGVVUXXPlb\nUZShqqqK5jwFgK/5Kffvl+nePZjERBmzWWPRorN07Hid6ckFhCRBjRoa8fFbWLx4JEajH1988T1T\nprRm92592BMTY2DqVGuGaywhQeaNNwIYNcrG0KG6G8vjgbg4L488Evz/7Z15eBTF1offnkky2dnB\nQIJsCqiAyCIoV1A2AbmCn6UgguIGgldUQEAWES8iF1f8UFFAuaKixSKyqGyCBr+giAsKiLIoaEDW\nZLLN2t8fNdkg20TIpKXe5+Fheqan+9ednjpV51Sdw+DBrkIGzTAgNtZkyRInixdH0KqVj06dPIX2\nOXFCBew/+khN23nyySzuv9/FNde4WbHCwb//HQXALbe48hLtNWvm4+uvwwCDP/+0AT6uvNLHZ5+l\ns3ZtOHPnRvLzz3bATmqqEbRhsNrzUxArawfr6w+Gcib/1Zwv7N9v49Qp9Zg0aeIjI+PcGgWAI0eO\nMHLkSG677U7273+EH37YQnp6m7wMqwAHDthxOm20b+9lxoxsqlXz06KFl169lPtm1y4bQ4bEMG1a\nFJMm5fDOOw7uu8/FxRd7qVXLz/z5GTRqZNKihZ9bbnEjZThjx8awa1fh2EauUQBYtMiB0wlNmvhZ\nvTrfL7dqVQR3353DjBmZ1K/vY9cuO7Vq+bn00vzZPomJJhkZBIwC1Kql3TiayktQabc1fx2r9Tjq\n1jUJDze55RY3YWEmTz8dx6FDLgYOdBeZgvqv4PF4eO2113jhhRcYMOA2LrroB1JS1PzO55+P5OGH\ns5k2TfXSH3oom0aNVI6lu+5yceONbqKiTKpUgfR0GDUqmm3bVOO9d68qvDNlShSrVjmJjIQ6dUwM\nA1JTYfv2MNq08VOjhsn06ZG8/HIW8fFQpYrJZZd5+eEH9TPp3t1NdDRkZ5t06eLhww9VsLtDBw/r\n14ezdm04s2dnsWZNGrVqQePGyiV16JDB1q1h1KljsmxZOjt22OjWzUuDBsG7c8rz/Hg8arZXXNy5\njzOVhNWe/dOxuv5gKNYwFEi3bQD209JvI6U8cS6FaSoHLVv6WLUqnd27wxg1Sk0ffeyxMJo399O5\nc3nTZZ3Jpk2bGD9+PImJiaxZs4YmTS5i2LD80cn+/XaaNPHyxhuZ/PKLjXXrwrHZVMGfRx7JpmPH\n/N65222QmpofVDl61CAx0cf8+W6qVTPZs8dOaio0b+7jl1/sjB0bjd9vEBZm8tRTWbhcap5F7dqq\nnGlychhNmvg5eNDGG284yMw06dzZQ/fuHvx+gwMHbDz/vCpC9NRTUXz0kZNYtRibzEyYOjWKZcuU\nEenTx8VDD+WweXMEJ054adfOd04XmP35p8GcOQ5Wrozgf/7HzbBhLmrW1PEFTcmUNGI4vaRnwW0T\nlTdJEyRW8VOeOKHSSO/ZY+e669xnzLv/q/PfDx82sNnA5fqNiRMnsmPHDqZPn06vXr0wAicbMyaH\nnByD1FQ1tTIhwaR375i8BXsHDtjp2dPDoEGxvPeeE4dDJeurUcNkxoxM7rorFp8PZs3K4sYb3YSH\nwzPP2HjhhXjA5JlnMomKUquVAbxelbAvt+F0uWD+fAcnTxps3WrSqpUfj8cgLk6t8r78ci+33urm\nmmuqkDsvo359f6GGPi3NYMOG/G76xo0RNGni58UXozAMkzVrnFx5ZdkXmAX7/GzbFsZLL6lR1rPP\nRtGunZcePc6eQQ8Gqzz7xWF1/cFQUvBZxx/OYzZsCGfYMNXtffHFSFatSqdZMy+7d4dx9dUeEhPL\nN/vINGHjxjCGD7fhdj8DvMjIkcOYO3cuUVFRhfa9+GI/r7ySyR9/KCMSFwdJST727VOPbVKSn5Mn\nVR3ltWsjePHFSN5/P4MuXbxcf72Xzz9Px++Hhg39ZGXBl1+GERtrp2dPN598EsGLL0Yxc2YWDoeJ\ny2UQHW3SrJmftDSoWlX19jdtCqdfPzdJSX4mTYomJ8egeXMv48dnk5Fh4403Ipk3L5NXXnHQsqWP\nm25yc+qUkVcusmpVk1tvdeetNu7f38X27WGBe2Fw6JCNK6/0kZ4Op07ZiI/3/6VCPqfjcp2+XeGZ\n9jUWRMcYKpiiehxpaarofVxc5SlK7vPB+PHZbNsWxvr14aSlwdVXe+nf38Mvv9iYOzeC//3f4FNe\nHDwIt9++HpdrNI0ateKmm7Zwxx0XcJpNANSK4YMHbSQl+bn0UmWI/vvfTGbPjiQiwqR5cz/TpkUy\nYUI2Cxc68HoN3n03gi5dVN2Epk3Vd7KylHHL7Tnfe28OLVp4qVHD5IsvwliyxMkff9iIijI5eNAg\nI8PORRf5qFMHhg518fXXYTidBjk5qlHdtSsMjwdGjowGDF591eSjj9LZti2Mrl3jSUjw8dZbmbRo\n4Sc6GkaPzqFrVw9+PyQkmHnpNWJjVd3qP/4wmDw5ihUrIujWzcOsWVmBKaVnEmyPtU0bH//4h4fP\nPw/nuus8XH55aEYLYH0fvdX1B4M2DCHmzz8Npk2L4p13ImjWzMd//5tJkyahXY368882Xnghkj17\n7PTt6+GBB7KJjDSYP99Brstk0KDgjcKePXt4+OHH8HhSufvul/j4414884yB253DQw/l5PWUT52C\n77+3M3hwHE6nQUyMyerVTlq29HHJJX5efVX5sQ4eVDWgH3gghv37lWezdev8hu/ECfjzTxteL8yd\nm59KdNmyCB5/PBvTNImKMnnkkWiio2HIEBePPhpNVJQq71mvnpc77nBxxRVe9u3L95w6HCbx8eTd\ni5wcg8OHbYwdqwzFb7+FMWtWFAsXZmIYUL26Sffu+bo++iido0cNkpL8NG5ssnp1GMuXqxjE2rUR\n3Hqrm6QkT9D3tyjq1/fzxhsZnDqlSpzqmVCasqDdRRXM6WX2du608847qsHdvTuMtWtDOG0kwMcf\nh7Nnj5qLv3JlBFdf7aVlSx/PPafyAbVq5eWBB8qW8iInB06eTGfKlCn06dOHPn2uY/nyz8nI6Mbv\nv9sAg9mzo9izRzW8pgn//a+DrVvDcTpVw5uZafDzz7a8z3PjG0lJ0LKlnxdeyOLBB7OQ0knNmibr\n1oVx4IDBY49FsWRJBHv32goZjHbtvCQleTFNgwULIunSxcvw4TmMGxeNz6fSaD/+eDRpaWrRXqdO\nPvr0cfPqqxk88EA2S5c6adDAR0KCMuDVqvmpUsUstAbC4TAxTdi0KYz+/WMZNy6KX39VOyQm+tm7\n186jj0bzySdhnDql6kO0aqU0FlUQKJfylGmsXh0aNQq9USiP9sqE1fUHgx4xhJjTk9rFxYXelRQb\nW1hDfLxJVBQMGuTm0ksP0Lhx3TJlCd2yxca//rWc1NSJdOvWhS1btlC7dm0ANm/OHxUZhpkXsHU6\n4b33HAwZ4sJmM/H7DQzDpF495XKZOzeS5GQ7Q4e66N/fQ0wMXHGFj3r1/Nx2WyzffKMe6UmTMrn6\nah9Tp0Zx6lQkc+Zk0rmzF78fhHBz/Dg89JDq4aekhDNrVibx8SYnTihjFBfnL9RA16gBt9zioXFj\nHxMnRpOQ4Oe11zI4edKgcWM/TZr4ee21TKZMiSYpyceYMTn89JPBgAGxuN0GycnhREebPP54Dtu2\nhTF2bAwTJmQzcmRMoGa0ycyZWbRr56Ft29C5ezQa0IahwjndT9mihY8ZMzJ5/fVIOnb05uXXCSVd\nu3q47TaVMG7YsJy8cpXh4dCuXd0yHePjj3dw++0T8PvdwFJ8viuoVi0z7/NBg1z8/LOdnTvtjBmT\nTbNm6hwxMdCzp5s333QwY0Y2hw8bdO7s5YorfCxfHkZkpHLLpKba2LnTRrt2ysAcP27kGQWA774L\nJy7O5ORJ1UsfMSKWN990cvSoash//VWNiHI5fNjGq69mMGVKDLGxPp55JpsffrBTtaqZF6vYv99G\nv37x+P1Qv76br74K48sv7dx7r5vmzf306+ehU6d0IiOVq2n7djtud/45ct1RuSMh0yRgFAAMfv/d\nxrRpOSUW0LGyn9vK2sH6+oNBG4YQExcH99zjRgg3MTHgcIRaEdSvb/Lss1lkZipXSjB5lk6cOMH0\n6dNZsWI1fv+/gbsBG4cPe/F68xdYNWxoMnduJtnZagaQWmxmsG+fjRtu8NCxo5fjx6FbNy8NG6rv\nREUZbN4czpdfqsf2p59cXHppFtHRUKOGScuWXr7/Xn3WooUXny+/UbbZTPbts3PFFV5sNrWGITco\nW7euj6ZNfYwYEUPXrl5GjMhh0qRoPv88nJgYk+XLnbRt68PtBr/fZNq0HBYscLB9exhjxmSza5ed\na69Vxy04eaBhQx933ZXDggWRxMWZjByp4jItW3q59FK1f7Vq/oDxMvnHP7y6qpqmUmC5uWtWz65a\n1FzozEzV442LC70fuDSKm8vt8/lYuHAhM2fOpH///owaNZ4PPqjNxIkqsDtvXgbNmvmKXe2bmmow\nbFgMycnhRESYLFmSQadOhV0qO3bYuO66+LwGv3ZtP5s3p1Onjjrm/v0Gn3wSjtutigU1a+bl1Ckb\nO3aEccMNbhYtcjB8eAZdu/pJSFD3/PBhgypVTI4cMfjtNztNmvjJyIB//jM+77zDh+fw1FPZZGXB\n+vVhzJwZza5duaktfCxd6uSyy4q+rlOn4OBBG9HRJo0b5++Tmmpw/Di43SpBYZ06ftq08RU5O6ss\n998KWFk7WF//2a75rDmHHD+u0j3MmxdJmzZeXnopk0aNQhtn+P13gxUrIti3z8bAgW7atCl5AVZK\nSgrjxo0jPj6e5cuXc8kllwBwxx1uWrf28fnn4Tz8cAzh4ar3XbCBzOXXX20kJ6vhhNtt8PbbEcTG\nKt997iriBg38DBjg5u231bDq9ttdVK1asIdu0qiRn4EDYzFNg59+srFgQSZPPaVWJmdlGfh8YXTs\nGM3s2Zn07evJ6+FfeKFJ+/Z+9u5VuaHCw828hXS5Fdmio1WG1dy1AY0b+7jvPlWDon17H9df76ZG\njcLXVbVq4WytuSQkmCQkAPgqdX1ozfmJHjGEmM8+C6Nfv/yykU8/ncl994W2pPbTT0fyn/+ormtc\nnMnGjWlFNuapqalMnTqVLVu2MG3aNPr375+3ajmXV15xMHFifmqLt992kpFhsGpVBL16uend20N8\nvEp61717PFlZ6vsTJmQxf76DsWNzuOuu/JXXf/5p8N13dsLClEvm9IbY5YLvvrNz/LhB06Z+GjXy\ns3On6pUfO2Zj5swoDh+2YbebpKQUvq69e2306xdHWJjJiBE5fPVVGG3aeLnxRk9eFtTDh2HNmgim\nTYtizJgcnngiKm8EM39+Bv37hz5GpNEUhR4xWAibrXCDW9JUxYpi+/b8oILTaQTqDeTrdLvdvPrq\nq8yePZs77riDlJQUYnO79afRuHF+bzgsLHd2k9p35coIli51cu21Xpo397N4sZPFix0kJPhxuQwG\nDXKzYEEkt9ziJi5gO2vXLrwm4HQcDmjfvnAP/JJLlIG46aZYDh9WwV67nTPqShw+bDB6dDZRUSYL\nF0YwcKCHwYMLG+lq1ZTxufNON/HxZqE4xt69dsCDy6ViKcXVrdBoKjv60a1gTp8LfdllPiZMyKZm\nTT+9e7vp2jX0UxWHD3cRFqYMQd++rkKrcF988UU6derEF198wdq1a5k8eXKxRgGgQwcvixZlMHZs\nNh984CTntHVxudNDQa3+TkkJY8ECB889F0VkJHTp4iG6jJm+d+608f774WzaFEZGRuHPIiPh6aez\naN7cS0KCn4ULM7jwwvzrcrng1CmDb76xM29eJEJ4aNz4zL+Fw6Gm7fbs6aZZMx8tWqh9YmNNrrvO\nw9q1dvr2jeORR6I4cODs/7ysPJfeytrB+vqDIWT9UyHElcDTUsprhRBNgDcBP/ADMFJKGfoJ/RVA\n1arw4IM5DB7sIjbWpIQ2ttwcPw5ffhnOsWMG7dt786ZfFkfnzl42bkwnI8OgUSM/NWuaHDhwgIkT\nJ/Ltt9/y/PPP06NHjzKdOz4emjXzUreuj9q1/WRmGjRo4OXAgTASE315U2EBoqIotMK4YUMfV13l\nLdOsqFw30LFjqjFeuDCDvn0Lu3VatvQze/b3JCU1olYts1BiwNRU+O67MN56S00L+vprO6tWOYu9\nptxsrm+/ncHBgzaqVzcxTZPbb6+C16uC3zVqmEyeHPwKcY0m1IRkxCCEeBR4HcidnPkc8JiU8hpU\n3OPGUOiqCIqa1eBwwAUXnBujALBkSQSDBsUyalQMN98cy2+/lexmtNvhssv8dOjgIzY2k+nTp9Ot\nWzfatm3L9u3by2wUQOU76tkznuuuq8KgQXFERBh88EEGn3ySzqpVzkLF6Nu08TF+vFrTMGFCNtde\n66Fu3bL1Dw4fNvKMAsDmzUX3edq0aUjt2uYZ2WIdDjh5suCbBmlpBmYpp09MNOnY0UfTpn4yMmx4\nvfnHOHTo7P+8rDwrxsrawfr6gyFUrqRfgJvID35fIaX8LPD6I6BbSFT9DTFNCqXZ+P13e6EGtPjv\nmaxYsYIOHTqwf/9+Nm/ezMMPP4zX6+DQIYO0tLKdPzk5nOPH1fm++y6Mn36yUb++Sbt2PurXL9zq\n1qxpMmZMDh9/nM7o0TlnBJZLom5dMy9FBZh07RpcEDghAW6+2U1CghoJXH+9m08/DefHH8v+E2nc\n2Mc996gRQtWqfoYNK1vaEI2mshESwyClXAYUdOAW7KplAGe5NljloaL9lIYBAwa4yQ0et2rlLdCA\nFs2uXbvo378/s2bN4uWXX2bevHnUq1ePo0cNJk0Kp337KgwbFsNvv5X++NStWzj1RbVqJXfBbTbl\nqgk2cNuwoZ/ly50sWJDBypXOYosIlXT/r7zSx0svZTJrViZRUSbz5kVy9GjJQr76ys748VG88UYE\nLpfBxInZJCen8emnznMyDdXKfm4rawfr6w+GyhJ8LthSxQGnStq54B8oOTnZUts7duyo8PNfeOG3\nrFqVwaJFTmbO3MvevZ8XuX96ejp33nknvXr1onfv3mzatClvH1DTQBcujCUnR9U/+OILO1u2bCnx\n/LVr72b69JP06+fmrbcyMc3t5+x6L77YT82an2Kam/MC1sHef78/kwkTolm+3EFSko+oqMPF7r97\nt43+/eN47bVIRo+OYcWKcHbv3sqJE59x4YX+s359ZdGvt/V2SdtlJWTrGIQQDYB3pZQdhRAfAs9K\nKTcLIV4FNkgpZVHf+7utYwiW48dVKukqVcwy+99Lw+/38+677/Lvf/+bHj16MHnyZGrWrHnGfhs2\nhCFE/pqLV17J4NZbK/e8/dz7FR9vUq9e8ffLV6Bzv2OHnaNHDRo18hW5fiOXrVvt9OqVv0J6wAAX\nL7/8F0vbaTTnCCutY8j91Y0GXhdCRAA7gSWhk1R5SU01GDcuilWrHNSv7+O99zJKnWFUGtu3b2fc\nuHEAvPPOO7Ru3brYfVu18vHAA9ksWuSgc2cPV1119qfW7t1rIzNTVWcrKT3IkSMqnUX16maxRW1S\nUw0efTSK1atLvl/ff2/jiSfU9NhJk7K5/PKyuYAuvNCfl28pIsJk4MDQLkzUaM4WITMMUsoDwFWB\n1z8DXUKlpSJJTi5/vpVdu+ysWqUmcv32m521a8Np2rR8Ac5jx44xbdo01q1bx+TJkxkwYAC2Uhz7\nNWua9O37Ffff35K4OJOwMFUMp2rV0mMCfr9aOPfTT3YaNfLRpo2vUG1kUFNEb7pJFecZPNjFlClZ\nRQagDx40uO++GLZuDScx0YeUhRv8H3+08euvNtLSDFavzr9f69aFc+LEJjp27Ji375EjBoMGxQVq\nQ6jtZcsyAoV4SuaCC0xefTWTffvUCO6SS859gaW/8vyEGitrB+vrD4bKEmPQlIGYGJOCK5Br1gy+\nIfJ6vcydO5eOHTsSFxfH1q1bue2220o1Crm4XGkkJJgcO2bj/vtj6N49nnfeiSA7u+TvffednT59\n4vjXv2K44YY4tm07c3HC66878lJSv/WWI68q2+n8+KOdrVvVTKtDh+x88UV+/2bvXoMbb4zj55/t\ngcBx/v2qUcOPedr8U5cLjh4tmH7bHlRd5IQEk6uv9nHZZX690lnzt0E/yhXMX+lxtGihZs20auVl\n5MicYmfeFEdycjKdO3fm448/ZuXKlUyfPp34snSNC5Crf9mycFasiGD/fjsPPhjNzp0lr0I7dMiW\nl5TONI0iG/0GDfINXXi4SXR00S6i+PjCBrJGjfzXR47YOHFCneujjyIYNy6HVq283Huvul9XXXVV\noWMlJJjMmpWFYZjY7SYzZmRRs2bFra08elS5xEpbL5GLlXusVtYO1tcfDKGOMWiCIDoaBg3ycNNN\nHiIjOWORVnEcOnSIKVOm8PXXX/Pkk0/St2/fM5LdlcaPP9pYujSC2rX9/POfbtLSCi8GcxfjXj98\n2MDjgSZNvMTGmmRkGISHmzRteqYff+BAF06nwY4ddh56KIdmzYoeEbVq5eOVVzJ56y0H3bqp2g25\n1K1rUr++lxMnDOx2k0WLHFx/vYsRI1xFBuvDw+GWW9y0bavqIzRu7C/2vqamGni96hzB1Kgojq+/\ntnPXXTFkZhrMmZNJ9+5ePerQVAp0dtUK5lz6KX//3WDnTjsxMSrzaHi4izlz5vDyyy9z9913M2rU\nKKLLmnioAIcOGfToEZ+XgO6ee7IZOtTN7bfHsH+/nREjchg9OueMYPG2bXYGDYolI0M1fE2bevnl\nlzCSkvy0bOkrthH0+cpWHKi4/X75xcbu3QYJCSppX/XqZl521PLe/61b7QweHEtWlsErr2TSu7fn\nLxkHpxP69Injhx9U38zhMElJSc+b5locVvZzW1k7WF+/lWYlac4Sx44ZjBoVw8aNyvd+zz1L2LDh\nUZo3b8769etp0KBBuY/tdBp5RgHgq6/CmTo1hzVrMsjMVBlPT0/nkZkJY8ZE5y0QU8HitDPyFxVF\nWRvc4vZr0sRPkyZlO0ZZSE+H0aOj81aM33NPDFu3phdyfWk0fye0YahgzlWP4+hRI2AUfgYe4q23\nfmHBgv/Qq1fXv3zsCy7wM2CAi8WLHRiGKlEZHU2xMQBQbi6HI//zsDAC7qtz57/P9ddXq2aSmFj0\necpz/222M6/lr7p84uLg+eezuPvumLwRVVJS6YbGyj1WK2sH6+sPBu3R/JsQHu6katVxQEegC8OG\nfXlWjAKoGgRPPJHNhx+ms3ats0y9/uhomDUri0su8ZKY6OOttzJKdZP8FX7/XU1h7dy5Cr16xbF7\n99l7tGNj4bnnVMruxEQfixZllKkRL402bXysW+ckOTmdHj10fEFTedCPYgVTnuXpJWGaJkuXLqVf\nvyvp0OEAkyenMH/+/QwffnZ75rVqmXTq5CM7ezMOR+n7g0pzvWqVkw0bnHTt6i1zsLw87NplZ/Nm\n5Ub7/ff817mkpak1FykpKeU6fqtWflavdrJxoyosdLaupVYtFf8o6/HO9vNTkVhZO1hffzBoV5KF\n+fHHHxk3bhxOp5N58+bRoUOHwCeVJ01F1apwLt1HueSv8VAtbME1Ht9+a+eBB6LJyTF46qnyT1yo\nqGvRaEKNnpVkQU6dOsWMGTP44IMPGD9+PEOGDMF+NuZPhgCnU1VOq1LFLHW1cUn7ZmXBypXhvPlm\nJF26eLjzThd16pikpcENN8Tx44+qDxQf7yc5Ob3YGIRG83clmFlJ2pVkIXw+HwsXLqRDhw74fD7+\n7//+j6FDh1rWKKSmGowdG03btlX417+iOXSo+Ge2tH2jo+HWWz2sWOFk3Lgc6tRRDb/PR6GVzG63\ngd9vuf6QRlOhaMNQwZTXT/nVV1/RvXt3Fi9ezPvvv88zzzxD9erVz7K60jmbftZvvrHz/vsOPB6D\nlSsdbNtWvGezrPuenn+penV4/vlMqlTxExlpMnv2cRITrTvN1Mp+bitrB+vrDwYdY6jkHDlyhGnT\nprFp0yamTp3KzTffHPSq5crK6bNwSpqVE8y+p3P11T6Sk9Px+eDw4e3YbO3K/mWN5jxEjxgqmLLO\nhfZ4PMyZM4dOnTpRs2ZNUlJSEEKE3CiczbncrVv7uPfeHGrU8DN4sIt27YrP/dS6tSqbWZZ9i6Je\nPZP69U3at7e2UbDyXHorawfr6w8Gy3U9z4fg86ZNmxg/fjyJiYnMmDGDiy66KNSSzhnZ2ZCWZhAf\nb1Jato5g9tVoNIXRwedKTEl+yoMHDzJkyBAefvhhpkyZgpSy0hmFs+1njYpSdQ3K0tAHs29xWN1P\nbGX9VtYO1tcfDNowVAKys7OZOXMm1157LS1atOCLL76gd+/eIXcbaTSa8xPLtTx/J1eSaZqsWbOG\nSZMm0apVK5588kmSkpJCLUuj0fwN0dlVLcCePXuYMGECf/zxBy+88AKdO3cOtSSNRqMBtCupwlm7\ndi1TpkyhT58+dO3alc8++8xSRsHqflatP3RYWTtYX38w6BFDBbJu3TpGjBhBz5492bJlC7Vr1w61\nJI1GozkDHWOoQHbs2EFOTg7t2ll7Lr1Go7EeOsZQSWnRokWoJWg0Gk2p6BhDBWN1P6XWH1qsrN/K\n2sH6+oOh0owYhBA24GWgJeAC7pFS7g2tKo1Gozn/qEwjhn5AhJTyKmA88GyI9ZwTrJ5vResPLVbW\nb2XtYH39wVCZDMPVwMcAUsqtQNvQytFoNJrzk8pkGOKB9ALbvoB76W+F1f2UWn9osbJ+K2sH6+sP\nhsrU8KYDcQW2bVLKIiuqFPwDJScnW2p7x44dlUqP1l+59P3d9evt0G6XlUqzjkEIcRPQV0o5lfWB\nJAAACWhJREFUVAjRAZgspexz+n5WXseg0Wg0ocKq6xiWA92FEFsC20NDKUaj0WjOVyqNYZBSmsD9\nodZxrklOTrb07AatP7RYWb+VtYP19QdDZYoxaDQajaYSUGliDGVFxxg0Go0meHRpT41Go9GUG20Y\nKpjyTB2rTGj9ocXK+q2sHayvPxi0YdBoNBpNIXSMQaPRaM4DdIxBo9FoNOVGG4YKxup+Sq0/tFhZ\nv5W1g/X1B4M2DBqNRqMphI4xaDQazXmAjjFoNBqNptxow1DBWN1PqfWHFivrt7J2sL7+YNCGQaPR\naDSF0DEGjUajOQ/QMQaNRqPRlBttGCoYq/sptf7QYmX9VtYO1tcfDNowaDQajaYQOsag0Wg05wE6\nxqDRaDSacqMNQwVjdT+l1h9arKzfytrB+vqDQRsGjUaj0RRCxxg0Go3mPEDHGDQajUZTbkJiGIQQ\n/YUQbxfY7iCESBFCJAshpoRCU0VhdT+l1h9arKzfytrB+vqDocINgxDiReApCruxXgEGSik7AVcK\nIS6vaF0ajUajUYRixLAFuJ+AYRBCxAMOKeX+wOefAN1CoKtC6NSpU6gl/CW0/tBiZf1W1g7W1x8M\nYefqwEKIu4GHTnv7Tinl+0KILgXeiwfSC2w7gUbnSpdGo9FoSuacGQYp5Xxgfhl2TQfiCmzHA6fO\niahKQHJysqV7Hlp/aLGyfitrB+vrD4aQTFcNjBiGSSkHBra/Af4H2A+sAqZKKb8q6rvr16/fBHSu\nGKUajUbzt2Fzt27dupRlx3M2YigFM/Avl+HA24Ad+KQ4owBQ1gvTaDQajUaj0Wg0Go1Go9FoNBqN\nRqPRaDQaTcVhmSR6Qgg78DpwMSpwPVxK+WNoVQWPEKI28DXQVUq5J9R6yooQYjuQFtjcJ6W8O5R6\ngkUIMQHoC4QD/yulXBhiSWVGCHEHcGdgMwpoBdSRUqYX+6VKhBDCBsxD/Xb9wL1Syp9Cq6rsCCEi\nUPqbAB7gQSnld6FVVTpCiCuBp6WU1wohmgBvou7/D8BIKaVZ3HetlETvBsAfSJsxCZgeYj1BI4QI\nB+YCmaHWEgxCiEgAKeW1gX9WMwpdgI5SyquALlhsAaWUcmHuvQe2Af+yilEI0AOICfx2p2G93+69\nQFbg+bkXWBBiPaUihHgU1ZF2BN56DnhMSnkNakBwY0nft4xhkFKuAIYFNhsAJ0OnptzMQuWFSg21\nkCBpBUQLIT4RQmwI9ESsRA9ghxDiA2Al8GGI9ZQLIURb4FIp5bxQawmSbKCKEMIAqgDuEOsJlkuA\njwECo/x6gVQ+lZlfgJvI9wpdIaX8LPD6I0pJO2QZwwAgpfQJId4EZgPvhFhOUAgh7gSOSinXBt6y\njBsPNcKZJaXsSWDNScA9YBVqAW2Am8lfM2NFHgOmhlpEOdgCRAK7USPml0IrJ2i+RXksEEJ0QD1P\nMSFVVApSymWAt8BbBdubDJSBLhYr/bgBkFLeifJVvi6EiAqxnGAYCnQXQnwKXA4sFELUCbGmsrKH\nQGMqpfwZOA4khFRRcBwD1kopvYEeX44QomaoRQWDEKIqcLGUcnOotZSDR4EtUsqm5D/7ESHWFAwL\ngHQhxOdAP9Tv4URoJQWNv8DrOEpJO2QZwyCEGBwIIIIamvopfLGVGillZylll4Cf+FtgiJTySKh1\nlZGhwLMAQoi6qHxWVnKHJQPXQ57+GJRxsxLXABtCLaKcxJCfKPMkagKAPXRygqY9sFFK+Q9gCZAq\npXSFWFOwfCOEyE0l1Av4rKSdLWMYUH+Qy4UQm1H+vlEW/ONYlflAvBDiM2AxMFRKaSWjvBr1w/gS\nFV8YUdKMjErKxcDeUIsoJ7OADoEe9wZggpQyO8SaguEnYJQQ4gvgP6gAtFXIfc5HA08EriEM1Z5q\nNBqNRqPRaDQajUaj0Wg0Go1Go9FoNBqNRqPRaDQajUaj0Wg0ocBKaRk05wlCiAbAPlQWzvkF3h+D\nyhU09Cyd5wBwi5Tyy7NxvFLOFYdafxMPTJFSLj/X59Roykuoaj5rNKXhB2YJIT4LpOGAwnXCzwYm\nFdc5ag3UllJeVEHn02jKjTYMmspKNioNx7tCiI5SSg8FGvFAMsUdUspnT98OjATeBvoANYDHgatR\nifQ8wD+llLkpPYYLIeagkrw9K6V8I3C8vsBEIALIAsZIKVOEEFOBjsAFwHdSyiEFRQsh+gFTUCkf\n0oFHUHUs5qOycm4HrpJS5hT4ziZUio5mwMvAClQW3gsD17xQSvlMcceXUn4V0NUYlVK8LrAVWAvc\nATQEHpVSLhZCNAtocQSOPU9K+UqZ/iKa8wYrpcTQnH88hcrs+lQRn5kUHkEU3DYBh5TyclQqgNeA\nFwLbB8kvemMAmVLKtkB34GkhxCVCiItQNQN6SSmvQKV7XyaEiA58LwloXYRRaIZq0G+SUrZCNeAr\ngD+Ae4C9UsorChqFAnpPSCkvlVLOQRm1DVLKliiDdrsQ4tbijh9wUxHY93qgeeB6mkspOwMPAE8E\n9hkLfBi45t7ANYF02BpNHtowaCotgXxGtwNDhRDdONOVVFKDtjTw/z7gsJRyR2B7L1At8NpEpYEm\nMIL4BOiKalQTgI1CiG+ARYAPVcHLBFKKyRV1HbBeSnkgcMxPgT+BtqVoBfgcQAgRA1wFzAkcIx1V\neasXcG0xx28T0LVOSukMGJ4/CNQQCNyD6oHXy4BHhRBLUfn6H7Rg3ijNOUYbBk2lRkp5EFVDYSFQ\nMFX26fEBB4UpmGDRU8IpCjbwtsC+NlSPvXXuP1Rv/IfAfsVV4DM40wDYKJvLNqPA/qcfx47KSGqj\n6OOHB16fXgDnjOsOJBS8CHgfFffYIYSwVEU7zblHGwZNpUdKuQRVdeoh8kcNR1E9cQK1FTqV8XAF\nG12DgFtJCFEfVdVqPbAR6CGEaBr47HpUqvRISu75536vYeB71wGJKH9/WXQhpXQCKcDIwDGqAINR\n8YLijp9Siq48hBDvALdKKd8LnCM9cAyNJg9tGDSVldPdGw8CvxbYfglIEELsRrl6Pi3jsc6IRQQC\nwquBB6SUv0gpdwL3AYuFEN8CTwJ9pZRZnBnbyENKuQsYgYpH7EDFRvoGGvuirqk4jYOArkKI71FG\nZUmg7nNJxy9W12nHnwYMClxXCrCsQMlHjUaj0Wg0Go1Go9FoNBqNRqPRaDQajUaj0Wg0Go1Go9Fo\nNBqNRqPRaDQajUaj0Wg0mtDx/4cvJ9b7ykSMAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Multi-dimensional version\n", "\n", "We can use the same `linreg.fit` method:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "linreg.fit(train_data, train_target)\n", "prediction = linreg.predict(test_data)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Visualizing the fit\n", "\n", "We cannot easily see the fit in high dimensions, but we can plot *measured vs prediction*:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "linreg.fit(train_data, train_target)\n", "fig,ax = plt.subplots()\n", "ax.scatter(test_target, linreg.predict(test_data))\n", "ax.plot([0,50], [0,50], 'k-')\n", "ax.set_xlabel('Target (test)')\n", "ax.set_ylabel('Predicted (test)')\n", "pass" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nIYTp/h+jpDJ0vsF9sAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Evaluating the results\n", "\n", "### Mean squared error\n", "\n", "This is a very natural way to measure the error:\n", "\n", "$$MSE = \\frac{1}{N}\\sum_{i=1}^{N} (y_i - \\hat{y}_i)^2$$\n", "\n", "where $y_i$ is the actual value for example $i$, and $\\hat{y}_i$ is the prediction for the same example." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn import metrics\n", "mse = metrics.mean_squared_error(test_target, linreg.predict(test_data)) \n", "print(\"MSE is {}\".format(mse))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "MSE is 22.1886932331\n" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "**Problem**: it is not trivial to interpret the value obtained." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Root mean squared error\n", "\n", "$$RMSE = \\sqrt{\\frac{1}{N}\\sum_{i=1}{N} (y_i - \\hat{y}_i)^2}$$\n", "\n", "1. Same units as original target variable\n", "2. If errors really are normal, then just double this value for an estimate of 95% confidence intervals." ] }, { "cell_type": "code", "collapsed": false, "input": [ "rmse = np.sqrt(mse) \n", "print(\"RMSE is {}\".format(rmse))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "RMSE is 4.71048757912\n" ] } ], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Coefficient of determination\n", "\n", "Sometimes, there is another value that is very useful, the *coefficient of determination*." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "*Idea*: compare the MSE with a baseline." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Consider the null predictor, which ignores the input and always returns a contant:\n", "\n", " def predict(features):\n", " return constant\n", "\n", "The *best constant is the mean*:\n", "\n", " def predict(features):\n", " return mean_of_training_target" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Now, compute the ratio of error this predictor with the error of your predictor." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "$$\\text{COD} = 1 - \\frac{ \\sum_i (y_i -\\hat{y}_i)^2}{ \\sum_i (y_i - \\bar{y})^2}\n", " \\approx 1 - \\frac{\\text{MSE}}{\\text{VAR}(y)}$$\n", "\n", "\n", "Where $\\bar{y}_i$ is the *average value of $y$*, i.e.:\n", "\n", "$$\\bar{y} = \\frac{\\sum_i y_i}{N}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Evaluating COD in Boston dataset\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "cod = metrics.r2_score(test_target, linreg.predict(test_data))\n", "print(\"COD is {}\".format(cod))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "COD is 0.732540216176\n" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This measure is also called $R^2$, which is confusing because it is not the square of anything.\n", "\n", "It is also called $Q^2$ sometimes, which is also confusing.\n", "\n", "This measure is the default measure for regression in scikit-learn and we can just use the `score` method:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(linreg.score(test_data, test_target))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.732540216176\n" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Training vs. Testing Data\n", "\n", "Naturally, the results on the training data are better than those obtained on the testing data" ] }, { "cell_type": "code", "collapsed": false, "input": [ "linreg.fit(train_data, train_target)\n", "r2_train = metrics.r2_score(train_target, linreg.predict(train_data))\n", "r2_test = metrics.r2_score(test_target, linreg.predict(test_data))\n", "\n", "print(\"R2 on training: {:.1%}\".format(r2_train))\n", "print(\"R2 on testing: {:.1%}\".format(r2_test))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "R2 on training: 73.7%\n", "R2 on testing: 73.3%\n" ] } ], "prompt_number": 23 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Penalized (or regularized) regression\n", "\n", "The criterion for least squared regression was:\n", "\n", "$$\\beta = \\arg\\min \\sum_j \\epsilon^2_j$$\n", "\n", "That is, *we minimize the fit on the training data*." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "The general expresssion for penalized regression is\n", "\n", "$$\\beta = \\arg\\min \\frac{1}{2N} \\sum_j \\epsilon^2_j + \\alpha R({\\boldsymbol \\beta}),$$\n", "\n", "where $R$ is the penalty (regularization) term and $\\alpha$ is a positive weight.\n", "\n", "That is, we minimize the **sum of the fit plus a regularization term**." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "This is an instance of the [Bias-Variance Tradeoff](http://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### What about the intercept?\n", "\n", "- The intercept is typically not penalized.\n", "- One can simply pre-center the data." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### L1 and L2 penalties\n", "\n", "$L_1$ penalty means that we use the *sum of **absolute values***:\n", "\n", "$$P_1({\\boldsymbol \\beta}) = \\sum_j |\\beta_j|$$\n", "\n", "$L_2$ penalty means that we use the *sum of **squares***:\n", "\n", "$$P_2({\\boldsymbol \\beta}) = \\sum_j \\beta_j^2$$\n", "\n", "(The names come from the generic concept of an $L_p$ norm, see [Wikipedia](http://en.wikipedia.org/wiki/Lp_space) for details)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### L1 penalty: the lasso\n", "\n", "Using the L1 norm, leads us to the *Lasso*!\n", "\n", "Lasso stands for *least absolute shrinkage and selection operator*, but nobody uses that long name." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### In scikit-learn:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "lasso = linear_model.Lasso()\n", "lasso.fit(train_data, train_target)\n", "pass" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Setting the $\\alpha$ parameter:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "lasso = linear_model.Lasso(alpha=0.1)\n", "lasso.fit(train_data, train_target)\n", "pass" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "(We will discuss how to set the $\\alpha$ parameter in a smarter later in the talk)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Normalizing the inputs\n", "\n", "Some features span much higher values. Thus, when our penalty adds all the weights together, it implicitly weighs the low varying features more." ] }, { "cell_type": "code", "collapsed": false, "input": [ "fig,ax = plt.subplots()\n", "ax.plot(train_data.ptp(axis=0))\n", "ax.set_xticklabels(boston.feature_names)\n", "ax.set_xticks(np.arange(train_data.shape[1]))\n", "ax.set_ylabel('Point to point (max-min)')\n", "pass" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nrnlsPQODw6McZXzkqj/bg/3MzEIJE7fOr6Gm/E2z0RNptXS4k4GVTC9TNNVX8nqH+zPSC/PxCGuU\n8XLcKGN3X4S3NwY4Yc5ELl88k4kVpWkdb+7kCm45ewFX/a2VPX0RPvGO6VmZ6al4k8jQMN9evoFT\n5tdyYoJR6SePmsGNKzZy05ObuPLk2Xn7pJ6MLV1hGvKoBtZIGmr8juaCtHSGOOctqd1cXmTe5Eo2\n7+lnYGiYMhcneubdVZ0qBrKrd8AyGFu6eX7bXhpr/BzVGOComQGa6iozshRlsH+Qqx9pZXZtOZcv\nnuXJ5S0Vd4lGo9y6agt7QoNcs2xOUuMwMDjM1x9u4dCpVVx0dEOWW+kuN67YyFGNAZYt8H55j0RE\nhoZ57y9f5IGPv5WSJL/haDTKB3+zhjvOXUidi4kCbvHZ+1/j8sUzOdhO6NAYyAgGh6O8vH3vvoyp\nTnuUcfzsiXxh8Uxq0xxlOKGmvITvv2s+1z++kWsfW89/nzKH8gyWeFa8z4OvdvDyjl5uPbsp5cii\nrKSIa0+dy+UPrmVatZ+zDqnLYivdpS3Yz7l5+GQeo7S4iLrKUrb3JF+Ot6Mvgg+YXJn5+0g2iFXm\nPdjFjMC8vPM9/FoH31puxTLufHYrpcVFfHHxLH73kcO4culsli2YlDHjkchPWVFazHWnzaW6vISv\n/7WF7v7BBJ/MnJ6bqF56vLC1h9/8ZzvXnTo3YWmLkXqB8hKuP30ev169jWc2B9+0/3jJRX9Go1Ha\ng9lxYbl5fiNnpI/UaukIMb+uwjVXtdvf3cJ699cGyUsD8p+tPRx7UA0/+8Ah/Pi9C/n426dz6NSq\nrLqTSop8/NeJs1g0rYor/rKOnXuzU7xMyR3besJ8Z8VGvr5kdlopujMCfq45dS4/WLk5ayUm3GR3\naJDS4iKq/XntwNhXlTcZ6zryMwMrxsL6Sta6PCM97xz4XlwT/f41O/nDSzu5/vR5+03cUQqHUGSI\ny/+8ljMWTubcRVPGdIzmjV38z1Nt/OjsJqZW559PPcaL23r4+XPbuOXs/FgHPRl/enkXm7v6+cLx\nMxO+f82j6zllQS0nzsnP1P3BYWsS5D0fXkRVWbGuie5V3rdoChcdPYOv/bWFNdv35ro5SoYZjka5\n6clNNNVX8t5x+P0Xz56IHD6Fqx9pZW84c27PbLMlS+4rtxltLsi6PJ0DEqOkyMfcSRWsc3HUqwZk\n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\n", "text": [ "" ] } ], "prompt_number": 26 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Normalization ensures that all the inputs are on the same scale." ] }, { "cell_type": "code", "collapsed": false, "input": [ "lasso = linear_model.Lasso(normalize=True, alpha=.1)\n", "lasso.fit(train_data, train_target)\n", "pass" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 27 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Evaluating Lasso vs. OLS" ] }, { "cell_type": "code", "collapsed": false, "input": [ "linreg.fit(train_data, train_target)\n", "r2_ols_train = linreg.score(train_data, train_target)\n", "r2_ols = linreg.score(test_data, test_target)\n", "\n", "lasso.fit(train_data, train_target)\n", "r2_lasso_train = lasso.score(train_data, train_target)\n", "r2_lasso = lasso.score(test_data, test_target)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "results = \"\"\"\\\n", " | TRAINING | TESTING\n", "------+----------+---------\n", "OLS | {:.2%} | {:.2%}\n", "------+----------+---------\n", "Lasso | {:.2%} | {:.2%}\n", "---------------------------\n", "\"\"\".format(r2_ols_train, r2_ols, r2_lasso_train, r2_lasso)\n" ], "language": "python", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "print(results)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " | TRAINING | TESTING\n", "------+----------+---------\n", "OLS | 73.66% | 73.25%\n", "------+----------+---------\n", "Lasso | 60.06% | 57.75%\n", "---------------------------\n", "\n" ] } ], "prompt_number": 30 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In a bit, we will see another dataset, where Lasso shines brighter." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### L2 penalty: Ridge regression\n", "\n", "Using the L2 norm, leads us to *Ridge* regression (a.k.a. Tikhonov regularization).\n", "\n", "Unlike Lasso, which was invented only recently (1996), Ridge goes back a few decades." ] }, { "cell_type": "code", "collapsed": false, "input": [ "ridge = linear_model.Ridge(normalize=True, alpha=.1)\n", "\n", "ridge.fit(train_data, train_target)\n", "r2_ridge_train = ridge.score(train_data, train_target)\n", "r2_ridge = ridge.score(test_data, test_target)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "results = \"\"\"\\\n", " | TRAINING | TESTING\n", "------+----------+---------\n", "OLS | {:.2%} | {:.2%}\n", "------+----------+---------\n", "Lasso | {:.2%} | {:.2%}\n", "------+----------+---------\n", "Ridge | {:.2%} | {:.2%}\n", "---------------------------\n", "\"\"\".format(r2_ols_train, r2_ols,\n", " r2_lasso_train, r2_lasso,\n", " r2_ridge_train, r2_ridge)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "prompt_number": 32 }, { "cell_type": "code", "collapsed": false, "input": [ "print(results)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " | TRAINING | TESTING\n", "------+----------+---------\n", "OLS | 73.66% | 73.25%\n", "------+----------+---------\n", "Lasso | 60.06% | 57.75%\n", "------+----------+---------\n", "Ridge | 72.54% | 73.51%\n", "---------------------------\n", "\n" ] } ], "prompt_number": 33 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Lasso returns a sparse solution\n", "\n", "This means that **some coefficients are exactly zero**:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(lasso.coef_)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[-0. 0. -0. 0. -0. 3.07533624\n", " -0. 0. -0. -0. -0.37561765 0.\n", " -0.42028728]\n" ] } ], "prompt_number": 34 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use Lasso to select important features!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Higher penalties (higher $\\alpha$) means more sparsity:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "lasso.alpha = .2\n", "lasso.fit(train_data, train_target)\n", "print(lasso.coef_)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[-0. 0. -0. 0. -0. 1.53655857\n", " -0. 0. -0. -0. -0. 0.\n", " -0.28228527]\n" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Too high value for $\\alpha$ results in zeros everywhere:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "lasso.alpha = 1.\n", "lasso.fit(train_data, train_target)\n", "print(lasso.coef_)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[-0. 0. -0. 0. -0. 0. -0. 0. -0. -0. -0. 0. -0.]\n" ] } ], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Looking at the Lasso Path\n", "\n", "This is a way to visualize what happens when we increase/decrease regularization." ] }, { "cell_type": "code", "collapsed": false, "input": [ "alphas = np.linspace(.01, 1000., 1000)\n", "alphas, coefs, _= lasso.path(train_data, train_target, alphas=alphas)\n", "\n", "fig,ax = plt.subplots()\n", "ax.plot(alphas, coefs.T)\n", "ax.set_xscale('log')\n", "ax.set_xlim(alphas.max(), alphas.min())\n", "ax.set_xlabel(r'$\\alpha$')\n", "ax.set_ylabel('Coefficient value')\n", "pass" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 37 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Another look at the path\n", "\n", "Instead of the values, we can also just count how many are non zero:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fig,ax = plt.subplots()\n", "ax.plot(alphas, np.sum(coefs != 0.0, axis=0)) \n", "ax.set_xscale('log')\n", "ax.set_xlim(alphas.max(), alphas.min())\n", "ax.set_ylim(-.1, 13.1)\n", "ax.set_xlabel(r'$\\alpha$')\n", "ax.set_ylabel('Nr of non-zero coefficients')\n", "pass" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nQmCC\n", "text": [ "" ] } ], "prompt_number": 38 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Ridge solutions are not sparse\n", "\n", "Unlike the Lasso, ridge does not set any coefficients to zero!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "ridge.fit(train_data, train_target)\n", "print(ridge.coef_)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ -7.16516257e-02 2.61968547e-02 -6.48444922e-02 2.39713486e+00\n", " -1.09193751e+01 4.03200954e+00 -9.44894418e-03 -1.06942801e+00\n", " 1.31698631e-01 -6.45883648e-03 -8.87770177e-01 7.47187438e-03\n", " -4.17026739e-01]\n" ] } ], "prompt_number": 39 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Comparing OLS, Lasso, and Ridge" ] }, { "cell_type": "code", "collapsed": false, "input": [ "lasso.alpha = 0.1\n", "lasso.fit(train_data, train_target)\n", "ridge.alpha = 0.1\n", "ridge.fit(train_data, train_target)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 40, "text": [ "Ridge(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=None,\n", " normalize=True, solver='auto', tol=0.001)" ] } ], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "fig,ax = plt.subplots()\n", "ax.plot(linreg.coef_, label='OLS')\n", "ax.plot(lasso.coef_, label=r'Lasso ($\\alpha$=0.1)')\n", "ax.plot(ridge.coef_, label=r'Ridge ($\\alpha$=0.1)')\n", "ax.set_xticklabels(boston.feature_names)\n", "ax.set_xticks(np.arange(train_data.shape[1]))\n", "ax.legend(loc='best')\n", "pass" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n/8J/knllyMNiGyYAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 41 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- OLS is always larger than either Lasso or Ridge\n", "- Lasso sets some weights to zero; Ridge does not." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Why does the Lasso return a sparse solution while Ridge does not?\n", "\n", "#### Argument 1: algorithmic argument\n", "\n", "Consider the following pseudo-algorithm:\n", "\n", "1. Start with ${\\boldsymbol \\beta} = 0$.\n", "2. Find the best index to increment $j$ and spend a bit of your budget to move $\\beta_j$ in the right direction.\n", "3. If this is better than before, then **goto 2**; else, stop.\n", "\n", "Because Ridge uses squared penalties, $\\beta$s that are still stuck at zero are very cheap in step 2, so we might choose them even if they are not very good.\n", "\n", "With Lasso, however, they always cost the same. Therefore, the algorithm will typically keep choosing the same index repeatedtly.\n", "\n", "*Note*: An improved version of this idea forms the basis of the famous [Least-Angle Regression](http://en.wikipedia.org/wiki/Least-angle_regression) method to solve the Lasso problem." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Argument 2: geometric argument\n", "\n", "- Consider Lasso (left) vs Ridge (right)\n", "\n", "![Figure 2](ridge-vs-lasso.png)\n", "\n", "- The filled areas are those were the penalty is below a certain limit, while the ellipsis show the isocontours.\n", "- With Lasso, they intersect at edges, with Ridge, in intermediate values.\n", "\n", "(This is Figure 2 from the paper *Regression shrinkage and selection via the lasso*, by R. Tibshirani [[JSTOR Version](http://www.jstor.org/stable/2346178)].)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Combining L1 and L2 penalties: elastic nets\n", "\n", "We can combine the two types of penalty to obtain *elastic nets*:\n", "\n", "$$P({\\boldsymbol \\beta}) = \\alpha_1 P_1({\\boldsymbol \\beta}) + \\alpha_2 P_2({\\boldsymbol \\beta}) = \\alpha_1 \\sum_j |\\beta_j| + \\alpha_2 \\sum_j \\beta_j^2$$\n", "\n", "We now have two penalties, with different weights, $\\alpha_1$ and $\\alpha_2$." ] }, { "cell_type": "code", "collapsed": false, "input": [ "en = linear_model.ElasticNet(normalize=True)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 42 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Instead of $\\alpha_1$, and $\\alpha_2$, in scikit-learn one specifies two parameters, $\\alpha$ and $\\rho$ (a.k.a. `l1_ratio`)\n", "\n", "$$\\alpha_1 = \\rho \\alpha$$\n", "\n", "$$\\alpha_2 = \\frac{1}{2} (1-\\rho) \\alpha$$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "en = linear_model.ElasticNet(normalize=True, alpha=0.1, l1_ratio=.5)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 43 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "This way, `alpha` defines *amount of penalty* and `l1_ratio` how the penalty is split between L1 and L2." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## An Elastic net can interpolate between Lasso and Ridge" ] }, { "cell_type": "code", "collapsed": false, "input": [ "lasso = linear_model.ElasticNet(normalize=True, alpha=0.1, l1_ratio=1.) \n", "ridge = linear_model.ElasticNet(normalize=True, alpha=0.1, l1_ratio=0.)\n", "half_way =linear_model.ElasticNet(normalize=True, alpha=0.1, l1_ratio=.5)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 44 }, { "cell_type": "markdown", "metadata": {}, "source": [ "One issue with pure Lasso is that it is greedy and unstable\n", "\n", "- Between very similar features, it will choose the one that is best\n", "- Even if the differences are very slight\n", "- An elastic net with a small L2 penalty will make the learner \"split the difference\"" ] }, { "cell_type": "code", "collapsed": false, "input": [ "almost_lasso = linear_model.ElasticNet(normalize=True, alpha=0.1, l1_ratio=.95)\n", "almost_lasso.fit(train_data, train_target)\n", "lasso.fit(train_data, train_target)\n", "\n", "print(almost_lasso.coef_)\n", "print(lasso.coef_)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ -1.86363805e-02 0.00000000e+00 -4.24226376e-02 0.00000000e+00\n", " -1.35017945e+00 1.50491971e+00 -4.61639434e-04 0.00000000e+00\n", " -3.20320213e-03 -1.68314941e-03 -2.77118152e-01 1.22517256e-04\n", " -1.55662223e-01]\n", "[-0. 0. -0. 0. -0. 3.07533624\n", " -0. 0. -0. -0. -0.37561765 0.\n", " -0.42028728]\n" ] } ], "prompt_number": 45 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Tackling a large problem\n", "\n", "The boston dataset is small, so it does not fully do justice to the power of penalized regression.\n", "\n", "## The 10-K Corpus\n", "\n", "Quoting from the [online page](http://www.ark.cs.cmu.edu/10K/) for this dataset:\n", "\n", "> The corpus contains 10-K reports from many US companies during years 1996-2006, as well as measured volatility of stock returns for the twelve-month periods preceding and following each report\n", "\n", "This was generated and used in this paper:\n", "\n", "> Predicting Risk from Financial Reports with Regression\n", "Shimon Kogan, Dimitry Levin, Bryan R. Routledge, Jacob S. Sagi, and Noah A. Smith\n", "NAACL-HLT 2009, Boulder, CO, May\u2013June 2009\n", "[Online version of paper](http://www.cs.cmu.edu/~nasmith/papers/kogan+levin+routledge+sagi+smith.naacl09.pdf)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "If you are reading this at home, you need to download the E2006 dataset. You can use the following code block (unfortunately, this is Python 2 only code)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "source_location = 'http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/regression/E2006.train.bz2'\n", "\n", "from os import path\n", "if not path.exists('E2006.train.bz2'):\n", " import urllib\n", " urllib.urlretrieve(source_location, 'E2600.train.bz2')" ], "language": "python", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "prompt_number": 46 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Loading and Splitting the Dataset" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.datasets import load_svmlight_file\n", "E2006_data, E2006_target = load_svmlight_file('E2006.train.bz2')\n", "print(E2006_data.shape)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(16087, 150360)\n" ] } ], "prompt_number": 47 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have 16k examples and 150k features!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(type(E2006_data))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 48 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dataset is stored in memory as a sparse matrix as most entries are zero.\n", "\n", "## Split into train/test" ] }, { "cell_type": "code", "collapsed": false, "input": [ "E2_train_data, E2_test_data, E2_train_target, E2_test_target = \\\n", " train_test_split(E2006_data, E2006_target, train_size=.8)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 49 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Trying OLS on E2006 dataset" ] }, { "cell_type": "code", "collapsed": false, "input": [ "linreg.fit(E2_train_data, E2_train_target)\n", "r2_ols_train = linreg.score(E2_train_data, E2_train_target)\n", "r2_ols = linreg.score(E2_test_data, E2_test_target)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 50 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Note that we just used the same code as before even though we are using a sparse matrix!\n", "- Underneath the hood, scikit-learn selects the right implementation." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(\"R2 Training (OLS): {:.1%}\".format(r2_ols_train))\n", "print(\"R2 Testing (OLS): {:.1%}\".format(r2_ols))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "R2 Training (OLS): 100.0%\n", "R2 Testing (OLS): 33.7%\n" ] } ], "prompt_number": 51 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "(Note that you may get different values as the train/test split was random)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Ordinary Least Squares fails when \"P > N\"\n", "\n", "- $P$ is the number of dimensions\n", "- $N$ is the number of examples\n", "- when $P > N$, we have more dimensions than examples\n", "- mathematically, it \"always\" fits training data perfectly!, but generalizes poorly" ] }, { "cell_type": "code", "collapsed": false, "input": [ "lasso = linear_model.Lasso(normalize=True, alpha=.01)\n", "lasso.fit(E2_train_data, E2_train_target)\n", "\n", "r2_lasso_train = lasso.score(E2_train_data, E2_train_target)\n", "r2_lasso = lasso.score(E2_test_data, E2_test_target)\n", "ridge = linear_model.Ridge(normalize=True, alpha=.01)\n", "ridge.fit(E2_train_data, E2_train_target)\n", "\n", "r2_ridge_train = ridge.score(E2_train_data, E2_train_target)\n", "r2_ridge = ridge.score(E2_test_data, E2_test_target)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "results_p_gt_n = \"\"\"\\\n", " | TRAINING | TESTING\n", "------+----------+---------\n", "OLS | {:.2%} | {:.2%}\n", "------+----------+---------\n", "Lasso | {:.2%} | {:.2%}\n", "------+----------+---------\n", "Ridge | {:.2%} | {:.2%}\n", "---------------------------\n", "\"\"\".format(r2_ols_train, r2_ols,\n", " r2_lasso_train, r2_lasso,\n", " r2_ridge_train, r2_ridge)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "print(results_p_gt_n)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " | TRAINING | TESTING\n", "------+----------+---------\n", "OLS | 100.00% | 33.68%\n", "------+----------+---------\n", "Lasso | 0.00% | -0.12%\n", "------+----------+---------\n", "Ridge | 68.18% | 58.20%\n", "---------------------------\n", "\n" ] } ], "prompt_number": 54 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Fitting hyperparameters properly\n", "\n", "Those $\\alpha$ values I set, worked well for the examples, but why did I use them and not others?\n", "\n", "So far, we have been **cheating** and should be sent to machine learning re-education camp.\n", "\n", "- We need to set parameters (I've heard it argued that *setting hyperparameters is the last big open problem in statistics*)\n", "- So far, we hand waived this problem away\n", "- I gave you parameters that worked because I cheated!\n", "- Remember that parameters depend on scale of inputs (sklearn normalization scales variables, but not target)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Generic parameter setting solution\n", "\n", "Validation dataset or cross-validation!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- These technique work well for this problem, because we use *warm starts*.\n", "- We already took advantage of this fact, when using the `path` method." ] }, { "cell_type": "code", "collapsed": false, "input": [ "enCV = linear_model.ElasticNetCV(normalize=True,\n", " l1_ratio=[.1, .5, .7, .9, .95, .99, 1],\n", " )" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 55 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "**Use multiple processors**" ] }, { "cell_type": "code", "collapsed": false, "input": [ "enCV = linear_model.ElasticNetCV(normalize=True,\n", " l1_ratio=[.1, .5, .7, .9, .95, .99, 1],\n", " n_jobs=-1,\n", " )" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 56 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Let me repeat that" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn import linear_model\n", "enCV = linear_model.ElasticNetCV(normalize=True,\n", " l1_ratio=[.1, .5, .7, .9, .95, .99, 1],\n", " n_jobs=-1,\n", " )" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 57 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This can be your **default object for regression**\n", "\n", "- Generally applicable\n", "- Takes advantage of multiple CPUs\n", "- Automatically sets hyperparameters\n", "- Explores different models" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Final solution for E2006 dataset." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Note: only on very up to date versions of scikit-learn (github version right now) does this work well on my computer.\n", "\n", "Older versions take too much memory and therefore are better tackled with a single CPU:\n", "\n", " enCV.n_jobs = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The full example shown above takes too long for a demo, so let us run a scaled down version (which takes a few minutes):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "enCV = linear_model.ElasticNetCV(normalize=True,\n", " l1_ratio=[.1, .5, .9, .99],\n", " alphas=[.001, .01, .05, .1, .25, .5, 1.],\n", " n_jobs=-1,\n", " )\n", "enCV.fit(E2_train_data, E2_train_target)\n", "r2_enCV_train = enCV.score(E2_train_data, E2_train_target)\n", "r2_enCV = enCV.score(E2_test_data, E2_test_target)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 58 }, { "cell_type": "markdown", "metadata": {}, "source": [ "When you can run analyses offline, then you may gain a bit from exploring more of the parameter space." ] }, { "cell_type": "code", "collapsed": false, "input": [ "result_en_cv = \"\"\"\\\n", " | TRAINING | TESTING\n", "------+----------+---------\n", "OLS | {:.2%} | {:.2%}\n", "------+----------+---------\n", "Lasso | {:.2%} | {:.2%}\n", "------+----------+---------\n", "Ridge | {:.2%} | {:.2%}\n", "------+----------+---------\n", "EN-CV | {:.2%} | {:.2%}\n", "---------------------------\n", "\"\"\".format(r2_ols_train, r2_ols,\n", " r2_lasso_train, r2_lasso,\n", " r2_ridge_train, r2_ridge,\n", " r2_enCV_train, r2_enCV)\n" ], "language": "python", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "prompt_number": 59 }, { "cell_type": "code", "collapsed": false, "input": [ "print(result_en_cv)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " | TRAINING | TESTING\n", "------+----------+---------\n", "OLS | 100.00% | 33.68%\n", "------+----------+---------\n", "Lasso | 0.00% | -0.12%\n", "------+----------+---------\n", "Ridge | 68.18% | 58.20%\n", "------+----------+---------\n", "EN-CV | 58.84% | 59.92%\n", "---------------------------\n", "\n" ] } ], "prompt_number": 60 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Loose Ends" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are some parameters which can be interesting, which we did not look at:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(enCV)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "ElasticNetCV(alphas=[0.001, 0.01, 0.05, 0.1, 0.25, 0.5, 1.0], copy_X=True,\n", " cv=None, eps=0.001, fit_intercept=True,\n", " l1_ratio=[0.1, 0.5, 0.9, 0.99], max_iter=1000, n_alphas=100,\n", " n_jobs=-1, normalize=True, positive=False, precompute='auto',\n", " random_state=None, selection='cyclic', tol=0.0001, verbose=0)\n" ] } ], "prompt_number": 61 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- `alphas` lets you specify the $\\alpha$ values to test (similar to `l1_ratio`). It is fine to leave this unspecified.\n", "- `fit_intercept` can be set to `False` to avoid setting an intercept.\n", "- `n_jobs` sets the number of job (-1 means all CPUs)\n", "- `positive` can be used to force all coefficients to be positive.\n", "\n", "All the other ones are algorithm-internal and useful mainly if you are having problems (try updating scikit-learn first, though, newer versions have better implementations for large problems)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Conclusions\n", "\n", "- Linear regression is a solid trick\n", "- Lasso gives sparse solutions, Ridge does not.\n", "- Lasso can be used as a feature selection method.\n", "- Elastic nets combines both penalties\n", "- Use `ElasticNetCV` with a wide range of parameters as your \"go to regression method\"\n", "- [scikit-learn](http://scikit-learn.org/) is great" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Thank you for your time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This presentation was based on Chapter 7 (*Regression*) of [Building Machine Learning Systems with Python](http://shop.oreilly.com/product/9781782161400.do)\n", "\n", "\n", "Find me at [luispedro.org](http://luispedro.org) or on twitter at [@luispedrocoelho](https://twitter.com/luispedrocoelho)\n", "\n", "\n", "This whole presentation can be obtained at [github.com/luispedro/PenalizedRegression](https://github.com/luispedro/PenalizedRegression) or viewed using the [NBViewer](http://nbviewer.ipython.org/github/luispedro/PenalizedRegression/blob/master/PenalizedRegression.ipynb)." ] } ], "metadata": {} } ] }