{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook implements the simple linear regression via the old fashioned way, and then by gradient descent.\n", "- [Simple Linear Regression](#simple-linear-regression)\n", "- [Simple Linear Regression via Gradient Descent](#Simple-Linear-Regression-via-Gradient-Descent)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "\n", "# for plots, cause visuals\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt \n", "import seaborn as sns\n", "from matplotlib.animation import FuncAnimation\n", "from IPython.display import HTML" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# the data\n", "\n", "First, we need data:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x_points = np.arange(0,100)\n", "y_points = x_points*1.5 + np.random.normal(size=len(x_points))*15 #np.random.randint(0,40,len(x))\n", "plt.scatter(x_points,y_points);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# simple linear regression\n", "\n", "Since this is a simple 1 variable regression, the solution will be `y = mx + b` where y are the predicted points, m is the gradient of the line and b is the y-intercept.\n", "\n", "So a first a helper function to return predicted values given a lines `m` and `b`:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def predict(x, m=0, b=0):\n", " \"\"\"takes in array or list x, gradient m and y-intercept b \n", " and returns a list of preddicted values\"\"\"\n", " return [m*point + b for point in x]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now another function to calculate the regression error. We minus the prediction from actual values and square them (so negatives and pluses don't cancel out) and add them all up." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "690697.73789037031" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def regression_error(m, b, x, y):\n", " \"\"\"takes in gradient m and y-intercept b and \n", " arrays x and y which are the actual datapoints and returns cost\"\"\"\n", " cost = 0\n", " preds = predict(x, m, b)\n", " for i in range(len(x)):\n", " cost += (y[i] - preds[i]) ** 2 \n", " return cost\n", "\n", "regression_error(m=0.1, b=0.2, x=x_points, y=y_points)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets eyeball a guessed a regression line vs the actual data:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total Error: 195,382.52\n" ] }, { "data": { "image/png": "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\n/wGhTmgbZumFXAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def plot(x, y, Ypreds):\n", " \"\"\"takes in data points x,y and regression line predictions Ypreds\n", " and draws a scatter plot of x,y, the regression line X,Y\n", " and then draws a line from each point x,y and x,Ypreds\"\"\"\n", " \n", " plt.title(\"Chart of regression line vs actual points\")\n", " # plot scatter plot of actual values\n", " plt.scatter(x, y, label=\"our data points\");\n", " \n", " # plot the regression line\n", " plt.plot(x, Ypreds, label=\"regression line\", color=\"g\")\n", " \n", " # plot line from points to regression line to show diff\n", " # there must be faster way to do this instead of a for loop\n", " for i in range(len(x)):\n", " x1, y1 = [x[i], x[i]], [y[i], Ypreds[i]]\n", " plt.plot(x1,y1, color=\"r\", alpha=0.3, linewidth=0.8, linestyle=\"dashed\")\n", " \n", " plt.text(-2,140,\"The red lines show the error from actual to predicted values\", fontsize=10)\n", " plt.xlabel(\"X values\"), plt.ylabel(\"Y values\")\n", " plt.legend()\n", " plt.show()\n", " \n", "# lets look at a sample regression line with m=0.8 and b=0.3\n", "print(f\"Total Error: {regression_error(0.8, 0.3, x_points, y_points):,.2f}\")\n", "plot(x_points, y_points, predict(x_points, 0.8 ,3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's pretty clear visually that my eyeballed line of best fit could defintely be better.\n", "\n", "Since this is a simple linear regression, the solution will be a line `y=mx + b` where m is the slope of the line and b is the y intercept. Now we can math the solution quite easily as per [wikipedia](https://en.wikipedia.org/wiki/Simple_linear_regression) and [khan academy](https://www.khanacademy.org/math/statistics-probability/describing-relationships-quantitative-data/more-on-regression/v/regression-line-example):" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total Error: 23,065.05\n", "Gradient 1.520, Intercept 0.578\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAETCAYAAADUAmpRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4U9X7wD9JuukuLRvK6mEP2UNBRAQVQRwool8EAVEc\nKA4U2TLEhSjiBgEVFUVB/MkUEShDNuJhlD3b0j3SNs3vjwzSNknTkhRKz+d5eEhv7j3j3pvznvOe\nd2iMRiMKhUKhqNhor3UDFAqFQnHtUcJAoVAoFEoYKBQKhUIJA4VCoVCghIFCoVAoUMJAoVAoFIDX\ntW6AomQIIXTAc8AgTM/PB1gBTJBS6oUQC4ADUsq3r6KOEOBnKWWPEl43BJgCHJJS3lHa+ssaIUR1\n4EcpZWc3lXcCuN/856tSyvsdn339IoR4AvCRUs4r5fXRmN7FQDe1ZxUwVkr5r5Nz2gHDpJRPuqPO\nioQSBuWPj4Ew4DYpZYoQohKwBPgceNRNdYQB7Utx3WPAa1LKxW5qR5kgpTwHuEUQFCp3J1eEQnmk\nK3DgWjfCgpTyThdOawrU9HRbbkSUMChHCCHqAo8A1aSUqQBSygwhxJMUHMw6CyG2AFUw/ZgHmc8b\nCozEtJoIB2ZKKT82z+iHAZWAFHMZ/kKIPUAbKaXBpg0hwEdAK8AI/A68BszGJEDqCiEipZTv2VzT\nHZgDZJjraA/0Asab25KJaca3VQgRAMwHOgLJwL/mfg4xz7i3AS3MdW4HPgRqA97Ad1LK6UIIL2Au\npsEsB4gDHgeyHRyvjHkGK4TwBt4FbgMM5vrGSCnTzPUvMH9XG1gqpXzZyfPqDnwopWxmXrGlAs2B\nWsB/wENSynQhRGPz/YkAdMAHUsovC5XVC3hHStnc/HcocByoBzwEPGnuUzYwsvDsWQhRBfgE0ztR\nFTgJPCilvCSEiDF/FwXkA9PMZd0D3C6EyAIigcpSytHm8iZZ/hZCdATeAnyBasAaKeUwJ/clGtgI\n/Am0BDTAaCnlJhfu//1AIPAmpufXzFzv08BRTCvTECHEV8AzwFdAQ3O//jHfm3xHbavIqD2D8sVN\nwEGLILAgpbwgpfzJ5lANoCcQg2mWNEAIEQgMB+6UUrYGBmL6AVtoCnSXUt6KaYDMklK2shUEZj4A\nEjENam0x/ZjHSinHADuBl2wFgQ3NgIellC0xDaTTbdoyAvjJvMp5A9MkpZG5D60LlXNAStlYSvkz\nsAj4UkrZBpOA6SmEeBDoBHQHWpi/i8MkQBwdt2U8UN3cr5aYfiOzbb4PlFLejEn4PmMW0K7SBugN\nNDbX8YBZcP2ISZ3UBugGjDUPsLasAQKFEG3Nfz8M/IZJwLwP9JZStgM+xSTsCvMQsFVK2QmTAMnk\nykryO+AHKWVT4E5Mz2Yd8CvwnpTyo2L69RwmNWUHoAlwjxCiTTHX1Ab+kFK2Al4FlpoFQXH330IH\nTMKxNfAFMElKeRqYAGySUj4O3AsEmetoZ76uXjHtqrAoYVC+yMe1Z7ZcSplpHsgPAFFSynTgbuAu\nIcRU4HVMMywL+woLGQf0wTTbNUop9Zhm8X1cuO60lPKk+fPtmGaQ68yrjyXmvjXANBh9IaXMN7dn\nYaFyNgGYBUc3YKq5jFhMA0wrYD/mWaW5r8uklFucHC/cv/lSylzzDHJuof79AiClPAtcwrTCcpX/\nk1LqpZS55raEYxLY9YEvzf3YCPhTSAhKKY2YBr0h5kOPA5+bn/EPwBYhxIeYVnZfFK5YSjnHfM4L\nwDxMwjlQCBGOadD93HzeaSllfRffBQv/A0KFEK+Zyw6g4LtljyQp5TfmOn/H9FxaUPz9t3BSSrnH\n/HkX9p/D30BTIcSfmATO+1LKoyXoV4VCCYPyxXagsRAiyPagEKKGEOI3IYS/+VCuzddGQCOEqAns\nAepg+pGML1R2uottKPzOaDGpaIrDtnwdsM688mhlnrl1xCS48jCpDSwUXpmk25ShAToXKmO6lDIZ\n84rFfP1SIcQYR8dL2L8sm8/GQm0tDnvX6oBkO/fiKzvXfwU8KIRoBYRKKf8EkFIOBvpiUpO8AvxU\n+EIhxCxMKpR4TKuH1eb682zaYzlX2LxLjvrqY/N5EyYh/p+5jjMUf1/yCv2txfRMXH2/in0OUsrj\nmCYYM4BgYK0Qojzv4XgUJQzKEebZ6BJMs8hgAPP/84BEKWWWk8vbYhoIpkkp/8C0SrBYJxUmD9AJ\nIez9oP8AnhZCaIQQvphUPGtK2JX1QC8hRCNzG+4E9gF+mFQfjwshtOb9g0HYDFQWzDPXWOAFcxmh\nwGagnxDibkxqji1SyknA10BLR8ft9O9JIYS3EEKLSRdd0v6VBAlkCyEGm/tRC5NQLKJmMT//bZj0\n+5+bz68shDiN6fm/j0nIF+4TwB2YZsaLMK1obgd05vv4D6bZvaX+zUAIpvfAMhDHA23Mz70Spj0f\nhBBhmN6tV8yqyhqYBmB775UtkUKI3uYy+mKawOzn6u+/tc1CiFGYBOhqKeUr5rKblaCsCoUSBuWP\npzBtqm4xqxW2mf9+opjrVmOasUkhxG5MKpV4TD/cwpzHtPQ+JISIKPTds5g2Gveb/0lMm3kuI6U8\niEmIfCeE2AtMBe6RUmZgmsVlm8tei2ngynRQ1CCgoxBiP6b78K2UcgmmTe2DwAEhxE5M+v1JTo7b\nMg24gGkVdQjTwPJcSfpXEqSUOUA/4AkhxD5Mz+kNKeVmB5d8hkmFtNB8fYK5zeuEEP8AM7H/LkwB\n3jaf8xOm1aHl2Q/CtOLYi8lM+Qkp5QVM9+tZIcQ4TJOQeOAIsArYaq4/CdMz22W+p+MwCRN775Ut\n2cCj5jpfB/qbVV5Xe/+3Ao2EED9jEvY64F9z24IxbdQr7KBRIawV1xNCiIeAVCnlKvPMcBmmmd3H\n17hpCjfhbv8DhXtQKwPF9cYB4HXzqucAcA6zSkShUHgOtTJQKBQKhVoZKBQKhUIJA4VCoVBQTsNR\nxMenlVq3FRYWQFKSI+OUG5eK2O+K2GeomP2uiH2Gkvc7MjLIof9HhVsZeHkVZ/58Y1IR+10R+wwV\ns98Vsc/g3n5XOGGgUCgUiqIoYaBQKBQKJQwUCoVCoYSBQqFQKFDCQKFQKKzocw1cSspEn1s4WO6N\nT7k0LVUoFAp3YsjPZ+n6o+w+HM/lVD3hwb60jolkYI8G6LQVY86shIFCoajwLF1/lLU7z1j/TkzV\nW/8e1DPGbfXocw2kpOsJCfTF1/v6ModVwkChUFRo9LkGdh+Ot/vd7sMJ3Net/lUP3OVh5XF9tELh\nNubMeYcLFy6U+vovvviE5ct/5MgRyVdffebGlikU1ycp6Xoup+qtf0emXrJ+TkrLJiVdb++yEmFZ\neSSm6jFyZeWxdP31k4VTCYMbjOeee5GqVatedTkNGwoef3y4G1qkUFzfhAT6Eh7sa/07KvXKKiEs\nyI+QQF97l7lMcSuP62Wz+oZUE03aMp4Vx5bb/U6r1ZCfX/LQRn3r92dS52kOv1+1agW//fYr+fn5\nDBs2ktTUVJYuXYJWq6VFi1aMGvUMycnJTJ78Orm5udSqVYddu3awdOlyHn30QWrVqoO3txcvvfQ6\nM2dOISUlBYDnn3+J+vUbMH36ZM6cOY1er+eBBx6id++7+OSTj9i9+x8Mhjy6devB4MFDGD16BC+9\n9Brh4RFMnfoGGRkZGAwGxo59gQYNmvG//z1Eq1Y3ceyYaUYyc+a7BAYWzTGya9dOfvllGZMnz+Ch\nh+6lefOWnDp1kvDwcKZNewuj0cjs2dM5c+Y0+fn5DB8+iptualvi+6pQXGt8vXW0jokssGdgoXVM\n5atWEdlbecQHRwFXVh5RYQFXVYc7uCGFwbUiKCiImTPfJTU1haeeeoLPP1+En58fU6e+wY4dsWzd\nupmbb+7OgAEPsGNHLDt2xAKQlZXFkCHDiIlpxLx5H9CmTXvuvfd+Tp8+xfTpk3nnnQ/Ys2cXn3yy\nAI1Gw/btpuvWrPk/5s79hIiIyqxataJAWxYu/IK2bTvw4IMPEx9/idGjh/Pdd8vJyMigZ887GDPm\nZSZPHk9s7GZ69rzDab/OnTvLnDkfU6VKVUaNGsqhQ/9y5IgkJCSUceMmkJKSzNNPj2Dx4u89c2MV\nCg8zsIcpS+fuwwnEh0QREexH65jK1uNXg2XlkWgWCFGp8VZh4I6Vh7u4IYXBpM7THM7iIyODiI9P\n80i9tWvXAeDMmdMkJycxduyzAGRmZnL27BlOnDhBnz53A9CiRetC10YDEBd3lF27drJu3WoA0tJS\nCQioxLPPvshbb71JZmYGvXr1AWDChKnMnz+XxMREOnbsXKC8kyeP06tXb3OfowgMDCQp6TIAMTEC\ngKioKuTk5BTbr5CQUKpUqWpzjZ5jx46yb99u/v33AAAGQx7JycmEhoaW4I4pFNcei4XPfd3qc1+3\n+qSdq0tQ9Si3Wft4euXhLm5IYXCt0GhMWzDVqtUgKqoK778/Dy8vL1atWkHDhjGcOXOGAwf207Ch\n4ODB/YWuNUWWrVMnml69mtCrV2+Ski6zYsVyEhISkPIQM2a8jV6v57777uL223uzYcM6Jk2aDsDg\nwQ8UmOHXqVOXvXv3EBPTiPj4S6SmphIcHGKprYT9Knp+nTrRREVF8dhjQ9Hrs1m48EuCg4NLVK5C\ncS1xZOEz2P8i+XWqubUuT6483IUSBh4gLCyMgQMfYfToERgMBqpVq06PHrczePAQpk6dwPr1a6hc\nORIvr6K3/7HHhjJz5lR+/fUnMjMzGDp0BBEREVy+nMiTTw5Fq9Xy0EOD8fHxITg4mBEjhuDr60u7\ndh2ts3dTOY8zY8YU/vxzHXq9nilTptitr7T06zeAWbOmMXr0CDIy0rn33gfQXicmcgqFKzjyLahe\n6RLdu7i3Lp1Wy6CeMR5ZebiLcpkD+WqS23hSTVQcW7f+TWhoGI0bN2XHjm0sWvQVH3wwv0zqvpb9\nvlZUxD5Dxex3SfuszzUw/rNYqx7flubZF3jq9YEeG6y9t24mt5N7pE1J++0suY1aGZQh1arVYMaM\nKeh0OvLz83n++bHXukkKRYXEmYXPQb8q142FT1mihEEZEh1dl08++epaN0OhqPA4s/DpcPkoIYHd\nPVZ3fli4x8q+GpSSV6FQVDgsFj72aFgrxKP6fINo5LGyrwa1MlAoFBUSRxY+PYL8yfdgvd6xW9y2\nZ+BOlDBQKBQVEkcWPp4UBNczSk2kUCgqNL7eOqqdi7OqhnT793m0PqPu+pyDe1QYCCE6CCH+NH9u\nLYQ4K4T40/xvoPn4cCHETiFErBDibk+2pzDXe1ajiRPHsWvXToffHzt2lD17drm93tjYLfzyy08O\nv09NTWH16v9ze70KxfWANt29ZrmFx5m89h3cWr678JiIEkK8DDwKZJgPtQHelVK+Y3NOVeBZoC3g\nB/wthFgjpbz6mLFOKA+xxV3hzz/XERERQatWN7m13MKhLQpz9OgRNm/eaA13oVCUdzxh4eNonHkk\nKhNji1YlKiszN5PP9n3MokMLmX3Le9xa+za3t9eT65VjwABgkfnvNoAQQvQDjgDPA+2BzebBXy+E\nOAq0AHZ4sF0eyWqUl5fH9OmTOXfuLAaDgYceeoTbbutljSJap040y5f/SGJiInfe2ZdXXhlDcHAI\nnTp14ZFH/mctZ9my71m5cjkREZVJSkoCICMjnZkzp5GenkZCQjwDBjxI16638PvvK/Hy8iYmphEX\nL17gp59+IC8vD41Gw/TpbxeIEzR37lwOHZIkJSWRlpbK88+/TMuWrVi9+ne+//5bvL29qVWrNi+/\n/DqrV//OyZMn6N//PiZNep2oqCqcPXuGJk2aMnbsOL7++kuOHj3CL7/8RGhoKIsXL8TLy4vKlSOZ\nPHm68kRWlDtsLXxySzhQ20Ofa2DxH5LNB67kFing4exiHYZ8A0vlN8za/ibnM84R6htGfo4v+lyD\n2y2ePCYMpJTLhBDRNoe2A59LKf8RQrwOTAT2ACk256QBIRRDWFgAXl6luxHZOXnsO5Zo97t9xxIZ\neZ8/fj4lvy2LFy+mWrUo5s59n/T0dAYMGECvXrfi4+NFWFgAkZFBBAb6kZ3tS3h4JZKSLvPLL8vx\n8fGxlpGQkMDPP3/PihUr0Gg0DBgwgNDQADIyLjNgQD969erFxYsXefTRRxkx4nHuv/8+KleuTLdu\nnZg/fz5fffUF/v7+TJgwgUOHdnPPPfcUaGNISBDz5n3IkSNHePHFF1m4cCELFnzGzz//TGBgINOn\nT2fdut8ICgogIMCH8PBKnD17mq+/XoC/vz89e/YEsnn22dF89913PPHE/3j22Wd58skR9O7dm+XL\nl+PvryE4OKjE989TREZeP20pSypiv6+qz3/9BbfcYvqcngCRVcnOySMpVU9YsK/LY4LBkM+XKw6y\ndf854pOz7Z4Tdy6VviHOxxmj0ciqI6t4dd2rHLh0AD8vP3pHDSMi4U5Wf3WWNbW307FZNYb2beq2\nZ12WOxk/SymTLZ+BucBfgG1PgoDkwhcWJikps9SNyNNoiU/KsvtdQnIWx04klsrz8MCB/2jbtr3V\nNbxWrTrs2yfJyckjKSmT+Pg00tKyycjQc/lyBlWrViMlRQ9c0Yjt3/8ftWpFm49DTExjkpMzCQqq\nzMqVv7NixSoCAiqh1+cQH59GRoYeP79s4uPT8PGpxPPPv0hAQAAnT56gfv1GRdzUmzZtRXx8GqGh\nVbl0KZ79+yW1a0eTlWUkKyuNmJhm7NgRS5MmzcjMzOHy5QyqVath/j6T0NBwzp+/THJyJnp9LvHx\naYwY8QyLFi3gq68WUqdONK1adUCvL1kgPE9REcMyQMXs99X22Ts5k1zz9dq9h1gce7lUauRv1h62\nG53U1sP5n0o1nY4zuy/+w5StE9h8bhNajZZBjR4lRv8QO/fmkgI0TbnEwaRIft0UB0D/LtEu99OZ\n4CjL9fwfQoj25s+3Af9gWi3cLITwE0KEAI2BA55sRFhwwaxGBb67itji0dHR7Nu3G4DMzAyOHTtG\n9erV8fHxJTExAYDDh/+znm+JcGpLzZq1OX48Dr0+G4PBwOHDEoDvvltMs2YtmDBhKj169MQST0qr\n1ZKfbyQ9PZ0vvviEyZOn88or4/H19cVezCkpDwGmMNmRkZFUq1aDEyeOk5VlEo579uyiVq3aBa6x\nF7HUUi/Ar7/+zLBhI/jww08xGo389defJbpvCsX1gK2Fz/pdZ11OUWm7Oewso5lt9rTamuwi44w+\n18DOU/8y9P/+xx3LbuX0v5voVac3Gx7cwqybP0D7l7RbbuyB824zgCnLlcEoYK4QIhe4AIyQUqYK\nIT4ANmESTK9LKe2vrdyEn4+XR2KL33OPKYrnqFHD0Ov1DB06nLCwcB54YCDvvDOTKlWqUrmyfY9H\nC2FhYQwe/D+efHIooaFh+Pv7A9Clyy28995brFu3msDAQHQ6HTk5OQjRmHnz5hAdXZfmzVvy5JOP\no9N5ERQUREJC0Zfy8GHJc8+NIisri5dfHk9oaChDh47k2WdHotFoqVmzFk8+OdqaS8ERNWrUJC7u\nKN9//w2NGzfl5ZefJyCgEv7+/nTu3LVU90+huJZYLHz0uQY2ZziYsR9O4L5u9fH11tndHBa1wxzG\nO7KlQ3COdZwx5Ofz+ertLImbizSuwqgxUNuvKV83fZQmdz0FwKWkTDLTsqwK9EvBV8aRhOQst8VR\nqpBRSy9cTDE/yASS0rIJC7oSW7w8WROVhO++W4CfXyD9+99/rZtSZlREdQlUzH5fbZ91+/dhaN6C\nS0mZTH9/Nan+ptwctgO6VgPTR3QkKizAoTrIz0dHdo5ppt70zEEO1mwKQOW0eIw1al7Jl9DlZjJy\nM3j6p8msTlhIniYLcTmSSn5DqJbXmYcrZ9Lrib6ASUB9/fpnbA0vatwSFebP5KHtXZ7EOotaemOO\nfMDcue8xevQIBg26jwED7mL06BGMH/8K27ZtY8rk1xnUM4ZpwzswfURHpg3vwKCeMW4VBLGxW3jz\nzUkFju3atZOJE8cB8NprL7mtLme8+eYkYmO3uLVMWz8DT5TvDjZu3ECvXr344Yfvrmk7li1bWuJr\nzp8/x4gRQ4oc/+WXn8jLy3NDq1zj5MkTjB49AjD5vOTm5to978KFC/z9918ul3vPPc7TrDrD9jfk\nTiy+BSGBvjTNumIBZKvesaiRnamDHNG8ZTTThndkUM8Y8upG8/XBr+iwpDWrEuejNfrQNGs491wY\nTfW8LmjQsCYnwqr+8fXWEXjbLXbL7dismtusiq5PVzg38MwzYwBTovqTJ08watQzAMTF/Ws9x9db\nd83C1E6fPrtM63vmmWfcNlssD34Gmzf/xauvvkrz5u2uaTsWLvyS++4b6JayFi36it6973JrkiJX\nmTx5hsPvdu3awcmTJ+ja1f6AVZ7w9dbRsFYoWzOKfmdRI5+JT3eoDtLnGOjSrCr/nUouEO9osP9F\nDF5afj/+Gx+uHc+O3GP46/zpduku/PwewZsAEoIvWcus8t8eUtJbWcenh+toMOpqFtFmDO3blMuX\n7TS2FNywwsAZp0+f5sUXnyUp6TJdutzMsGEjOXbsKO+/Pxuj0UhISAjjxk0kMDDQes0XX3zCgQP7\nyMrK4tVX32Dnzm2sWfMHGo2G227rxQMPPMSJE8eZMWMKfn7++Pv7ERTkOA3kPffcwa+//sHo0SNo\n2FAQF3eMzMx0pk6dRdWq1fjxx++KlL9x43qnNv0//fQDv/++Eq1WS+PGTXj+edPq45dffuKHH5aQ\nlJTC2LGv0qRJM779djHr1q1Gp9PRsmVrRo58mkGD7mPJkh9JTk5mwIA7WbFiNf7+ATz55ON8+eUS\naz22fgaW8r/55mvS09Ot5dtrvy27d//Dp5/OQ6fTUb16Dat/w2+//Up+fj7Dho1kxowp1KkTTXR0\nXR544GFmzJiCwWBAo9Hw3HNjadgwhvvuu9t6zrPPvgjA339vJDZ2C0ePSl544VUmTnyt2HIGDuxP\ns2YtOH36FG3atCMjI51Dhw5Su3Yd3nhjaoG2b9iwtohPR0hICO+99xaHDh0kNzePYcNGEBd3jNTU\nFN5+eyZNmjS1Tkr0ej2PPHI/P/64gt27/+Grrz4jPz+frKwsJk6chre3d5H3ZeXK5Vy+nMikSa8x\nY8Y7zJ37Hvv27QHg9tt78+CDDxc4f/DgB2jRohXHj8cRHBzMpEnT2bBhbYH7m5qaytKlS9BqtbRo\n0YpRo54hISGBKVPGYzQaCQ+PsJZ3//19WbLkRy5dusisWdPIzc3Fz8+PiROnsXjxArKzs2nevAXV\nqtUo8jvy9/fnrbfe5PjxOGrUqFkk7/bRo0eYM+dt5s79BICXX36eJ554krNnzxS5z/Z+QwBjxoyh\nd+97aNGiFbNnT+fMmdPk5+czfPgobrqpLZ988hG7d/+DwZBHt249GDx4SIGybH0Lut/eknNndEUC\n2N3fvR7frD3MLnkJWz21bfjr8GA/Bt9hyjFuG+/o8MqNPP/zVLZfiKVuipZHOz3Oc61f5tfZa9iF\nacC33V8I8dMV2GT2TrrMoJ5duK9bfVLS9YQE+uLrrUOnc582o0IKg5ycHGbMeJv8/Hzuu+8uhg0b\nyaxZ0xg3bgJ169Zj5crlLFmykJEjny5wXZ06dXn++bEcPx7HunVrmDfvcwDGjHmaDh06Mm/eHJ54\nYiTt2nVk8eIFnDx5wqX2NG7clOeee5FPPvmINWv+oGvXW+yWv2bNHwwa9Ci33tqT339fSUZGBkFB\nV0zFVq1awYsvvkLjxk35+ecfrSoFIRrx0ktjWLjwG1atWomvrx/r169h/vwv0el0vP76y8TGbqFl\ny9YcPLifM2dOU7dufXbu3EFAgD/t2nUs0N7HHhvKL78so1+/ARw4sA8hGjFkyBOsWrWCVatW4u8f\nYLf9tWtHAyYb6lmz3uTjjz8nLCyczz77mFWrVuDlZdr8njnzXQAuXbrIl18uJiQklPHjX+aBBx7i\n5pu7c+SIZObMqXzxxaIC51jo2rUbGzduYMCAfjRu3MKlci5cOM+cOfOpXLkyffr04NNPFzBmzMs8\n+GA/0tLSCtzn06dPMXv2HPz8/HjrrTfZvn0rvr5+pKQk89lnX1sH2eHDR7Fs2feMHfsqq1atsPvs\njx+PY8KEqVSuHMnXX3/Jhg1r6dWrT5Hz7r67PwsWfMGkSdPZvHkT58+f49NPF2AwGBg1ahht2rSj\nfv0r+XSzs7Pp1asPrVrdxLx5c/jll2UEB4dY729qagpPPfUEn3++CD8/P6ZOfYMdO2LZtGkjPXve\nwT333Mu6dav5+ecfC7Tjo4/eZ/DgIXTs2Jm//97I0aNHGDx4iHll0I0RI4YU+R3FxAhycnL49NMF\nXLhwgT//XFegzAYNGpKTk8OFC+fx8vImOTmZmJhGxMZuKXKfizPCWLFiOSEhoYwbN4GUlGSefnoE\nixd/z5o1/8fcuZ8QEVHZ7rPQJsSTX6mSuUENGdTIq0gAO0f7BLbYGqEEnovjv5B0psVO5vjOX/k3\nCnrXvYvxHSYRE24SGOHdO4OdMh2F0fakNqNCCoN69epbnb10ZpOykyeP8847MwEwGPKoWbN2ketq\n164DQFzcMS5evMBzz40CIC0tjdOnT3Pq1CkaN24GQPPmrVwWBjExphejSpUqJCYmOiz/mWfGsGjR\nApYt+546daK55ZbuBcp57bUJfPvtYs6fn0PTps2tx4VoDEB4eAR6fTYnT56gadPmVnVDy5atOH78\nGN269WDr1s2cP3+WESOe4u+/N6LVarn77n5O21+4fEfttwiD5OQkEhMTeOONVwHQ6/W0a9eBmjVr\nWe8xQEhIqHWQP3HiBC1bmsJuNGwouHTpYpFzHOFKOcHBIVStasoh7e/vT9269QCoVCmQnBw9tu4w\nYWHhTJs20erT0axZCy5ePEnTpi3MZQUzfPgoJy26Mq+MjIzk/fdn4+8fQHz8JZo3b+m0L2B6V1u2\nbIVGo8HLy4umTZtz4kRcAWHg5eVlDVPSrFlLYmM306xZC+v9PXPmNMnJSYwd+ywAmZmZnD17htOn\nT9G3773uoaZIAAAgAElEQVQANG/esogwOHXqJM2amfrZtWs3gAKDq73fkb+/P40bmzZSq1atSlRU\nlSJ9uvvufvzf//2Gt7c3d95p2ji1d58d3lGzIcyxY0fZt283//57wNqG5ORkJkyYyvz5c0lMTLQb\nbkV37iz5daIB8N6xjdxOXUy6+nNx5Nap5nSf4GJIFBE2vggAlzIv8eueubyx5w8MRgNtm7fn185T\n6VitU4FrB4ckQdui6p+bb+1W4Ly8MsiBUCGFgR3TeWrXrsP48VOoWrUq+/btsfoG2KLVaqznRkfX\n4513PkCj0bB06RLq129I3bp1OXBgHx07dua//w6WoD0FG+SofItNf1hYOG+99SZ//fUnffpcie33\n66/LGTt2HL6+vrzwwmj2799rt/w6daL57rvF5OXlodPp2LNnN71730W7dh1YtOgrfH396NSpC198\nMR8vL2/rD/nKfbjiZ1CS9lsICQklKiqKmTPfJTAwkL//3oi/fwAXL14o4H9hqwKz+HF07dqNI0ek\nVYXhSugLV8qx509hD4tPx7JlKwHTqsdoNBIdHc2GDeus50yY8CrvvvuhdZDy8fGxvlNSXvE3mTXr\nTb7/fjkBAZWYNm2i07o1Gi1Go5E6deqyatWvDBz4CHl5eRw4sK/AewCm8ChHjhymYcMY9u/fS926\n9a1lgCkFa1RUFd5/fx5eXl6sWrWChg1jOHnyJAcP7qNhwxgOHfq3SBvq1KnLoUMHadeuA6tX/05q\nagqVKgViNJoCP9v7Hel0Xqxb9wfwMAkJ8cTHFx1Ub7utF889NwqtVst7733o8D4X7mNmZibe3t4c\nPXrU3L5ooqKieOyxoej12Sxc+CUBAQFs2LCOSZOmAyYVWs+ed1C1ajWn99sWZ2kys739efn+FtSM\nCiI9J415e+Yyb89coi9mEB3TgNc7TOKuen3tvmO6vDxrGO0C6p//DmFo1Nh6niYnB0/bfVZIYWCP\nF18cx7RpE6y65FdffcPhuQ0bxtC2bTueemoYOTm5NG7clMjISEaPHsO0aRP59ttFhIaG4uNTOgc2\nR+UXZ9Nfv34Dnn56OAEBAURGRtKkSTO7S+L69RvQo0dPRo0ahtFopEWLltxyS3c0Gg1RUVWoWrUq\nWq2WWrXqEGYngJetn0FJ2m9Bq9Xy3HNjeeml5zAajQQEVOKNNyZz8eIFu+UBPP3088yaNY1vvzUJ\nsXHjHD8fZ1xtOZUqVbLr03HnnX3ZuXM7o0YNw2Aw8PjjwwFTqtMpU95gzJiXWb58GaNGDUOIxlQy\nqyTuuKMPTz01HH9/P8LCIuz6h1ho2bIVY8c+y9y5n7B79z+MHPk4ubm59OjRE2Fn5rhkyUIuXrxA\nlSpVGT58FGvX/mH9LiwsjIEDH2H06BEYDAaqVatOjx6387//DWPKlPGsXbua6tVr2Ll/zzF79nQW\nLvwCPz8/JkyYyoUL5/n66y+JiWlk93dUq1ZtduzYxvDh/6Nq1WoFYmZZCAgIoEGDGAyGPAICKmE0\nGu3e52rVqluvefDBhxk5cgjVq9egenXT8X79TP4+o0ePICMjnXvvfQAfHx+Cg4MZMWIIvr6+tGvX\nkSpVqhao32BeCQIYbfZsLAHsnKXJbJ55ntAQb7488Blv75hJQlY8kf5RDLl/Go80fgxvXdE9oMIU\nVv9oky5j60qmOx5HfgmEV2mokH4GFc0GGypmvytin8HU727durNkyY/4+pZuQlKe0Oca0Pl4Y8jJ\nLbWZpeZyIkabDXMrRqNVlWC7Z2DxITBipIvmdz6vuY64lGOINH/u6fE8o1o9Q6B3YNHyCpOXB3as\nw7y3bi6QDa3w3xZK+o478zNQKwOFQlEuKeAFnKYnPKj0oei95H/WwdZr727yWrYGCqaoLJwmMy/4\nKIf8FnL81H5OpuoY0nQY4yIfJqxJe/uV2EEXdwyDec/Qgj7XQEL1egTZRCY12FmluRslDBSKG5Af\nf7RvvXQj4YlQ9ACaTPuBMC1pMpu3yOXddbP4v6QNkA13d+zHFx0nUD+0IWTZD4LpCG1iAgZMwsBW\nuGnPniHf7LE8sEcDKMaKyh3csB7ICoXixsWZdc/uwwlFgrcVl9UwP6Ky3eO2AewuZJznhQ3PcPuy\nLqTu3kCHap1YNWAtX/ZeZBIEgPdVZB60CLfEVD1RKZcKBMjzNvuUeBK1MlAoFOUOZ9Y9SWnZ1uBt\nrmY1NNSrb/2ca5M5MK99B9JyUvlw9/vM3/sRWXlZxIQJnu8/mq6dHnPZCs0RFpPR4oTbw80NeDow\nvBIGCoWi3OHMusc2FL2rqiSLbwGA9vw58uvVJ8eQw++/TOXV5MUkZifSRh/JoDtm8XCjwXhp7Q+d\nxoCSOYRZTEYLCzfbyKRJadmk6QJxHM/APSg1kUKhKHf4eutoHWNfj27xAi6pKsmC9sJ5lh9ZRpdv\n2/J17Bz0hhxeavs6n96zmgcbPupQEADWjWdX0R03JaixCDcLtqEpwoL88G3XpkTllga1MlAoFOWS\nwtY9lhhCluOuqpLgim/B5rObWLnxeb4IOYK31psHOzzMHZWGcmRnHh+e3Ul+jQtOLZa8dm4nr63r\n1kQWLMLNUZ6VSrt3WnMueAolDBQKRbnEYt1zX7f6eGU1I8+/UgE/A2eqpNBAX3Ly8q2J5ffVrcS0\nlfez9tRqqmihf4MBjOswga078q74FqRc4mBQpFOLJY2DMN+OsDUZtRVuhfOsaLZtLVG5pUEJA4VC\nUa7x9dYRefQY8Y1bFznuaLadqc9j4hfb8Q1O5VTwDxj+W8E/1aFL9ZuZ0GkKrau0MauZYu3WaZv1\n7GrItzEZtRVutqEpygolDBQKRanQ5xquyaBVEgqrkiyZyNJyUjjq+xPHjSvJT82hbUhtvrnrHW6r\n3ctqIVTcpq69dJO57UqmyvHet6eIZ7G9yKS5doLruRslDBQKRYlw1VyzTImwE0qCgrPtyydrM3v1\nEf7lV474/ECuNg2//AhE9iAaV+rNzdU7FzAVLaxmKrypWzipPdj3KHYHOvlfgcB1nkAJA4VCUSJc\nMdcs81VDkyaQkO7wa28vDfu3fMqy/G/I8ruElzGARtmPUTfnLnT4kpKXW2SmX9ymrr1+2XoUu0J+\nYFDxJ1E0cJ0n8KgwEEJ0AGZJKbsLIVoBcwEDoAcek1JeFELMAboClmhL/aSUKZ5sl0KhKB3FmWv2\nv7keyzfFlf2qYdMmaGzfrHPj6Q1M2TqB0AN70Ud7UVd/Dw1z7sfHeMVy39FM39mmrjswNHeco6Gs\n8ZgwEEK8DDwKWBJ0zgGekVLuEUKMBF4BXgDaAHdIKYsmEFAoFNcVxZlrfrvmMJsPXAlF7q54QVDy\n1cb+hH1M3TqBP0+vB2Bkq7voHjaS3Xvzi5zraKZf0k3dkiah8dq+rViTUXuB6zyBJ1cGx4ABwCLz\n3w9JKc/b1JsthNACDYFPhRBVgC+klF96sE0KheIqKM5c879TSXavuxrrG5f2KGzCQJ9OO8XMbdP4\n8fBSaiUbuaXZrUzoNJkWka1MZXkfLfFM39V0kyVNQqMx5Dn8zlngOk+ssjwmDKSUy4QQ0TZ/nwcQ\nQnQGRgO3AJUwqY7eBXTABiHETinlPmdlh4UF4OVVegkZGemanu5GoyL2uyL2GTzb7y4ta/Drprgi\nx1uLKNb/c/pKGwqtGnQ+3kRWrlTi+j5bvt/uHkWAvw/D+5vTu0Z2xisriembpvPB9g/IMeTQskpL\n3rtrPLe2vb9Aec893IbsnDySUvWEBfvi5+PGYfDQbmheghVQaAA4eFa2/bb1cSjQb9z3rMt0A1kI\nMRB4HbhLShkvhNABc6SUmebv1wMtAafCICnJfohZV6jICU8qWr9v5D47U5l4ut99O9UmMyuniOdv\n/5uj2XP4ksN4QYac3ALtckXto881sHnvWbvfbd57jj7ta2HU5LL+j+k8d2EBKfpkOuZW59Hek7gv\n5kG8Ll50eC+8gLSULNx5p7yTM8ktyb1v1ArsnO9Kv329daVJbuPwuzITBkKIwcBIoLuU8rL5cAyw\nVAjRGlOcpK7AwrJqk0JR3rgezDpt9ehp5+oSVD3KOpgXZ32jzzVwOTWbtf+cYd/RhGL74GyP4nJa\nBl/v+5p5B2dT78AZNCKU8R2mcn/YPUTUqo1Woy2TdJG2lDQJjSOT0dL4OFwtZSIMzCuAD4BTwE9C\nCICNUsqJQohFQCyQC3wtpXQ9k7xCUcHwVEKX0uDrrSPwXBy5da4Mto7iBd3fvR7frD3M7sPx1pWD\nhcJ9sF0x2NujuBQcSbxuN0cqLWLFtuP46nwZ1WMEfTQPIbfpmXN2O/k1ztE6JpLB/kU3iz1JfgmT\n0DgyGS2Nj8PV4lFhIKU8AXQ0/1k0s7rpnNnAbE+2Q6G4ESjOrNMd4RGuFkerBtv8wY7YJeMx5BuL\nrBhaNazMun9MKpMMzVm2BSwlwWsfGjQMFIN4pf3r7NxnsO5j2OrXg2truLto6mCPYc+juDSUxsfh\nalEhrBWKcoI9lYkFi+qgrMkPszvHw9dbR7VzccWGkrbtw+U0PRt2nSUxVY+RKysGI9C6pYaDwXNY\nXn0eCV77aBzQmS03LWLubfOJ9KtO7IHzdsvfesnoMFT1tUafa+B89XoO2zewRwN6tq1JRLAfWg1E\nBPvRs21Nt/k4FEZ5ICsU5QRXErrocw2cT8jA4GGbdAsGF+zqnen9bfug1UB+IbvMHE0qnx1ZyFHt\nSnLJpUl0C77tNIXbonvgvXUzueby45Ov5B621a9HHDtISnpHt+vXHeGKR7GrJqNlHbhOCQOFopzg\nTHXQsmEEyzYeM20sp+kJD/KlRf0IeratRXiwn9sGkcIWQN6xWxyqRSyrBmdCrMD5NoIgIvUM2ypv\n46jvMvLIpKZ/bcZ3nkj/Bveh1RRUaIQE+hIZ6s+lJJNAsC07yN/HI/p1R7jiUWy77+NKWGxXfRyu\nFiUMFIpyhKMNWqPRWGRjecPuc2zYfY4IN1gcObJicrZBa1k1OBNiF819aFE/nH3HEklIzeS09way\ncr/mP79UvPOD6JsyiPeGvkuwX8EBMc+m/I7Nqtn1fagTU71sw0AX41F8Pe/7KGGgUJQj7G3QAoz/\nzH7cfXCPxZEjK6ZqwYnc6mC/1HbVYE+ItagfTq+YRoTWrIKPl5bxv3zJX4b3SNOdIjrUm/r6+2ig\nH0D3BlH46orO7m29fYf2bWr1fbD1LL7NQ/p1RzjzKIZrYzLqKkoYKBTlEFuzzktJmQ518raUdubp\nbDa7ihp0dmF/wpGVkffWzcQGnGXq1olsOfc3Gp2WBvQi2utBQo1VwAcO7D3BvoS8IqsbWx8Cnc6+\nft2V2D9lybUwGXUVZU2kUJRzCidTj0q9MnC7w+LImRVT6LF/HZZp1BWda9paGcWlHGPW9un0WXYb\nW879zcDgbvw5cAsbhi/ltqbNyM4xkJ1jICrlknUlsnT9UadttejXLcKpuJm6uykuCY1FZWYPT5mM\nuooSBgpFOcWyQetsgLEVDKWdeToTNlE6g8MyHc3Ik7OTGbdpLF2/bcevSZu4KaoNy/utYn79V2kc\n0QTAacA7iylmSb19ywKd/K/Yc8raZNRVlJpIoSin2Jp12urkL4YUVRFB6WeezjaAG9YKcVimbv++\nAtY1GbkZfLL3I9Zufoed4VnUDanHCz0n0rd+f1OGsVObAdf16q54+5ZFukhbXElCc61zHTtCCQOF\nopxiu0FrO8BoMpqwdPtF9h1NLGBxdDUzT0dWTLd0aOfwGm16GgYgLz+Pbw4tYvaOGVzMvEDlGpWZ\n0XYqjzV5HG+dt/V8y0zfVb26K96+ZZEusrSUlcmoqyhhoFDcQPh664g8f5xHe7VGf6uhSCC50uJo\nA1h78gT5QfYdrYxGI6viVvJm7CSOJB8mwCuAF9q+zNOtniXIJ7jI+ZaZvjtDMZRFukgLZZWExlMo\nYaBQlFPsbdDaYi+Q3NVSuEzdubPk14kuct6OC9uYdXIif+3ZgU6j4/nIBxh255tUqVTVYdm2M31X\n0k26mj/Y05R1EhpPoYSBQlFOcWgyGRHh9DpPJqs/mnSEabGTWHV8BdFJcOdNfXm940QancnG4EQQ\nFMYVvXpx3r5lNVMvqUfx9YoSBgpFOaXwBq2VJk0gIR0oGEjOXbkQCpRZtx4AFzMv8vaOmSz+dwEG\no4F2VTswo8NoWrTpZzovzIVy7cz0nenVHfkQlOVM/Xr2KC4pShgoFNcRJZm1WzZoi7BpEzRuDRS0\nOHJXLgTbMtM1Oczd/iYf7/mQygkZ1I1uyPiOk+lT9y6ThZAZV5y/XInrY4sjH4KynKlfzx7FJUUJ\nA4XiOuBqZu3OBIjF4sidM1jv2C1ktm/PokML2Lx0CiuqpRDpH8XMOo/T/aEpeGmLDiuuOH+5w1u4\nrGfq17NHcUlRwkChuA4ozaxd36wF35mzh9kKkNE1iwoPZ2GkSzKDNRqNbD77N89+N5q4lGOIQH9e\nbvcaT7YaTaDGD+wIAlcpqbewPR+Csp6pX4skNJ5CCQOF4hpT2tnsqhU7WXvqStxniwAJ8K9Hf/Mx\ni8WRK7kQiiP23BYmb30Dn507OBXtxePNnuDFtq8SFWAqR3dYYogRdq/1hPOXPR+CazFTd8XyqTyg\nhIFCcY0pzaxdn2vg/B4J4UVXDWfX/I2+fS18vXVWtcvVzGDl5f+YFjuRP078DsDd3fuxqeME6oc2\nLHCeNjEBA/aFgSvOXyUVGPZ8CK7FTP169SguKR4VBkKIDsAsKWV3IUQDYAFgBA4AT0sp84UQw4GR\nQB4wTUq50pNtUiiuN0oza09J15OWmWvNLG4rQPSJSVYBYmtx5MiL2NEM9kLGed7aPp1v/luET04+\nHWt3ZkKnKbSt2r7EfXQpTIObvIWv1Uz9evMoLikeEwZCiJeBR4EM86F3gfFSyj+FEPOBfkKIrcCz\nQFvAD/hbCLFGSln2yVwVimtEaWazIYG+ZNWsY/3bVoCEBvpaBYitxZEjL+LCpOpT+HD3HD7Z9xFZ\neVmIsEbM8R1I6/4vFLAQKkyeCykwnVESb2FnPgQ3yky9rPHkyuAYMABYZP67DbDR/Pl3oBdgADab\nB3+9EOIo0ALY4cF2KRTXHSWdtft662gsqnJMphf5LqpnV6eDnyPP5BxDDgsOfM67/7zF5ezLVAmo\nyvSusxnYaBD+27aR60QQQMFkM7a40/nLkQ/B6AdbFzm3vM/UyxqPCQMp5TIhRLTNIY2U0vKupAEh\nQDCQYnOO5bhTwsIC8PIq/UsVGXl9uLGXNRWx3+Wpz8893IbsnDyST18ktFYV/Hyc/zyfaKhDG1WP\n2APniU+LIirMn47NqvFYswB0ln7fdjNUqlT04tAAMJ+Tb8znh4M/8Nr614hLiiPIJ4g3e7zJC8aO\n+N3Sw3R+jUjr+Q45tBuaX9nDMBjy+XLFQWIPnMd46hSa2rXp2KwaQ/s2RacraPGUnZNHctPmhIb4\nO+33Z8v32/UhCPD3YXj/5s7bd4Pirne8LDeQbZOlBgHJQKr5c+HjTklKyix1IyIjg4iPTyv19eWV\nitjv8tpnv4P7SQsOpriWe6dl079LNH3a1yLtXLRV7aM7tJt4cxhr7ckTdmMH6TR+GOLT+PPkRiZv\nHc/By3vx1nrzSMwTvNT+FaoHVyF762bSLPevdgwUcy+9kzPJtTnnm7WHCw7cSZH8uimOzKwcq7ls\nSbyF9bkGNu89a7fu2APn6WPeNK9IlPQddyY4yjKK0m4hRHfz5z7AJmA7cLMQwk8IEQI0xrS5rFAo\niiE/ojJQMHtYYXTn7A+ee8Nz6b6wDw/+1peU43upZbiZ27Lm4bOhA+8tPso3aw9jyL8yf/Paub3Y\n9tgmmynOXNaSoMbiX5GYqi82o5kzH4KE5KxSZXFTXKEshcGLwGTzprEP8KOU8gLwASbBsB54XUqZ\nXYZtUiiuO2xj/zjDUK++/S8aOLaaOZt2hmfXj2LS2135N2MzEXnN6XduFC0zXsRLH1lgQF6cecVG\nX5ObW3y7bZLNuOL85arAsFA445qtD0HlUP9y5e17PeJRNZGU8gTQ0fz5MNDNzjmfAZ95sh0KRXnC\n4KJVjveObdaQzwUEiK+vVSlrCSSXok9mzq53+XzffLIN2TQPrUn7zMeJzLuJQOO/dsu/uPkf9N0b\nuB6mwiYEtSvOXyX1FnZmddWxWbUKpyJyN+Un2LZCUUHwjt1S4msKCJCDB60f9Tr4eM+HtF/ckg93\nv0+4XwRvdphDHe0covLaoEFTYBC2/WxMTLSqXnLblSxmkCuJ353N9B35VzjKHzy0b9MStU9RFOWB\nrFCUEe7OI2D0vpIy0jYFJpgshH468gPrvxnPj1EXCfYJYXbdMTx4+6tojT4c3hZrd9Zu+znI38c6\nIOvijjkMNWGts1AI6uKcv0rjX+HIh6CwdZKi5ChhoFB4GHsRSVvUj6Bn21qEB/sVGfQcZTArLEzy\n2tr3BN6SdYQnf3iW/Ql7aeDnzZMtR/N8mxeJPHIWg5c/gMNB2Ba/tq2sn52FmrD2s1AIalecv0rr\nLax8CNyPxmi05yZyBSFEOHCTlHKtEGIccBMwUUppX9FYBsTHpzlvtBPKq7nh1VIR+3299NnWxLIw\nES6EqnYU3vqRiHSMrW8CTOGfd9fzZ+rWCWw6sR6DDu6PGcir7cdTO7iOkzITuJyaja+PaZDW5xis\nn4MSL1hNPQf7XyS/y81O+3k1IaivdtV0vTzrsqYUpqUOPQddWRl8C6wQQgA8ALwHzAducbkFCkUF\nxZnFDNgPVV04g5mj8NbVK12ie+ubOJ12ihmpn/Pj90tN5YR1YdgdM2ke2bJAXbaDtb1ZO8DiPySb\nD1wAoL6NU5efCGRAMX0taQhqW9RM/9rjiqItTEr5IdAPWCClXASop6ZQuIC9iKT2sDWl1KZfmek5\nEyb/nj7P65vG0WnJTRzZuJRmlVuw9O6fWTLm7yKCAOwP1pZB2DIb/+9Ukt26DsmLRUw9FTcWrqwM\ntEKINkB/oJsQopWL1ykU1wx9roHzCRkYPJwMvTicRSQtLlS1PtdA3NmUIsLkQnAIx31+Y2P1H0nb\nn0nNwFq80HMUd9zyFFpN6TdSnZl6+p89UWxiGE/kLFCUHa4M6q8As4G3pZRxQohYYIxnm6VQlI4C\n+vU0PeFBpUv67i6cWczYCobgSj74+5p+jrYZzBJT9Wg1YDSCEQNk/h8bqm8kW5tIgKES4ztMZUTL\nkfh5+RXbluIGa2e+AbaWRY5wVwhqxbWhWGEgpVwnhNgG1BNCaIDbpJQZxV2nUFwL3JX03Z3YWsxc\nDImye05yeg5TFuygdUwkQRfPsPb0le8MRiPxXrs45Ps1rXxOkqPxpr7+XoY1eYYn2rR1uR3FDdbO\nBFe1VjHFrrBKEoJacf1RrDAQQvQAPgV0QGdgrxBisJRytacbp1CUhLJIhl4aqxfbzdrkM9GsPpLG\nvqOJRQSDRXC1vnAIqpoG7WTtUQ75LSTRaz8YNeiDOjNAM4quzRuXOFmLK4O1I1PPOztUK+ZKRXnH\nFTXRDKAr8LuU8rw52Ny3gBIGiusKdyV9t4cj886SqJ98vXXUvHCcR3t1Ia1rDm/NSzPl9ytETl4+\nGZoLSL8leGVsItELInNvoon+MaY82p96NUI8tg/iyDfAe+vmAk5thXFnzgLFtcGlDWQp5QWzaSlS\nyn8tnxWK6wl3JH13hLvVT1n6PMJOHOZsTVMYBYvgytGk8mfUBrYH/olRk0czQ206ZjxBZUMLIoL9\nSi0ISjpYu2rqWZIQ1IrrG1eEwRkhxN2AUQgRCjwNnPJssxSKkuOpZOjuVD9ZAsqFBPoSFHAlnETl\n1LNsqbyRY74/E6zLxN9YhUZZj1LNuzMag7bUfXDXYF041IQFWyFpm2wGrt0ejaJ0uPI2jAQeAWoB\ncUArYIQnG6VQlBbbQGaW9JE929a8qmToznwFLOonV7EElPP11lGrSR3yMXDKew27/N9F+i1Ba/Ti\nvsDhTBHLaR7QE51Ge1V9KEm+AKftLhRqAlzPWaAoH7hiTXQJeLgM2qJQXDW2Om+vrGbk+Ve6ah22\nO9VPloByRqMRbsln1/qXuJATR50wb5rzEIMaPsmQ21uh02rRd7+6EA3uXNHYCzVR0hDUiusbV6yJ\njkPRPNdSynoeaZFC4QZ8vXVEHj1GfOOiidJLU5Y71U//XNzBlK0T8NqymUt1tTwsHuOJRmOIiYou\nUNbVhmhw52Btz3vZlZwFivKDK3sG3W0+ewP3AuopKyoUtiaXFvWTK9E1bYlLOcZPO2fw1u6/AHi0\nWXem3/0WIty1ZDYlxdODtaf2aBTXBlfURCcLHZothNgJTPNMkxQK57hs6x8R4bY6bdVPaefqWpPP\nu0J8Zjzv7JzJ1/9+RZ4uj5ui2jCx8zQ6VXdsqukO3DlYO/JeLm0IasX1hytqItvopBqgKeDvsRYp\nFA4osa1/kyaQkO7WNvh66wg8F0duneKdsNJz05m/50M+2vMBGbnp1A2px+TGL3JH68FoNA4jCbsV\ndw3WjryXXclZoCgfuKImmmzz2QgkAP/zTHMUCseU2NZ/0yZww55BScnLz2PJoa95a/t04rMu0So7\njIG3v81jTR7HW+ddfAFuxF2DdXHeyyoEdfnHFTXRre6qTAgxBBhi/tMPk5lqJ2AlcMR8/GMp5VJ3\n1am4MXDFMgYok9lpgeTzNhiNRlYdX8mbsZM4mnyEAK8AXmz7Ci9mt8er+e0ea48rqMFaURwOhYEQ\nYgN2rIgsSCl7lLQyKeUCYIG5/I+AL4E2wLtSyndKWp6i4uAs1MTl1GwW/yH571RSAfXR6Jqe8YAt\nkHzezPbz25i8dTw7LmxDp9ExJvJBht45jSqVqppCOXikJWWDCjVRMXC2MpjkqUqFEG2BplLKp4UQ\nH5sOiX6YVgfPSykrXv46hVOc2fr7+uis2bngivoowL8e/T3QFtvk80eSDjMtdhK/H18JwJ11+/J6\nx1QIiXcAACAASURBVInEGCMwVjJtYJfXOP8q1ETFwqEwkFJutHwWQrQGAjFtIOuAusBGB5e6wmtc\n2YvYDnwupfxHCPE6MBEY6+zisLAAvLxKP0OJjLTvWn+jU9773aVlDX7dFFfkuKPN2LNr/ibozsb4\n+bg5F1NoABf8M5j05yQ+3/U5BqOBzrU681bPt+hS22whdO4cWO73wYPQtKl721AM7njWny3fbzfU\nRIC/D8P7N7/q8t1NeX+/S4u7+u2KNdFCTKGrw4FDmPT8mzGpeEqMOb6RkFJuMB/6WUqZbPkMzC2u\njKSkzNJUDajE2eWZvp1qk5mVU8DWX9QOZavNqsBWfaRPTOLYiUS36srTc9JYuf1TXt20nMy8DDpr\n6jKi95v0qXsX3ju2E+9vusfeO/eR28n0I/U+dprcqNpua0NxuONZ63MNbN571u53m/eeo0/7WteV\nyuhGeL9LQ0n77UxwuDJlugWIwTRIf4BpdfChy7XbL2+dzd9/CCGekVJuB24D/rmKshU3MPZs/QHk\nqSS76qPQQF+3ecHmGnL5+t+veGfnLBKy4okKqMKULtMZklyf/Hom6+urSQh/vaFCTVQ8XFH8nZNS\n5mJaFbSQUh4ErmZdIjAFvLMwCnhPCPEn0AXlzKYoBl9vHdXOxeHrrbM6VtkjqmfXq569Go1GVhxb\nTtfv2jFu01iy8rKY1PgFtj2yh8eaPo5Oa798Q/UagDkXc/V65S5om2WPxoIKNXHj48rK4KwQYhyw\nFnjLnMsgsLQVSilnF/p7FyYhoFCUCkehIh5rG8plJ9cV58m89dxmpmx9g38u7sRL68Ww5iN4oc0r\nRAZcET6WQR8KbhTnhUdY8xiXx81XFWqi4uGKMBgG3CWl3CGE+AlTBNNRnm2WQuEcW1t/R6EidId2\ng52cw8V5MsvL/zEtdiJ/nPgdgL71+zO55hPUbHpLkbLyK18RDLZeun8t+I21Gaa6y2ucfxVqomLh\nijCYCiwGkFLOxYUNXoXCQmlyBruCPVt/V0NFOPJkTs69xBG/7/j2v8XkG/O517cNI+5+izZV2jn0\nFfDet8dqZmrx0tXnGjhyOhnCiwoid+ViLgtUqImKhSvC4AjwvhAiHPgGWCylPOHRVinKPe7IGewM\nW1t/hzQoOoO158mcSwbHfH/m9+MrMKBHhDXijU6Tub32HWjMbc1t16FIWY5ISddzMe/KT6u8b74q\n7+WKQbG/SinlR1LKrkBvIBtYLoT42+MtU5RrbDNsGaHUGbZKSoFQEb5FNzltrWTyySUr6xvWBz7J\nUd8f8c6vxPQWM9gwcAu9ovvgdVhar9PFHbNfnzkdpO1GcUigLykNrgR1U5uvivKAS944QogQoCfQ\ny3zNH55slKJ8484MW44w6uy/ugXURwcPFglUFxLoS1iwN/sz1yP9FtPm8kWMmgBE9iO09XuAYUYv\nNFpT2bbB2bSJCRgQRerLadqMpXY2ivsYz7KYykXOV5uviusVV5zOVgCtgZ+AN6SU2zzeKkW5xlkc\nIXepSQqnYLRQnPpo+8W/2eD7Mqc5hMboRX5AD3qkD8HHGEy7FjXx8YovURyhv+YvY22qKeyE7Ubx\nowEGeratqTZfFeUGV1YGnwK/SylvHI8ahUdxZ85gR+j277ObpL0AkVd09QcTDjA1dgLrT62ldjK0\nrtWLumkPk+cfVmCgzj+YDRQNzpZnZ8Nan2vg6IlECC+aROfomVQeG1Vfbb4qyg2uhLBeURYNUdw4\nlIWNujY9zW58/QLqo4YNOXPqMLO2v8n38luMGLm5RjfeiR5A9J2P27V0cqT2ebhJJQpHQEpJ15OW\nmWsK1ELBjeJt4Q3oZ14Bqc1XRXnAzRG8FBUdywDb/+Z6wNXlDC4NFvVRcnYSP84ZwZisn9Eb9DQO\nb8rEzlPoXPVW0s/HozfP+AsP1I7UPtUPXaL7Mw8VODck0JfzjVtDWg5QcKO4afZFtVGsKFc4y2dQ\nSUqZUZaNUZRfHJmSTh7WjswLJcsZ/P/t3XlgFOXdwPHv7ibZ3ARCiIT7fJAbQc6KqFhP1NZ6QT1K\nW7Vaa89XKyiK9m1fraW1tdVaqVpUtFostbVS5CwSkPt+IqJySu6LJJvNZt8/djdMkt3Jbo5Ndvf3\n+Yud3ZmdJwnzm3mO3y8YzrHj/Z/Hro94nlx+vf0pxuhSeo7uywOTF3CjayzL8+w8/O6WgCuCzbp9\nPj5WxrQm+fzt8TYuSangzYrmF/0JmVbpFhIRxezJYLdS6hta641hOxsRscxKUt6eUhBUzeBQWAsL\nqE9JaXhd767n7bw3WfPOQt7ulU83ewZzr36QK6f/gKS4JNb9dnmLK4LNun0+jUv3O/B95bBUivtm\nNxsovjgpnvp2bbEQHcssGNwD/Fkp9Q6wQGvtMPmsiGEtTSW9ZYyrWX97W9lOnqB+wEAA1h1bw+LN\nj7CvcA9DE+P5zrj7+P7EHzG83wAKCiqCXhFs1u1j6ZXtt9vH3ypdgPyTaVIZTEQUs+I2q5RSY/Gk\no9iqlPou8Lnh/aNhOD8RAVqaSlpuz6BbB3zv3oLdLN78COuPr8WChRuG38yDUxbSL61x7YCC0mr2\nJuc0vA60Itis2+dSW36zC3vTGUeZ3RKlMpiIWKYDyFrrKqXUw0BfYCVQgqeegRsY3PGnJyJBS1NJ\nE8e3MAU0RMcqjvLc8T/wws6VANyYNI275jzFmJ6Nv8flque11Xns0PkkOqupTPQk2zVbERxMt0+g\ncpBut5sPtnsKwkRqcjoRu0yDgVLqKuBZPCuO+0tt4q6ho5K/tVZLU0lTt29pOY9QEEpqilmy/Zcs\n3ftHUitrGdN/HA+ev4gJ1lGk+clOuvQf+xuVbSxMa173oOlU10DJ2Sx7axo+YxwfMV70ExP8/y4i\nKTmdiF1ms4n+CpwHfFNr/UGgz4nw6ejkb20RqKbATRcPhS3+xxOCVV1XzfO7/sDvdi6h3FlG/7QB\nPD7iboqcl7DqvSJWn9jQrEvG4XSRu+9UwGNmGn52Pk27fYyDxb4FbmbjIzW1Z1c+RHpyOhF7zJ4M\nvsBT2Uyml3YRZjN2gu2G6KinikA1BSBwHqGWuOpdvHHoNR7972JK604zqCSF4d3v5ObsOyh2xrPG\npEumrNJBQWl1w7GMF2cLcP/XxtK3V5r3e/x3+xiDbNzWLdRNnmJaDtJIktOJSGM2gHxfOE9EmGtr\n8jdf/3lHP1X4qykQKI9QIG63mw+OruLxzY9ysHg/VncCQ2q/ynWnRqJtk1i3I7/FLpluqXayMpLI\nL/EEBOPFuUd6IlmGu/RA3T5wNsj66hs3HR8xHjcxwdbo6cBHktOJSCBTHCKEvxk7Pr5uCDO+/vNw\np5QGTx6hYO3K38H1K+cw9583cKj4AEOYzUWVz3Ku4zbiSGr4XEtdMvZ4G1NH+1/bYLw4txRkm9Yu\nNqu5PH3MOcye1JfM9ESsFshMT2T2pL6SnE5EBElHESHakvzNrP9826F85kwfSFpyQruda6OaAgTO\nI2T0adkRfr5lMe8c/hsAs/t/mXtG/ZT3nzvAie6ei2+oXTLz54yiqrrWNHOoWbePsa/fWN/YrByk\nzWqV5HQiIoU9GCildgDl3pefAj8DXsIzXXUfcK/WWhZvNtGW5G9N+8+N6wBKK2t5dOlHTBzRfl1G\n/kpSgv/xisLqQpZse5KX9r+Is97J+KwJPDZhAdOGfhmH08VB90ec8O4fapeMzdZy2Uazbh9jYDHW\nN26pHKRUBhORKKzBQCmVCFi01rMM21YCC7XW65RSzwHXAivCeV6RwnTGjomm/efGpwqAksrQB6LN\nNK0p4Bg9luVNxitGDk2luPv7PLvrN1Q6Kxhr68d3L13MNUO/gj13M86hnovqsH4ZbPYzhWH6mHOw\nWixB1QswuzgHG2SNhW6COa4QkSbcTwbjgGSl1Crvdz8ETATWe99/D081NdNg0L17MnFxrX/8zspK\na/W+ne3+WyZSU1tH6bHTZPTLJjEhuF/h1NG9WbnxiOln9nxSxF3XJwV9zIAyksHwM17+t/+yOs+T\n4qEeFzur32V53us4rMX0TO7Jzy55grsn3U2CLaHZ/l+95xpKc/PJ3XeKwtJqemYkMXV0b+bPGYXN\nZqWmto6Scgfd0+1+zzuY3/V3b5xAclJCwO/w16auLpL/xlsrFtsM7dfucAeDKuCXwJ+AYXgu/hat\ntdv7fgW0nLmgpKSq1SeQlZVGQUHkr51L3L+XivR0gm2Jr/9826F8ThsWaBm7jApLq/nks6JGd7ut\nmYoaV1FLnfdn7HC6OJK7D3ePYeTHfcRB+1+otB3D6k5gRtVXeOH2X9MzpTtn/r2BMu+sI1udDZd3\nf0thBdfNGMgVk/s1Oo/i4rOPC3FARVl1s59FKL9rs+9wOF1UJJ9D2snSiBgDiJa/8VDEYpsh9Hab\nBY5wB4M84LD34p+nlCrC82TgkwaUhvmcYoKv/3zO9IE8+fu14K1b528g2uF0UVxew+rtx9lzuDDk\nqajGqaRllQ5O1hxhc/JLFMcdoH+JhR4plzLccQvJ9KC+1g4pZ6duAo0qmMUdOYwzOzssXTLNFpoF\nsf5AiGgR7mAwHxgD3KOUygHSgVVKqVla63XAFcDaMJ9Tl9TSHXnTGTvBSktO4BJ7Ca/UNU/fMG5Y\nJm+v/4SdeQUNA6o+oSxw85WkPFJ6mMdzH2NHzt8pjoNs52SmVl1FlW0cAOeXHqFb6oXN9vct8Ops\nwaw/ECJahDsYvAi8pJT6L57ZQ/OBQuAFpVQCcBB4K8zn1KUEm3Ii0IydYFx8Xh9OVmc3G4h2u91+\nB1KNgpmKWl54jMc3vMwrB/5MXX0dA3qNZlrRLWS6RlFleEpVfVIbAp1x6majp4Tsc1rZyrZp6yI/\nISJNWIOB1roWmOvnrea3hzEq2JQTTWfshMKS2ZO5IxqnjgBY+EKu388HOxW10lnJc7t+x67/LGFV\n32oGdxvCgqmLuGLgHN5c+4lpJlDj1E2j+t45zbaFQ7DrD4SIFrLorAsJ192o76nCmDoiv6QqYE2C\nlqai1tXX8erBV3hy6/9SUJ1P/wE9+cWMJ7j13DuIt8U3fK7pvPx697CGYxqnbhqfEuJ37WiXjKeh\nCnb9gRDRQkbBupBQUk60NvkbeJ4qmvJd/Hx6lbecaXRHXgHv5P2dC5ZP5ifrv88Z5xl+POlB1n1j\nN/NHf7shEPj4BmgbFoXpQ36PG2h7OJmlnZBcQyIayZNBFxJKyon2GmD1DUSbLb7yNxW12HaQTa6X\neWX1IWwWGzcOvY0HpjxEv27Bd+v4ngaapo42PiW4kzuvK8Ys7YQQ0UaCQRcSSsoJ34ydYDicLk4V\nnsHlvdganyqMA9H+VjiPGpTB4f21DVNR0yoO8K/sFzkdvwWA0cmzGFo1j5T18MzhT5kwvDLoqZeu\n+rOZVI1TN7+edDYbSd24CUG1sSO0lHZCiGgiwaCLCTblRDDJ3xrNTKpw0CPNNzPpfHyXNONAdKCa\nBOsO7+GPrjjy7MspT/oPp+PddK8bwYUF11KXMo06oFfZ/pCmXjqcLv56IoE1R5pP3XQNTuFGb+CK\n27aVukmTQ/oZtjdJOyFigQSDLsasSEyoAs1M6vmZ5svfmhNwP+PAcmVtBaeT17Ah7h1q3TUkpmcz\nqeobZNdNQZUcYH9K8/3NBrt9AWqHzsd68gT4KUW5d/dn7Cms8z4lmKfmFkK0DxlA7qLs8TZ6nzwS\nMBA4x4433d9sZtLneScb8vQHGoh2upy8uPd5Jr86jj8cW05GUjeemPY052e8yDl1U7FgafR5f1Mv\n/fEFqOKKWrLLzg6QG/fPLstvCFxrdpzwdxghRDuTYBChrIXms33MZiZVVNc2XKx9A9EOp4v8kipq\nautYeXgF83K/w083/oTquhrmXL2ALfN2cd3AeZRXnl0QZryABzP10ixAGfc3eo8+zQrMCCHan3QT\ndWFmKSdsJ09QP2BgwPfNZiYVDRnVcLG27NnFq/nJ7MwrIO/Mdj5O+QuFaOJS4/jmqDv54cQHyEr2\nXPTjUl0B594bBZp6GWz9YOP2pGNHKKucKH32QnQwCQZdWFtSTpjNTJrWy9JwsV67/hArqms4aH+F\n/JRtAPR2Tmf+sB9z/wWzgz4m0GJ9BbOFXEbG7X2okQVeQoSBBIMwaU0qaLOUE65Bg1s8bqCZSdck\nnaYe+Kz0GCuOvcD6AdvBUs/YwmGkJX6b7vXDOf5ZIg7vjJ5Ax/TNvR87pAezJ/WjR3qiadvMgknv\nHsmcKm6emnxYv24ynVOIMJBg0MH8JZ4bOyQzqIunmbq4+GbVw5omtDPOTIqrHk1dUgr2eBs16z/l\nqdzHeH7377HmVJNW358RjtsYVdOPwoRsIHD+nbbOvQ+0kOtrswbz1rojzbbPHB/cWgohRNtIMOhg\n/qZ3rt15krU7T5LZQo0As5QTG15fzeozZ7tTzFJM2+NtZB3+hOPDR/LH3c/z2s5fcCChlOzk3gx1\n3klG5Uws2ChMP7tPS/l3Wjv33iyY+Ntu/eIUUhBbiI4ns4k6kNnsGTh7AX9jzWG/7wdKOeFwuvj4\nmP8aQDvzCpvNvql317P6k9XMeP18Fm56kGOp9SyYsogt83Zyw4hbsdD8zr6j8+80zVMUaLvtU/NS\nnUKI9iHBoAOZTe808ncBB0/KiUDHPe5O8nvcpnP8Nx5fz2VvXcT92x7nVOUJ7hp7D1vn7eb+iT8i\nOT6Zmy4eyuxJfclMT8Rq8QwCz57UV/LvCBFjpJuoAyXZ48hItVNS2Xx6pzFFdKD++UApJ7ql2qnp\nPwjO1DU7rq97Z3/hPh7PfYQ1R1cDcMvFt/DSuAcZ2G1Qo2N19fw7rpw+nX0KQsQECQYdwDhoXBJg\nJa5ZRtKW2ONtXMFJXqH51MyBg+r48YZ7eVO/jhs3F/S5kEemLWb2qJmmhbO7av6d+p7+1yIIIdqX\nBIMO0HTQ2MeYCtooUP+8WcqJpqUrU9Od5HdfyS+OvonD5WBk5mh+MfBepkyei8ViCXicri5+z65O\nKW4jRKyRYNDOzAaN4zPSuXBMDvuOFJtmJPWxFhZQn+InExxgtduZO2M4V83ow0sb1/C7Y3+krKSU\nofE5fO/Ch7lh+M3YLFaI4EAghAifsAYDpVQ8sBQYCNiBJ4BjwLvAx96P/UFr/UY4z6s9+Rs09nUH\nZR49zBXfupCbLxkWVEZSs5QTtRMn8ZZ+nV9seYJB+46ByuCRaY9zz5kxWEdc7Nn/0EG/dYUjSX1q\nWmefghAxIdxPBl8HirTWtyqlegC7gMXAr7TWT4f5XDqEWU6gtKSEhgFaX4ro1lh79APeeuMn/DXl\nMAnWBG6fdjt/uuIxuif2IH7zJpzezxkrhkWqYAv4CCHaJtzB4K/AW95/W/DUz5oIKKXUtXieDr6v\ntQ480tnFmaVc6Deyf0gzdXwpJ3z2FOxi8eZFbDi+lpkFcMOEm3lwykL6pfVv+Ey03UnHbd3SbiU+\nhRCBWdxud9i/VCmVBqwEXsDTXbRHa71dKbUA6K61/rHZ/nV1LndcXNeZ/tiUy1XP0n/sJ3ffKTh6\nFPr3Z+ro3sy/eiQ233nv3w+jRpkfqKgIMjM5lP8xD61eyIqP3wTgsiGX8bT6HqPOvzLgrjW1dZQe\nO01Gv2wSEyJ4aGjDBpg5s7PPQohoEXAQMezBQCnVD1gB/F5rvVQplaG1LvW+NxL4rdb6ErNjFBRU\ntPqks7LSTKdYtieH00XFyfyGsYH4zZvOzoxxu1sc3D2z9l/ccWolG0vfJKesjqpuQ7ipzw95ZM68\ngDWGrVs2s6wis1ld4e/eOIHi4jPt3cQO1+hnFqJw/q67klhsdyy2GUJvd1ZWWsCLTlhXICulsoFV\nwANa66Xeze8rpXxFbi8BtofznDqSWbWy+NwPA+5XXVfNMzuW8K33v8H60tew1/fgsi9uYFr5Uxw7\n2Cdg+gqANVs/Z/W24xSVO+hlqBi29B/726VN4eacOr2zT0GImBDudBQPAd2Bh5VS65RS64AfAku8\n/56BZ4ZRVDJLPAfgqnfx+sFlTHv1PJ7IXcTRdCsja+Yzq/JZerrGY/H+ugKlrzDLWZS771REVgyz\n6UOdfQpCxISwdiZrre8H7vfzVtSuKjJWKzMOhBoDg9vt5oOjq3h88yIOFh8g0ZbIN8+9jxNbphBX\nmwr4rzHcdMVwWaWD3O7DGl4b9yksrfa7T1cXDTOihIgEkqiugxmrlRkTz/kCw87T2/nq369m7j9v\n4FDxQeYOn0fuvJ08+qXFZKdnNnw+mBrD3VLtjHac9rtPz4wkqRgmhAhIgkEHM44NWCvPDvSc3vwv\n7lx1B5e9fRHHDmxkdv8vs/amD/n1tF+Sk9qnYYqqP4HSV9jjbUzI9P8rnTq6d5dKQBcMh9PFqZzB\nEdm9JUSkieA5h5GpsLqQJdue5PA/X2BtfxfjsybwTN+bGXH1d4DGs2cCVQUzSy9tzFlk3Gf+nFER\nM5vImOjPOCMqUBEgIUTbSTDoYL6xgTPOM/zZtY5fLbuRSmcF03P68sdLH+eaoV8h7uhRv9W8Qk0v\n7XC6qOg7lOtzejXbx2aLnIuoMdHfqLJ89qdlBaziJoRoHxIMOljNpIksP/Ay/7f1ZySd+AJ770we\nmvIkt42aT4ItAWicptnfCuKW0ktH0520WaK/nXmFXH/hkIjr7hIiEkgw6CBut5v3P3uPt956gJUp\nn5MUl8S9Y7/NvMsWkZaQ3uizxjTNrcnFE0130k0T/QUzi0oI0XaRddvYRTmcLvJLqhoGOrd9sZVr\n3rmc2967mT11R7l15B1smbeLu+c83SwQNBW3dUvI3212Jx1pg6++RH8+wcyiEkK0nTwZtIGxe6a4\n3IEtvYAjqa+xp3ItAJcPvJIFUx9F9Rhhehxj15DFVRfSOUTbnbRZor9As6iEEG0nwaCVHE4Xy97X\nbNr3BQ5LKXmJyznqXoW7sp7p1YoH5z7D1N7TgjpWW9I0N02ZHQ130q2ZRSWEaBsJBiHyPQ3s0Pnk\nV5Txif0djiT8HZelhhRXDiMcX+eq/J5M6Dm55YN5GdM0h5qLJxrvpEOdRSWEaDsJBiF6Y81hVm37\njKPx/+Hj1DdwWEux12dwbs3t9HdeipU4Kqr3h9Q9Y+wasulDIVcni9Y76ZZmUQkh2o8EgxDU1Nbx\nTt47fJSylDO2kwwqsROXfBNDHNcRR1LD54oHDCPJ3rofbWty8cidtBCirSQYBGnLqVwWbnyI3WzD\nYrUyoPZyplVdQrltWLPP1paUsfilj4Ke699eaZrlTloI0VoSDFrwcUkej+cu4t+f/hOA/u4ZDD4z\nl9T6PpQHqDCZHeJcf1/XkMPpojBnMGlOl9zZCyHCSoJBAKfPfMGTH/2c1w6+gsvtYnDSeFT1bWSf\nTKMwrXkCOXucFUdd86QSwayadRcV8trqvKhYQSyEiEwSDJqoqC3n2Z2/4bndz1JVV8WwjOFcV/01\nDpw+HwsWssv2NwoGmemJqP4ZbN73RcO2UOf6r9lxgtVnnEDkryAWQkQmue30qnXV8qc9zzHl1fH8\navtTDK1O4elZz7Dq+k1k6AwsfupIZ6Qm8Mgdk7j1MtXqVbMVVbV84Oju971IXEEshIhMMf9k4Ha7\nWfnJCn6W+xiflX9KanwaD05eyPeqzyNu5GyOF1SyNzmn4fPGu/7yM7VUO+pIS04Iea6/b73CtkP5\nxJWUgvdpI9JXEAshIlNMB4NNJzayePPD7MzfweByG9+ccSc/nPgAWclZWDdtZNnqPHbofBKd1VQm\nespPBrrrD3Wuf9Pkcr6up2hYQSyEiDwxGQwOFh3gidxF/Ofz9wG4dshX+V/rlWRdcGPDZ1Z+Xsfq\no80v1kbGu/5Q5vqbJZcLdHwhhOhIXSIYKKWswO+BcYAD+JbW+nB7f09pTQkP/P1+Xt79MvXuer5i\nn8RdVz/JedmTsH7+WUOBGYfTxeb8evAzTgCQmW5vmO3TVDBz/c2SywF0T7UzcYT/4wshREfoEsEA\nuA5I1FpPU0pNBZ4Grm3vL1l28BVe2vFnVM9zeXjqY1xxMpW67ElA4wIzZZUOMg8f4FTfUUDji7UF\nuP9rY+nbK8AigyCYJZfLSE3g0fnnk5ac0OrjCyFEqLpKMPgS8G8ArXWuUmqS2Ye7d08mLi707pP/\nmfUDLuozgQvOvRyb1QYbNkCW96J+cCfMnAlAWrckMtL8zw7K6p7EucN6kZjQth/djHF9WLnxSLPt\nMyf0ZfCAzDYdO5CsrNYHsEgVi22G2Gx3LLYZ2q/dXSUYpANlhtcupVSc1tpvcv+SkqpWf9GsojQK\nirz7jxgPBRUAxJdW4fT+G6DvkN5Q2Hz/sUMyqSirpqL5WyGZM60/VdW1zQac50zrT0FBW4/eXFZW\nWocctyuLxTZDbLY7FtsMobfbLHB0lWBQDhjP0hooELQnY4bQprWHL5l/FYVrDndYJlBJLieE6Eq6\nSjDYBMwB3vSOGeztsG9KP1t20pghtGmBGfu2j5g7e0qHX6wluZwQoivoKiuQVwA1SqkPgSXADzrs\nm8aP97u5ae1hX40B38Va7tqFENGsSzwZaK3rgbvD8mUffgjDxjTLEBpq7WEhhIgmXSIYhJPLUes3\nQ+jXkxpnHG2vGgNCCBEJuko3Udj868NPWb3tOEXlDnqV5VNU7mD1tuMsq+rV6HM2faiTzlAIIcIv\npoKBw+ninfocv++d3rS9UYZQa0lxuE5LCCE6XUwFg7JKB4mf5DW8Nq4sdhcVUVbp8LebEEJEvZgK\nBt1S7fSPq214bVxZnJaU0JAh1OF0cSpnsNQSEELEjJgaQLbH2xg5qAf/9dMDlDhpPK56t5SfFELE\npJgKBg6ni/NunM1FW0+z53ARxeU12BM86wf27f6Mzcerqan1zCqS8pNCiFgSE8HAV1XMeMc/dkgm\nDmc9H3prFw8py6fAT80CCK6ovRBCRLKYCAZNq4rtT8ti7c6TJCYEvrhL+UkhRCyJ+o5ws6piO21/\nsAAABjNJREFUNbVnB4ibFpiR8pNCiFgS9cGgpapiPsaLf1NSflIIEe2iPhj4qor5GC/6gbqJEhNs\nWC2QmZ7I7El9pfykECLqRf2YgT3exoThZ2cFGU0fcw5Wi6VZzYLrLhhEZZVTagwIIWJG1AcDoOHO\n3l+hGpvV6rdmQbI9vjNPWQghwiomgoGxqpgtIR5XrbPRHb8UmBFCxLqoHzMwssfb6N0zRbp+hBCi\niZgKBkIIIfyTYCCEEEKCgRBCCAkGQgghAIvb7e7scxBCCNHJ5MlACCGEBAMhhBASDIQQQiDBQAgh\nBBIMhBBCIMFACCEEEgyEEEIQI1lLAZRSVuD3wDjAAXxLa324c8+q/Sml4oGlwEDADjwBHABeAtzA\nPuBerXV9J51ih1JK9QK2A5cCdUR5u5VSPwWuARLw/H2vJ/rbHA+8jOdv3AV8myj+XSulpgD/p7We\npZQaip92KqW+DdyF5+fwhNb63VC/J5aeDK4DErXW04AHgac7+Xw6yteBIq31BcDlwO+AXwELvdss\nwLWdeH4dxnuReB6o9m6K6nYrpWYB04EZwIVAP6K8zV5XAnFa6+nAYuBnRGm7lVL/A/wJSPRuatZO\npdQ5wPfw/B1cBvxcKRVy0fZYCgZfAv4NoLXOBSZ17ul0mL8CD3v/bcFzpzARzx0jwHvA7E44r3D4\nJfAccNL7OtrbfRmwF1gB/AN4l+hvM0AeEOd92k8HnERvuz8Bvmp47a+dk4FNWmuH1roMOAyMDfWL\nYikYpANlhtcupVTUdZNprSu11hVKqTTgLWAhYNFa+/KOVADdOu0EO4hS6g6gQGv9vmFztLe7J56b\nmhuAu4FXAWuUtxmgEk8X0SHgBeAZovR3rbV+G0+w8/HXzqbXtla1P5aCQTmQZnht1VrXddbJdCSl\nVD9gLfAXrfVrgLHvNA0o7ZQT61jzgUuVUuuA8cArQC/D+9HY7iLgfa11rdZaAzU0vghEY5sBfoCn\n3cPxjAG+jGfMxCda2w3+/y83vba1qv2xFAw24elrRCk1Fc/jddRRSmUDq4AHtNZLvZt3evuXAa4A\nNnbGuXUkrfVMrfWFWutZwC7gNuC9KG/3f4HLlVIWpVQOkAJ8EOVtBijh7J1wMRBPDPyNe/lr51bg\nAqVUolKqG3AunsHlkERdN4mJFXjuHD/E05f+jU4+n47yENAdeFgp5Rs7uB94RimVABzE030UC34E\nvBCt7dZav6uUmonnYmAF7gU+JYrb7LUEWKqU2ojnieAhYBvR327w8zettXYppZ7BExiswAKtdU2o\nB5YU1kIIIWKqm0gIIUQAEgyEEEJIMBBCCCHBQAghBBIMhBBCIMFAxDCl1Cyl1Clvcjvfth8rpd5u\nh+Oua/MJChFGEgxEzNJarwOW4Ulp4FuMeBfwzU48LSE6RSwtOhPCnwXAVqXU94D7gNu01o2W8iul\nrgHu1Fpf7X39XWA4nrxPLwJ9gRxgA56Vz8Z91wGPaq3XKaUGAuu01gO9K8Wfx5NptB74qdZ6tVLq\nEuBJPCmKS4BbtNaFHdJyIQzkyUDENK11LTAPT2rg5VrrzX4+9h5wnlKqu/f1LXieKK4CdnnTog8D\npgHnBfnVvwGWaq0n4qlH8Lw3ueBC4G6t9SQ8mUiDPZ4QbSLBQAhPHvhCYLa/TLZaayfwN+B6pdQA\nIFNrvVVr/TrwH6XU94HfAplAapDfORtYrJTahSfYxANDgJXACqXU74CDWutVbWybEEGRYCBimlJq\nJPAYniIxDjx35v4sA24CbgRe8+57H/AUUIAnGBzAk/fKyG3YFm/YbgMu1lqP11qPB6YCe7XWS4BZ\neHLSP6mUWtCW9gkRLAkGImYppRKBN4CfaK2PALcD93kHkhvxFkTKAW7FExjAU1rzea31q3gu+uPx\nXOSNCoFR3n9fZ9i+BrjHex4jgT1AslJqC5Cmtf41noRs0k0kwkKCgYhlS/DcjS8D0Fp/DnwfWKaU\n8tfd8wZQ6Q0cAL8GFimlduCpP/whMKjJPk8C93g/k2TYfh8wVSm1x3vcW7XWFXgycL6klNoO3Aks\naod2CtEiyVoqhBBCngyEEEJIMBBCCIEEAyGEEEgwEEIIgQQDIYQQSDAQQgiBBAMhhBDA/wOMXhch\ngT1HxQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def simple_linear_regression_closed_form(x,y):\n", " \"\"\"takes arrays of x,y and returns gradient m and y-intercept b\"\"\"\n", " # calculating all the variables we need\n", " # see https://en.wikipedia.org/wiki/Simple_linear_regression for equation\n", " n = len(x)\n", " xhat = np.mean(x) # avg of all the x points\n", " yhat = np.mean(y) # avg of all the y points\n", " xyhat = np.mean(np.array(x) * np.array(y)) # avg of all the x*y points\n", " xsqrhat = np.mean(np.array(x)**2) # avg of all the x squared points\n", " \n", " # now applying the formulas to get m and b\n", " m = (xhat*yhat - xyhat) / (xhat**2 - xsqrhat)\n", " b = yhat - m * xhat\n", " return m,b\n", "\n", "m, b = simple_linear_regression_closed_form(x_points,y_points)\n", "print(f\"Total Error: {regression_error(m, b, x_points, y_points):,.2f}\")\n", "print(f\"Gradient {m:.3f}, Intercept {b:.3f}\")\n", "plot(x_points, y_points, predict(x_points,m,b))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hot diggity damn, it looks pretty good! now to double check this plot by comparing it to seaborn's built in regression function:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Numpy solution returns gradient 1.451 and y-intercept 3.863 Cost: 20,071.62\n" ] } ], "source": [ "npM, npB = np.polyfit(x_points, y_points, 1)\n", "print(f\"Numpy solution returns gradient {npM:.3f} and y-intercept {npB:.3f}\\\n", " Cost: {regression_error(npM, npB, x_points, y_points):,.2f}\")\n", "sns.regplot(x_points, y_points)\n", "plt.title(\"Seaborn regression plot to check my version\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All right! The answers are exactly the same! So moving on to gradient descent:\n", "\n", "# Simple Linear Regression via Gradient Descent\n", "\n", "Gradient descent finds the solution by descending towards the right number. In this case where we're doing simple linear regression, we are trying to find the gradient and y-intercept of a (the famous `y = mx + b` equation) such that it minimizes the cost of that line.\n", "\n", "So here, we start of with the simplest possible line where m and b are both 0, calculate the slope at that x position, and change x in the opposite direction of the slope, i.e `x = x - slope`. We keep doing that untill the slope is zero.\n", "\n", "So heres the data and our starting line:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The error: 768,329.739\n" ] } ], "source": [ "print(f\"The error: {regression_error(0, 0, x_points, y_points):,.3f}\")\n", "plot(x_points, y_points, predict(x_points, m=0, b=0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So it's obvious our line is very far from fitting the observed data. So for simple gradient descent the most import bit is calculating the gradients down which to adjust our m and b values. The gradient formula goes:\n", "\n", "![](images/gradient_delta.png)\n", "\n", "So putting that into practice, first a few notes:\n", "- we iterate over the data a number of times, I choose 15 here, but for complex solutions this can be much bigger\n", "- learning_rate is a multiplier which essentially says how much to adjust the gradient by. Ideally this should be a \"just right\" number so our m and b values smoothly descend to the solution. A large learning rate means we might overshoot one way then back the other, thus never getting to the optimal solution. In more complex problems, a small learning rate means the solution can be a local optimium rather than the global one. " ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 0, Cost 113,457.10 Gradient: 1.004, Intercept: 0.0152\n", "Epoch 1, Cost 33,715.82 Gradient: 1.349, Intercept: 0.0204\n", "Epoch 2, Cost 24,326.09 Gradient: 1.467, Intercept: 0.0222\n", "Epoch 3, Cost 23,220.42 Gradient: 1.507, Intercept: 0.0228\n", "Epoch 4, Cost 23,090.23 Gradient: 1.521, Intercept: 0.0231\n", "Epoch 5, Cost 23,074.90 Gradient: 1.526, Intercept: 0.0232\n", "Epoch 6, Cost 23,073.09 Gradient: 1.528, Intercept: 0.0232\n", "Epoch 7, Cost 23,072.88 Gradient: 1.528, Intercept: 0.0233\n", "Epoch 8, Cost 23,072.85 Gradient: 1.528, Intercept: 0.0233\n", "Epoch 9, Cost 23,072.85 Gradient: 1.529, Intercept: 0.0233\n", "Epoch 10, Cost 23,072.85 Gradient: 1.529, Intercept: 0.0234\n", "Epoch 11, Cost 23,072.85 Gradient: 1.529, Intercept: 0.0234\n", "Epoch 12, Cost 23,072.84 Gradient: 1.529, Intercept: 0.0234\n", "Epoch 13, Cost 23,072.84 Gradient: 1.529, Intercept: 0.0234\n", "Epoch 14, Cost 23,072.84 Gradient: 1.529, Intercept: 0.0235\n", "---Final Values---\n", "Gradient: 1.529, Intercept: 0.0235, Cost: 23,072.843\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "epochs = 15\n", "learning_rate = 0.0001\n", "\n", "m, b = 0, 0\n", "n = len(x_points)\n", "m_and_b_hist = [[0,0]]\n", "\n", "for epoch in range(epochs):\n", " m_gradient = 0\n", " b_gradient = 0\n", " preds = predict(x_points, m, b)\n", " for i in range(n):\n", " error = y_points[i] - (m*x_points[i] + b) # shouldn't really matter whether its the other way\n", " m_gradient += -x_points[i] * error\n", " b_gradient += -error\n", " \n", " m -= (2/n) * m_gradient * learning_rate\n", " b -= (2/n) * b_gradient * learning_rate\n", " m_and_b_hist.append([m,b])\n", " \n", " print(f\"Epoch {epoch:2}, Cost {regression_error(m,b, x_points, y_points):10,.2f}\\\n", " Gradient: {m:.3f}, Intercept: {b:.4f}\")\n", "\n", "print(f\"---Final Values---\")\n", "print(f\"Gradient: {m:.3f}, Intercept: {b:.4f}, Cost: {regression_error(m, b, x_points, y_points):,.3f}\")\n", "plot(x_points, y_points, predict(x_points, m, b)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So this solution has almost the same cost than the one above, but the y-intercept is an order of magnitude lower than the numpy solution. This is becuase gradient descent finds a comparable solution not necessarily the optimal one." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Animation\n", "\n", "An attempt to show the gradient descent as it happens in an animation" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(16, 100)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_the_y = np.array([predict(x_points, m,b) for m,b in m_and_b_hist])\n", "all_the_y.shape" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmoAAAF2CAYAAADeLrQCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt83GWd9/9XmqZJS5MeU0AKcii9dkWBQldRlEOJB36K\nuOKKoq6KN2Xl4Fk5FKQorAvIQQRFUIQVuZddEDncNz9ZLLiAsgoUkcNepYDIUZrQI22naZL7j8m0\naTuZTJI5fL8zr+fj4cPMdybfXJmLdt69Dp+roa+vD0mSJCXPmGo3QJIkSfkZ1CRJkhLKoCZJkpRQ\nBjVJkqSEMqhJkiQllEFNkiQpocaW46YhhCbgamBXoBk4B3gCuAboAx4DTowx9oYQjgOOBzYC58QY\nby9HmyRJktKmXCNqnwS6YozvAt4HXAZcBJzRf60BODKEsAPwBeBA4L3Ad0IIzWVqkyRJUqqUZUQN\n+A/gxv6vG8iOlu0P/Kb/2h3Ae4Ae4P4YYwbIhBCWAnsDfyhTuyRJklKjLEEtxrgGIITQSjawnQF8\nN8aYOwZhNTAJaANWDvjW3HVJkqS6V64RNUIIOwM3Az+IMV4fQjh/wNOtwApgVf/XW18vqK+vr6+h\noaGUzZUkSSqXEYeWcm0m2B64Ezgpxvjr/suLQwiHxBjvAQ4H7gZ+D5wbQmghu+ngb8luNCiooaGB\nZctWl6PpqoD29lb7L6Xsu3Sz/9LLvku39vbWoV80iHKNqJ0OTAHODCGc2X/ti8ClIYRxwJPAjTHG\nnhDCpcC9ZDc2LIgxri9TmyRJklKloa+vb+hXJU+f/7JIL/9lmF72XbrZf+ll36Vbe3vriKc+LXgr\nSZKUUAY1SZKkhDKoSZIkJZRBTZIkKaEMapIkSQllUJMkSYN6+OEH+cAH3s1JJ83n5JOP59hjP8kZ\nZ5xCd3d3Vdt1+ulfH9X3n3vuQh544LdbXHvqqchPf3rVqO5bamU7mUCSJNWG/fefy9lnf2fT44UL\nF3Dffb/h0EM7qtamf/7nC0p+zz33DOy5Zyj5fUfDoCZJUkocc/tHuOsvd5b0nh27vIfrP3Bj0a/v\n7u6mq6uT1tY2AK644jL++MfF9Pb2cvTRn2DevA6eeOIxLrrofCZMmMCUKVMYN66ZY4+dzymnfJm2\ntkm8/e0HcsABB3LJJRfQ19fHpEmTOO20s+ju7uass06jt7eXDRs28PWvn8Yuu+zKN795Kq+//jrr\n169n/vwTeOtbD+CDH3wvt976K5Ys+R8uvvgCGhsbGTduHN/4xhn09fWycOECZszYnhdffIE3vWkv\nvva104b83R5++EFuueUmzj77O3zsY3/PW96yD3/5y3NMnTqVc845n76+Pi644J954YXn6e3t5bjj\nPs9++80d8XtfDIOaJEkq6KGHHuSkk+azYsVyGhoa+OAHP8zcuW/ld7+7n5dffpEf/vAnZDIZjj/+\ns/zd372N7373O5xxxrfYffc9+NGPLqezcxkAr73WxU9+ch1NTU3Mn/8ZTjvtm+y22+7cfvsv+fnP\nr+Utb9mHtrZJnHnm2Tz77LOsW7eOF198gZUrV3LhhZeyfPlynn/+uS3adt5553LqqWew556Be++9\nh8suu4gTT/wSzz//Fy6++DKam1v46EePpKurk2nTphf9O7/00ot873s/ZPvtd+Dznz+WJ598gqee\nikyaNJnTTvsmK1eu4MQT53Pddf9e0vd6awY1SZJSYjgjX6WUm/pcuXIFX/7yiey44xsAeOaZpcT4\nP5x00nwANm7cyCuvvERnZye7774HAPvsM4df/zo7Crjjjm+gqakJgOeee5YLL/wXAHp6NjJz5i4c\ncMA7eOGFv3DqqV9l7NixfPrTn2P33ffgyCM/zMKFC9i4cSMf+cjHtmhbZ+eyTdOV++yzH1dccRkA\nO+00kwkTtgNg2rTpbNiwYVi/86RJk9l++x0AmDFjezZsyPD000t59NHFPPHEY5vavWLFCiZPnjys\new+HQU2SJBVl0qTJnHnmt/nCF/6Jv/mb63njG3dlzpy5nHLKAnp7e7nmmh+z004zmTFje5599hl2\n2213Hn/8T5u+v6Fh8x7GXXZ5I2ec8S122GEHHn30Ebq6Olm8+CGmTZvOxRdfzmOPPcqPfnQ5X/rS\n11m79nUuuOB7dHZ28vnPH8uBB75r032mT29n6dKnmDVrTx555GF23nmX/p814lObBv3+N75xV2bM\nmME//uOxZDLrufbaq2lraxvVzxmKQU2SJBVtt9125yMfOZpLLrmAb3/7X1i8+CFOOOF/sW7dWg46\n6FAmTNiOr371FL7znW8xfvwEmprG0t4+Y5v7fPWrp3HOOd+kp6eHhoYGTj31TCZNmsRZZ53OzTff\nSE9PD5/97HHMnLkzP/3plSxadBe9vb187nPHb3GfU05ZwMUXZ9ePNTY2cuqpZxb9u1xyyXfZbrvs\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# need fig to pass to the animation function\n", "fig, ax = plt.subplots(figsize=(10, 6))\n", "\n", "# fixing the axis size makes sure the animation doesn't jump around as\n", "# matplotlib changes the plot size as data changes\n", "ax.set(xlim=(0, 100), ylim=(0, 200))\n", "\n", "x = x_points\n", "y = np.array([predict(x_points, m,b) for m,b in m_and_b_hist])\n", "\n", "line, = ax.plot(x, y[0], lw=2, color=\"g\", label=\"Regression Line\")\n", "plt.scatter(x, y_points, label=\"Original Data\")\n", "\n", "def animate(i):\n", " line.set_ydata(y[i])\n", "\n", "plt.xlabel(\"X values\"), plt.ylabel(\"Y values\")\n", "plt.legend()\n", " \n", "anim = FuncAnimation(\n", " fig, animate, interval=1000, frames=len(y))\n", "\n", "HTML(anim.to_html5_video())" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "The animataion (or the printouts above) make it clear the gradient descent " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }