{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Linear regression\n", "\n", "we want to solve linear regression \n", "$${\\rm minimize}_w \\|{\\bf X}w-{\\bf y}\\|_2^2$$\n", "first generate input, output data examples\n", "\n", "there is a subtlety (in notations mainly) in how we handle constant\n", "\n", "given data $x=(x[1],x[2],x[3],\\cdots,x[d])$ in $d$-dimensions, \n", "one option is to use **linear predictor** of the form \n", "$$f(x) = w^Tx = w_1x[1] + w_2x[2] + \\cdots, w_dx[d]$$\n", "\n", "anogher option is to use **affine predictor**, by appending a one to the data, i.e. $x=(1,x[1],x[2],x[3],\\cdots,x[d])$\n", "$$f(x) = w^Tx = w_0 + w_1x[1] + \\cdots + w_d x[d]$$\n", "\n", "We will use these notations interchangeably, as it should be clear from the context which one we are using\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# generate training data\n", "import numpy as np\n", "n = 100 # sample size\n", "x = np.random.uniform(-1,1,n) #sample input data\n", "x = np.sort(x)\n", "x[0]=-1\n", "x[n-1]=1\n", "\n", "# ground truth is 5-th order polynomial and we add Gaussian noise to it\n", "y = (x-.99)*(x-.4)*(x-.25)*(x+.6)*(x+.8) + .03*np.random.randn(n)\n", "\n", "# plot the samples and grounstruth\n", "t = np.linspace(-1,1,100)\n", "y0 = (t-.99)*(t-.4)*(t-.25)*(t+.6)*(t+.8)\n", "import matplotlib.pyplot as plt\n", "plt.plot(x,y,'o')\n", "#plt.plot(t,y0,'k-')\n", "plt.show()\n", "\n", "# generate test data\n", "n_ = 100\n", "x_ = np.random.uniform(-1,1,n_)\n", "y_ = (x_-.99)*(x_-.4)*(x_-.25)*(x_+.6)*(x_+.8) + .03*np.random.randn(n_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "next, create **data matrix** ${\\bf X}$\n", "$${\\bf X} = \\begin{bmatrix} (x_1)^T\\\\ (x_2)^T\\\\ \\vdots \\\\ (x_n)^T \\end{bmatrix}$$\n", "- the $i$-th row od ${\\bf X}$ is input raw data of $i$-th sample, transposed\n", "- the $j$-th column of ${\\bf X}$ gives values of $j$-th data entry across $n$ data points \n", "- $X_{ij}$ is the value of $j$-th entry for $i$-th sample data point" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Constant fit example\n", "we are going to ignore any input data and try to fit a constanf function $f(x)=w_1$\n", "\n", "we create a data matrix with $x_i=1$\n", "\n", "data matrix is " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [1.]])" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# create a data matrix X\n", "X = np.vstack([np.ones(len(x))]).T\n", "display(X)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recall that the least squares solution is \n", "\\begin{eqnarray} \n", "\\hat{w}_{\\rm LS} &=& (X^TX)^{-1}X^T y\\\\ \n", "&=& n^{-1} 1^T y \\\\\n", "&=& \\frac{1}{n}\\sum_{i=1}^n y_i\n", "\\end{eqnarray}\n", "\n", "\n", "which is just the average of the sample outcome data, \n", "and the prediction is \n", "$\\hat{w}_{\\rm LS} = \\frac{1}{n}\\sum_{i=1}^n y_i$ for all data point $x$, \n", "\n", "\n", "$$ \\hat{y} = \\begin{bmatrix} \\hat{y}_1\\\\ \\vdots\\\\ \\hat{y}_n \\end{bmatrix} = \\begin{bmatrix} \\hat{w}_{\\rm LS}^Tx_1 \\\\ \\vdots \\\\ \\hat{w}_{\\rm LS}^T x_n\\end{bmatrix} = \\hat{w}_{\\rm LS} \\begin{bmatrix}1\\\\ \\vdots\\\\ 1\\end{bmatrix}$$\n", "\n", "hence, **the average is the best constant fit** for suqared loss\n", "\n", "and the MSE is the variance of the outcome:\n", "\n", "$$ \\frac1n \\sum_{i=1}^n ({\\rm ave}(y)-y_i)^2$$" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "0.31443036320124934" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# linear regression with constant feature\n", "w = np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),y)\n", "yh = w*X\n", "\n", "plt.plot(x,y,'o')\n", "plt.plot(t,y0,'k-')\n", "plt.plot(x, yh, 'g')\n", "plt.show()\n", "\n", "MSE_train = (1/float(n))*np.sum((y - yh)**2)\n", "display(MSE_train)\n", "\n", "# MSE on fresh data not used in training\n", "X_ = np.vstack([np.ones(len(x_))]).T\n", "yh_ = w*X_\n", "MSE_test = (1/float(n_))*np.sum((y_ - yh_)**2) \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "for **affine** fit, we use $(1,x_i)$ as the input data, and the data matrix ${\\bf X}$ is" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , -1. ],\n", " [ 1. , -0.99504602],\n", " [ 1. , -0.96442134],\n", " [ 1. , -0.94904528],\n", " [ 1. , -0.88876712],\n", " [ 1. , -0.88368048],\n", " [ 1. , -0.88224462],\n", " [ 1. , -0.87133499],\n", " [ 1. , -0.81244313],\n", " [ 1. , -0.79770684],\n", " [ 1. , -0.78975841],\n", " [ 1. , -0.74763755],\n", " [ 1. , -0.74564292],\n", " [ 1. , -0.73826952],\n", " [ 1. , -0.72113165],\n", " [ 1. , -0.59866688],\n", " [ 1. , -0.5874413 ],\n", " [ 1. , -0.58323994],\n", " [ 1. , -0.58105915],\n", " [ 1. , -0.56664146],\n", " [ 1. , -0.54231552],\n", " [ 1. , -0.54205865],\n", " [ 1. , -0.52976987],\n", " [ 1. , -0.50298391],\n", " [ 1. , -0.47827274],\n", " [ 1. , -0.47589596],\n", " [ 1. , -0.40378158],\n", " [ 1. , -0.39173585],\n", " [ 1. , -0.36613137],\n", " [ 1. , -0.35473865],\n", " [ 1. , -0.30850939],\n", " [ 1. , -0.29121475],\n", " [ 1. , -0.28573401],\n", " [ 1. , -0.28208756],\n", " [ 1. , -0.24372347],\n", " [ 1. , -0.23850207],\n", " [ 1. , -0.20953871],\n", " [ 1. , -0.20244476],\n", " [ 1. , -0.18987753],\n", " [ 1. , -0.16682943],\n", " [ 1. , -0.14319297],\n", " [ 1. , -0.13726809],\n", " [ 1. , -0.13004682],\n", " [ 1. , -0.09819446],\n", " [ 1. , -0.08951547],\n", " [ 1. , -0.08888083],\n", " [ 1. , -0.067926 ],\n", " [ 1. , -0.06468156],\n", " [ 1. , -0.02612419],\n", " [ 1. , 0.00428165],\n", " [ 1. , 0.03274235],\n", " [ 1. , 0.04105873],\n", " [ 1. , 0.05405118],\n", " [ 1. , 0.07450369],\n", " [ 1. , 0.09210636],\n", " [ 1. , 0.11973952],\n", " [ 1. , 0.13022608],\n", " [ 1. , 0.14897948],\n", " [ 1. , 0.21543156],\n", " [ 1. , 0.22289771],\n", " [ 1. , 0.22920327],\n", " [ 1. , 0.24334909],\n", " [ 1. , 0.25225496],\n", " [ 1. , 0.28898565],\n", " [ 1. , 0.31399314],\n", " [ 1. , 0.31538826],\n", " [ 1. , 0.32626103],\n", " [ 1. , 0.34153312],\n", " [ 1. , 0.34510895],\n", " [ 1. , 0.3816217 ],\n", " [ 1. , 0.39667024],\n", " [ 1. , 0.42204976],\n", " [ 1. , 0.44564987],\n", " [ 1. , 0.48923504],\n", " [ 1. , 0.49129123],\n", " [ 1. , 0.49708922],\n", " [ 1. , 0.56373032],\n", " [ 1. , 0.57410965],\n", " [ 1. , 0.61979678],\n", " [ 1. , 0.64511526],\n", " [ 1. , 0.65954297],\n", " [ 1. , 0.66009094],\n", " [ 1. , 0.67974655],\n", " [ 1. , 0.68331964],\n", " [ 1. , 0.69186926],\n", " [ 1. , 0.70823516],\n", " [ 1. , 0.72684752],\n", " [ 1. , 0.79740815],\n", " [ 1. , 0.80268613],\n", " [ 1. , 0.88521691],\n", " [ 1. , 0.88926175],\n", " [ 1. , 0.89622902],\n", " [ 1. , 0.89834544],\n", " [ 1. , 0.90551664],\n", " [ 1. , 0.94675289],\n", " [ 1. , 0.95170164],\n", " [ 1. , 0.9642945 ],\n", " [ 1. , 0.97013962],\n", " [ 1. , 0.99039717],\n", " [ 1. , 1. ]])" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# create a data matrix X\n", "X = np.vstack([np.ones(len(x)),x]).T\n", "display(X)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "the prediction has the form \n", "$$\\hat{y} = w_1+w_2x$$\n", "this is called **straight-line fit** and if $x$ is time, it is called **trend line**\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA/gklEQVR4nO2dd3xUxfr/3096qEnoBOmIoCDBqBS/FlCaUgQpNlRUlCte5SqKehF+ekUs2K5cFRVBrwh6EZAmKsUCKi10RFBAEnoNIT2Z3x+7CZtkN9nN1mSf9+u1r+w5Z+acJ2fPmc/MM8/MiDEGRVEUJXgJ8bcBiqIoin9RIVAURQlyVAgURVGCHBUCRVGUIEeFQFEUJcgJ87cB5aF27dqmadOm/jZDURSlQrFhw4bjxpg6xfdXSCFo2rQp69ev97cZiqIoFQoR2W9vv7qGFEVRghwVAkVRlCBHhUBRFCXIUSFQFEUJclQIFEVRgpwKGTWkKIp7zE9K4ZVluzh4OoOGMdGM7dmaAQnx/jZL8RMqBIoSZMxPSuGpL7eSkZMHQMrpDJ76ciuAikGQoq4hRQkyXlm2q1AECsjIyeOVZbv8ZJHib1QIFCXIOHg6w6X9SuXHI0IgIr1EZJeI7BGRcXaOi4i8ZT2+RUQ62hzbJyJbRWSTiOhwYUXxMg1jol3ar1R+3BYCEQkFpgK9gbbArSLStliy3kAr62ck8E6x49cZYzoYYxLdtUdRgpX5SSl0nbyCZuMW03XyCuYnpdhNN7Zna6LDQ4vsiw4PZWzP1r4wUwlAPNFZfAWwxxjzJ4CIzAb6Azts0vQHPjaWdTF/EZEYEWlgjDnkgesrStDjSgdwwbZGDSkFeEII4oEDNtvJwJVOpIkHDgEG+EZEDPCeMWaavYuIyEgsrQkaN27sAbMVpfJQWgewvQJ+QEK8FvxKIZ7oIxA7+4wLaboaYzpicR89JCJX27uIMWaaMSbRGJNYp06JWVQVJajRDmDFHTwhBMnABTbbjYCDzqYxxhT8PQrMw+JqUhTFBbQDWHEHTwjBOqCViDQTkQhgGPBVsTRfAcOt0UOdgDPGmEMiUlVEqgOISFWgB7DNAzYpSlChHcCKO7jdR2CMyRWR0cAyIBSYbozZLiIPWo+/CywB+gB7gHTgHmv2esA8ESmwZZYx5mt3bVKUYEM7gBV3EEsgT8UiMTHR6ApliqIoriEiG+yF6etcQ4pSSdGJ5RRnUSFQlEqITiynuIIKgaJUQlwdV1AetMVReVAhCBD0pVI8ibfHFWiLo3Khs48GAAUvVcrpDAznXypHc8UoSll4e1yBTmVduVAhCAD0pVI8jbfHFehI5sqFuoa8iLPuHkcvT8rpDLpOXqFuIsVlvD2uoGFMNCl2nlsdyewZfO0qViHwEq74UB29VGXlU5TS8ObEcmN7ti7yfIOOZPYU/uh/UdeQl3DF3WOvGe9MvvLg7Jz1ilIaAxLieXFgO+JjohEgPiaaFwe208qKB3BUdjw6Z5PX3lltEXgJV3yots14Ry0DT/heNdJD8SQ6lbV3KO1d99Y7q0LgJVz1oRa8VF0nr/Ca77WsVoqGr3oWDQlWykNprmLw/HgQUNeQ1yhP1IYxhttah5G1YwUnlr3N0S8mcnzhq6SumEbLwyvYuXOnWzaV1imt4aueRUOClfJSlqsYPB+dpULgJVz1oa5cuZLExERGD7yGwwtfI+O3H8k7d4rcw7vI/u17Pn7zBdq2bUvbtm2ZOHEiJ06ccNkmR62KUBENX/UwGhKslBfbssMRno7OUiHwIgMS4lk9rht7J9/I6nHd7IrAnj176Nu3L926deP48eNMnTqV7du3k30ulazDe8g8cZC01NMkJyfz9ttv06BBA5577jmaN2/OpEmTOHfunNP2OGql5DmYgVZjwstPRYuz1yCCwKKg7HhjaIfCd9aYfExujleis1QI/MjatWu58sor+eGHH5g8eTK7du3ib3/7G23btiUkpOhPEx8fz0MPPcTy5cvZunUr1157Lc888wytWrVi0aJFpV6n4CUfM2cTkWEhxFYJL9JKcVTz0Jjw8lORVgxTN5b/cSTEtq2D3ON/ceCNIdxS96jH+5pUCPzEypUr6d69OzExMSQlJfHkk08SFRXlVN6LL76YBQsWsHr1aurUqUPfvn156KGHSE9PL5G2+Et+OiOHzJx8Xh/aobCVoqtbeZ6KdE/VjeVfyhLigtbBxE4RmLwc7urdxeM2qBD4gcWLF9O7d2+aNGnCjz/+SPPmzct1ni5durB27Voee+wx/vOf/5CYmMhvv/1WJI0zL7nGhHueinRPK5obq7LhrBD/8ssv1KpVixYtWnjcBg0f9TG7d+9m6NChXHLJJSxbtoxatWq5db7IyEheffVVevXqxe23307nzp2ZO3cu3bp1A0qPFLJFY8I9T0W5pzpdhH9xVoi/Wfkj+bVb0vypJR4PR9YWgQ/Jyspi2LBhREZGMn/+/EIR8ERH3fXXX8+vv/5KfHw8PXv2ZPr06YDjl1ms19VOQqUiubEqI870J336ww6S9+4mv24rr/TjeKRFICK9gDexLF7/gTFmcrHjYj3eB8vi9XcbYzY6k7cy8fTTT7Nx40bmz59Po0aNAM+O9m3atCmrV69myJAh3HvvvRw8eJCxN97DmDmbKB4XZICJX20nKzdfRxqXg4o+WCw3N5etW7eydu1adu3aReyWXSTv+oPMc2cJFUONiBCemFOFV+vWpV69ejRu3JiOHTvSsWNHWrduTViYOhM8hTPzNk2aYQkIiWx4UeE+Tw4sc/vXFJFQYCpwA5AMrBORr4wxO2yS9QZaWT9XAu8AVzqZt1KwdOlSXnvtNR566CH69+9fuN/TK0nVrFmTxYsXc++99zJ+/Hiezsgg33TGosVFOZ2RU2KfN0YtVjY8Id7+EJK9e/eyYMECFi5cyM8//0xGhsX1UKVKFRo3bkyXtk2IjY0lPDycsLAwMjMzOXLkCLt27eLrr78uDEaoXr06vXr1ol+/fvTp04e4uDiv2l3ZcWam2IO7twBCZIMLi+T1VD+OJ2T9CmCPMeZPABGZDfQHbAvz/sDHxhgD/CIiMSLSAGjqRN4KT3p6Ovfddx/t2rXjlVdeKXLMGx11YWFhfPTRR0RHRzNp0iQadB1EeNe77YqBp68dDLgr3r6c8+nUqVP897//Zfr06WzatAmASy65hJEjR9KpUyeuvPJKmjZtWuazkZeXx65du9i4cSOrVq1i0aJFfPHFF4SHh3PLLbcwatQorrrqKqefMaUoZfYnHd1NeO3GhERWKbLbU/04nhCCeOCAzXYyllp/WWnincwLgIiMBEYCNG7c2D2Lfcybb77JwYMHmTNnDtHRRX84b3XUhYSE8M477xAVFcWbb75JbHYu1a+7r/BFjQ4PJSo8hFPpJVsF2klYOu6Kty/WE962bRuvvPIKn3/+OZmZmSQmJvLaa6/Rr1+/ckWdhIaGFo5sv+OOO8jPz2fdunXMmjWLmTNn8tlnn9GuXTvGjx/PoEGDSoyDUcpPfn4+uYd3UaV55yL7PdmP44lfy14VoLhL2lEaZ/JadhozzRiTaIxJrFOnjosm+o8TJ04wefJk+vbty1VXXVXiuDc76kSE119/nTFjxnBq3QLy1s4qEso4oe/F2klYDtwdLObNcM21a9cyYMAA2rVrx9y5c7nnnnvYuHEj69atY8yYMW6HHhYEF7R4ein/WHmO6+5+gpSUFD744ANyc3MZMmQIl112GYsWLcI4GLGuuMbu3btJSz3DHf26ey0c2RMtgmTgApvtRsBBJ9NEOJG3QjNp0iTS0tKYNGmS3ePeXklKRJgyZQrp6em89957vHDDJTw97ukiaSpyp6c/cHdRFldbgc70J/z++++MGzeOefPmERsby8SJE3n44Yc96r936NIa2I57772Xu+++m1mzZjFx4kT69u1L7969mTp1Ks2aNfOYDcHIL7/8AsCoIb25+OKLvXINcVe1RSQM+B3oDqQA64DbjDHbbdLcCIzGEjV0JfCWMeYKZ/LaIzEx0axfv94tu33B/v37ufDCC7n99tsLwzn9RX5+PnfddRf//e9/eeutt3j44Yf9ak9Fx53O3uIFKliExF4Nr6y0J0+e5Nlnn+W9994jKiqKJ554gpbXDeHtn1Jcss2Z/8fRFOnxMdGsHtetcDsnJ4e3336b8ePHk5+fz7PPPstjjz1GeHi4U/dHKcqoUaOYNWsWp06dctvlJiIbjDGJJfZ7ovkmIn2AN7CEgE43xrwgIg8CGGPetYaPvg30whI+eo8xZr2jvGVdr6IIwd13383s2bPZvXs3F1xwQdkZvExubi6DBw9mwYIFzJo1i2HDhvnbpKDFWSFxuD5FzSgeaJjM2LFjOXnyJCNHjmTChAn8fDDXaZGxtaV4HoDYKuFM6HtxYb5m4xbb9dsKsHfyjSX2HzhwgEceeYR58+bRqVMnPv3003KPog9mEhISqFOnDt98843b5/KqEPiaiiAEycnJNG3alL///e+89tpr/jankMzMTHr27MnPP//M4sWLueGGG/xtklIK9grfnJMpnPj632Qd2Ebnzp159913ad++PeB8rd0WR3nAUsgba/707Fy7wQWlnRtgzpw5PPDAA+Tn5/POO+9w++23O0yrFCUtLY2aNWvyzDPP8Nxzz7l9PkdCoF37XmLatGnk5+cHnAsmKiqKBQsW0KZNG26++WacFVQdgewfbPsNjMkndf0CDn30d3KP7WPatGn89NNPhSIAJacOKaC0jujSjhWIUMrpDNIycwkPLRrf4UzfyNChQ9m8eTPt27fnjjvu4IEHHiA7O7vUPIqFdevWkZ+fz5VX2g2m9BgqBF4gOzubadOm0adPn4DsKIuJieHrr7+mTp063Hjjjfz555+lptdpiv1HQVRZ7pmjHPnsaU4tf58qTdszbcEq7r///iI+4/lJKXbD8KD0iCZno51y8g1VI8LKFbnSpEkTVq1axbhx45g2bRrdu3fnyJEjTl03mFm5ciUhISF07drVq9dRIfAC8+bN48iRIzz00EP+NsUhDRo0YOnSpaRnZnHxldfQ+JHPHNb0dZpi/zEgIZ4bq+7l8IyHyT7yBy0GjeWTOV8yosdlJdK+smyXQx9+abV2Z5ZGLOBMRk6Ziy05IiwsjBdffJHPPvuMDRs2kJiYWDjITbHP8uXLSUxMJCYmxqvXUSHwAlOnTqV58+b07NnT36aUym8Z1Ykb8E8yTx3h6NznOXDstN2avk5T7B/S0tIYMWIEU576G5d3aMcfv21nz/9e5uaOjeymd/R7GEofsVwwZXZMdNlRPZ4YbDhs2DBWr16NiHD11VezfPlyt89ZGTl79ixr166le/fuXr+WCoGH2bp1Kz/++COjRo0K+NGVryzbhTRoQ+2bHiMr5TdOLJpCenZOiZp+RVptq7KwY8cOrrjiCmbMmMEzzzzDDz/8UKab0dHvUdratwUMSIhn04QevDG0Q6npPDXYMCEhgTVr1tCkSRN69+7N7NmzPXLeysQPP/xAbm6uCkFF5D//+Q9RUVGMGDGicF+gdrQW1CCrXnQVsd3uJf33NZxaOb1EzVKnKfYtj/7rLdp1uIxd+w/RZsTLJA4a5VQMvid+pwEJ8Q6FIyY63KODDRs1asSPP/5I586dufXWW3n77bc9du7KwPLly4mMjKRLF8+vSFYcFQIPkp6ezieffMKwYcMKR3QGckerbQ2yemJ/ql/Wl7Pr5iPblxZJV5FW26rIZGdn03vIXbw5/hHC67Wgwd1vcq52G6efF0/9To4EZWI/z49qjYmJYdmyZfTv35+HH36YKVOmePwaFZXly5fTtWvXEvOTeQOdVNyDLFmyhHPnzjF8+PDCfb6YYKy82E6VICLEdrsPk3acfYv/w/z51zNgwIDCtBVlta2KysGDBxk8eDBr1qyhxhUDibnmLiTEUhi78rx44nfy9rQnxYmKiuKLL77g9ttv5/HHHycrK4unn3667IyVlPlJKbww9xe2bNlC4x4jmJ+U4vV3T4XAg3zxxRfUrVuXq6++unBfoHS0ljaStWB/fFw1Xp7+Ma//4w5uvfVWVq5cSadOnXxqZzCyZs0aBg0aRGpqKnX6PUGVNleXSOPr58XXwh8eHs6sWbOIjIzkmWeeIS8vj/Hjx/vs+oFCgQfh+Na1AGTXu9gni0WpEHiI9PR0Fi1axPDhwwkNPd+sDoT1YMua/774A3bdV1/RpUsX+vbty88//0zLli19Zmuw8eGHHzJq1CgaN27MN998w4OLj/n9efEXYWFhzJgxg5CQEJ599lmio6N5/PHH/W2WTynwIGTu24REVCGifkufeBC0j8BDLFmyhPT0dIYMGVJkvz87Wgs6qR+ds8mlcQB169Zl6VJLP0GvXr04duyY120NNnJycvj73//Offfdx7XXXsvatWtp165dUHTMlxY8ERoayvTp0xk6dChjx45l6tSpfrTU9xS0/DL3byaqSftC96C3W4TaIvAQ9txC4Ht/awGOJhKzpbSHq1WrVixcuJDrrruOm266iRUrVlC1alVvmBpweHsZyZMnTzJ48GBWrFjBP/7xD1566aXCNYD99bz4Cnut0zFzNrF+/0n+NaAdYBGDTz75hMzMTEaPHk2VKlW45557/Gm218jMzeRUxilOZZ7idOZpoqtv4dCxP8ltfYSwixtzMuwD8iWNyIhMus2cwqnMU7xz4zt0auRZl60KgQdw5BYqwB8drfY6qYtTlruhU6dOzJ49m4EDBxbOWlrZpxL29jKSO3bsoF+/fhw4cIAZM2Zw1113lUhTUTvmnRFQe8+lAT795S8Sm8QVpg8PD2fOnDn069eP++67j9jY2CLBC4FCXn4eqVmphQX5qQzr38xTRb6fzjxd+LFNm5WXVfKksUAfyGQdWWYLoVQjrmptsvNq06hGI8JCPF9sqxB4gKVLl5Kens7gwYP9bUohZTUlnXU39O/fn3fffZeRI0dy//3389FHH1XqdWm9GeW1ZMkShg0bRpUqVVi1ahWdO3cuO1MFwVkBLW30c/F7HBkZyZdffkn37t0ZNmwY33zzTYkWt7sYYyy1cjsFud3tYvtTs1Ix9hdVBCBUQomJiin8xEbHEl8jntioWGKjYgv3xUTFFG7fc/fD/LnrAPVu+w+NYmv6pEWoQuABHLmF/ImjTmqwxJe78nDdf//9HDp0iAkTJlCvXj1eeumlctnkbZeLJ/BGlJcxhilTpvDEE0/QoUMHFixYEBDrU3gSZwW0tOfS3j2uWrUqixcv5v/+7//o27cv33//PR06dCiSJi8/jzNZZwoLaNsaeFkF+enM0/Zr5bY2hFctUlhfUOMC2tVt57Agt92uFlHNpYrT6dOn2f19EmPGjOHll252Op+7qBC4SPHC7O/XNGbRokXceeedhX7eQMDRcorlHQg2fvx4Dh8+zMsvv0xcXBxPPvmkS/m97XLxFI4KKoNl3n5XxSsrK4sHHniAmTNncssttzBjxoxK2dfirICO7dmaMXM2FalDGwyGLOrVzGP70e12C+yrnruKWfNm0en1TiR0SSDDZBSmS81KLdU221p5bLSlJt64ZmNiIovus1eox0TFEB7qO3fo4sWLyc3NZeDAgT67JqgQuIS9wmzs259z7tw5+vXr52friuLpTkcR4d///jenT59m3LhxxMTE8MADDzidP5AH1hUwPymFc1m5Do+7Kl6HDx9m4MCB/Pzzz0ycOJHx48cH/PxT5aVBzQgOnDlBvpwjnzTyJY180qhZNZtXVu8oUiMPqXuAlDPHyeNcYToklwPZcMk79s9fNbwq1S6txrEDx9i8ZTPXXHkNl9a/tEiBba8wrxlVk+oR1UvUyu22Ti/xznPoSkv4yy+/pGHDhlxxxRVescURKgQuYK8wO7NnAxIaHlBuoQI83ekYGhrKzJkzSU1NZdSoUdSoUYNbb73Vqby+Glhn76WDsgXRmSgrcF68NmzYwIABAzh58iSff/55QPUf2cMYQ0ZuhkP3iiPXSsF2anYq2Ik9OJ4LT3xnqZUXFNC1qsdSPaoeySdCyMqOomZkDN0ubEbX5k3s1shta+Xff/89PXr04NzWc7z3jWWdZlfxZevUlWulp6ezdOlS7rnnHp9XGFQIXMBeoZWxdyORjdqU2dwvrVZQEXznBYSHh/PFF1/Qp08f7rzzTiIiIhg0aFCZ+XwxsM5ui+2LzSCQk2cK99l7EZ2JsiqgLPH67LPPGDFiBHXr1mX16tUlfNreosBXbq/Ds0jB7qAwz84rfdWwahHVihTQTWKa0D6yvaXjMzqWAyeEH35LJ/VcJHWqxXFfl4sZmNC6XL7y4ti+I00HPcGPn/2L4cOHM3v2bJcLTV+2Tl251rJly8jIyPC5WwjcFAIRiQPmAE2BfcAQY8wpO+l6AW9iWaD+A2PMZOv+icD9QMGIpaeNMUvcscmbFC/MctNOknNsHw163VdqvtJqBUCF8J3bEh0dzVdffUXv3r0ZNmwYn3/+OTffXHrHlqM+C08OlLL30uXkl4zosPciutIycSReubm5PPXUU7z66qtcddVVzJ07l7p16zp93oJaeWkF+amMU5zOKtrZWVgrL8NXHhYSVtSVEh1Lk5gm510qpXR+1oys6VNfeQHzk1KY+NV2TmecXys5q3En6nS/ly+++JBmzZo5DF5wVMHy5bQvrlxr3rx5xMXF+cW74G6LYByw3BgzWUTGWbeL9CKKSCgwFbgBSAbWichXxpgd1iSvG2NeddMOn1C8MMvctwmAR4bfUmq+slb4CnTfuT2qV6/O0qVL6dmzJ0OGDOF///sf/fv3d5jeFwOlXHmRi6ctLZrFFkfideLECYYNG8Z3y7/jnr/dw+PjH+ev3L/Y/MfmErHkpblacvJLLg5vS7WIakUK6SYxTbg06lK7hXlBTb2g4K8aXrVChf6W5q6LvmwA9dKO8fLLL5MaFseW6peXcAfaq2Ct33+SEBHyTMkKgjem8XC2JZydnc3ChQvp37+/X8bqiLFzQ5zOLLILuNYYc0hEGgCrjDGti6XpDEw0xvS0bj8FYIx50doiSHNVCBITE42zi64X59oZ15aZ5qYLb+LxLo8Xpr+7w93c3eFuPv5lK39bdge5efkA5J1MxmSlcVWx9UQL0h9PP84tn9/Czt+vJjr/SnIkmRPhZc+5XiP3ZqrmX8nXj7fkgUUPMKn7JLpc0IU1B9bw9PKyZ2Usnv69m96jde3WLNy1kCk/lz3Nb/H0/xvyP2pXqc2MTTOYsWlGkbR5eXls3rKZs2fP0uaiNtStW7dE+lV3rwLg1TWvsuj3RWVe3zb9z8k/M3fIXACe+u4pfk7+2WG+pL9Ok5tblTrZlnt0KmwG+XKWWjkPA3Ai/N/kiGU6g8iwUBIaxxTmPZ6WxZ/HzxGS15C4nPvJJ42T4dMQIqiW93/kyTkyIuZTNTqbiDBDbn5u4Sc7N5uM7AzLmpBOeCnCQ8IJCwmz+2lXrx39W/cnJiqGF354gf4X9efO9neSb/IZuXBkmQV58Wfvsc6P0bd1X3Yd38UDi8ru3C+e3p/P3h1zxlMj/QlCqUla6HekhX5XIn14ajJpZ04TXqcJIVHVqZP9FNXC4zgX9h1H85ZRP3syAGfCviQjZK3D64aECM1rV2XbaMvz5eqzB1CrSq0i6U9knKBPowk89eVWknmj8NkruFbtapGFeU+dOsWWlVu4KOZ5MhsmkFH1Hbo2b8rc2y3lxaDPB3Ei/QRw/v0oDyKywRiTWHy/uy2CesaYQwBWMbDXDo4HDthsJwNX2myPFpHhwHrgMXuuJQARGQmMBGjcuLGbZrvO/KQUnl+8g1zJL9yXm5FGzZiaZeaNqxpBxtmS+yPDLKOQs3JL1nj8PcnY/KQUnlqymb1ZJ+jz5o883esK7K2MHhoayqXtL2Xr1q3s3LmTvDzn/Oze4IK4aPYfEwx5hZErRlLJCdtEdn4aOXKAXDmBSD6hEcKOYweLFughOeTJNs6FLSty3vSwVee/Z1g6PgsK7vzcfDLOZRBCCLVia9G6bmtuaXsLsdGxvLv+XTrU78CoxFHERMVw25e3ESqlrw18XdPrGHnZSOYnpbDvmPCf5LMs//UAD1xbp0LV5kvjeFoWB05mkJWbR2RYKBfERRcpFAuw917YEhkWiolthKRnknP8ABH1mgOWFnV6fp7FEe0EIiULZk9R0OJ9cFEYp3Nw+P/uTz4IIaGcq9OWEOBcdi6rfj/mkymowYkWgYh8B9S3c+gZYKYxJsYm7SljTGyx/IOBnsaY+6zbdwJXGGMeFpF6wHEsYdrPAw2MMSMoA3daBOWl6+QVRZp42Uf3cuijh2l5y1h2f/FyqXntNXELYvoBj8b7e4LS7HVkU3p6OoMGDeLrr79mypQp/OMf/yj39Y0xpOeklznas8BXbrv/ePopMnLTSj1/qIQRFx1b0hdezH/uKBwxLCSM9PR0Ro8ezUcffcT111/PrFmzqFOnjsv/q6Mop0B7JjyFK89W8XfOloI8Y+ZsIufscQ5//BgA9YdPIax6bZdsEmDv5Btd+0fKib3f++om0dSuV5+q7XpQq8eoIunjY6JZPa6bx65f7haBMeb6Uk56REQa2LiGjtpJlgzYDqNsBBy0nvuIzbneB8r2G/iJ4j7ljL1JAGTWLXvVJmf844EUNeSoT+OxzzczZs4muzZWqVKFBQsWcMcdd/DYY4/xV/JfPPX/niI1O9UlH3nBdm6+43h+gOoR1YsU2s1impFQP8Gp0Z5Vwqu4Vbvetm0bQ4cOZefOnfzzn/9k4sSJdueYKgtHQQRR4SEVst/IGVyJorEXYAAQWyWcCX0vZkBCPK8s20UKtak7eAKHP32SY3Ofp95tk4mrWYOs3HynIsF81fp29Ht3yfwVk5tD9Q49S+Tx1ToU7rqGvgLuAiZb/y6wk2Yd0EpEmgEpwDDgNoACEbGmuxnY5qY9XqN4p0/mviTCazemsZNTBZQW0x9ok4wdPJ1RONqzcHCQpJHPOfJD0th5No3752Xw4bZIalXPLVrIdz5FeNtw3pQ3efO1Nx1eoyCCpaCAjouOo3ls8xIFd0HhbVtDX7Uzjde+/YODRzKoHhPNmE6+EU5jDO+//z6PPPIINWvW5JtvvuH66x3WkwpxFL3iqFB0VHj5enEab+BKFI0zFagCsaBuc+r0e5Kjc5/j5KJXeP3TzwkNC7MIRSn3zZdTfNv7vdOzc/nskxlUa3QREXWbl8jjK5FyVwgmA5+LyL3AX8BgABFpiCVMtI8xJldERgPLsHjtphtjtlvzvywiHbC4hvYBzg9V9TG2tZP8nCwyD2wj9rIbA3qe+Jy8nCJx5Q5DEovVypOjj5Jr0kBKr00t/bMK8TVrFxbWzWKa0bFBR2IiY/ht8298Pe9rmjVoxvix42nVqFWRQj06LLpctfL5SSn8c/5On4fbHjlyhPvvv5+FCxfSo0cPPv74Y+rVq+eUvY7Cg10t2P3db+QJXB1PUlYlqYhYtEikef+/8+f8N1j+0UtMnTqVAQnxNBu32OG0cL50t9n7vbNSfiPjyD7+Nv5lVphQr4ZXl4ZbQmCMOQF0t7P/INDHZnsJUGJ8gDHmTneu70tsH7g/t2yFvBxG3TbAqw+RMYZzOefKnN7WkXslLbt0X3l4SHgRl0lcdBwt4lrQokYE6/7MIi83mhBTzfKhGiGmKiFUtW5XJYRQ9k5w4FvtBV+1+Yrbb7+dJ1c/yezZs7mk2yVu3xNPDAZydQDfuCkfMGXC4+RmptP0xr/xwP8b55QIlGWvo0IxJjq8hFujsixO443xJEXF4kaefDKCl19+mWbNmjF27FiH9zk+JtqnLXF7dqRtXkZIRDQvPTGK73af8ZuLWEcWu0DBA/fii7/y9GfwjztuKjNPTl5OibnI7XZ+ZtmfLbEsX3mNyBpFatot4lo47Pwsvq80X7ltYelq3PX5vKG0vP8tjs9/kRtuuIFJkyYxduxYt4bPuzsYyJUh/4cOHeKWu0ay5ttFRNRvSYNh/8DUbswz87cTEhLi1Etamr2vD+1gt1Cc2M/S7xRI/UaewhfjSV588UX279/PE088QZMmTRjbs6vXBzM6Q3ERzM9MI/23H7mh/2CqVavGgIRqfvuN3RpH4C98GTVUUCu3LaAfe+YxUk6k8OSEJ4vUyu0V8OdyzpV6/ojQiMJolCL+8cjSZ0WMjY6lRmQNryxSURxXIj3spY3Iz6Luphms/nYh3bp1Y/r06TRp0qRctjiKJHE2usKZ/Pn5+XzwwQc88cQTpJ5Lp2aXW6lxxUAkNMxu+gLstTQc+agL8lek6UUqEpmZmfTo0YNff/2VZcuWcbpmq4C4z7a/t+z4mr0L32bDhg107NjRJ9d3FDUUVEJw8OxBklOTy/SZF49ycaZWXto0tradosW/R4VFVYj4cGcLLEcFbcOaUYyos5cxY8YgIrz55pvcfffdLv/v5QlttaXpuMUOj+2bfCM//fQTjz76KBs2bODaa69ld6tbCYsred7iIYeO7Bp0WTxzN6RUylDQQOeTVdt4YOhNZJ4+RvsH32Di3X0C5p5nZmbSsmVLmjZtyk8//eSz63prQFmF4vnvn+fdDe+W2F9QKy8oyGtVqUXLuJZ2ww/PHjvLiNtG8OKEFxl550hqRtYkNMT10MGKhrORTY5cIYfOZHLfU/fRvXt37rnnHkaMGMHMmTN56623aN++PeCc2LjrWgh14ObKP3WQoUOH8vnnnxMfH88nn3zC7bffzlUvrXSqc9NRX8DK347x4sB2AVEbDSbmJ6UwaXkycYMmcvi/Y9n24ZOMzg7l0Zr1XF6YyRu8//77pKSk8PHHH/vNBluCqkWw6fAmUlJTStTcXamVf/jhh9x3333s3LmTiy66yGUbKjvOul6mTZvGP//5T06dOsWDDz7I5Tffz0vfH/Z6zbl4iyDnZApnfp7Due2riI6K5Mknn+Txxx8vnE3W2RaIo8gUXw5WUs5j+xxmH9vPkU+fIKRqDPVve4nQqjF+bZWlp6fTokULWrduzcqVK33qEXDUIqicq2Q4oEP9Dtx44Y10bdyVtnXa0rB6Q6LDXQtjXLNmDXFxcVx44YVetLTiMrZna6LDi7aQinfMhYSE8OCDD/L777/z0EMP8d5773Fv7ytJWTKV3NTzYxJtJ+bzFPEx0ZZ1avdv4di8SRz8YBTpv62m4VWD2Lt3LxMmTCgypfiAhHheHNiO+JhoxJrfXgHiqOM8EEI+5yel0HXyCpqNW0zXySuYn5Tib5O8jm3LNKJOE+rcMoG81OMcmfNP8jLOeuXZcpZ3332Xw4cP89xzzwWMWzioWgSeoE2bNrRs2ZKFCxf65foVAVc7QHfv3k3HQQ+Rtn0FAFVadaJqu+uJbtaRkJBQj9Wo9+/fz4Q3PuCzTz8h+9h+QqJrUK19D+p2Hsgrw692q3bobt+FtwhUu7yNvZZpxt4kjs79f0TUbU69of8iNLKKz1traWlpNG/enEsvvZRvv/3Wp9cG7SPwCCdOnOC3335j+PDh/jYloHF1pHSrVq1of9s49v91K6nrFnBu+0rSd60mpGoMVVt1ou5vP9G03RU8PfAKl86bmZnJr7/+yvfff8+SJUv49ddfLde7pAPmmiFkN+5EozoxHvEX+yIssjxUhCVCvYHd8QrNEqgz4CmOzZvE0bnP0eG+yT6364033uDYsWM899xzPr92aWiLwAUWLVpE3759WbVqFddcc43Pr1+Zsa25mrwcMv7cwLltK8jYtwmTnQ4I4XEN6dDuYrp37kijRo2oUaMGNWrUAODs2bOcPXuWQ4cO8fvvv/P777+zY8cOsrKyEBE6duzI4MGDGTx4MM2blxzKX1kJ5r6LgpZpyukMBArvw7mdP3J84StcdOll/LLqW2rWLHsG4eLnLI/Yb9u2jcsuu4y+ffvyv//9z/V/yANoi8ADrFmzhrCwMC6//HJ/m1LpKFqjhuoXdqZKq06Y/DyyD/1Oxr5N5Bzdy7adu0havYLcXPshvSEhITRr1owLL7yQ7t27c/XVV3PVVVcRGxtrN31lxxdLhAYqti1T2wL8ws49GPF/zXn96dF0796dZcuWUatWrTLP585ax9nZ2QwfPpyaNWvyzjvvuPmfeR4VAhdYs2YNCQkJVKlSxd+mVEpsX9xm1ugeCQklMr4NkfFtLNvA78/3YNaPO3lr6RYOHTtBneqRPHD9xdx8RUtq1apFRESEv/6FgMMXS4RWBEq6K7txTdtGDBw4kGuvvZavv/6a+PjSC3N33GwvvPACSUlJzJs3r1zTlXuboIoacoecnBzWrl1Lly5d/G1KhcbZCJbSonAWbzvK5JUHOREaS0T9lpypegH/Xn+OXw/nqwgUw9mop2CkT58+LF68mH379nH55ZdTlru5vNObrFu3jhdeeIHhw4czYMCA8prrVVQInGTz5s1kZGSoELhBQdM65XQGhvNNa3tiUFoYallrQAcq/grjHJAQz+px3dg7+UZWj+umImBD9+7dWbNmDREREVx99dWl+u7LEyK8Z88eBgwYQIMGDXjzTcfTsvsbFQIn2bhxIwCJiSX6WRQncaUAL60m6+7Ec/7AFRGsDFSksQvt2rVj7dq1dOjQgcGDBzNmzBgyMko+S86MkbHlzz//5LrrriM7O5ulS5cSExPjDfM9ggqBkyQlJVGzZk2aNWsGVKwHPVBwpQAvLTojkAdvOaKitmLKQ0UUvbp167JixQpGjx7NG2+8wWWXXcaGDRuKpHHFzbZ//36uu+460tPT+e6779iTExvQ5YUKgZNs3LiRhIQERKRCPuiBgLMFeFn319WaWSBQEVsx5aWiil5UVBT//ve/WbZsGampqXTq1InRo0eTknL+vS7LzWaM4aOPPqJjx46kpqby7bffsje/dsCXFyoETpCbm8uWLVtISEgAKu6D7m+cLcDLur8VsQO0IrZiyktFF70ePXqwdetWRowYwXvvvUeLFi145JFH2Lp1K8YYu94AY0zhjLUjRoygTZs2rFmzho4dOzp8nid+td2BBb5Hw0edYNeuXWRmZhYKQUV/0P2Fs6Nvnbm/gbbOc1kEUxhnZRi7EBsby3vvvce4ceP417/+xdSpU3nrrbeoVa8BuQ0uRWrUhZAwzoSGctdnewk9uJVTx48QGxvL+++/z4gRIwoXYHL0PJ/OyGF+UkpAPMcqBE6QlJQEULh4RGV40H2BIz9/WQ9+Zby/gToFhTeoTKLXrFkzPvzwQ55//nmWLl3KE2/MJHXHD9bR7hZCoqoR2yqRD1+aRL9+/ahdu3aRczh6noGAmerDLSEQkThgDtAUy+LzQ4wxp+ykmw7cBBw1xlzian5/s3HjRqKiomjd2vIgV6YH3Vu4Mwqzst7fitaKKS/+Fj1vrPrWsGFD7r33Xv61uz7V+hjIy8Xk5WDycgiJqkZISCgjRtifsmNsz9Y8OmeT3WOB4kVwt49gHLDcGNMKWG7dtscMoJcb+f1KUlIS7du3JyzMopsV0Ufta9zpR9H7W/Hx19gFbwdyNIyxTFsvYeGERFYhtEpNJCS01NbqgIR4YquEOzxfIOCua6g/cK31+0xgFfBk8UTGmB9EpGl58/sTYwxJSUnceuutQMnaxutDO2gBZQd3+1GCpfaseBZvz7Za3tbqje0b8N9f/iqx/7qLAmO6CXeFoJ4x5hCAMeaQiNT1Vn4RGQmMBGjcuHF57XWZvXv3cubMGRISEtxydwQbldHPrwQ+3g7kKK/ba+Vvx1za72vKFAIR+Q6ob+fQM543xzHGmGnANLBMQ+2r6xZ0FCckJPBokM7tXh4qq59fCWx8UQEpT2s10CMNy+wjMMZcb4y5xM5nAXBERBoAWP8eLf1sJXA3v9dJSkoiNDSUdu3aBfyPGUion1/xB4E62DDQx5G46xr6CrgLmGz9u8DH+b3Oxo0badu2LVFRUerucBH18yu+xt8RS44I9Bayu0IwGfhcRO4F/gIGA4hIQ+ADY0wf6/ZnWDqFa4tIMjDBGPOho/yBRFJSEj169AAC/8dUFCUwKyCBKlAFuCUExpgTQHc7+w8CfWy2b3Ulf6Bw+PBhDh8+XDiiONB/zGDGG7HjiuJJAlGgCtCRxaWwadMmgEIhgMD+MYMVjeZSFPfQSedKYft2y6RQl1xySRkpFX+ikwAqinuoEJTCjh07qFevnlMLWyv+Q6O5FMU9VAhKYceOHbRt29bfZihlEOiheYoS6KgQOMAYo0LgZ5xdBa68seO6ypyiWNDOYgekpKSQmprKxRdf7G9TghJXOoDLE82lHcyKch4VAgfs2LEDQFsEfsLVycNcjeby9uRkilKRUNeQA1QI/Iu3O4C1g1lRzqMtAgds376d2rVrU6dOYEwTG2y4M52HM4PLdLoQRTmPtggcoB3F/sWdDmBnFiYJ1MnJFMUfqBDYoSBiSDuK/Ud5Zy91dnCZzo6qKOdR15AdDh8+zOnTp7VF4Ge8Pe+7TheiKBaCXgjs+ZOrndgJaEdxRUR9/4riOkHtGnLkT579zRpAhaAior5/RXGdoG4ROPInL/p+HbGxsdSrV89PlinlRacKVxTXCWohcORPPn1wL5dffDEi4mOLFE+gvn9FcY2gdg3Z8xsbY8g78Ze6hRRFCRqCWgjs+ZMjss+Sm3FWhUBRlKAhqF1D9vzJveLO8SzaUawowYIuc+qmEIhIHDAHaArsA4YYY07ZSTcduAk4aoy5xGb/ROB+4Jh119PGmCXu2OQqxf3J77zzDgAXXXSRL81QFMUP6Cy0Ftx1DY0DlhtjWgHLrdv2mAH0cnDsdWNMB+vHpyJgj927dxMdHU18fPA8BIoSrOgypxbcFYL+wEzr95nAAHuJjDE/ACfdvJZP2LNnDy1atCAkJKi7TxQlKNBZaC24W9rVM8YcArD+rVuOc4wWkS0iMl1EYh0lEpGRIrJeRNYfO3bMUTK32b17N61atfLa+RVFCRx0mVMLZQqBiHwnItvsfPp74PrvAC2ADsAhYIqjhMaYacaYRGNMoremhs7Ly+PPP/+kZcuWXjm/oiiBhY5Et1BmZ7Ex5npHx0TkiIg0MMYcEpEGwFFXLm6MOWJzrveBRa7k9yTzk1J4fvb3ZGdn8+WePLokpQRVZ5GiBCM6Et2Cu+GjXwF3AZOtfxe4krlARKybNwPb3LSnXBREDpzcvxeAtMjaQRk5oCjBiI5Ed7+PYDJwg4jsBm6wbiMiDUWkMAJIRD4DfgZai0iyiNxrPfSyiGwVkS3AdcAYN+0pFwWRA7mnDgIQFtswKCMHFEUJTtxqERhjTgDd7ew/CPSx2b7VQf473bm+pyiIEMg5dRAJiyS0elyR/YqiKJUZjZHkfIRA7qmDhMXURySkyH5FUZTKjAoB5yMHck8dIiyuIRCckQOKogQnQT3XUAEDEuLJy8tj8IuHiW5xOfFBGjmgKEpwokJgJbGOweTl8Op9vbj//m7+NkdRFMVnqGvIyu7duwF0MJmiKEGHCoGVPXv2AOj0EoqiBB0qBFZ2795NVFQUDRs29LcpiqIoPkWFwMqePXto2bKlzjqqKErQoaWeld27d2v/gKIoQYkKAZZZR//44w/tH1AUJShRIQBSUlLIzs5WIVAUJShRIUBDRxVFCW5UCDgfOqpCoChKMKJCAOzdu5eIiAhdsF5RlKBEhQDYt28fjRs31tBRRVGCEi35sAhB06ZN/W2GoiiKX1AhQIVAUZTgJuiFICMjgyNHjqgQKIoStAS9EPz1118AKgSKogQtbgmBiMSJyLcistv6N9ZOmgtEZKWI7BSR7SLyiCv5vc2+ffsAaNKkia8vrSiKEhC42yIYByw3xrQCllu3i5MLPGaMaQN0Ah4SkbYu5PcqBUKgLQJFUYIVd4WgPzDT+n0mMKB4AmPMIWPMRuv3s8BOIN7Z/N5m3759hIeH06BBA19fWlEUJSBwVwjqGWMOgaXAB+qWllhEmgIJwK+u5heRkSKyXkTWHzt2zE2zz1MwhiA0NNRj51QURalIlLlmsYh8B9S3c+gZVy4kItWAucCjxphUV/ICGGOmAdMAEhMTjav5HaGho4qiBDtlCoEx5npHx0TkiIg0MMYcEpEGwFEH6cKxiMCnxpgvbQ45ld+b7Nu3jxtvvNHXl1UURQkY3HUNfQXcZf1+F7CgeAIREeBDYKcx5jVX83uTzMxMDh8+rBFDiqIENe4KwWTgBhHZDdxg3UZEGorIEmuarsCdQDcR2WT99Cktv6/QMQSKoihOuIZKwxhzAuhuZ/9BoI/1+0+AuJLfV2joqKIoSpCPLFYhUBRFUSEgLCyMhg0b+tsURVEUvxH0QqBjCBRFCXaCXgg0YkhRlGAn6IVA+wcURQl2glYIsrKyOHTokAqBoihBT9AKgY4hUBRFsRC0QqCho4qiKBaCXgi0s1hRlGAnaIVg//79hIaGEh8fX3ZiRVGUSkzQCkFycjINGzYkLMytWTYURVEqPEEtBI0aNfK3GYqiKH5HhUBRFCXICUohMMaoECiKolgJSiE4c+YM586dUyFQFEUhSIUgOTkZQIVAURQFFQI/W6IoiuJ/VAgURVGCHLeEQETiRORbEdlt/RtrJ80FIrJSRHaKyHYRecTm2EQRSbGzlrFXSU5ORkRo0KCBLy6nKIoS0LjbIhgHLDfGtAKWW7eLkws8ZoxpA3QCHhKRtjbHXzfGdLB+ltjJ73GSk5OpX78+4eHhvricoihKQOOuEPQHZlq/zwQGFE9gjDlkjNlo/X4W2An4dV4HDR1VFEU5j7tCUM8YcwgsBT5Qt7TEItIUSAB+tdk9WkS2iMh0e64lb6BCoCiKcp4yhUBEvhORbXY+/V25kIhUA+YCjxpjUq273wFaAB2AQ8CUUvKPFJH1IrL+2LFjrly6BCoEiqIo5ylzxjVjzPWOjonIERFpYIw5JCINgKMO0oVjEYFPjTFf2pz7iE2a94FFpdgxDZgGkJiYaMqy2xFnz57lzJkzKgSKoihW3HUNfQXcZf1+F7CgeAIREeBDYKcx5rVix2zDdm4GtrlpT5mkpKQAGjqqKIpSgLtCMBm4QUR2AzdYtxGRhiJSEAHUFbgT6GYnTPRlEdkqIluA64AxbtpTJjqGQFEUpShuTcZvjDkBdLez/yDQx/r9J0Ac5L/TneuXBxUCRVGUogTdyOICIWjYsKGfLVEURQkMglII6tSpQ1RUlL9NURRFCQiCUgjULaQoinIeFQJFUZQgR4VAURQlyAkqIcjIyODEiRMqBIqiKDYElRDoYDJFUZSSBJUQ6BgCRVGUkgSVEMz/aQsAw2fvoevkFcxPSvGzRYqiKP4naIRgflIKs1ZsAiCkWi1STmfw1JdbVQwURQl6gkYIXlm2i8wzRwmJqkZIhGUwWUZOHq8s2+VnyxRFUfyLW3MNVSQOns6garsbiLygXYn9iqIowUzQCEHDmGhSaElk/ZYl9iuKogQzQeMaGtuzNdHhoUX2RYeHMrZnaz9ZpCiKEhgETYtgQEI8YOkrOHg6g4Yx0Yzt2bpwv6IoSrASNEIAFjHQgl9RFKUoQeMaUhRFUeyjQqAoihLkBI1raH5SivYPKIqi2MGtFoGIxInItyKy2/o31k6aKBFZKyKbRWS7iPw/V/J7gvlJKTz15VZSTmdgQEcVK4qi2OCua2gcsNwY0wpYbt0uThbQzRhzKdAB6CUinVzI7zavLNtFRk5ekX06qlhRFMWCu0LQH5hp/T4TGFA8gbGQZt0Mt36Ms/k9gaPRwzqqWFEUxX0hqGeMOQRg/VvXXiIRCRWRTcBR4FtjzK+u5HcXR6OHdVSxoiiKE0IgIt+JyDY7n/7OXsQYk2eM6QA0Aq4QkUtcNVRERorIehFZf+zYMZfy6qhiRVEUx5QZNWSMud7RMRE5IiINjDGHRKQBlhp/aec6LSKrgF7ANsDp/MaYacA0gMTEROMonT10VLGiKIpj3A0f/Qq4C5hs/bugeAIRqQPkWEUgGrgeeMnZ/J5CRxUriqLYx90+gsnADSKyG7jBuo2INBSRJdY0DYCVIrIFWIelj2BRafkVRVEU3+FWi8AYcwLobmf/QaCP9fsWIMGV/IqiKIrv0CkmFEVRghwVAkVRlCBHhUBRFCXIEWNcisQMCETkGLC/nNlrA8c9aI6nULtcQ+1yDbXLNQLVLnDPtibGmDrFd1ZIIXAHEVlvjEn0tx3FUbtcQ+1yDbXLNQLVLvCObeoaUhRFCXJUCBRFUYKcYBSCaf42wAFql2uoXa6hdrlGoNoFXrAt6PoIFEVRlKIEY4tAURRFsUGFQFEUJciplEIgIoOt6yPni4jDMCsR6SUiu0Rkj4iMs9nvlbWUnVzjubWIbLL5pIrIo9ZjE0UkxeZYH1/ZZU23T0S2Wq+93tX83rBLRC4QkZUistP6mz9ic8yj98vR82JzXETkLevxLSLS0dm8Xrbrdqs9W0RkjYhcanPM7m/qI7uuFZEzNr/Ps87m9bJdY21s2iYieSISZz3mlfslItNF5KiIbHNw3LvPljGm0n2ANkBrYBWQ6CBNKPAH0ByIADYDba3HXgbGWb+PA17ykF0unddq42Esg0AAJgKPe+F+OWUXsA+o7e7/5Um7sMxu29H6vTrwu83v6LH7VdrzYpOmD7AUEKAT8Kuzeb1sVxcg1vq9d4Fdpf2mPrLrWmBRefJ6065i6fsCK3xwv64GOgLbHBz36rNVKVsExpidxpiyVqa/AthjjPnTGJMNzMayhjJ4by1lV8/bHfjDGFPeUdTO4u7/67f7ZYw5ZIzZaP1+FtgJeGPhidKeF1t7PzYWfgFixLLgkjN5vWaXMWaNMeaUdfMXLCsFeht3/me/3q9i3Ap85qFrO8QY8wNwspQkXn22KqUQOEk8cMBmO5nzBYi31lJ29bzDKPkQjrY2Dad7ygXjgl0G+EZENojIyHLk95ZdAIhIUyxTnv9qs9tT96u056WsNM7k9aZdttyLpWZZgKPf1Fd2dRaRzSKyVEQudjGvN+1CRKpgWU1xrs1ub92vsvDqs+XuCmV+Q0S+A+rbOfSMMcaZlc7Ezj63Y2lLs8vF80QA/YCnbHa/AzyPxc7ngSnACB/a1dUYc1BE6gLfishv1ppMufHg/aqG5YV91BiTat1d7vtl7xJ29hV/Xhyl8cqzVsY1SyYUuQ6LEFxls9vjv6kLdm3E4vZMs/bfzAdaOZnXm3YV0BdYbYyxral7636VhVefrQorBKaUtZSdJBm4wGa7EXDQ+t2ltZidtUtcW+O5N7DRGHPE5tyF30XkfWCRvYzesstYFhzCGHNUROZhaZb+gJ/vl4iEYxGBT40xX9qcu9z3yw6lPS9lpYlwIq837UJE2gMfAL2NZUEooNTf1Ot22Qg2xpglIvIfEantTF5v2mVDiRa5F+9XWXj12Qpm19A6oJWINLPWvodhWUMZzq+lDJ5dS9mV85bwTVoLwwJuBuxGGHjDLhGpKiLVC74DPWyu77f7JSICfAjsNMa8VuyYJ+9Xac+Lrb3DrREenYAzVpeWM3m9ZpeINAa+BO40xvxus7+039QXdtW3/n6IyBVYyqMTzuT1pl1We2oC12DzzHn5fpWFd58tT/d+B8IHy0ufDGQBR4Bl1v0NgSU26fpgiTL5A4tLqWB/LWA5sNv6N85Ddtk9rx27qmB5IWoWy/8JsBXYYv2xG/jKLixRCZutn+2Bcr+wuDmM9Z5ssn76eON+2XtegAeBB63fBZhqPb4Vm4g1R8+ah+5TWXZ9AJyyuT/ry/pNfWTXaOt1N2PpxO4SCPfLun03MLtYPq/dLyyVvkNADpay615fPls6xYSiKEqQE8yuIUVRFAUVAkVRlKBHhUBRFCXIUSFQFEUJclQIFEVRghwVAkVRlCBHhUBRFCXI+f+ktS4BGjrnywAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# linear regression\n", "p=1\n", "w1 = np.array(2)\n", "w1 = np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),y)\n", "yh1= np.matmul(X,w1)\n", "\n", "plt.plot(x,y,'o')\n", "plt.plot(t,y0,'k-')\n", "plt.plot(x, yh1, 'g')\n", "plt.plot(x, yh, 'g-.')\n", "plt.show()\n", "\n", "MSE_train = (1/float(n))*np.sum((y - yh1)**2)\n", "\n", "# MSE on fresh data not used in training\n", "X_ = np.vstack([np.ones(len(x_)),x_]).T\n", "yh_= np.matmul(X_,w1)\n", "MSE_test = (1/float(n_))*np.sum((y_ - yh_)**2) \n", "MSE = np.array([[1,MSE_train,MSE_test]]) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Polynomial features\n", "\n", "polynomial functions are useful features, as any smooth function can be represented by polynomials of large enough degree using Taylor expansion. \n", "\n", "for degere 2 polynomial, we use $(1,x,x^2)$ as feature vector" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1.00000000e+00, -1.00000000e+00, 1.00000000e+00],\n", " [ 1.00000000e+00, -9.95046017e-01, 9.90116576e-01],\n", " [ 1.00000000e+00, -9.64421338e-01, 9.30108517e-01],\n", " [ 1.00000000e+00, -9.49045283e-01, 9.00686948e-01],\n", " [ 1.00000000e+00, -8.88767123e-01, 7.89906999e-01],\n", " [ 1.00000000e+00, -8.83680478e-01, 7.80891187e-01],\n", " [ 1.00000000e+00, -8.82244624e-01, 7.78355577e-01],\n", " [ 1.00000000e+00, -8.71334991e-01, 7.59224666e-01],\n", " [ 1.00000000e+00, -8.12443130e-01, 6.60063839e-01],\n", " [ 1.00000000e+00, -7.97706842e-01, 6.36336206e-01],\n", " [ 1.00000000e+00, -7.89758405e-01, 6.23718338e-01],\n", " [ 1.00000000e+00, -7.47637551e-01, 5.58961907e-01],\n", " [ 1.00000000e+00, -7.45642919e-01, 5.55983363e-01],\n", " [ 1.00000000e+00, -7.38269518e-01, 5.45041881e-01],\n", " [ 1.00000000e+00, -7.21131652e-01, 5.20030860e-01],\n", " [ 1.00000000e+00, -5.98666881e-01, 3.58402034e-01],\n", " [ 1.00000000e+00, -5.87441304e-01, 3.45087285e-01],\n", " [ 1.00000000e+00, -5.83239944e-01, 3.40168832e-01],\n", " [ 1.00000000e+00, -5.81059152e-01, 3.37629738e-01],\n", " [ 1.00000000e+00, -5.66641461e-01, 3.21082545e-01],\n", " [ 1.00000000e+00, -5.42315516e-01, 2.94106119e-01],\n", " [ 1.00000000e+00, -5.42058653e-01, 2.93827583e-01],\n", " [ 1.00000000e+00, -5.29769867e-01, 2.80656112e-01],\n", " [ 1.00000000e+00, -5.02983910e-01, 2.52992813e-01],\n", " [ 1.00000000e+00, -4.78272743e-01, 2.28744817e-01],\n", " [ 1.00000000e+00, -4.75895958e-01, 2.26476963e-01],\n", " [ 1.00000000e+00, -4.03781584e-01, 1.63039567e-01],\n", " [ 1.00000000e+00, -3.91735846e-01, 1.53456973e-01],\n", " [ 1.00000000e+00, -3.66131369e-01, 1.34052180e-01],\n", " [ 1.00000000e+00, -3.54738647e-01, 1.25839508e-01],\n", " [ 1.00000000e+00, -3.08509389e-01, 9.51780433e-02],\n", " [ 1.00000000e+00, -2.91214746e-01, 8.48060284e-02],\n", " [ 1.00000000e+00, -2.85734009e-01, 8.16439239e-02],\n", " [ 1.00000000e+00, -2.82087559e-01, 7.95733909e-02],\n", " [ 1.00000000e+00, -2.43723469e-01, 5.94011295e-02],\n", " [ 1.00000000e+00, -2.38502069e-01, 5.68832368e-02],\n", " [ 1.00000000e+00, -2.09538708e-01, 4.39064703e-02],\n", " [ 1.00000000e+00, -2.02444762e-01, 4.09838815e-02],\n", " [ 1.00000000e+00, -1.89877528e-01, 3.60534757e-02],\n", " [ 1.00000000e+00, -1.66829426e-01, 2.78320573e-02],\n", " [ 1.00000000e+00, -1.43192971e-01, 2.05042271e-02],\n", " [ 1.00000000e+00, -1.37268089e-01, 1.88425283e-02],\n", " [ 1.00000000e+00, -1.30046820e-01, 1.69121753e-02],\n", " [ 1.00000000e+00, -9.81944635e-02, 9.64215266e-03],\n", " [ 1.00000000e+00, -8.95154704e-02, 8.01301944e-03],\n", " [ 1.00000000e+00, -8.88808304e-02, 7.89980201e-03],\n", " [ 1.00000000e+00, -6.79260011e-02, 4.61394163e-03],\n", " [ 1.00000000e+00, -6.46815578e-02, 4.18370391e-03],\n", " [ 1.00000000e+00, -2.61241852e-02, 6.82473055e-04],\n", " [ 1.00000000e+00, 4.28164668e-03, 1.83324983e-05],\n", " [ 1.00000000e+00, 3.27423497e-02, 1.07206146e-03],\n", " [ 1.00000000e+00, 4.10587339e-02, 1.68581963e-03],\n", " [ 1.00000000e+00, 5.40511770e-02, 2.92152973e-03],\n", " [ 1.00000000e+00, 7.45036887e-02, 5.55079962e-03],\n", " [ 1.00000000e+00, 9.21063555e-02, 8.48358072e-03],\n", " [ 1.00000000e+00, 1.19739519e-01, 1.43375523e-02],\n", " [ 1.00000000e+00, 1.30226076e-01, 1.69588309e-02],\n", " [ 1.00000000e+00, 1.48979483e-01, 2.21948863e-02],\n", " [ 1.00000000e+00, 2.15431557e-01, 4.64107558e-02],\n", " [ 1.00000000e+00, 2.22897705e-01, 4.96833870e-02],\n", " [ 1.00000000e+00, 2.29203269e-01, 5.25341386e-02],\n", " [ 1.00000000e+00, 2.43349094e-01, 5.92187817e-02],\n", " [ 1.00000000e+00, 2.52254960e-01, 6.36325646e-02],\n", " [ 1.00000000e+00, 2.88985653e-01, 8.35127074e-02],\n", " [ 1.00000000e+00, 3.13993144e-01, 9.85916947e-02],\n", " [ 1.00000000e+00, 3.15388261e-01, 9.94697551e-02],\n", " [ 1.00000000e+00, 3.26261033e-01, 1.06446262e-01],\n", " [ 1.00000000e+00, 3.41533121e-01, 1.16644873e-01],\n", " [ 1.00000000e+00, 3.45108949e-01, 1.19100187e-01],\n", " [ 1.00000000e+00, 3.81621701e-01, 1.45635123e-01],\n", " [ 1.00000000e+00, 3.96670236e-01, 1.57347276e-01],\n", " [ 1.00000000e+00, 4.22049757e-01, 1.78125997e-01],\n", " [ 1.00000000e+00, 4.45649871e-01, 1.98603808e-01],\n", " [ 1.00000000e+00, 4.89235044e-01, 2.39350929e-01],\n", " [ 1.00000000e+00, 4.91291233e-01, 2.41367075e-01],\n", " [ 1.00000000e+00, 4.97089217e-01, 2.47097690e-01],\n", " [ 1.00000000e+00, 5.63730323e-01, 3.17791877e-01],\n", " [ 1.00000000e+00, 5.74109648e-01, 3.29601888e-01],\n", " [ 1.00000000e+00, 6.19796775e-01, 3.84148043e-01],\n", " [ 1.00000000e+00, 6.45115256e-01, 4.16173694e-01],\n", " [ 1.00000000e+00, 6.59542974e-01, 4.34996934e-01],\n", " [ 1.00000000e+00, 6.60090936e-01, 4.35720044e-01],\n", " [ 1.00000000e+00, 6.79746554e-01, 4.62055377e-01],\n", " [ 1.00000000e+00, 6.83319639e-01, 4.66925729e-01],\n", " [ 1.00000000e+00, 6.91869258e-01, 4.78683070e-01],\n", " [ 1.00000000e+00, 7.08235163e-01, 5.01597046e-01],\n", " [ 1.00000000e+00, 7.26847516e-01, 5.28307311e-01],\n", " [ 1.00000000e+00, 7.97408145e-01, 6.35859750e-01],\n", " [ 1.00000000e+00, 8.02686127e-01, 6.44305019e-01],\n", " [ 1.00000000e+00, 8.85216910e-01, 7.83608978e-01],\n", " [ 1.00000000e+00, 8.89261750e-01, 7.90786460e-01],\n", " [ 1.00000000e+00, 8.96229024e-01, 8.03226464e-01],\n", " [ 1.00000000e+00, 8.98345437e-01, 8.07024524e-01],\n", " [ 1.00000000e+00, 9.05516637e-01, 8.19960380e-01],\n", " [ 1.00000000e+00, 9.46752887e-01, 8.96341029e-01],\n", " [ 1.00000000e+00, 9.51701639e-01, 9.05736009e-01],\n", " [ 1.00000000e+00, 9.64294504e-01, 9.29863891e-01],\n", " [ 1.00000000e+00, 9.70139617e-01, 9.41170876e-01],\n", " [ 1.00000000e+00, 9.90397171e-01, 9.80886557e-01],\n", " [ 1.00000000e+00, 1.00000000e+00, 1.00000000e+00]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABLzElEQVR4nO2dd3xUxfbAv7ObTktCEkgCIXQBQcCoKIh0BEUiSnsoKiLosz8FUZ9PfupDBLvyfKIoWFDkiUgVlaICKl0gtNBJQgkhvZf5/bGbkITdZDe7m8Ke7+ezn91778y9Z++dO2fmzJkzSmuNIAiC4L4YaloAQRAEoWYRRSAIguDmiCIQBEFwc0QRCIIguDmiCARBENwcj5oWoCoEBQXpyMjImhZDEAShTrF9+/bzWuvg8vvrpCKIjIxk27ZtNS2GIAhCnUIpdcLSfjENCYIguDmiCARBENwcUQSCIAhujigCQRAEN0cUgSAIgptTJ72GBEFwjKU745m95iAJKdmE+fsyZXB7oruF17RYQg0hikAQ3IylO+N5dskesvMLAYhPyebZJXsARBm4KWIaEgQ3Y/aagyVKoJjs/EJmrzlYQxIJNY0oAkFwMxJSsu3aL1z+OEURKKVuVkodVEodVkpNs3BcKaXeNR/frZTqXurYcaXUHqXULqWUTBcWBBcT5u9r137h8sdhRaCUMgJzgCFAR2CsUqpjuWRDgLbmzyTgg3LH+2qtu2qtoxyVRxDclaU74+k5cx0tp62k58x1LN0ZbzHdlMHt8fU0ltnn62lkyuD21SGmUAtxxmDxtcBhrfVRAKXU18BwYF+pNMOBz7RpXcw/lFL+SqlQrfVpJ1xfENweewaAi7fFa0goxhmKIBw4VWo7DrjOhjThwGlAAz8qpTTwodZ6rqWLKKUmYepNEBER4QSxBeHyoaIBYEsVfHS3cKn4hRKcMUagLOzTdqTpqbXujsl89LBSqreli2it52qto7TWUcHBl0RRFQS3RgaABUdwhiKIA5qX2m4GJNiaRmtd/H0O+A6TqUkQBDuQAWDBEZyhCLYCbZVSLZVSXsAYYFm5NMuA8WbvoR5Aqtb6tFKqnlKqAYBSqh4wCNjrBJkEwa2QAWDBERweI9BaFyilHgHWAEbgE611jFLqQfPx/wKrgKHAYSALuM+cvQnwnVKqWJaFWusfHJVJENwNGQAWHEGZHHnqFlFRUVpWKBMEQbAPpdR2S276EmtIEC5TJLCcYCuiCAThMkQCywn2IIpAEC5D7J1XUBWkx3H5IIqgliAvleBMXD2vQHoclxcSfbQWUPxSxadko7n4UlmLFSMIleHqeQUSyvryQhRBLUBeKsHZuHpegcxkvrwQ05ALsdXcY+3liU/JpufMdWImEuzG1fMKwvx9ibdQbmUms3OoblOxKAIXYY8N1dpLVVk+QagIVwaWmzK4fZnyDTKT2VnUxPiLmIZchD3mHkvdeFvyVQVbY9YLQkVEdwvn1RGdCff3RQHh/r68OqKzNFacgLW644lFu1z2zkqPwEXYY0Mt3Y231jNwhu1VPD0EZyKhrF1DRe+6q95ZUQQuwl4bavFL1XPmOpfZXivrpYj7qnMRl2ChKlRkKgbnzwcBMQ25jKp4bWit+Vt7D3L3rSNpzfucWzyd88tfJ23dXNqcWcf+/fsdkqmiQWlxX3Uu4hIsVJXKTMXgfO8sUQQuwl4b6vr164mKiuKRETdxZvmbZB/4jcLMZArOHCTvwC989s6/6dixIx07dmT69OkkJSXZLZO1XoVRKXFfdTLiEixUldJ1hzWc7Z0lisCFRHcLZ9O0fhybeQubpvWzqAQOHz7MsGHD6NevH+fPn2fOnDnExMSQl5lG7pnD5CQlkJGWQlxcHO+//z6hoaG89NJLtGrVihkzZpCZmWmzPNZ6KYVWItCKT3jVqWt+9uJEULsorjveHt215J3VughdkO8S7yxRBDXIli1buO666/j111+ZOXMmBw8e5O9//zsdO3bEYCj7aMLDw3n44YdZu3Yte/bsoU+fPjz//PO0bduWFStWVHid4pf8yUW78PYwEODnWaaXYq3lIT7hVacurRgmZqyax5oiLt07KDh/klNvj+LOkHNOH2sSRVBDrF+/nv79++Pv78/OnTt55pln8PHxsSlvp06d+P7779m0aRPBwcEMGzaMhx9+mKysrEvSln/JU7Lzyckv4q3RXUt6KbK6lfOpS/dUzFg1S2WKuLh3ML2HF7own3uG3OB0GUQR1AArV65kyJAhtGjRgt9++41WrVpV6Tw33HADW7Zs4amnnuI///kPUVFRHDhwoEwaW15y8Ql3PnXpntY1M9blhq2K+I8//qBx48a0bt3a6TKI+2g1Exsby+jRo7nyyitZs2YNjRs3duh83t7evP7669x8882MGzeO66+/nm+//ZZ+/foBFXsKlUZ8wp1PXbmnEi6iZrFVEf+4/jeKgtrQ6tlVTndHlh5BNZKbm8uYMWPw9vZm6dKlJUrAGQN1AwYM4M8//yQ8PJzBgwfzySefANZfZmW+rgwSCnXJjHU5Yst40pe/7iPuWCxFIW1dMo7jlB6BUupm4B1Mi9d/rLWeWe64Mh8fimnx+nu11jtsyXs58dxzz7Fjxw6WLl1Ks2bNAOfO9o2MjGTTpk2MGjWK+++/n4SEBKbcch9PLtpFeb8gDUxfFkNuQZHMNK4CdX2yWEFBAXv27GHLli0cPHiQgN0HiTt4hJzMdIxK09DLwNRFfrweEkKTJk2IiIige/fudO/enfbt2+PhIcYEZ2FL3KYZ800OId5hV5Tsc+bEMoefplLKCMwBBgJxwFal1DKt9b5SyYYAbc2f64APgOtszHtZsHr1at58800efvhhhg8fXrLf2StJNWrUiJUrV3L//ffzwgsv8Fx2NkX6eky6uCwp2fmX7HPFrMXLDWco75pQJMeOHeP7779n+fLl/P7772Rnm0wPfn5+REREcEPHFgQEBODp6YmHhwc5OTmcPXuWgwcP8sMPP5Q4IzRo0ICbb76Z2267jaFDhxIYGOhSuS93bIkUmxC7G1B4h7Yrk9dZ4zjOUOvXAoe11kcBlFJfA8OB0pX5cOAzrbUG/lBK+SulQoFIG/LWebKyspg4cSKdO3dm9uzZZY65YqDOw8ODTz/9FF9fX2bMmEFozzvw7HmvRWXg7Gu7A44q7+qM+ZScnMwXX3zBJ598wq5duwC48sormTRpEj169OC6664jMjKy0rJRWFjIwYMH2bFjBxs2bGDFihUsXrwYT09P7rzzTh566CF69eplcxkTylLpeNK5WDyDIjB4+5XZ7axxHGcognDgVKntOEyt/srShNuYFwCl1CRgEkBERIRjElcz77zzDgkJCSxatAhf37IPzlUDdQaDgQ8++AAfHx/eeecdAvIKaNB3YsmL6utpxMfTQHLWpb0CGSSsGEeVd3WsJ7x3715mz57NN998Q05ODlFRUbz55pvcdtttVfI6MRqNJTPb77rrLoqKiti6dSsLFy5kwYIFfPXVV3Tu3JkXXniBO+6445J5MELVKSoqouDMQfxaXV9mvzPHcZzxtCw1AcqbpK2lsSWvaafWc7XWUVrrqODgYDtFrDmSkpKYOXMmw4YNo1evXpccd+VAnVKKt956iyeffJLkrd9TuGVhGVfGF4d1kkHCKuDoZDFXumtu2bKF6OhoOnfuzLfffst9993Hjh072Lp1K08++aTDrofFzgWtn1vNP9Zn0vfeqcTHx/Pxxx9TUFDAqFGjuPrqq1mxYgXayox1wT5iY2PJSEvlrtv6u8wd2Rk9gjigeantZkCCjWm8bMhbp5kxYwYZGRnMmDHD4nFXrySllOKNN94gKyuLDz/8kH8PvJLnpj1XJk1dHvSsCRxdlMXeXqAt4wmHDh1i2rRpfPfddwQEBDB9+nQeffRRp9rvrZq0RnTm/vvv595772XhwoVMnz6dYcOGMWTIEObMmUPLli2dJoM78scffwDw0KghdOrUySXXUI5qbaWUB3AI6A/EA1uBv2mtY0qluQV4BJPX0HXAu1rra23Ja4moqCi9bds2h+SuDk6cOEG7du0YN25ciTtnTVFUVMQ999zDF198wbvvvsujjz5ao/LUdRwZ7C1foYJJkVhq4VWW9sKFC/zrX//iww8/xMfHh6lTp9Km7yje3xhvl2y2/B9rIdLD/X3ZNK1fyXZ+fj7vv/8+L7zwAkVFRfzrX//iqaeewtPT06b7I5TloYceYuHChSQnJztsclNKbddaR12y3xndN6XUUOBtTC6gn2it/62UehBAa/1fs/vo+8DNmNxH79Nab7OWt7Lr1RVFcO+99/L1118TGxtL8+bNK8/gYgoKChg5ciTff/89CxcuZMyYMTUtkttiqyKxuj5FIx8mh8UxZcoULly4wKRJk3jxxRf5PaHAZiVTWpbyeQAC/Dx5cVinknwtp620aLdVwLGZt1yy/9SpUzz++ON899139OjRgy+//LLKs+jdmW7duhEcHMyPP/7o8Llcqgiqm7qgCOLi4oiMjOSxxx7jzTffrGlxSsjJyWHw4MH8/vvvrFy5koEDB9a0SEIFWKp88y/Ek/TDe+Se2sv111/Pf//7X7p06QLY3movjbU8YKrktTl/Vl6BReeCis4NsGjRIiZPnkxRUREffPAB48aNs5pWKEtGRgaNGjXi+eef56WXXnL4fNYUgQztu4i5c+dSVFRU60wwPj4+fP/993To0IHbb78dWxWqzECuGUqPG2hdRNq27zn96WMUJB5n7ty5bNy4sUQJwKWhQ4qpaCC6omPFSig+JZuMnAI8jWX9O2wZGxk9ejR//fUXXbp04a677mLy5Mnk5eVVmEcwsXXrVoqKirjuOovOlE5DFIELyMvLY+7cuQwdOrRWDpT5+/vzww8/EBwczC233MLRo0crTC9himuOYq+ygtRznP3qOZLXfoRfZBfmfr+BBx54oIzNeOnOeItueFCxR5Ot3k75RZp6Xh5V8lxp0aIFGzZsYNq0acydO5f+/ftz9uxZm67rzqxfvx6DwUDPnj1deh1RBC7gu+++4+zZszz88MM1LYpVQkNDWb16NVk5uXS67iYiHv/KaktfwhTXHNHdwrml3jHOzH+UvLNHaH3HFD5ftIQJg66+JO3sNQet2vArarXbsjRiManZ+ZUutmQNDw8PXn31Vb766iu2b99OVFRUySQ3wTJr164lKioKf39/l15HFIELmDNnDq1atWLw4ME1LUqFHMhuQGD0P8lJPsu5b1/mVGKKxZa+hCmuGTIyMpgwYQJvPPt3runamSMHYjj8v1nc3r2ZxfTWnoem4hnLxSGz/X0r9+pxxmTDMWPGsGnTJpRS9O7dm7Vr1zp8zsuR9PR0tmzZQv/+/V1+LVEETmbPnj389ttvPPTQQ7V+duXsNQdRoR0IuvUpcuMPkLTiDbLy8i9p6del1bYuF/bt28e1117L/Pnzef755/n1118rNTNaex4VrX1bTHS3cHa9OIi3R3etMJ2zJht269aNzZs306JFC4YMGcLXX3/tlPNeTvz6668UFBSIIqiL/Oc//8HHx4cJEyaU7KutA63FLch6V/QioN/9ZB3aTPL6Ty5pWUqY4urliVfepXPXqzl44jQdJswi6o6HbPLBd8Zziu4WblVx+Pt6OnWyYbNmzfjtt9+4/vrrGTt2LO+//77Tzn05sHbtWry9vbnhBuevSFYeUQROJCsri88//5wxY8aUzOiszQOtpVuQDaKG0+DqYaRvXYqKWV0mXV1abasuk5eXx5BR9/DOC4/j2aQ1ofe+Q2ZQB5vLi7OekzWFMv02589q9ff3Z82aNQwfPpxHH32UN954w+nXqKusXbuWnj17XhKfzBVIUHEnsmrVKjIzMxk/fnzJvuoIMFZVSodKUEoR0G8iOuM8x1f+h6VLBxAdHV2Stq6stlVXSUhIYOTIkWzevJmG147A/6Z7UAZTZWxPeXHGc3J12JPy+Pj4sHjxYsaNG8fTTz9Nbm4uzz33XOUZL1OW7ozn39/+we7du4kYNIGlO+Nd/u6JInAiixcvJiQkhN69e5fsqy0DrRXNZC3eHx5Yn1mffMZb/7iLsWPHsn79enr06FGtcrojmzdv5o477iAtLY3g26bi16H3JWmqu7xUt+L39PRk4cKFeHt78/zzz1NYWMgLL7xQbdevLRRbEM7v2QJAXpNO1bJYlCgCJ5GVlcWKFSsYP348RuPFbnVtWA+2svj35QtY32XLuOGGGxg2bBi///47bdq0qTZZ3Y158+bx0EMPERERwY8//siDKxNrvLzUFB4eHsyfPx+DwcC//vUvfH19efrpp2tarGql2IKQc3wXyssPr6ZtqsWCIGMETmLVqlVkZWUxatSoMvtrcqC1eJD6iUW77JoHEBISwurVpnGCm2++mcTERJfL6m7k5+fz2GOPMXHiRPr06cOWLVvo3LmzWwzMV+Q8YTQa+eSTTxg9ejRTpkxhzpw5NShp9VPc88s58Rc+LbqUmAdd3SOUHoGTsGQWguq3txZjLZBYaSoqXG3btmX58uX07duXW2+9lXXr1lGvXj1XiFrrcPUykhcuXGDkyJGsW7eOR//xKM+9+BzpRemcTTxLRNNs7r4pmy+3xHI+IwP/eorBnRtzgQQ+3JZPQVEBhbqQwqLCMt8FRQUlv4t0EQAKhVIKgzJgUAY8DB4WP95Gb7w9vEu+fT188fX0xdfDFz9PP+p71aeeVz3qe9XHw+BYlWGpd/rkol1sO3GBV6I7AyZl8Pnnn5OTk8MjjzyCn58f9913n2M3vZaSU5BDcnYyKTkpNK3flDB/X46c3E5Bu7PUCzbFAcsx7CHfdyV9F7zOmE5jmBw12elyiCJwAtbMQsXUxECrpUHq8lRmbujRowdff/01I0aMKIlaermHErZ3GcmcghySspJIyk7ifNZ5krKSuJB9geScZJKzk0nOMb3kqbmppOakkpiWyIkzJyi8thBDbwPv8R7vvfWeZWG84VwBHNoJ7LRN/uJKX6Eo0kVodIlicAbeRm/qe9Wnvld9Gno3pKF3Qxr5NMLfx58L6Z7sOZVHVo4vgb6B3NmtPUM7tSPIL4hgv2ACfQMtlksNfPnHSaJaBJbcY09PTxYtWsRtt93GxIkTCQgIKOO8UFso0kWk5qSSkpNCA+8GBPkFkZabxjcx33BjxI20D2rPgfMHeOmXl0jJSSElJ6WkTCRnJ5NbmFtyri9HfMmUwTcxYeYcuAWM50yeh54euXjVS6SgKBiDco0RRxSBE1i9ejVZWVmMHDmypkUpobKupK3mhuHDh/Pf//6XSZMm8cADD/Dpp59e1uvSzl5zkKz8HApVMoUqiUKSSS+6wKMrv2R1nB/nss5xLtP0OZtxlvS8dKvn8jJ6EeATUFJRFqQXcHL7STwLPRkxeATtWrQztbY961HPqx5+nn4lrfDiFnnplnpxC96ojBgNxpLv4n0GZbD6bLTWJT2H0p+8wjzyCvPILcgltzCXnIIccgpyyM7PJrsgm6z8LLLys8jIyyjzSc9LJy03jdScVM5knGFHfAyJmckUkgGeRSQXwGtbTZ9iFAqlG2DwbohRN8JII4w6sOTz/OoY2oQPJaxBGAE+AXh7e7NkyRL69+/PmDFj+PHHHy/pcTuK1trUKs9JxqiMNKnfhCJdxMI9C+kY3JHuod1Jykpi6k9TTcrdXIkXV+RpuWloc2CPl/u+zD97/5PUnFQeWP4Ac2+dS/ug9uQU5LAlfgv+Pv4E+AYQ3jCcAJ8AAnwCSvb5+/hzQ/MbiGgUzvS4RLI2NaX+uH6E+/syZfBEoru96NT/XR4JQ+0ExowZw/r164mPj8fDo3bo1opCC4dXwdzx0ksv8eKLLzJ16lRee+21KsnkapOLLRQUFRCfFs+J1BOcTD3JydSTxKXFlXz+On2UIpV6aUZtIKR+ECH1QgipF0KTek0IqRdCsF8wQX5BNPZrbPr2bUygbyABvgH4eviilEJrzRtvvMHUqVPp2rUr33//fa1Yn8KZFJc3jUaTTZHKoIh0Ahrk8s9hzTifdZ7ErETmbtxFev4FCkmlUKVQpFIoUhmXnM/b6E1YgzDCGoQR5B3Er6t+Jet0Fi8//TJ9u/alRaMWBPkFoZSisKiQ1NxU8gvzaVK/CQArDq0gwCeAnhE90VrzyKpHylTkxeaYlJyUklb5hK4TmDd8HlprvF7xYsoNU5jRfwYXsi/Q5YMuJRV2SQVeriKPCoviypArKSwqJCE9geB6wfh4+Nh1H1NSUggODubJJ59k1qxZjj+YclgLQ107aq06RPnK7LGbIlixYgV33313rVECYH05xapOBHvhhRc4c+YMs2bNIjAwkGeeecau/PaaXKqK1pqzmWc5mny05HMs5RhHk49yPOU48WnxFOqypolA30CaNWxGs4bNSDgXRk6uP0bdGA8dUNJaNdCQZj71mdLDPuWVm5vL5MmTWbBgAXfeeSfz58+/LMdainugCoXCD4P2A0LISoOxnS8uWtPdP54nF+0qExyvkBwK1Fn86yfzf9FtSUhPYEv8Fs5lnkOjOZhykIwrMshvl8/UrVNN6xhycQyk2PTVKqAVswbMolVAK5744QmiwqLoGdETpRSrD6/GoAwE+Jpa4hGNIvD39i+pyAN8AugUYpowp5TiwMMHCK5nWhs90DeQuH/E2XwvjAYjzRtVTdGvXLmSgoICRowYUaX8VaX21Fx1AEuV2ZT3vyEzM5PbbruthqUri7MHqZVSvPfee6SkpDBt2jT8/f2ZPNn2QStnT6xLykriYNJBDiUdIjYpltgLps/hC4fJyCvbwgxvEE7LgJb0btGbyEaRtPBvQYtGLYhoFEHzRs3x8/QDTM83PjaGlIJLF18B+5XXmTNnGDFiBL///jvTp0/nhRdeqPXxp6pKaCMvTqUmYaQBAHnqOIXqPG0a3gjAvB3z2H56O8k5yRhCThGfep5CMs09hwxQBRR6NmNUp1MA3PzFzaTnpfPnxD8B6PVJLw4lHiLpdBIeBg9atWyFwWAgtzCXrPwsUnNTOZp8lDsX31kiU3JOMtfPu562gW2Z0G0CbQPb0q5xO9o1bsdPMSmXvBu9Ii4+09aBrZ12b+zpCS9ZsoSwsDCuvfZap13fFkQR2IGlyiz18HaU0dPptktn4OxBaqPRyIIFC0hLS+Ohhx6iYcOGjB071qa8VZlYp7XmVNopYs7FcOD8Afaf38+B8wc4cP4AiVkXXVo9DB609G9J28ZtCfftzr5TfmRmNia8fkumDeqFl9GH2WsOsvFgNkfNL+LA1pWvDWwJW5XX9u3biY6O5sKFC3zzzTe1avzIElprsguy8fHwwaAMHE85zt5ze7ml7S0opVh+cDnrj6+/xLRSvJ2Wlwa+EJH9PQoj6R6ryDZu5MPBEwH48eiPrDu2jgCfABo38KeBTxPikgzk5vnQyNuffu1a0q9duxJ55gydg9Fw0fFi44SNAPzyyy8MGjSI4OtMSzf6+Fw0vaTmpHIs5RhHLhzhSPIRjlw4QuyFWNYfX8/nuz8v8389dDAeRc3w9GxGWnpzHl8SSVreEMZfd6VT76s9PeGsrCxWr17NfffdV+0NBlEEdmCp0so+tgPvZh0q7e5X1CqoDbZzW/H09GTx4sUMHTqUu+++Gy8vL+64445K81U2se581nn2nN3D7rO72X12NzGJMcQkxpRp3Tf2bUyH4A4Mbz+cK4Ku4IqgK2jXuB2R/pF4Gj1LXrqi/EJ8gQtp8PySg6Agv9BkjLD2ItriZVVMZQPxX331FRMmTCAkJIRNmzbRtWtXm87rKIVFJvmNBiOJmYn8dfYvrm92PfW86vH7qd9Zfmi5qQLPTbFYmecV5hH7aCxtAtuwOGYxU3+eStq0NBp4N+CXE7/w0Y6PSuzi/j7+tPBvQRfvLqaBT98ATiUp9h3y5kxqAe38xjH+hn+U3ONFdy6y67+Ub5GXfkci75jKb1+9wvjx4/n6669LKs1GPo3o2rQrXZt2veR8WflZxCbFcijpEE99t5oLucfJN8SRYfgJ7ZHDBeCeH6YybWMonZt0pnNIZ7o06ULnkM50CO5gt62/GHt6wmvWrCE7O7vazULgoCJQSgUCi4BI4DgwSmudbCHdzcA7mBao/1hrPdO8fzrwAFDcvHtOa73KEZlcSfnKrCDjAvmJxwm9eWKF+SpqFQDVYjt3Jr6+vixbtowhQ4YwZswYvvnmG26//fYK8xSPWWTl55Gv4sgzHEV7nCC70XnC37ybhPSEkrTBfsFcGXIl93W9j47BHekU3IkOwR0I8guq8BqWXrr8okudISy9iPZM2LHmdltQUMCzzz7L66+/Tq9evfj2228JCQmx+bxam4ZaDcpARl4Gu87sokNQBxr7NeZQ0iG+3vt1SUVeerCzpFWem8aau9YwqPUgfj3xK3cuvpO/HvyLLk26sOP0DmZvnl2mIg/wDaCFf4syg5+NvBsB8LfOf6NPZB98PU3/dfbA2bw+6HWb/4uzWLoznunLYkjJvmiuy43oQXD/+1m8eB4tW7a06rxgqYE1sttVTP3cj+KSpNEUqkTy1SnyDScY1LqQ3Wd38/6W90sGkY3KSNvGbUsUQ+eQzlzV9CpaNGpRqQedPT3h7777jsDAwBqxLjjaI5gGrNVaz1RKTTNvlxlFVEoZgTnAQCAO2KqUWqa13mdO8pbWuvpLWBUoPwCbc3wXAI+Pv7OCXJWv8FVbg9JVRIMGDVi9ejWDBw9m1KhR/O9//2P48OFl0uQV5rHn7B52nN7BjtM7KAz6g7iUfRRhWq/Ww+CFNnRkQKsBdAnpQpcmpk+x54e92FOZl09rrcdSHmtut0lJSYwZM4aff/6Zhx56iNlvzGZ/8n4K0gsIaxDGucxzzN81v6QlXmJiKWdqeXfIuzwY9SCxSbHc+OmNfDf6O6KviObIhSO8uOFF6nvVL+Ox0sK/BVf5XFWyHekfCcBNkTfxy72/0CqgFQAPRj3I36/5u82uv+ENwwlveLH81YTLcEXmOt+ro2mSkcisWbNI8whkd4NrylT4YLmBte3EBQxKUWj2llQoPHQIHjqENg17MT+6H2DyLjt84XBJL3XPuT1sS9jGNzHflMjQ2LcxUWFRZT7hDcLL3CtbQ8zk5eWxfPlyhg8fXiNzdRxyH1VKHQT6aK1PK6VCgQ1a6/bl0lwPTNdaDzZvPwugtX7V3CPIsFcROOI+2md+n0rT3NruVp6+4emS9Pd2vZd7u97LZ3/s4e9r7qKg0OSlUHghDp2bQa9y64kWpz+fdZ47v7mT/Yd641t0HfkqjiTPymOuNyy4nXpF1/HD022YvGIyM/rP4IbmN7D51GaeW1t5VMby6T+89UPaB7Vn+cHlvPF75WF+y6f/36j/EeQXxPxd85m/a36ZtIWFhfy1+y/S09Np3b41nvU8uaH5Dew+t5udp3eWeOg08m5EkF8QuQW51Pc2TUjy8/CzWMFsuHcDAK9vfp3f437n21HfAvDsz8/ye9zvVuXeeTKFgoJ6BOeZ7lGyx3yKVDqN8x8FIMnzPfKVKZyBt4eRbhH+JXnPZ+Ry9HwmxsKwkvTnPF/FSCOC8v9OEfmc932Ker55eHnosr74BXlk52WDgpY+LTn67FFSclIIeC2AW9vdyvKxyzlw/gAd5nQAwNPgaXWW7/D2w3lv6Htk5GXQc15PJnafyKPXPcqZjDOMXjy60gq5fNl76vqnGNZ+GAfPH2TyisoH98unr8myd9eiF2iYNRUjjcgw/kyG8edL0numxZGRmoJncAsMPg0IznuW+p6BZHr8zLnCNTTNmwlAqscSsg1brF7XYFC0CqrH3kdM5cta2SssKiQzP7NkLkV6bjqZ+Zkl52lavylRYVGkZKdQz6seY1rP5LVVZ4jj7ZKyV3ytoPreJfmSk5PZvX43V/i/TE5YN7LrfUDPVpF8O85UX9zxzR0kZSUBF9+PquAq99EmWuvTAGZlYKkfHA6cKrUdB1xXavsRpdR4YBvwlCXTEoBSahIwCSAiIsJBse1n6c54Xl65jwJ1cZZmQXYGjfwbVZo3sJ4X2RbmHXl7mAbDcgsubfHUdJCxpTvjeXbVXxzLTWLoO7/x3M3XUnpl9PyifNJzTZOKjKFG8IcjOUcgB06lneKa8GsY1HoQJ1JOsGzsMloFtOKN399gxaEVLpO5eaAvJxIvClmkskBl42lU5Bdq8lU8BSoRpYowein2JSaUrdAN+XioJMgHo1JkG/+knmrJWyO6MrRLMN6v3E5WtslUUFxxFxUUkZ2ZjQEDjQMac3Ur01rCDb0bcn2z6+kcYgqb0DawLb0iemFUFa8N3MK/BQA/x6RyPFHxf8uO8vX6dUzuE3zZTOQ7n5HLqQvZ5BYU4u1hpHmgb5lKsRhL70VpvD2M6IBmqKwc8s+fwquJqfeTnV9IVlGhyRBtA0pdWjFbw2gwlsyoLqZIF5GRl0GRLqJr065sS9hGTGIMAGuOrKFx/VDyc4ooKAJvYz1aBDS+5Fon4hLAYCQzuCMGIDOvgA2HEqslBDXY0CNQSv0MNLVw6Hlggdbav1TaZK11QLn8I4HBWuuJ5u27gWu11o8qpZoA5zHNMn8ZCNVaT6ASamJCWfkJWnnnjnH600dpc+cUYhdXPPHDUhe32KcfcKq/vzMoL6+mEIPnSQZ2SyVbHeCPuD84fOEwYApp0Cm4E1c3vZqt320lZk0Ms6fO5umnHI8amZiZSHpeeol5Y/nB5RxLOXbRPp5bzsySnUwDzzD8M2aQkJJNot+TXBHcnH/2+IzZaw7yZ84oClUSHsqTAF9/ixOEosKiuL/7/QCsPLSSiEYRdG5iek7ns87j7+OPh8GDrKwsHnnkET799FMGDBjAwoULCQ4OrtK9Lm/HhtpXJpxFRe9C+f9W0aTI4jxPLtpFfvp5znz2FABNx7+BR4OKx5LKo4BjM2+pNJ09FI/xbEvYxraEbWxN2MqhpEPmowY8iyII9OjC2K4DGH9lL7q3u5b6nQfTeNBDZc4T7u/Lpmn9nCaXtR5BjZqGyqWLBFZorSv136oJRdBy2soyk2BS/1xCyoZPaPb3+Zyac0+l+euS11CPV1dxPP0vcgx7yTXsJ9dwAK1ML6RRB9LI2IGh7W9kwjWDiAqLooG32Xc8L4+77rqLxYsX8+STT/LCKy+QkptCywDTWrubTm4iJjHGoo28uCIHOPSo6YUZuXgkMedi2PewaTjpxk9vZONJkxthA68GZQY9iyvztoFteb738wD8dOQnfD196RXRC4Bzmeeo71W/ZMZvVdm7dy+jR49m//79PP/880yfPt1ijKnKsFYp+ngaSM66dC6DsyuFmsBa5W7pv1kbIwjw8+TFYZ2I7hZecr68c0c58+UzeAaE0eRvMwls1JDcgiKbPMGq675+8WcMz678jvSifeQaDpR5r0gDH2NXfD2vwbuoE166JQqj05WUq0xDy4B7gJnm7+8tpNkKtFVKtQTigTHA38xChRabloDbgb0OyuMyyg/65BzfiWdQBBE2hgqoyKe/plf/SstNY9PJTfxy4hd+PfErf+ZuBe8C0OChm+FX2Bffoo4YdEMKVDI6P4Mf9saRkvsljRssKFuZX5/M5LDJvPXWW6zIWcHJsJPk/DMHgI92fMSCvxYAJt//YrfD4tZ4S/+WNPZtXCLXY9c+RmruxXAPi0cuxtPgyYb9Gbz50xESzmbTwN+XJ63M9h3YemCZ7ZB6tnvwWEJrzUcffcTjjz9Oo0aN+PHHHxkwYECl+awpemtOBNYqr+penMYV2ONFY8ukyGIHDkJaEXzbM5z79iUurJjNW19+g9HDg9lrDlboBFCdIb4/WH8WY143/OkGmHraeRwnaev/ocMKyG+VQI7hIwCU9sW7qCMhXl35/VQgUWFReBpdN4jsqCKYCXyjlLofOAmMBFBKhWFyEx2qtS5QSj0CrMFktftEax1jzj9LKdUVk2noOOD8+KpOorTHUFF+Ljmn9hJw9S21Ok58YVEhyTnJNPRuiJfRi5OpJ/kj7g/OZJxh15ld7Evcx9Hko5zPOl8SOMvHw4cQ4wB09nUUqDiSvebRJPffeNCYFI+FpHouLDn/6qN+hDcKKlORdw/tzowHZ9CxVUcef+1xWl7bklOnTtG8eXNmDpjJv/v9u0wcnoq4scWNZbab1m/K0p3x/HPp/mp3tz179iwPPPAAy5cvZ9CgQXz22Wc0aVK5d1NFrsP2Vuw1PW7kDOxdqKmyRlIZZdE6ilbDH+Po0rdZ++lrzJkzh+hu4Zf05ktTnea28s9bYUTH5ZG/7gJ/f2EW64o6k557llzjXnIMMeQZYzhZOI8bPpmHn6cfPZv3pG9kX8Z2HlviHeYsHFIEWuskoL+F/QnA0FLbq4BL5gdore925PrVSekCd3T3HijM56G/Rbu0EGmtyczPxMPggY+HD0lZSWw8ufFSt8PcspODZg2YxZC2Q1h7bC2DvxjM+nvWY1AG3vr9LZYeXFrmGp4GTwJ8AwipF0Kzhs0I8guiV8hDvP9jFmkFx1F5vhgwvaQNCoZSr7APBl0fA/UwYOTYi5a7rY899hiRkZGMGzeOq6++mq+//pp+/RzvfjsjVIW9prhpb3zMGy8+TUFOFpG3/J3J/zfNJiVQmbzWKkV/X89LzBqXy+I01mJgOfLfyiqLW3jmGS9mzZpFy5YtmTJlitX7HO7vW609cUtyZPy1BoOXL69NfYifY1OZvcaLhJQg2jUYwpTB7enZzotfT/zKhuMb2HBiA8+te44ezXrULkXgbhQXuFdf/ZPnvoJ/3HVrpXnyC/Mp1IX4ePiQnZ/Nbyd/u2RGZ/nKfPLVk7m/+/0cST5C2/fa8ln0Z9x91d0cOH+A6EXRZc7f0LthmSiIbQLbUM+rHsdTjrM9YTudgjsx9MuhZBdko1BcGXwlN7W4iUFtBtEvsh/1vetblDu8fry5UDYv8bs24o/xom+A1VbcxYrWSJsH3uX80lcZOHAgM2bMYMqUKQ5Nn3d0DWh7pvyfPn2aO++ZxOafVuDVtA2hY/6BDorg+aUxGAwGmyqRiuR9a3RXi5Xi9NtMwc9q07iRs6iOhZpeffVVTpw4wdSpU2nRogVTBvd0uvKpCuWVYFFOBlkHfmPg8JHUr1+f6G71Ld6HOzrewR0dTbP3EzMTaeRTuaeivYgiqAStNflF+XgZvdBa89vJ31gSs4TQm0P5IvYLkvckX1KRD249mOd7P09BUQFer3gx/abpvNjnRZJzkhn8xeAy5y8dsz7AJ4DGfo2p72WqnJvWb8qsAbPoFmqyKV7V9Cq2PbCtpNJv6N2wZMWo3IJcfjv5G6tjVzN5xWQOnD8AmCIy3tf1Pga2HkifyD74+/jb9L9Lt7KsDWpaepHKp032CsH3zplcv2s+06ZN48cff+STTz6hRYsWdjyFizi6BrQtPYqioiI+/vhjpk6dSlpmFv69x9Pw2hEoo4fF9MVY6mlUJG9lleLlUPFbwtVjYgaDgfnz55OQkMDdd9/NmjVreHVE5xpXrOWft8fRjeiCXF597kmbz1EcEdXZuN16BLvO7OJsxlmLqwUV/+4Q1IF3hrwDQKt3WtG7RW/mR88HwOcVnzKrCsGlrfJh7Ybxj+v/AcDMjTPp2bwnN7a4kfzCfLbEbykzQOrj4VNlD5YTKSdYfXg1qw+vZu3RtWTmZ+Jl9KJPZB+GtBnCkDZDaNe4nVP8z201p1jzCglr5MOE4GM8+eSTKKV45513uPfee+2WzR73Q0tETltp9djxmbewceNGnnjiCbZv306fPn2IbTsWj8BLz1vem8OaXHdcHc632+MvS1fQ2s7nG/YyefSt5KQk0uXBt5l+79Bac89zcnJo06YNkZGRbNy4sdquK+sRmBn77diS1nIxxa3y4oq89HJwT/R4guYNL3oGfdT7I8aPHc+rL77KpLsn0ci7UZkoieWZ1mtayW9Poyc9I3paTVsZeYV5bDy5kdWxq1l1eBX7Ek1ulS0atWD8VeMZ2nYofSP7Us/L+fHubW3FWTOFnE7NYeKzE+nfvz/33XcfEyZMYMGCBbz77rt06dIFsE3ZOGpaMJYKL1CaouQERo8ezTfffEN4eDiff/4548aNo9dr623qgVjraaw/kFgrWqPuxtKd8cxYG0fgHdM588UU9s57hkfyjDzRqEmVFmZyNh999BHx8fF89tlnNSZDadyuR7Dp5CaAKrfK582bx8SJE9m/fz9XXHFFlWSwh7i0uJKK/+ejP5ORl4GnwZPeLXoztO1QhrQZwhVBV9SaWae2+IkXFRUxd+5c/vnPf5KcnMyDDz7INbc/wGu/nHF5y7l8jyD/Qjypvy8iM2YDvj7ePPPMMzz99NMl0WRt7YFY80xxxWQloXJKl8O8xBOc/XIqhnr+NP3baxjr+ddorywrK4vWrVvTvn171q9fX63vrvQIzDjSIgfYvHkzgYGBtCsVO92ZFOki/oj7g2UHl7EqdhV7zpkGMiMaRTCu8ziGth1Kv5b9SsYRahu2eIUYDAYefPBBRo0axfTp0/nPf/7Df+d+TL0ug2h43Qg8Gpr8/V0RfC/c35e45CxyT+4hfccKsmL/QBk9Cet1BzsWv3eJN5CtPRBHxy5cSW2bsFgdlO6ZegW3IPjOFzm36AXOLvonTca+SjYNaiyw43//+1/OnDnDokWLak0Dzu16BI7SoUMH2rRpw/Lly512ztyCXNYeW8vSA0tZdnAZZzPP4mHw4MaIG0ta/R2DO9aaQlMZ9lY8sbGxdL/jYTJi1gHg17YH9ToPwLdldwwGo9Na1CdOnODFtz/mqy8/Jy/xBAbfhtTvMoiQ60cwe3xvhyoFR8cuXEVtlcvVWOqZZh/byblv/w+vkFY0Gf0KRm+/au+tZWRk0KpVK6666ip++umnar02SI/AKSQlJXHgwAHGjx/v8Lky8zL54fAPfLv/W1YcWkF6XjoNvBowtO1Qoq+IZkibIS5xE6sO7PUKadu2LV3+No0TJ8eStvV7MmPWk3VwE4Z6/tRr24OQAxuJ7Hwtz4241q7z5uTk8Oeff/LLL7+watUq/vzTtOxh2yu7om8aRV5ED5oF+zulhVwdbpFVwdlLhNYVLPZMW3YjOPpZEr+bwblvX6LrxJnVLtfbb79NYmIiL730UrVfuyKkR2AHK1asYNiwYWzYsIGbbrrJ7vypOaksP7ScJfuX8MPhH8guyCbIL4jo9tGM6DCCfi374e1ReQTEy5HSLVddmE/20e1k7l1H9vFd6LwsQOEZGEbXzp3of313mjVrRsOGDWnY0BQFMj09nfT0dE6fPs2hQ4c4dOgQ+/btIzc3F6UU3bt3Z+TIkYwcOZJWrVrV7J+tRtx57KK4Zxqfko2CkvuQuf83zi+fzRVXXc0fG36iUSPbG1yOmNn27t3L1VdfzbBhw/jf//5n/x9yAi4JOldT1JQieO6555g9ezapqan4+fnZlCclJ4VlB5exeN9ifjzyI3mFeYQ1CGPEFSO4o+Md9IroVTIXwN0p/ZIVT2LTRYXknT5E9vFd5J87hk6JJ/9CPAUFBRbPYTAYaNmyJe3ataNTp0707t2bXr16ERAQYDH95Y49Qd4uZ8pX4L08DvPWc4/QpUsX1qxZQ+PGjW06R1XNbHl5efTo0YO4uDhiYmKqFKnWGYhpyAls3ryZbt26VaoEsvKzWH5wOV/t/YrVh1eTV5hH84bNeeSaR7iz451c1+y6Mi6qgonSJqWWZu8eZTDiHd4B73DToi4KOPTyIBb+tp93V+/mdGISwQ28mTygE7df24bGjRvj5eVVU3+h1uGKkA51kUvNlf24qWMzRowYQZ8+ffjhhx8ID6+4MnfEzPbvf/+bnTt38t1339WYEqgIUQQ2kp+fz5YtW5g0aZLF43mFeaw5vIav9n7FsoPLyMzPJLR+KH+P+jujrxzNdeHX1ZnBXldia9e6Ii+clXvPMXN9AtnGALyaBpAKvLctk7CIIqJDRQmUpraOXdQGhg4dysqVK4mOjuaaa65h2bJlREVd0lguoarhTbZu3cq///1vxo8fT3R0tCMiuwxRBDby119/kZ2dzQ033FCyr7CokA3HN/DV3q/4dv+3pOSkEOgbyLjO4xjbeSw3RtxY4WQzd8OeOD8VtWTr6gBoTblx1nSY89pM//792bx5M8OGDaN379589tln3Hmn5TXIq+IifPjwYaKjowkNDeWdd95xmtzORhSBjezYsQOAq6++mu0J2/lyz5d8tfcrzmScob5XfaKviGbslWMZ2GqgS+OG12XsqcArask+uWiXxfPX5nj99ijBy4G6NHehc+fObNmyhejoaEaOHMkTTzzBjBkz8PUtW8Hba2Y7evQoffv2JS8vj/Xr1+Pv7+/Kv+EQoghs5Le/fsOnvw+3rbmNfYn78DB40ZBrCc69l1ZevbkjsgtD29bOgl5bsKdrXVFFUpsnb1mjrvZiqkJdVHohISGsW7eOKVOm8Pbbb7NmzRo+//xzrr766pI09pjZTpw4Qd++fcnKymLdunUczg9g8sx1tVYxyohlBWTlZ7Fwz0IGfzGYL4K/IOfGHPx9/Hmwy0xa5n1Bg8xp+BX14kxqEc8u2cPSnfE1LXKtxlpFXX5/cUUSn5KN5mJFUnx/pwxuj69nWZNbbR8AdTR8dl2iIqVXm/Hx8eG9995jzZo1pKWl0aNHDx555BHi4y++19Hdwtk0rR/HZt7Cpmn9LqnMtdZ8+umndO/enbS0NH766SeOFQVVWJ5rA6IIyqG1ZuPJjUxcNpHQN0IZt2QcBxIPYNxs5N70e9k0YRO7D15DXn5Zz6G6UNBrGlsr8Moqkuhu4bw6ojPh/r4oTK6QtX2mrK1K8HKgriu9QYMGsWfPHiZMmMCHH35I69atefzxx9mzZw9aa5bujKfnzHW0nLaSnjPXsXRnPFrrkoi1EyZMoEOHDmzevJnu3btbLc/Tl8VYkaD6EdOQmZOpJ1mwawEL/lrAkeQj1POsx50d7+Seq+4hKDOILv/oQr+7TX7Xdb2g1xS2dq1tub91bQDUndw466LprjwBAQF8+OGHTJs2jVdeeYU5c+bw7rvv0rhJKAWhV6EahoDBg1SjkXu+OoYxYQ/J588SEBDARx99xIQJE0oWYLJWnlOy81m6M75WlGO3VgR5hXksO7iMj3d8zI9HfkSj6deyH/+66V+M6DCiJLDbF198AUD37t2By6OgVwfW7PyVFfzL8f66kxvn5aT0WrZsybx583j55ZdZvXo1U99eQNq+X82z3U0YfOoT0DaKea/N4LbbbiMoKKjMOayVZ6DWjBE5pAiUUoHAIiAS0+Lzo7TWyRbSfQLcCpzTWl9pb35nsz9xP/N2zmPBXws4n3We5g2b80LvF7iv230W1wLdsWMHPj4+tG9vKsiXU0F3FY4MGF6u97eu9WKqSk0rPVd4LIWFhXH//ffzSmxT6g/VUFiALsxHF+Zj8KmPwWBkwgTLITumDG7PE7Xc083RHsE0YK3WeqZSapp5+xkL6eYD7wPlV2GwNb9T+G7/d7zx+xtsOrUJD4MHw9sPZ2L3iQxsNbBCf/+dO3fSpUsXPDxMt6umC3pdwBEvGbm/dZ+aUnqu9lgqad17eKI8PMvst0Z0t3D+b3kMyVn5Fs9XG3BUEQwH+ph/LwA2YKEi11r/qpSKrGp+Z7H99HYSsxKZNWAW93S9h5B6IZXm0Vqzc+dOxo4dC1za2nhrdFepoCzg6DiKu7SeBefiajfdqvZWb+kSyhd/nLxkf98rake4CUcVQROt9WkArfVppVTlNWsV8yulJgGTACIiIqok7D97/5OX+75sV6iHY8eOkZqaSrdu3eqkf3RNcTna+YXaj6sdOaraW11/INGu/dVNpYpAKfUz0NTCoeedL451tNZzgblgij5alXP4ePjYnWfnzp0AdOvWjSfcaFKQo1yudn6hdlMdDZCq9FZru6dhpfMItNYDtNZXWvh8D5xVSoUCmL/P2Xl9R/O7nJ07d2I0GuncuXOtf5i1ibro6y/UfWrrZMPaPo/EUdPQMuAeYKb5+/tqzu9yduzYQceOHfHx8RFzh52InV+obmqro0Ft7yE7qghmAt8ope4HTgIjAZRSYcDHWuuh5u2vMA0KByml4oAXtdbzrOWvTezcuZNBgwYBtf9hCoJQOxsgtVVBFeOQItBaJwH9LexPAIaW2h5rT/7awpkzZzhz5gzdunUDav/DdGfqUrRLwT2pjQqqGLeeWVwZu3btAihRBFC7H6a7It5cguAYEnSuAmJiTEGhrrzyykpSCjVJXY12KQi1BVEEFbBv3z6aNGli08LWQs0h3lyC4BiiCCpg3759dOzYsabFECqhtrvmCUJtRxSBFbTWoghqGEtx3y1RVd9xW88vCJc7Mlhshfj4eNLS0ujUqVNNi+KW2DMAXBVvLhlgFoSLiCKwwr59+wCkR1BD2Bs8zF5vLndaQ1gQKkNMQ1YQRVCzuHoAWAaYBeEi0iOwQkxMDEFBQQQH144wse6GI+E8bJlcJuFCBOEi0iOwggwU1yyODAA/u2QP8SnZaC7a/ssPBNfW4GSCUBOIIrBAsceQDBTXHFWNXmrr5DKJjioIFxHTkAXOnDlDSkqK9AhqGFfHfZdwIYJgwu0VgSV7cv2k/YAMFNdFxPYvCPbj1qYha/bkr3/cDIgiqIuI7V8Q7MetewTW7MkrftlKQEAATZo0qSHJhKoiocIFwX7cWhFYsyenJBzjmk6d7FrkXqg9iO1fEOzDrU1DluzGWmsKk06KWUgQBLfBrRWBJXuyV146BdnpoggEQXAb3No0ZMmefHNgJv9CBooFwV2QZU4dVARKqUBgERAJHAdGaa2TLaT7BLgVOKe1vrLU/unAA0CieddzWutVjshkL+XtyR988AEAV1xxRXWKIQhCDSBRaE04ahqaBqzVWrcF1pq3LTEfuNnKsbe01l3Nn2pVApaIjY3F19eX8HD3KQSC4K7IMqcmHFUEw4EF5t8LgGhLibTWvwIXHLxWtXD48GFat26NweDWwyeC4BZIFFoTjtZ2TbTWpwHM3yFVOMcjSqndSqlPlFIB1hIppSYppbYppbYlJiZaS+YwsbGxtG3b1mXnFwSh9iDLnJqoVBEopX5WSu218BnuhOt/ALQGugKngTesJdRaz9VaR2mto1wVGrqwsJCjR4/Spk0bl5xfEITahcxEN1HpYLHWeoC1Y0qps0qpUK31aaVUKHDOnotrrc+WOtdHwAp78juTpTvjefnrX8jLy2PJ4UJu2BnvVoNFguCOyEx0E466jy4D7gFmmr+/tydzsRIxb94O7HVQnipR7Dlw4cQxADK8g9zSc0AQ3BGZie74GMFMYKBSKhYYaN5GKRWmlCrxAFJKfQX8DrRXSsUppe43H5qllNqjlNoN9AWedFCeKlHsOVCQnACAR0CYW3oOCILgnjjUI9BaJwH9LexPAIaW2h5rJf/djlzfWRR7COQnJ6A8vDE2CCyzXxAE4XJGfCS56CFQkJyAh39TlDKU2S8IgnA5I4qAi54DBcmn8QgMA9zTc0AQBPfErWMNFRPdLZzCwkJGvnoG39bXEO6mngOCILgnogjMRAVrdGE+r0+8mQce6FfT4giCIFQbYhoyExsbCyCTyQRBcDtEEZg5fPgwgISXEATB7RBFYCY2NhYfHx/CwsJqWhRBEIRqRRSBmcOHD9OmTRuJOioIgtshtZ6Z2NhYGR8QBMEtEUWAKerokSNHZHxAEAS3RBQBEB8fT15enigCQRDcElEEiOuoIAjujSgCLrqOiiIQBMEdEUUAHDt2DC8vL1mwXhAEt0QUAXD8+HEiIiLEdVQQBLdEaj5MiiAyMrKmxRAEQagRRBEgikAQBPfG7RVBdnY2Z8+eFUUgCILb4vaK4OTJkwCiCARBcFscUgRKqUCl1E9KqVjzd4CFNM2VUuuVUvuVUjFKqcftye9qjh8/DkCLFi2q+9KCIAi1Akd7BNOAtVrrtsBa83Z5CoCntNYdgB7Aw0qpjnbkdynFikB6BIIguCuOKoLhwALz7wVAdPkEWuvTWusd5t/pwH4g3Nb8rub48eN4enoSGhpa3ZcWBEGoFTiqCJporU+DqcIHQipKrJSKBLoBf9qbXyk1SSm1TSm1LTEx0UGxL1I8h8BoNDrtnIIgCHWJStcsVkr9DDS1cOh5ey6klKoPfAs8obVOsycvgNZ6LjAXICoqStub3xriOioIgrtTqSLQWg+wdkwpdVYpFaq1Pq2UCgXOWUnniUkJfKm1XlLqkE35Xcnx48e55ZZbqvuygiAItQZHTUPLgHvMv+8Bvi+fQCmlgHnAfq31m/bmdyU5OTmcOXNGPIYEQXBrHFUEM4GBSqlYYKB5G6VUmFJqlTlNT+BuoJ9Sapf5M7Si/NWFzCEQBEGwwTRUEVrrJKC/hf0JwFDz742Asid/dSGuo4IgCG4+s1gUgSAIgigCPDw8CAsLq2lRBEEQagy3VwQyh0AQBHfH7RWBeAwJguDuuL0ikPEBQRDcHbdVBLm5uZw+fVoUgSAIbo/bKgKZQyAIgmDCbRWBuI4KgiCYcHtFIIPFgiC4O26rCE6cOIHRaCQ8PLzyxIIgCJcxbqsI4uLiCAsLw8PDoSgbgiAIdR63VgTNmjWraTEEQRBqHFEEgiAIbo5bKgKttSgCQRAEM26pCFJTU8nMzBRFIAiCgJsqgri4OABRBIIgCIgiqGFJBEEQah5RBIIgCG6OQ4pAKRWolPpJKRVr/g6wkKa5Umq9Umq/UipGKfV4qWPTlVLxFtYydilxcXEopQgNDa2OywmCINRqHO0RTAPWaq3bAmvN2+UpAJ7SWncAegAPK6U6ljr+lta6q/mzykJ+pxMXF0fTpk3x9PSsjssJgiDUahxVBMOBBebfC4Do8gm01qe11jvMv9OB/UCNxnUQ11FBEISLOKoImmitT4OpwgdCKkqslIoEugF/ltr9iFJqt1LqE0umJVcgikAQBOEilSoCpdTPSqm9Fj7D7bmQUqo+8C3whNY6zbz7A6A10BU4DbxRQf5JSqltSqltiYmJ9lz6EkQRCIIgXKTSiGta6wHWjimlziqlQrXWp5VSocA5K+k8MSmBL7XWS0qd+2ypNB8BKyqQYy4wFyAqKkpXJrc10tPTSU1NFUUgCIJgxlHT0DLgHvPve4DvyydQSilgHrBfa/1muWOl3XZuB/Y6KE+lxMfHA+I6KgiCUIyjimAmMFApFQsMNG+jlApTShV7APUE7gb6WXATnaWU2qOU2g30BZ50UJ5KkTkEgiAIZXEoGL/WOgnob2F/AjDU/HsjoKzkv9uR61cFUQSCIAhlcbuZxcWKICwsrIYlEQRBqB24pSIIDg7Gx8enpkURBEGoFbilIhCzkCAIwkVEEQiCILg5oggEQRDcHLdSBNnZ2SQlJYkiEARBKIVbKQKZTCYIgnApbqUIZA6BIAjCpbiVIli6cTcA478+TM+Z61i6M76GJRIEQah53EYRLN0Zz8J1uwAw1G9MfEo2zy7ZI8pAEAS3x20Uwew1B8lJPYfBpz4GL9Nksuz8QmavOVjDkgmCINQsDsUaqkskpGRTr/NAvJt3vmS/IAiCO+M2iiDM35d42uDdtM0l+wVBENwZtzENTRncHl9PY5l9vp5GpgxuX0MSCYIg1A7cpkcQ3S0cMI0VJKRkE+bvy5TB7Uv2C4IguCtuowjApAyk4hcEQSiL25iGBEEQBMuIIhAEQXBz3MY0tHRnvIwPCIIgWMChHoFSKlAp9ZNSKtb8HWAhjY9SaotS6i+lVIxS6v/sye8Mlu6M59kle4hPyUaDzCoWBEEohaOmoWnAWq11W2Ctebs8uUA/rfVVQFfgZqVUDzvyO8zsNQfJzi8ss09mFQuCIJhwVBEMBxaYfy8Aossn0CYyzJue5o+2Nb8zsDZ7WGYVC4IgOK4ImmitTwOYv0MsJVJKGZVSu4BzwE9a6z/tye8o1mYPy6xiQRAEGxSBUupnpdReC5/htl5Ea12ote4KNAOuVUpdaa+gSqlJSqltSqltiYmJduWVWcWCIAjWqdRrSGs9wNoxpdRZpVSo1vq0UioUU4u/onOlKKU2ADcDewGb82ut5wJzAaKiorS1dJaQWcWCIAjWcdR9dBlwDzDT/P19+QRKqWAg36wEfIEBwGu25ncWMqtYEATBMo6OEcwEBiqlYoGB5m2UUmFKqVXmNKHAeqXUbmArpjGCFRXlFwRBEKoPh3oEWuskoL+F/QnAUPPv3UA3e/ILgiAI1YeEmBAEQXBzRBEIgiC4OaIIBEEQ3ByltV2emLUCpVQicKKK2YOA804Ux1mIXPYhctmHyGUftVUucEy2Flrr4PI766QicASl1DatdVRNy1Eekcs+RC77ELnso7bKBa6RTUxDgiAIbo4oAkEQBDfHHRXB3JoWwAoil32IXPYhctlHbZULXCCb240RCIIgCGVxxx6BIAiCUApRBIIgCG7OZakIlFIjzesjFymlrLpZKaVuVkodVEodVkpNK7XfJWsp27jGc3ul1K5SnzSl1BPmY9OVUvGljg2tLrnM6Y4rpfaYr73N3vyukEsp1VwptV4ptd/8zB8vdcyp98taeSl1XCml3jUf362U6m5rXhfLNc4sz26l1Gal1FWljll8ptUkVx+lVGqp5/MvW/O6WK4ppWTaq5QqVEoFmo+55H4ppT5RSp1TSu21cty1ZUtrfdl9gA5Ae2ADEGUljRE4ArQCvIC/gI7mY7OAaebf04DXnCSXXec1y3gG0yQQgOnA0y64XzbJBRwHghz9X86UC1N02+7m3w2AQ6Weo9PuV0XlpVSaocBqQAE9gD9tzetiuW4AAsy/hxTLVdEzrSa5+gArqpLXlXKVSz8MWFcN96s30B3Ya+W4S8vWZdkj0Frv11pXtjL9tcBhrfVRrXUe8DWmNZTBdWsp23ve/sARrXVVZ1HbiqP/t8bul9b6tNZ6h/l3OrAfcMXCExWVl9LyfqZN/AH4K9OCS7bkdZlcWuvNWutk8+YfmFYKdDWO/OcavV/lGAt85aRrW0Vr/StwoYIkLi1bl6UisJFw4FSp7TguViCuWkvZ3vOO4dJC+Ii5a/iJs0wwdsilgR+VUtuVUpOqkN9VcgGglIrEFPL8z1K7nXW/KiovlaWxJa8r5SrN/ZhalsVYe6bVJdf1Sqm/lFKrlVKd7MzrSrlQSvlhWk3x21K7XXW/KsOlZcvRFcpqDKXUz0BTC4ee11rbstKZsrDPYV/aiuSy8zxewG3As6V2fwC8jEnOl4E3gAnVKFdPrXWCUioE+EkpdcDckqkyTrxf9TG9sE9ordPMu6t8vyxdwsK+8uXFWhqXlLVKrnlpQqX6YlIEvUrtdvoztUOuHZjMnhnm8ZulQFsb87pSrmKGAZu01qVb6q66X5Xh0rJVZxWBrmAtZRuJA5qX2m4GJJh/27UWs61yKfvWeB4C7NBany117pLfSqmPgBWWMrpKLm1acAit9Tml1HeYuqW/UsP3SynliUkJfKm1XlLq3FW+XxaoqLxUlsbLhryulAulVBfgY2CINi0IBVT4TF0uVymFjdZ6lVLqP0qpIFvyulKuUlzSI3fh/aoMl5YtdzYNbQXaKqVamlvfYzCtoQwX11IG566lbM95L7FNmivDYm4HLHoYuEIupVQ9pVSD4t/AoFLXr7H7pZRSwDxgv9b6zXLHnHm/KiovpeUdb/bw6AGkmk1atuR1mVxKqQhgCXC31vpQqf0VPdPqkKup+fmhlLoWU32UZEteV8pllqcRcBOlypyL71dluLZsOXv0uzZ8ML30cUAucBZYY94fBqwqlW4oJi+TI5hMSsX7GwNrgVjzd6CT5LJ4Xgty+WF6IRqVy/85sAfYbX7YodUlFyavhL/Mn5jacr8wmTm0+Z7sMn+GuuJ+WSovwIPAg+bfCphjPr6HUh5r1sqak+5TZXJ9DCSXuj/bKnum1STXI+br/oVpEPuG2nC/zNv3Al+Xy+ey+4Wp0XcayMdUd91fnWVLQkwIgiC4Oe5sGhIEQRAQRSAIguD2iCIQBEFwc0QRCIIguDmiCARBENwcUQSCIAhujigCQRAEN+f/AXVTq1dqM3omAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a data matrix X\n", "p=2\n", "X = np.vstack([np.ones(len(x)),x,x**2]).T\n", "display(X)\n", "# degree-2 polynomial linear regression\n", "w2 = np.array(3)\n", "w2 = np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),y)\n", "yh2= np.matmul(X,w2)\n", "\n", "plt.plot(x,y,'o')\n", "plt.plot(t,y0,'k-')\n", "plt.plot(x, yh2, 'g')\n", "plt.plot(x, yh1, 'g-.')\n", "plt.plot(x, yh, 'g-.')\n", "plt.show()\n", "\n", "MSE_train = (1/float(n))*np.sum((y - yh2)**2)\n", "\n", "# MSE on fresh data not used in training\n", "X_ = np.vstack([np.ones(len(x_)),x_,x_**2]).T\n", "yh_= np.matmul(X_,w2)\n", "MSE_test = (1/float(n_))*np.sum((y_ - yh_)**2) \n", "MSE = np.append(MSE,[[p,MSE_train,MSE_test]],axis=0) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "for p=3 degree polynomial, we use feature vector $(1,x,x^2,x^3)$" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a data matrix X\n", "p=3\n", "X = np.vstack([np.ones(len(x)),x,x**2,x**3]).T\n", "\n", "# degree-p polynomial linear regression\n", "w3 = np.array(p+1)\n", "w3 = np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),y)\n", "yh3= np.matmul(X,w3)\n", "\n", "plt.plot(x,y,'o')\n", "plt.plot(t,y0,'k-')\n", "plt.plot(x, yh3, 'g')\n", "plt.show()\n", "\n", "MSE_train = (1/float(n))*np.sum((y - yh3)**2)\n", "\n", "# MSE on fresh data not used in training\n", "X_ = np.vstack([np.ones(len(x_)),x_,x_**2,x_**3]).T\n", "yh_= np.matmul(X_,w3)\n", "MSE_test = (1/float(n_))*np.sum((y_ - yh_)**2) \n", "MSE = np.append(MSE,[[p,MSE_train,MSE_test]],axis=0) " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABGt0lEQVR4nO3deVxUVf/A8c9hBzdAARHDPZeyRKncsszStNwzW7W0LB/bfEqz3V/19NielVmkrU+alallbqVWbrnirogLJoiIGyo7zPn9MQMNOAMzzAwzON/368UL5s65cw8zd+73nl1prRFCCOG9fNydASGEEO4lgUAIIbycBAIhhPByEgiEEMLLSSAQQggv5+fuDFRFgwYNdNOmTd2dDSGEqFE2b958QmsdUX57jQwETZs2ZdOmTe7OhhBC1ChKqcOWtkvVkBBCeDkJBEII4eUkEAghhJeTQCCEEF5OAoEQQni5GtlrSAjhmPmJaby5NImjZ3JpFBrMhD6tGRQX4+5sCTeRQCCEl5mfmMYzP+4gt7AYgLQzuTzz4w4ACQZeSqqGhPAyby5NKg0CJXILi3lzaZKbciTcTQKBEF7m6Jlcu7aLi59TAoFS6malVJJSar9SapKF55VS6n3T89uVUh3NnktRSu1QSm1VSslwYSFcrFFosF3bxcXP4UCglPIFpgF9gXbAnUqpduWS9QVamX7GANPLPd9Ta91Bax3vaH6E8FbzE9PoNmUFzSb9QrcpK5ifmGYx3YQ+rQn29y2zLdjflwl9WldHNoUHckZj8dXAfq31QQCl1LfAQGC3WZqBwFfauC7mX0qpUKVUtNY63QnHF8Lr2dMAXPJYeg2JEs4IBDHAEbPHqcA1NqSJAdIBDSxTSmngE611gqWDKKXGYCxNEBsb64RsC3HxqKgB2NIFflBcjFz4RSlntBEoC9u0HWm6aa07Yqw+GqeU6mHpIFrrBK11vNY6PiLigllUhfBq0gAsHOGMQJAKXGL2uDFw1NY0WuuS38eBeRirmoQQdpAGYOEIZwSCjUArpVQzpVQAcAfwU7k0PwEjTL2HOgNZWut0pVQtpVQdAKVULaA3sNMJeRLCq0gDsHCEw20EWusipdQjwFLAF/hMa71LKfWw6fmPgUVAP2A/kAPcb9o9CpinlCrJyyyt9RJH8ySEt5EGYOEIZezIU7PEx8drWaFMCCHso5TabKmbvsw1JMRFSiaWE7aSQCDERUgmlhP2kEAgxEXI3nEFVSEljouHBAIPIV8q4UyuHlcgJY6Li8w+6gFKvlRpZ3LR/POlsjZXjBCVcfW4ApnK+uIigcADyJdKOJurxxXISOaLi1QNuZCt1T3WvjxpZ3LpNmWFVBMJu7l6XEGj0GDSLJy3MpLZOaq7qlgCgYvYU4dq7UtV2X5CVMSVE8tN6NO6zPkNMpLZWdzR/iJVQy5iT3WPpWK8LftVha1z1gtRkUFxMfx3SHtiQoNRQExoMP8d0l5uVpzA2rXjiTlbXfadlRKBi9hTh2pejLdWMnBG3av09BDOJFNZu0ZF33VXfWclELiIvXWoJV+qblNWuKzutbJSinRfdS7pEiyqoqKqYnD+eBCQqiGXqUqvDa01d7X2I3/3Ck4u/ZDj30/mxM9vcXZFAi2PrWDPnj0O5amiRmnpvupc0iVYVFVlVcXg/N5ZEghcxN461JUrVxIfH88jQ67j2M/vkLt3FcXZpyk6lkTB3j/4aup/aNeuHe3atWPy5MmcPHnS7jxZK1X4KiXdV51MugSLqjK/dljj7N5ZEghcaFBcDGsm3cChKbewZtINFoPA/v376d+/PzfccAMnTpxg2rRp7Nq1i4Lss+Qf20/eyaOcP3uG1NRUPvzwQ6Kjo3n55Zdp3rw5r732GtnZ2Tbnx1oppdjKDLTSJ7zqalo/e+lE4FlKrh3vDe9Q+p3V2oAuKnRJ7ywJBG60YcMGrrnmGv7880+mTJlCUlIS//rXv2jXrh0+PmU/mpiYGMaNG8fy5cvZsWMH119/Pc899xytWrVi4cKFFR6n5Es+fs5WAv18CAvxL1NKsXbnIX3Cq64mrRgm1VjuZy0Qm5cOik78zZH3bue2yONOb2uSQOAmK1eupFevXoSGhpKYmMjTTz9NUFCQTftedtllLFiwgDVr1hAREUH//v0ZN24cOTk5F6Qt/yU/k1tIXqGBd4d3KC2lyOpWzleT3lOpxnKvygJxSelgcucAdHEhI/t2dXoeJBC4wS+//ELfvn1p0qQJq1atonnz5lV6na5du7JhwwaefPJJPvroI+Lj49m7d2+ZNLZ8yaVPuPPVpPe0plVjXWxsDcR//fUX9evXp0WLFk7Pg3QfrWbJyckMHz6cyy+/nKVLl1K/fn2HXi8wMJC33nqLm2++mbvvvpsuXbowd+5cbrjhBqDinkLmpE+489WU91Smi3AvWwPxspWrMDRoSfNnFjm9O7KUCKpRfn4+d9xxB4GBgcyfP780CDijoe7GG29k/fr1xMTE0KdPHz777DPA+pdZmY4rjYSiJlVjXYxsaU/65s/dpB5KxhDZyiXtOE4pESilbgamYly8fobWekq555Xp+X4YF6+/T2u9xZZ9LybPPvssW7ZsYf78+TRu3Bhw7mjfpk2bsmbNGm6//XZGjx7N0aNHmXDL/Yyfs5Xy/YI0MPmnXeQXGWSkcRXU9MFiRUVF7Nixgw0bNpCUlETY9iRSkw6Ql30OX6WpG+DDxDkhvBUZSVRUFLGxsXTs2JGOHTvSunVr/PykMsFZbJm36bUvjB1CAhu1Kd3mzIFlDn+aSilfYBpwE5AKbFRK/aS13m2WrC/QyvRzDTAduMbGfS8Kixcv5p133mHcuHEMHDiwdLuzV5KqV68ev/zyC6NHj+aFF17g2dxcDLoLxlhc1pncwgu2uWLU4sXGGcHbHYHk0KFDLFiwgJ9//pl169aRm2useggJCSE2Npau7ZoQFhaGv78/fn5+5OXlkZGRQVJSEkuWLCntjFCnTh1uvvlmBgwYQL9+/QgPD3dpvi92tswUezR5O6AIjL60zL7OasdxRli/GtivtT4IoJT6FhgImF/MBwJfaa018JdSKlQpFQ00tWHfGi8nJ4cHHniA9u3b8+abb5Z5zhUNdX5+fnz++ecEBwfz2muvEd1tKP7d7rMYDJx9bG/gaPCuzjmfTp8+zf/+9z8+++wztm7dCsDll1/OmDFj6Ny5M9dccw1Nmzat9NwoLi4mKSmJLVu28Pvvv7Nw4UK+//57/P39ue222xg7dizdu3e3+RwTZVXannQ8Gf8GsfgEhpTZ7Kx2HGcEghjgiNnjVIx3/ZWlibFxXwCUUmOAMQCxsbGO5biaTZ06laNHjzJnzhyCg8t+cK5qqPPx8WH69OkEBQUxdepUwgqKqNPzgdIvarC/L0H+PpzOubBUII2EFXM0eFfHesI7d+7kzTff5LvvviMvL4/4+HjeeecdBgwYUKVeJ76+vqUj2++55x4MBgMbN25k1qxZfPnll8yePZv27dvzwgsvMHTo0AvGwYiqMxgMFB1LIqR5lzLbndmO44xPy9ItQPkqaWtpbNnXuFHrBK11vNY6PiIiws4sus/JkyeZMmUK/fv3p3v37hc878qGOqUU7777LuPHj+f0xgUUb5hVpivjS/0vk0bCKnB0sJgru2tu2LCBQYMG0b59e+bOncv999/Pli1b2LhxI+PHj3e462FJ54IWzy7m3yuz6XnfRNLS0pgxYwZFRUXcfvvtdOrUiYULF6KtjFgX9klOTub82SzuGdDLZd2RnVEiSAUuMXvcGDhqY5oAG/at0V577TXOnz/Pa6+9ZvF5V68kpZTi7bffJicnh08++YT/3HQ5z056tkyamtzo6Q6OLspibynQlvaEffv2MWnSJObNm0dYWBiTJ0/m0UcfdWr9vdUqrSHtGT16NPfddx+zZs1i8uTJ9O/fn759+zJt2jSaNWvmtDx4o7/++guAsbf35bLLLnPJMZSjUVsp5QfsA3oBacBG4C6t9S6zNLcAj2DsNXQN8L7W+mpb9rUkPj5eb9q0yaF8V4fDhw9z6aWXcvfdd5d253QXg8HAyJEj+d///sf777/Po48+6tb81HSONPaWv6CCMZBYusOrLO2pU6d48cUX+eSTTwgKCmLixIm07Hk7H65Osytvtvw/1qZIjwkNZs2kG0ofFxYW8uGHH/LCCy9gMBh48cUXefLJJ/H397fp/RFljR07llmzZnH69GmHq9yUUpu11vEXbHdG8U0p1Q94D2MX0M+01v9RSj0MoLX+2NR99EPgZozdR+/XWm+ytm9lx6spgeC+++7j22+/JTk5mUsuuaTyHVysqKiIYcOGsWDBAmbNmsUdd9zh7ix5LVsDidX1KeoF8VCjVCZMmMCpU6cYM2YML730EuuOFtkcZMzzUn4fgLAQf17qf1npfs0m/WKx3lYBh6bccsH2I0eO8PjjjzNv3jw6d+7MN998U+VR9N4sLi6OiIgIli1b5vBruTQQVLeaEAhSU1Np2rQpjz32GO+88467s1MqLy+PPn36sG7dOn755Rduuukmd2dJVMDSxbfwVBonl3xA/pGddOnShY8//pgrrrgCsP2u3Zy1fcB4kdem/XMKiix2LqjotQHmzJnDQw89hMFgYPr06dx9991W04qyzp8/T7169Xjuued4+eWXHX49a4FAmvZdJCEhAYPB4HFVMEFBQSxYsIC2bdsyePBgbA2oMgLZPczbDbQ2cHbTAtI/f4yizBQSEhJYvXp1aRCAC6cOKVFRQ3RFz5UEobQzuZzPK8Lft2z/DlvaRoYPH862bdu44ooruOeee3jooYcoKCiocB9htHHjRgwGA9dcY7EzpdNIIHCBgoICEhIS6Nevn0c2lIWGhrJkyRIiIiK45ZZbOHjwYIXpZZpi9ynpVVaUdZyM2c9yevmnhDS9goQFv/Pggw+WqTOen5hmsRseVNyjydbeToUGTa0Avyr1XGnSpAm///47kyZNIiEhgV69epGRkWHTcb3ZypUr8fHxoVu3bi49jgQCF5g3bx4ZGRmMGzfO3VmxKjo6msWLF5OTl89l11xH7OOzrd7pyzTF7jMoLoZbah3i2BePUpBxgBZDJ/D1nB8Z1bvTBWnfXJpktQ6/ort2W5ZGLJGVW1jpYkvW+Pn58d///pfZs2ezefNm4uPjSwe5CcuWL19OfHw8oaGhLj2OBAIXmDZtGs2bN6dPnz7uzkqF9ubWIXzQ8+SdzuD43Fc4knnG4p2+TFPsHufPn2fUqFG8/cy/uKpDew7s3cX+H95gcMfGFtNb+zw0FY9YLpkyOzS48l49zhhseMcdd7BmzRqUUvTo0YPly5c7/JoXo3PnzrFhwwZ69erl8mNJIHCyHTt2sGrVKsaOHevxoyvfXJqEim5Lg1ufJD9tLycXvk1OQeEFd/o1abWti8Xu3bu5+uqr+eKLL3juuef4888/K61mtPZ5VLT2bYlBcTFsfak37w3vUGE6Zw02jIuLY+3atTRp0oS+ffvy7bffOuV1LyZ//vknRUVFEghqoo8++oigoCBGjRpVus1TG1pL7iBrtelO2A2jydm3ltMrP7vgzlKmKa5eT7z6Pu07dCLpcDptR71B/NCxNvXBd8bnNCguxmrgCA32d+pgw8aNG7Nq1Sq6dOnCnXfeyYcffui0174YLF++nMDAQLp2df6KZOVJIHCinJwcvv76a+64447SEZ2e3NBqfgdZJ34gdTr159zG+ahdi8ukq0mrbdVkBQUF9L19JFNfeBz/qBZE3zeV7AZtbT5fnPU5WQsokwc4f1RraGgoS5cuZeDAgTz66KO8/fbbTj9GTbV8+XK6det2wfxkriCTijvRokWLyM7OZsSIEaXbqmOCsaoqmSohp7CAYp8TBN/YlcLQJA4dn8bdn5zmkhaXkF2QTX5xPlpr2rWD9j6+BPsFs+HUb+xeVZvw4HDCg8NpENKARnUaEVMnhjqBddz6f9VER48eZdiwYaxdu5a6Vw8h9LqRKB/jxdie88UZq6K5etqT8oKCgvj++++5++67eeqpp8jPz+fZZ5+tfMeL1PzENP4z9y+2b99ObO9RzE9Mc/m1QgKBE33//fdERkbSo0eP0m2e0tBaMpL1yJlj1K5zmLiWp8llP+dDd5J2PgWNaaDQtcZfs47Nwj/DnzpBdQjwDUChUEpRZCgitzCX3KJcigxFFo9VJ6AOTUOb0jysOc3DmtO6fmvaNGhDmwZtiKwVKVMVl7N27VqGDh3K2bNniRgwkZC2PS5IU93nS3Uvs+nv78+sWbMIDAzkueeeo7i4mBdeeKHaju8pSmoQTuzYAEBB1GXVsliUBAInycnJYeHChYwYMQJf33+K1e5eDza3MJdXf/uO6X/N4zzbKAxOgSLYsxca1WrONZdcyV3hg2lVvxWx9WJpWLshPrk+DOw9kLOnz7Ju3Tpatmxp8bXzivI4nXuaU7mnOJ59nPTz6Rw9d5QjWUc4dOYQB04fYNmBZeQW/fP/NwhpQPvI9rSPbE9cdBwdozvStkFb/H29cx6amTNnMnbsWGJjY1m2bBkP/5LptesH+/n58cUXX+Dj48OLL75IcHAwTz31lLuzVa1KahDyUraiAkIIaNiyWmoQJBA4yaJFi8jJyeH2228vs93RmSqrIq8oj4X7FjJ1zdesPforBnJRKoBAQztqFY4g0NCGAEMLLglswI/DLU8NsOSXJXTt2pWbb76ZdevWYWnq7yC/IKLrRBNdJ5rLsFx/bNAGUs+msvfEXvZk7mHH8R3sOL6DGYkzyNlgXPEq0DeQDg07cHXM1VzV6Co6N+5My/CWF3XJobCwkCeffJIPPviAm266iW+//Zbw8HAmFFmeZO5iapivaJ4lX19fPvvsM/Lz85kwYQLBwcEePR7H2UpKfnmHtxHU5IrS6kFXlwglEDiJpWohqN761l3HdzFjywy+2v4Vp3JP4atDCSm+jpDiLgQZ2qMIKJO+opOrVatW/Pzzz/Ts2ZNbb72VFStWUKtWLbvz5KN8iK0XS2y9WHq36F26vdhQTPKpZBLTE9mcvpmNRzcyM3EmH2z4AID6wfXp3Lgz3S7pRrfYblzV6CqC/avnrtjVy0ieOnWKYcOGsWLFCv7973/z+uuvl64BXN3189XN0lTW4+dsZdPhU7w6qD1gDAZff/01eXl5PPLII4SEhHD//fc7fOxiQzFZ+VmcyTtDVl4WuUW55BXlkV+UX5pGKUWwXzAh/iHUCqhV2v7l51M9l8pGocGkpByiKCuDOlcNKrPdlWTSOSfIyckhIiKCESNGMH369Go9ttaa31N+Z8qaKSw7sAx/H38Gtx3Mzn2dOH+2DQrrI0YrmywMYMGCBQwZMoQ+ffqwYMECl04lXGQoYnfmbtanrmdd6jrWpa5j74m9APj7+BPfKJ7usd25NvZausd2Jyw4zOl5sGeK6KrYvXs3AwYM4MiRIyQkJDBy5EiHX9NTODKVtQLeHd6hTPr8/HwGDBjAb7/9xty5cxk0aJDVY+cX5ZNyJoWDpw+SciaFv7P+5sjZI6SdSyPjfAYZ2Rmcyj1V5f8tPDicS+peQrOwZjQLbUabBm24IuoKLo+8nNoBtav8uuXNT0zj4edeJ2PxB0SP/oiABrFOPf9k9lEXmjt3LrfddhvLly/nhhsqvrA607IDy3hh5QtsSNtAVK0oHr/mcR7o+AARtSKsThlcwp6T69NPP2XMmDGMHDmSzz//vFqrbE7mnGTtkbWs/ns1q4+sZmPaRgoNhSgU7aPa0yO2Bz2aGH+iakc5fLyqzN5pq0WLFnHHHXcQEhLCvHnz6NKlS+U71RC2BtCKzktL73F2dja9evVi69atLFu2jLad2rI7cze7Mnex98Rekk4mkXQiib+z/kabvbKfjx+N6zYmpk4MDWs3JLJWJJG1IgkLCiM0KJS6gXUJ8Q8hyC+IQL9AlGmWJoM2kFuUS05hDucLznMy5ySZOZkczz7O31l/k3ImhUNnDpFTmFN6rLYN2tLtkm50j+1Oz2Y9ia3n2FK6Hbtez559+4ka/TExYSHOXqjKYiCQqiEnsFYt5CqJ6YlM/G0ivx38jaahTfn4lo8Z2WEkQX5BpWmsNVKD8Qtnz8n14IMPkp6ezksvvURUVBSvv/56lfJdlSqX+iH16d+6P/1b9weMjd8b0jaw6u9V/Hn4Tz7f+jkfbjQORGpdvzU9mvTguibX0aNJDy6pZ/8aEK7o5aW15u2332bixIl06NCBBQsWeMT6FM5kazfpis5L8/c4vyif3Zm72ZaxjbhJcexYuoPrF16PXvnPxb52QG1a129Nt9hu3Bd+Hy3CWtA8rDnNwpoRVSsKXx/b5k+yl0EbOHzmMDuO72DbsW38lfYXP+z5gRmJMwC4PPJy+rXsx8A2A+nSuItdN05nzpxhx8Y1jB8/njdev9Ul+bdESgR2Kn8xe+y6WEbf1IF7773X5dVCZ/LO8PSvT5OwJYHw4HBe6PECY+PHEugXaDGfzqzi0Fozbtw4pk+fzpQpU3j66aft2t9VVS6FxYUkHkvkj5Q/+OPwH6z+ezVZ+VkANAttxrVNri0tNdjSAF3R3Pz2BlAwVm889NBDfPnll9x222188cUXVWpr8XS2LlozPzGN8XO2lklrIIcCn4MEh/zNdZdnsyV9C3tO7CntnhzsF8yloZeyf81+fE76MO2lafS8vCcxdWI8pkOBQRvYnbmbZQeW8UvyL/x5+E+KDEU0DW3KXZffxYgrR9C6QeUN/t988w333HMP69ato3Pnzk7Pp1QNOYGli5nhyDaOzHqORYsW0bdvX5ccV2vN97u/5/Elj3M8+ziPX/M4L173IqFBoZXm15mNjsXFxdx7773Mnj2bjz/+mIceesjmfV1Z5VImj4ZidhzfwR8pf/Dn33+y6vAqMnMyAYiqFUX32O50j+1Ot0u60aFhhzLdVucnpjH5p12cyb1w8ZUS9gSvY8eOMWTIENatW8fkyZN54YUXPH7+qaqy9fM9k3eGR77/gUVJa8lXByjwOUCRzz+jpqNqRREXHUdcwzg6NOxAh4YdaBHWAl8fX3bt2kX37t2Jjo5m9erVDq3H7OoOAVl5WSxIWsA3O77htwO/YcBAUHEHmgYO4dW+Ixna0XL10dChQ/nrr784cuSIS84VCQROYOlkP73yM85t/plzWaddcqd3KvcUY34ew9w9c+kU3YmE/gl0jO7o9OPYqrCwkMGDB7No0SK++eYb7rzzTpv2s3eZw6oq/wV/qvelpJ0/wLurFpCRt5Uivz3kcwyAEP8Qro652lh8L7iU79YGU1hYecOfLcFr8+bNDBo0iFOnTvHFF18wbNgwp/x/nsrSTZK//znu6l5MUMjfbDm2hS3pWzh4+p+1LwKIxK+4BfUD2jAi/nrGdbuJ6DrRFR7njz/+oHfv3lxzzTUsW7aMoKCgCtPbmldnNsiWP9aEH//ghF7KOd9FFPucwF835MEO/+a9/k+UuRHJycmhQYMG3H///UybNs2p+SghbQROYKmeOPfQFgIbt600CFR0B2LtuT9S/uCeefdw7PwxpvSawpNdn6y2bmzW+Pv78/3339OvXz/uvfdeAgICGDp0aKX7VcfAOktdEyf+sB0UFBf3ogG9oBD8/E8x+Jps8n13s/bIWt5Y8wbFuhj8wM+nIQGG1gQaLiVAtyTA0AIfyl5sKmsvmD17NqNGjSIyMpI1a9bQoUMHp/2PnsigDbRvkseAzkeYlfgnJwuSKPY9RAEnePkvY5rmYc3pFN2JBzs+SKfoTsRFx9EgpIHNxzD/jjQdOpFVs19lxIgRfPvtt3bfOVfntC9vLk2isLAe9bidukVDyfH5i7P+P/DRton8kjKN53s8z/0d7sfXx5elS5eSm5vLkCFDnJoHWzh0VVFKhQNzgKZACnC71vq0hXQ3A1MxLlA/Q2s9xbR9MvAgkGlK+qzWepEjeXKl8hezovOnKMxMIfrmByrcz9IFqmTYOHDBc5N+3MZ3Se/xbdLbtAxvyV+j/6JTowsXInGX4OBgfvrpJ/r27csdd9zBd999x+DBgyvcpzoG1ln6ghcaLiyHFBWGs3ZnDGsmPQxATmEOLV76gDyfvRT47CPfZxc5fn8YE2sf/HVjAgzNCdDN8Tc0p0mdthaPX1RUxDPPPMNbb71F9+7dmTt3LpGRkU77/9xNa83x7OPsztzNjuM72Hl8p3GAYMYOsguzAfBVvrRp2IYODfvQMbpjaRVPVbv6Wqquy4/tTESv0Xz//UyaNWtmtfOCtRus6pz2xfw1Fb7UMnQjJL8reT6biKq9mAd/fpAPNnzAu33eZd68eYSHh1dbpxNzjt5eTgKWa62nKKUmmR6XaUVUSvkC04CbgFRgo1LqJ631blOSd7XWbzmYj2pR/mKWl7IVgMdH3FbhfpWt8FWmzYFcjqh3SUpayz1X3MP0W6Y7tZ+ys9SpU4fFixfTp08fbr/9dn744QcGDhxoNX11DJSy54tsnjbEP4Tmda8i7czlpduKOEWBz34KfJIp8NlPnu8OstXvABwvgKi3Imkf2Z52Ee1o26AtMYExvDXpLVYtNq5F8d577xEQEFD+sDVCflE+h84cYt/Jfew7uY+kE0nsPbmX3Zm7y/TFDw8Op31ke0bHjeaKqCtK+9U7a+CfpSqcEsGdBhF1PpM33niDs37hbK9zVZnzCi68wXrmxx1sOnwKH6UotlAl7opBW5ZKwgpFy7o9WD36JX7c8yNP/foUvb7qhb/2Z+CggS4dq2ONQ20ESqkk4HqtdbpSKhr4XWvdulyaLsBkrXUf0+NnALTW/zWVCM7bGwjc2Vhsfndydsm7FP+9ldMnjldYPK2ofhz+WSC8UB0jM+BVCtXfhBWO4uSrCR7TK8Kas2fP0qdPHzZt2sT//vc/hg8f7ra8VNTjp7zy9fwVXXQUxs8osl4+t3QqoG6d9NKpMvZk7im9GwYIVIG0iWxDi/AWNAttRtPQpjSp14TGdRvTuG5jGoQ0cOtnqrXmXME50s6mkXo2ldSzqRzOOszhrMOlA7KOZB0p0yc/IiSCS+tfymURlxkDX0Rb2ke2p2Hthi79Xyr9PA3FNFg3lc1rfidy6IsEtzBWfQf7+xLk78PpnAsb/Us+y/Jc2UZQWXtEXlEe//r6X3x+4HN8fIIIKx7DpbUHMPHmNk7Pj6vaCKK01ukApmBgqRwcAxwxe5wKXGP2+BGl1AhgE/CkpaolAKXUGGAMQGysYwM2qqL8B6q15uz+LXS9tkeldZSV1Y+nncmlQB3keOBLaAqILJhMy7rd3HrBsLVXRd26dVm6dCm33nord955J+fOneOBByquKnMVS9VP/j4KFBQW//P1t1QlZV5iSTuTi6/prrGyLqMzZsxg3DPjqNuiLiPGj6C4nnHqjN2Zu1mUvIi8orwy6f19/ImqHUVUrSgia0VSP6Q+9YPrEx4cTt3AutQNrEudgDps/TuH+YmZnDpvIKJ2LUZ2ac6NbRuVXqC11hQaCikoLqCguICcwhxyCnPILsgmKz+LrLwssvKzOJV7ihM5JziZe5KM8xkcO3+szCSAYLxDbVSnEU1Cm3Bt7LW0DG9Z+nNp/UsJD6567xxLbD23KivhxYTXpvjGf+O/L4XMn16n4d2vExDZnNzCYosBHSwHAV+lXLa+hi0l4SC/IA7+kIXaHIT/gy04GfA+ibmreOrHJ4Hrq2V6kUpLBEqp34CGFp56DvhSax1qlva01rpMZaBSahjQR2v9gOnxvcDVWutHlVJRwAmMn88rQLTWehSVcEeJoPzdScHxQ6R//igtb5tA8vdvVLhvRXcFAI//+A1HfP8PHx1CVMEr1PVr6taFX6rSqyInJ4ehQ4eyZMkS3n77bf79739XV3bLsHSRAedXSeXk5PDII4/w+eefc+ONNzJr1qwLJuYzaAMZ5zM4cvYIqWdTOZJ1hPTz6Rw7f4yM7AyOZx8nNSuTkzknKSbHypGqrpZ/rdJAUz+kPlG1omhYuyFRtaKIqRtTWkqJqRNjcSyKK9hzblVUIijZZ/ycrRSeO8Gxr54EoOGIt/GrY3sjNDi/51pFLJ2fPZoE0yCqIbXa9ya890Oc913Caf+ZKIJoHfAMu5+1b8xORapcItBa31jBi2YopaLNqoaOW0iWCpgPo2wMHDW9dobZa30KLKwsP+5S/u4k91AiAHmRla/aVNFdwU9JP5Ee8CJBOor6uf9HbL1Yt08yZq1N48nvtjF+zlaLF9OQkBAWLFjAPffcw5NPPklqaipvvvlmmSm5q4O1efSd+X7u3LmT4cOHs2fPHp5//nkmT55s8f/0UT6ls7NeHXP1Bc+XXBSDC4vRFGMgl0D/fPz88sjKy0arAjQFQDEaA+G1fPnvkCtKS4oBvgGlPyH+IaU/JSULd/cws8SeHjuWSngAYSH+vNT/MgbFxRhLcDQgcthLHPvmaTLnvkLUXVMIr1eX/CKD1ZKBueqa4ttap5GueevRRYXU6dAHhQ91ivsRZGhPZsDr7CmcxDO/neGVG15x6efp6Cv/BIwEpph+L7CQZiPQSinVDEgD7gDuAigJIqZ0g4GdDubHZcpX7+SlJOLfIJZYG6cKsHSB+jnpZ2777jbiouNYdNci6ofUd2qeq8pakbykgc2815P5/xQQEMDs2bOJjo7m3Xff5dChQ3zzzTeEhIQ4NX+uHgxkjdaaTz/9lMcff5x69eqxbNkybrzR6n1Spfk1vygqfPGlNkWFtSkqhEC4oB4j/xwMbls9d66uYk+PHVuqVUqCBZHNiRjwNMfnvsyphW/y7jff4evnV1rVZ011TvFtKQjmFBQx++svqN24DQGRzUu3++tLaJj/NgW1PmPKmilszdjKt0O/pV5QPZfkzdGha1OAm5RSyRh7BZV0C22klFoEoLUuAh4BlgJ7gO+01rtM+7+hlNqhlNoO9ATGO5gflzFfx9VQmE/ekZ3Ubt6xyifR4uTF3Pb9bXRo2IFl9yzzmCAAtt0hmfd6Mufr68vUqVOZOnUqCxYs4Prrryc1NdVpeXPXGtAZGRkMHDiQhx56iB49erBt2zabg4C1/NrbXfFiWJzG2v9gbfuguBjWTLqBQ1NuYc2kGy4I+ObrNIe0iKf5wMfITt7A8s9fZ2CHRqyZdAMVtbRVZxWspc87P20vuRkpjLh/1AXrRNfyD+HjWz8h4dYEfjv4G11mduHAqQMuyZtDgUBrfVJr3Utr3cr0+5Rp+1GtdT+zdIu01pdqrVtorf9jtv1erXV7rfUVWusBZqUDj2N+whWm74PiQsbeNahKJ9GvB35l8JzBXB55OUvvWeqyKF9VlhYvt6SiC9ljjz3G/Pnz2bNnDx07dmTFihVOyVtlXXFtMT8xjW5TVtBs0i90m7Ki0iAy6e0ZNG7Rmp8XLaHpLf/ioddmEBVl20ynFeXX2sUvNNjf4uLxF8PiNJbOLUf/N/NgcWDeu0ycOJHp06fz1lvGzojW3ueY0OBqrYK1lI/z25biExDM6xPHll5flClvJUHqwU4PsuyeZRw7f4yrZ1zN2iNrnZ63i3PiExcpOeEea28ss//7HvtnB9x0dBOD5gyidYPW/Hrvry6ZU99R5kFPYexVYYm1L1jJhfbxtb60fPB9AmuHctNNN/H6669jMBgcypujg4HsKVGkp6fTrXd/Xn/qQXzqRBB931T05f14bv4um0sgFeXX2kVx8oDLrF4Uarry55Yr/rf//ve/DB8+nIkTJ/Ldd9+5JPhURfl8GPLOk7N3FTf2H0rt2rUrLP30bNaT9Q+sp11EOxrWttR3xzEy11AV3HrrrRw4cIA9e/bYtd/B0wfpMrMLIf4hrBu9ziUfqCvY09PDUtoAQz6RW79gza8/c8MNN/DZZ5/RpEmTKuXF0cnrbNnfYDAwY8YMJk6cyNnsHOp1vZO6Vw9B+fpZTF/CUluAtTrqkv3d1d5xscvLy6N3796sX7+epUuXcqZeK494n80/b7V7CYd+/pDNmzfTsaNt84dprR3qVi6TzjmJwWAgIiKCwYMHM2PGDJv3O5Fzgq4zu3Iy9yRrR621aUpaT2LrBcvahbZRvSBGRRxi/PjxKKWYOnUq9913n90ntaMThjWd9IvV51Km3MLq1at54okn2Lx5M9dffz3Jre7EL/zC17U0vbKlfA3tFMPczWnVMsGZKOvr33fy0PBbyTuTyRUPv8fk+/p5zHuel5dHy5Ytadq0KatXr66241oLBFI1ZKd9+/Zx6tQpunbtavM++UX5DPp2EEfOHuGnO36qcUEAKm+0K2GtKiQ9K48HHniA7du307FjR0aNGkXPnj3Zvn17aRpb6u4drVqwVs1lOH2U4cOHc+2113Ls2DG+/vprVqxYQZPmLS2mL18tZq0tYOXezIu2mseTzU9M47XlqYQPnYxPYAg7Zz7NIwlLaWpju5Crffrpp6SlpfHyyy+7NR8lPK+jsYdbs2YNgF2B4LHFj7HmyBrm3DaHbrHdXJU1j1DZKOpmzZqxYsUKEhISeP7554mLi+Phhx/mqsEP8vofxyxOzGepp0hVL6Tl55gpPJVG1ro5ZO/6nRNBgUyePJmnnnqqdDZZWyfLq6gtwJH8iqopCcx+dSOIHPZ/ZHwzkYzvXqThXa+TBlbPreqQk5PDa6+9xnXXXUfPnj2r/fiWSInATmvXriU8PJxLL73UpvQJmxNI2JLApG6TuP2y212cO/ezpWHOx8eHhx9+mH379jFu3Dg++eQTRve9hrRF0yg6+8+YRHt7A9kiJjQYrTV5h7eTOe81js4YS87eNTTqPpRDhw7x0ksvlZlS3NYSiL3dIquTvb2kLgbmgTkgogkRt71E8dkTZMx5nuLccy45t2z18ccfc+zYMV5++WWPmUtM2gjs1LZtW1q2bMnPP/9cadq1R9Zy/RfX06t5LxbeudBla6h6GnsbQJOTk+k4dBzndxm7mIa06kyt9jcS3KwjPj6+Thv+f/jwYV56bwazv/magszD+ATXpfYVvYnsMoQ3R/Rw6O6wOhc7uRjy5WqW2qpyDyVyfO7/ERDZnKjhr+IbGFJtU0uUOH/+PM2bN+fKK6/k119/rdZjgyxM4xQnT55k7969jBgxotK0mdmZ3PbdbcTWi2XWkFleEwTA/qqbVq1accVdkzj8952c3biA7F0ryUlag0+tUGq16kzk3tU0bX81zw652q7XzcvLY/369fzxxx8sWrSI9evXG493eQf0dbdTENuZxhGhTulBUh3TbFdFdS7C4kksVuk1iyNi0DNkznuN43NfpsMDU6o9X++99x6ZmZke0zZQQkoEdli4cCH9+/fn999/57rrrrOazqAN9J/dn+UHl7P+gfVc2fDKasxlzWR+56qLC8k9uJnsnSvITdmKLsgBFP7hjejQ/jJ6delI48aNqVu3LnXr1gXg3LlznDt3jvT0dPbt28e+ffvYvXs3+fn5KKXo2LEjw4YNY9iwYTRv3rzizFxEqmuJUE9UUjJNO5NbZvrp7D2rOPHzm7S5shN//f4r9erZPqDTke6+O3fupFOnTvTv358ffvjB/n/ICaRE4ARr167Fz8+Pq666qsJ0769/n0XJi/ig7wcSBGxU9o4a6lzahZBWndGGYgrS95GbspXC44fYuSeJxDUrKCoqsvg6Pj4+NGvWjEsvvZRevXrRo0cPunfvTliY5w3cqw7VsUSopzIvmZpfwC/t0ptR1zbn3WcfoVevXixdupT69Suf4qWilQYrCwYFBQWMGDGCevXqMX36dAf/M+eTEoEdrr/+enJyctiwYYPVNFvSt9B5Rmf6terHvOHzPKYxqKap6E523yu9mbVqD+8v3k565kki6gTy0I2XMfjqltSvX7/GrgzmCt7aRmCLRYsWMWTIEFq1asWSJUuIian4/XBkMONLL73Eyy+/zLx58xg0aJAj2XaIjCNwUGFhIRs2bKiw22hOYQ53zr2TyFqRzBwwU4KABbb2YKmoF84vO48zZeVRTvqGEdCwJVm1LuGDTdmsP2aQIFBOdUzpUFP169ePX375hZSUFK666ioqu7ms6vQmGzdu5D//+Q8jRoxwaxCoiFQN2Wjbtm3k5uZWGAieW/4c+07uY8WIFR41m6insKdoXVH//ZraAOqu6SRkHIN1vXr1Yu3atfTv358ePXrw1Vdfcdttltcgr0o12/79+xk0aBDR0dFMnTrVafl2NikR2GjLli0AxMdfUKoCYNXhVUxdP5VxV42jZzPPGCTiaeyZObSiO1lHJ55zB3dNn+0uNWnsQvv27dmwYQMdOnRg2LBhjB8/ntzcC88leyevO3jwID179qSgoIDFixcTGhrqiuw7hZQIbJSYmEi9evVo1qwZUPbuLqqe4m//cTQNbcqUG6u/S1pNYc8FvKK755rYAFpTSzFV4UijqrtERkayYsUKJkyYwHvvvcfSpUv5+uuv6dSpU2kae7oIHz58mJ49e5KTk8OKFSvYXxjGQ1NWeFTXYnNSIrDRli1biIuLQyl1wd3d7pwE0rNTGNXudWoH1HZ3Vj2WraNvK7t79pRphe1RE0sxVeWMNSPcISgoiA8++IClS5dy9uxZOnfuzCOPPEJa2j+lmcrm3NJa8/nnn9OxY0fOnj3Lr7/+yiFDA48vDUogsEFRURHbt28nLi4OKHui56skzvn+RJ2iW1i8WdoFKmLrBbyyC0lNbAD15CkonK2mB73evXuzY8cORo0axSeffEKLFi14/PHH2bFjB1pri9VeWuvSGWtHjRpF27ZtWbt2LR07drR6Pk/+aZeVHFQ/qRqyQVJSEnl5eaWBoOSE1hRzKuAjfAkjtHBkjTnR3cXWorUtF5Ka1gBq6+R1F4OaWHVXXlhYGJ988gmTJk3i1VdfZdq0abz//vvUj4qmKPpKVN1I8PEjy9eXkbMP4Xt0B6dPZBAWFsann37KqFGj8PEx3mdbO5/P5BYyPzHNI85jCQQ2SExMBChdPKLkRD/nu4gCnwM0yJ+EDyE16kSvDtbq+Ss78S+GC0l5njoFhStcTEGvWbNmzJw5k1deeYXFixcz8b0vObv7T9NodyOfoNqEtYpn5uuvMWDAABo0aFDmNaydz4DHtBE5FAiUUuHAHKApkALcrrU+bSHdZ8CtwHGt9eX27u9uW7ZsISgoiNatjSfyhD6tmfDjH5zx/Zqg4jhCDN1q7InuKo40GF5MFxJzNa0UU1XuDnqu6KbbqFEjRo8ezavJDandT0NxEbq4EF1ciE9QbXx8fBk1yvKUHRP6tOaJOVstPucptQiOthFMApZrrVsBy02PLfkCuNmB/d0qMTGRK664Aj8/Y9wcFBdDdJPvQBVSv3AsjUNDPL6Ouro50mBYE9sARFm2LmTkbK7uptsoNBilFMrPH5/AEHxD6qF8fCssrQ6KiyEsxN/q63kCR6uGBgLXm/7+EvgdeLp8Iq31n0qpplXd35201iQmJnLnnXcCxhPt+cXfsatwAY197+WD2z1n+TtP4miDobfcPQvncnU33aqWVm+5Ipr//fX3Bdt7tolwOE/O4GiJIEprnQ5g+h3pqv2VUmOUUpuUUpsyMzOrnGF7HTp0iKysLOLi4pifmMakH7eRnD8NX0ME6vwgj+sG5im8qZeM8Byu7rFU1dLqyr2Wr1nWtle3SksESqnfgIYWnnrO+dmxTmudACSAcdK56jpuSUNxXFwcTyxN4oThNwr8DlC/4El8CLxoBwU56mKt5xeerTo6GlSltOrpXWorLRForW/UWl9u4WcBkKGUigYw/T5e8atdwNH9XS4xMRFfX1/at29P6pnTnPH/igBDK2oV/7Megad8mJ5E6vmFO3jqYENPLyE72kbwEzASmGL6vaCa93e5LVu20K5dO4KCgtC1f6a4+CQNCiaizGKop3yYnkbq+UV1c3ePJWs8vYTsaCCYAnynlBoN/A0MA1BKNQJmaK37mR7Pxtgo3EAplQq8pLWeaW1/T5KYmEjv3r05eu4ox/mOOoZrCTJcVvq8J32YQgjPvAHx1ABVQhamqcCxY8eIjo7m3XffJblVMglbEni/5+/8b3W+R36Y3sxdUzwLUZPIUpVVsHXrVgAatmnIxI0TGR03mrHduzG2u3vzJcqqibNdCuFJZNK5CuzaZZwU6qesn/BRPjzf43k350hYUlNnuxTCU0ggqMDu3bup37o+c5Lm8K+r/kXjuo3dnSVhgad3zRPC00kgqMDu3bvx7eVLsF8wk7p75OwXAs/vmieEp5M2Aiu01uw4voPsyGye6/wckbXsHTQtHGVrA3BVu+ZJA7MQRhIIrEhLSyO7UzZBKognuzzp7ux4HXsagKvSNU8amIX4hwQCK5ZsXgLtYMglQwgLDnN3dryOvZOH2dt33JvWEBaiMtJGYEXCrgQoguduqNYplYSJqxuApYFZiH9IicCClDMpbCrYRNCuINo1aefu7HglRyYPs6Xu/2JcBU2IqpISgQVvrHkDNFyZfaW7s+K1qjp5mK0Lk3jq5GRCuIMEgnLSz6XzWeJn+O/yp2PLju7Ojteq6uyltg4uk9lRhfiHVA2V8/769yk0FGJYYaDdy1It5E6unvfdEycnE8IdvD4QmNcnR9WDnXo63cK7ser0Ktq1k0BQ00jdvxD28+qqofL1ycnnF5JdmEW9VGM9sQSCmkfq/oWwn1eXCMzrkzXFnPVbQIChNRtXHiMsLIyoqCg351DYy9PnfRfCE3l1IDCvN8712UiRTzoN8kdy5ujPXHXZZSil3Jg7UVVS9y+Efby6asi83vis33x8DZEEF3em+OTfUi0khPAaXh0ISuqT81Uy+b47qVs0gMCCHIpyz0kgEEJ4Da+uGiqpPhiz8B1UcTCtag/g1ia5vIg0FAvhLWQWWgdLBEqpcKXUr0qpZNNvi7OzKaU+U0odV0rtLLd9slIqTSm11fTTz5H8VEX31oGcVX8y9qr7Wf9MfxoUnwSgTZs21Z0VIUQ1s3Uk+sXO0aqhScByrXUrYLnpsSVfADdbee5drXUH088iB/Njt88TPye/OJ+xV40FIDk5meDgYGJivOuOQAhvJMucGjkaCAYCX5r+/hIYZCmR1vpP4JSDx3I6gzYwfdN0ejTpweWRlwOwf/9+WrRogY+PVzefCOEVZBZaI0evdlFa63QA0++qLOP1iFJqu6n6yOrE/0qpMUqpTUqpTZmZmVXNbxlL9i/h0JlDjLtqXOm25ORkWrVq5ZTXF0J4Nlnm1KjSQKCU+k0ptdPCz0AnHH860ALoAKQDb1tLqLVO0FrHa63jIyIinHBo+GjjRzSs3ZBBbQYBUFxczMGDB2nZsqVTXl8I4dlkJLpRpb2GtNY3WntOKZWhlIrWWqcrpaKB4/YcXGudYfZanwIL7dnfEYdOH2JR8iJe6PECAb4BzE9M45Vv/6CgoIAf9xfTNTHN63oOCOFtZCS6kaPdR38CRgJTTL8X2LNzSRAxPRwM7KwovTMlbE7AR/nwYKcHS3sOnDp8CIDzgQ1k/VohvISMRHe8jWAKcJNSKhm4yfQYpVQjpVRpDyCl1GxgHdBaKZWqlBpteuoNpdQOpdR2oCcw3sH82KTIUMSX276kX6t+NK7buLTnQNHpowD4hTXyyp4DQgjv5FCJQGt9EuhlYftRoJ/Z4zut7H+vI8evqsXJi0k/n87oOGM8KukhUHj6KMovEN864WW2CyHExcwr+0jOTJxJVK0o+rUyxqqSHgJFp4/iF9oQpXzKbBdCiIuZ1wWCY+ePsXDfQkZeORJ/X3/gn54DRafT8QtvBHhnzwEhhHfyurmGvtr2FcW6mFFxo0q3DYqLobi4mGH/PUZwi6uI8dKeA0II7+RVgUBrzczEmXSP7U7rBmXv9uMjNLq4kLceuJkHH7zBTTkUQojq51VVQ2uOrGHfyX2ljcTmkpOTAWQwmRDC63hVIJiZOJM6AXUY1m7YBc/t378fQKaXEEJ4Ha+qGnq156sMazeMWgG1LnguOTmZoKAgGjVq5IacCSGE+3hVIIipG0NMXcsNwPv376dly5Yy66gQwuvIVc8kOTlZ2geEEF5JAgHGWUcPHDgg7QNCCK8kgQBIS0ujoKBAAoEQwitJIEC6jgohvJsEAv7pOiqBQAjhjSQQAIcOHSIgIEAWrBdCeCUJBEBKSgqxsbHSdVQI4ZXkyocxEDRt2tTd2RBCCLeQQIAEAiGEd/P6QJCbm0tGRoYEAiGE1/L6QPD3338DSCAQQngthwKBUipcKfWrUirZ9DvMQppLlFIrlVJ7lFK7lFKP27O/q6WkpADQpEmT6j60EEJ4BEdLBJOA5VrrVsBy0+PyioAntdZtgc7AOKVUOzv2d6mSQCAlAiGEt3I0EAwEvjT9/SUwqHwCrXW61nqL6e9zwB4gxtb9XS0lJQV/f3+io6Or+9BCCOERHA0EUVrrdDBe8IHIihIrpZoCccB6e/dXSo1RSm1SSm3KzMx0MNv/KBlD4Ovr67TXFEKImqTS9QiUUr8BDS089Zw9B1JK1QbmAk9orc/asy+A1joBSACIj4/X9u5vjXQdFUJ4u0oDgdb6RmvPKaUylFLRWut0pVQ0cNxKOn+MQeAbrfWPZk/ZtL8rpaSkcMstt1T3YYUQwmM4WjX0EzDS9PdIYEH5BEopBcwE9mit37F3f1fKy8vj2LFj0mNICOHVHA0EU4CblFLJwE2mxyilGimlFpnSdAPuBW5QSm01/fSraP/qImMIhBDCwTWLtdYngV4Wth8F+pn+Xg0oe/avLtJ1VAghvHxksQQCIYSQQICfnx+NGjVyd1aEEMJtvD4QyBgCIYS38/pAID2GhBDezusDgbQPCCG8ndcGgvz8fNLT0yUQCCG8ntcGAhlDIIQQRl4bCKTrqBBCGHl9IJDGYiGEt/PaQHD48GF8fX2JiYmpPLEQQlzEvDYQpKam0qhRI/z8HJplQwghajyvDgSNGzd2dzaEEMLtJBAIIYSX88pAoLWWQCCEECZeGQiysrLIzs6WQCCEEHhpIEhNTQWQQCCEEEggcHNOhBDC/SQQCCGEl3MoECilwpVSvyqlkk2/wyykuUQptVIptUcptUsp9bjZc5OVUmkW1jJ2qdTUVJRSREdHV8fhhBDCozlaIpgELNdatwKWmx6XVwQ8qbVuC3QGximl2pk9/67WuoPpZ5GF/Z0uNTWVhg0b4u/vXx2HE0IIj+ZoIBgIfGn6+0tgUPkEWut0rfUW09/ngD2AW+d1kK6jQgjxD0cDQZTWOh2MF3wgsqLESqmmQByw3mzzI0qp7UqpzyxVLbmCBAIhhPhHpYFAKfWbUmqnhZ+B9hxIKVUbmAs8obU+a9o8HWgBdADSgbcr2H+MUmqTUmpTZmamPYe+gAQCIYT4R6Uzrmmtb7T2nFIqQykVrbVOV0pFA8etpPPHGAS+0Vr/aPbaGWZpPgUWVpCPBCABID4+XleWb2vOnTtHVlaWBAIhhDBxtGroJ2Ck6e+RwILyCZRSCpgJ7NFav1PuOfNuO4OBnQ7mp1JpaWmAdB0VQogSjgaCKcBNSqlk4CbTY5RSjZRSJT2AugH3AjdY6Cb6hlJqh1JqO9ATGO9gfiolYwiEEKIshybj11qfBHpZ2H4U6Gf6ezWgrOx/ryPHrwoJBEIIUZbXjSwuCQSNGjVyc06EEMIzeGUgiIiIICgoyN1ZEUIIj+CVgUCqhYQQ4h8SCIQQwstJIBBCCC/nVYEgNzeXkydPSiAQQggzXhUIZDCZEEJcyKsCgYwhEEKIC3lVIJi/ejsAI77dT7cpK5ifmObmHAkhhPt5TSCYn5jGrBVbAfCpXZ+0M7k88+MOCQZCCK/nNYHgzaVJ5GUdxyeoNj4BxsFkuYXFvLk0yc05E0II93JorqGa5OiZXGq1v4nAS9pfsF0IIbyZ1wSCRqHBpNGSwIYtL9guhBDezGuqhib0aU2wv2+ZbcH+vkzo09pNORJCCM/gNSWCQXExgLGt4OiZXBqFBjOhT+vS7UII4a28JhCAMRjIhV8IIcrymqohIYQQlkkgEEIIL+c1VUPzE9OkfUAIISxwqESglApXSv2qlEo2/Q6zkCZIKbVBKbVNKbVLKfV/9uzvDPMT03jmxx2knclFg4wqFkIIM45WDU0ClmutWwHLTY/Lywdu0FpfCXQAblZKdbZjf4e9uTSJ3MLiMttkVLEQQhg5GggGAl+a/v4SGFQ+gTY6b3rob/rRtu7vDNZGD8uoYiGEcDwQRGmt0wFMvyMtJVJK+SqltgLHgV+11uvt2d9R1kYPy6hiIYSwIRAopX5TSu208DPQ1oNorYu11h2AxsDVSqnL7c2oUmqMUmqTUmpTZmamXfvKqGIhhLCu0l5DWusbrT2nlMpQSkVrrdOVUtEY7/greq0zSqnfgZuBnYDN+2utE4AEgPj4eG0tnSUyqlgIIaxztPvoT8BIYIrp94LyCZRSEUChKQgEAzcCr9u6v7PIqGIhhLDM0TaCKcBNSqlk4CbTY5RSjZRSi0xpooGVSqntwEaMbQQLK9pfCCFE9XGoRKC1Pgn0srD9KNDP9Pd2IM6e/YUQQlQfmWJCCCG8nAQCIYTwchIIhBDCyymt7eqJ6RGUUpnA4Sru3gA44cTsOIvkyz6SL/tIvuzjqfkCx/LWRGsdUX5jjQwEjlBKbdJax7s7H+VJvuwj+bKP5Ms+npovcE3epGpICCG8nAQCIYTwct4YCBLcnQErJF/2kXzZR/JlH0/NF7ggb17XRiCEEKIsbywRCCGEMCOBQAghvNxFGQiUUsNM6yMblFJWu1kppW5WSiUppfYrpSaZbXfJWso2rvHcWim11eznrFLqCdNzk5VSaWbP9auufJnSpSildpiOvcne/V2RL6XUJUqplUqpPabP/HGz55z6flk7X8yeV0qp903Pb1dKdbR1Xxfn625TfrYrpdYqpa40e87iZ1pN+bpeKZVl9vm8aOu+Ls7XBLM87VRKFSulwk3PueT9Ukp9ppQ6rpTaaeV5155bWuuL7gdoC7QGfgfiraTxBQ4AzYEAYBvQzvTcG8Ak09+TgNedlC+7XteUx2MYB4EATAaecsH7ZVO+gBSggaP/lzPzhXF2246mv+sA+8w+R6e9XxWdL2Zp+gGLAQV0Btbbuq+L89UVCDP93bckXxV9ptWUr+uBhVXZ15X5Kpe+P7CiGt6vHkBHYKeV5116bl2UJQKt9R6tdWUr018N7NdaH9RaFwDfYlxDGVy3lrK9r9sLOKC1ruooals5+v+67f3SWqdrrbeY/j4H7AFcsfBEReeLeX6/0kZ/AaHKuOCSLfu6LF9a67Va69Omh39hXCnQ1Rz5n936fpVzJzDbSce2Smv9J3CqgiQuPbcuykBgoxjgiNnjVP65gLhqLWV7X/cOLjwJHzEVDT9zVhWMHfnSwDKl1Gal1Jgq7O+qfAGglGqKccrz9WabnfV+VXS+VJbGln1dmS9zozHeWZaw9plWV766KKW2KaUWK6Uus3NfV+YLpVQIxtUU55ptdtX7VRmXnluOrlDmNkqp34CGFp56Tmtty0pnysI2h/vSVpQvO18nABgAPGO2eTrwCsZ8vgK8DYyqxnx101ofVUpFAr8qpfaa7mSqzInvV22MX9gntNZnTZur/H5ZOoSFbeXPF2tpXHKuVXLMCxMq1RNjIOhuttnpn6kd+dqCsdrzvKn9Zj7QysZ9XZmvEv2BNVpr8zt1V71flXHpuVVjA4GuYC1lG6UCl5g9bgwcNf1t11rMtuZL2bfGc19gi9Y6w+y1S/9WSn0KLLS0o6vypY0LDqG1Pq6UmoexWPonbn6/lFL+GIPAN1rrH81eu8rvlwUVnS+VpQmwYV9X5gul1BXADKCvNi4IBVT4mbo8X2YBG631IqXUR0qpBrbs68p8mbmgRO7C96syLj23vLlqaCPQSinVzHT3fQfGNZThn7WUwblrKdvzuhfUTZouhiUGAxZ7GLgiX0qpWkqpOiV/A73Nju+290sppYCZwB6t9TvlnnPm+1XR+WKe3xGmHh6dgSxTlZYt+7osX0qpWOBH4F6t9T6z7RV9ptWRr4amzw+l1NUYr0cnbdnXlfky5acecB1m55yL36/KuPbccnbrtyf8YPzSpwL5QAaw1LS9EbDILF0/jL1MDmCsUirZXh9YDiSbfoc7KV8WX9dCvkIwfiHqldv/a2AHsN30YUdXV74w9krYZvrZ5SnvF8ZqDm16T7aafvq54v2ydL4ADwMPm/5WwDTT8zsw67Fm7Vxz0vtUWb5mAKfN3p9NlX2m1ZSvR0zH3YaxEburJ7xfpsf3Ad+W289l7xfGm750oBDjtWt0dZ5bMsWEEEJ4OW+uGhJCCIEEAiGE8HoSCIQQwstJIBBCCC8ngUAIIbycBAIhhPByEgiEEMLL/T/UHIhthjNEjwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a data matrix X\n", "p=4\n", "X = np.vstack([np.ones(len(x)),x,x**2,x**3,x**4]).T\n", "\n", "# degree-p polynomial linear regression\n", "w4 = np.array(p+1)\n", "w4 = np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),y)\n", "yh4= np.matmul(X,w4)\n", "\n", "plt.plot(x,y,'o')\n", "plt.plot(t,y0,'k-')\n", "plt.plot(t, np.matmul(np.vstack([np.ones(len(t)),t,t**2,t**3,t**4]).T,w4), 'g')\n", "plt.show()\n", "\n", "MSE_train = (1/float(n))*np.sum((y - yh4)**2)\n", "\n", "# MSE on fresh data not used in training\n", "X_ = np.vstack([np.ones(len(x_)),x_,x_**2,x_**3,x_**4]).T\n", "yh_= np.matmul(X_,w4)\n", "MSE_test = (1/float(n_))*np.sum((y_ - yh_)**2) \n", "MSE = np.append(MSE,[[p,MSE_train,MSE_test]],axis=0) " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABGVUlEQVR4nO3dd3hTZfvA8e/TXWYZpbQFyhTZqzJE2XsIoixliYr6AuJ4QcSfiBPcoqLCqwgiCiICyqosBSl7L4EqIG0ZZZXR3Ty/P5JiKUmbNEmTNvfnunq1OTkn5+7Jyblznqm01gghhPBcXq4OQAghhGtJIhBCCA8niUAIITycJAIhhPBwkgiEEMLD+bg6gPwoX768rlq1qqvDEEKIQmXXrl0XtNbBOZcXykRQtWpVdu7c6eowhBCiUFFKnTK3XIqGhBDCw0kiEEIIDyeJQAghPJwkAiGE8HCSCIQQwsMVylZDQgj7LN0Tx7tRR4m/kkxYUCDju9amb5NwV4clXEQSgRAeZumeOF786QDJ6ZkAxF1J5sWfDgBIMvBQUjQkhId5N+rozSSQJTk9k3ejjrooIuFqkgiE8DDxV5JtWi6KPockAqVUN6XUUaVUjFJqopnnlVLqY9Pz+5VSTbM9d1IpdUAptVcpJd2FhXCysKBAm5aLos/uRKCU8gZmAN2BusBgpVTdHKt1B2qZfkYBn+d4vr3WurHWOtLeeITwVEv3xNF62nqqTVxB62nrWbonzux647vWJtDX+5Zlgb7ejO9auyDCFG7IEZXFzYEYrfXfAEqpBUAf4HC2dfoA32jjvJhblVJBSqlQrfUZB+xfCI9nSwVw1mNpNSSyOCIRhAOnsz2OBVpYsU44cAbQwK9KKQ3M1FrPMrcTpdQojHcTVKlSxQFhC1F05FYBbO4C37dJuFz4xU2OqCNQZpZpG9ZprbVuirH4aLRSqo25nWitZ2mtI7XWkcHBt42iKoRHkwpgYQ9HJIJYoHK2x5WAeGvX0Vpn/T4PLMFY1CSEsIFUAAt7OCIR7ABqKaWqKaX8gEHAzznW+RkYZmo91BJI1FqfUUoVV0qVBFBKFQe6AAcdEJMQHkUqgIU97K4j0FpnKKXGAFGANzBba31IKfWk6fkvgJVADyAGSAIeMW0eAixRSmXF8p3WerW9MQnhaaQCWNhDGRvyFC6RkZFaZigTQgjbKKV2mWumL2MNCVFEycBywlqSCIQogmRgOWELSQRCFEG29ivID7njKDokEbgJ+VAJR3J2vwK54yhaZPRRN5D1oYq7kozm3w+VpbFihMiLs/sVyFDWBS8lI4Xo09Ekpzu+k6AkAjcgHyrhaM7uVyA9mQve7jO7aT27NWv+XuPw15aiISeytrjH0ocn7koyraetl2IiYTNn9ysICwokzsx5Kz2ZHcPcteN02i4AmoU2c/j+JBE4iS1lqJY+VHltJ0RunDmw3PiutW85v0F6MjuKpWtHaLVNVCxRkbCSYQ7fpxQNOYktxT3mbuOt2S4/rB2zXojc9G0SztR+DQgPCkQB4UGBTO3XQL6sOICla8cfp7aRmhTBsr05h3Kzn9wROIktZajZb+Mt3Rk4ouxVWnoIR5KhrJ3D3GfdQArpKhZDamunfGYlETiJrWWoWR+q1tPWO63sNa+7FGm+6ljSJFjkh7lrR5rXCVAG/Aw1STY4tj8ISNGQ0+Sn1YbWmodq+5B6eD0Xoz7l/KIpXPjlPa6un0XNs+s5cuSIXTHlViktzVcdS5oEi/wyd+1IU8cB8DPUBBzfOksSgZPYWoa6YcMGIiMjGdOvLWd/+YDkPzeReeMyGWePkvbn73wz/U3q1q1L3bp1mTJlChcvXrQ5Jkt3Fd5KSfNVB5MmwSK/sl87sqR5xeCty+BDOcDxrbMkEThR3ybhbJ7YgRPTerJ5YgezSSAmJobevXvToUMHLly4wIwZMzh06BBpN66SejaGlIvxXL96hdjYWD799FNCQ0N57bXXqF69Om+99RY3btywOh5LdymZFkaglTbh+VfY2tlLIwL3knXt+GhgYwJ9vUnzisHXUBOdke6U1lmSCFxo+/bttGjRgo0bNzJt2jSOHj3Kf/7zH+rWrYuX161vTXh4OKNHj2bdunUcOHCAdu3a8dJLL1GrVi2WL1+e636yPuTPLtyLv48XZYr53nKXEi6zWzlcYZoxTIqxXM9SIu7bJJxX7qtBulcsPtfLc/qjATxY4bzD65okEbjIhg0b6NixI0FBQezZs4cXXniBgIAAq7atV68ey5YtY/PmzQQHB9O7d29Gjx5NUlLSbevm/JBfSU4nJd3AhwMb37xLkdmtHK8wHVMpxnKtvBJx5ZDzgIHh1aqjM9MZ3v1uh8cgicAFVqxYQffu3YmIiGDTpk1Ur149X69z9913s337dp5//nk+++wzIiMj+fPPP29Zx5oPubQJd7zCdEwLWzFWUZPXZ3RnvHESrosHLlKuXDlq1Kjh8Bik+WgBO378OAMHDqR+/fpERUVRrly5W56/nHyZzac3s/HURv66/Bf+3v4E+ARQvlh52ka0pW3VtpTwK3FzfX9/f9577z26devGww8/TKtWrVi8eDEdOnQAcm8plJ20CXe8wnJMZbgI18orEe86s4vQEqH8sXYXhvI1qf7iSoc3R5ZEUIBSU1MZNGgQ/v7+LF269GYSWLonjldXRXE05QuSvXcCGj9vP2qUqUG6IZ2UjBTO3zjPu9Hv4uPlw71V7mVM8zH0vbMvXsp4U9epUye2bdtGr1696Nq1KzNnzmTkyJEWP+TKtF+Q/gOeToaLcK28EvGuM7uo6H8He078Tul7h9xSfASO6VjmkESglOoGTMc4ef2XWutpOZ5Xpud7YJy8foTWerc12xYlkyZNYvfu3SxdupRKlSoBMGfLXp5dPYkrKgrlFUjp9AGUVk15p2c/BkbWvLltcnoy0aejWfP3Gn449AMP/PAAd5S7gwl3T2BE4xF4e3lTtWpVNm/ezIABA3j00UeJj49nfM9HeHbhXnK2C9LAlJ8PkZphkJ7G+VDYO4tlZGRw4MABtm/fztGjRymz/yixR/8i5cY1vJWmlJ8XExYW470KFQgJCaFKlSo0bdqUpk2bUrt2bXx85Duko+SWiK+nXedIwhHKXzGOL+QfdufNdRw50ZDdk9crpbyBY0BnIBbYAQzWWh/Otk4PYCzGRNACmK61bmHNtuYUxsnrV61aRY8ePRg9ejSffvopAIcTDtPks3ak6UuUzOxJ6fRBeFMKMJYpb57YwexrZRgyWHx4MW9vfps9Z/fQLLQZM3vNpFmYcVTCjIwMHn30Ub755hsmTZrEtxmtMOZi6+S2b3H7UB1g/ODaUgfgikRy4sQJli1bxi+//MKWLVtITjZ+Cy1WrBhVqlShSpUqlClTBl9fX3x8fEhJSeHcuXOcP3+eEydO3GyMULJkSbp168Z9991Hjx49KFu2rFPj9gSWzoc//vmDe7++l+J723Jj6UYqP7MQL/9iN7dTwIlpPa3ejzMnr28OxGit/zbtaAHQB8h+Me8DfKONWWerUipIKRUKVLVi20IvKSmJxx57jAYNGvDuu+8CsOX0Fnp934tMrQlN/RA/fWuFcW4VdT5ePgysP5AB9Qbww6EfeCbqGZp/2Zynmz/Nmx3fpJhvMb7++msCAwN56623CG39AL6tR1idDKSSMHf2TgNZkGM+Xb58mW+//ZbZs2ezd+9eAOrXr8+oUaNo2bIlLVq0oGrVqnmeG5mZmRw9epTdu3fz22+/sXz5chYtWoSvry8PPvggTz31FPfcc49NXzjEvyzVJ23+ZzMA3n9dxbd8lVuSADiuHscRrYbCgdPZHseallmzjjXbAqCUGqWU2qmU2pmQkGB30AVp+vTpxMfH89lnnxEYGEhUTBSd5nWiTEAZGvl/fFsSAOveYKUUA+sP5MjoIzzR7Ak+2vYRLb9sybGLx/Dy8uLzzz9n3LhxnNm8mGsbviT73V+grzdlivmafV2pJMydva1sCqK55sGDBxk+fDhhYWE8/fTT+Pj48MEHHxATE8OBAwf46KOPGDRoENWqVbPq4u3t7U3dunUZMmQIX375JfHx8WzdupWnnnqKlStX0qZNGxo1asSiRYswGAwO+z883aZ/NnFnuTsxnPqbYpXq3PKcI+txHJEIzJ1FOcubLK1jzbbGhVrP0lpHaq0jg4ODbQzRdS5evMi0adPo3bs399xzD0cvHOXBRQ9Sq2wtNo/czMvd2tvd3jwoIIjPen7GqodXEX8tnmazmrHw4EKUUnz44Yc8++yzXN6xjMzt393SlPGV3vUKTVt3d2JvZzFnNtfcvn07ffv2pUGDBixevJhHHnmE3bt3s2PHDp599lm7mx5mdXyqMWkVz224QfsRE4iLi+PLL78kIyODAQMG0KxZM5YvX469xc6ezqANbD69mQalG3D9aiJD7uvotObIjigaigUqZ3tcCcg5YLaldfys2LZQe+utt7h+/TpvvfUWSelJPLjoQQJ8Alj+0HJCSoTQt4lxPUeUF3er2Y09T+xh4I8DGbR4EHvO7uGtjm/x/vvvk5SUxMyZM3mzc30mTZx0y3aFudLTFextZWNrc01r6hOOHTvGxIkTWbJkCWXKlGHKlCmMHTv2lvL71IxU9p/bz474HRy7eIyTV05yKvEUV1KukJKRQmpGKr7evpQJKEOZwDKElwynbnBd6gbXpUnFJhz+pziTlhy8vUirXwMeffRRRowYwXfffceUKVPo3bs33bt3Z8aMGVSrVs2q4yJudej8Ia6kXCHoahAATw3oTr169ZyyL0dUFvtgrPDtCMRhrPB9SGt9KNs6PYEx/FtZ/LHWurk125pTWCqLT506xR133MHDDz/M7NmzGblsJHP2zmH1kNV0qdHFaftNz0xn7KqxzNw1kwH1BjCnzxz8vf0ZPnw43377LR9//DFjx4512v49gT2VvbZUNue17qVLl5g8eTIzZ84kICCACRMmULP9AD79I464K0kElTpD/Rp/ceLGJnbG7yQtMw2AEn4liCgdQURQBOUCy3E2MZMDp5O4npaCv18KlcpmkqzPEXMpBoM2FvX4EYxvRiMCDU0JzGyOF8ae8DkbF6Snp/Ppp5/y8ssvYzAYmDx5Ms8//zy+vuaLIoV5n+34jNErR/NQwkMsn7ecy5cv3zb0jK0sVRbbnQhML94D+AhjE9DZWus3lVJPAmitvzA1H/0U6Iax+egjWuudlrbNa3+FJRGMGDGCBQsWcPz4cdZdXMcjyx7h5TYv81r715y+b6017295n/FrxtOqUit+HvwzQX5B9O/fn2XLlvHdd98xaNAgp8chzLM2kVicn6J0AE+ExTJ+/HguXbrEqFGjeOWVV9gSn8HzP0VxUf/Kde8NZHqdB6BmUCP61ulMi0otaB7enMqlKt+sGzCXbADKFPNlUo+a1K58nW2x23hm6TekeO/DoK6hdCDFMltTIrMjAYb6nJzW67YYT58+zbhx41iyZAktW7Zk/vz5+e5F74kGLx7MxlMbCZ4XTIXgCvz66692v6ZTE0FBKwyJIDY2lqpVq/L0008z8fWJ1Py4Js3CmrF26Fq8vSxPS+loiw8vZsiSIVQLqsaaoWso51eOrl27smXLFlasWEHnzp0LLBZhu2oTV9xWaZZ+KY6Lqz8h9fRBWrVqxRdffEG9+vVY+udSRv74Klf1AdBeBBgaUzzzHgIyI4kICrfYJNhSsgFjJZ7G+K0/KS2DS0mppHod4rr3epK8/0CrZIqrO/j6gTfoV6ef2XN74cKFPPHEExgMBj7//HMefvhh+w6KB9BaU/nDyrQMa8mSh5fw0ksv8dpr9n+BtJQIZKwhJ5k1axYGg4GxY8cyecNkkjOS+aLnFwWaBAAeqPsAqx9eTezVWO75+h7ikuJYtmwZderU4f7778fahCrDFLtG9noDrQ1c3bmMM18/TUbCSWbNmsWaDWvYmLKROz69gwcXPUhS5nmC0ocTnjKbkLTXKJHZBR/K5loRndtzWUko7koy11My8PP2JsDQgPLp46iUMo+KmU9Tqlg6A34cQJ0ZdVh8ePFtlcQDBw5k3759NGzYkCFDhvDEE0+QlpZm13Ep6k4lniLuWhzhmeEYDAZatGjh1P1JInCCtLQ0Zs2aRY8ePbhR/Ab/2/0//hP5H2qXd01rnLZV27J++HqupV4zJoO0OFavXk1wcDA9e/bk77//znV7GabYdbJGMc1IPM+57ydxed3/KFa1ITOW/Ep643TumHEHY1eNJaR4CBMiZxKeOovSGf3xofwtr5NbiyZrWzulGzTF/XxutlypHFSGz++fwOnnjrOo/yL8vP14cNGDtJnThh1xO27ZNiIigt9++42JEycya9YsOnbsyLlz52w+Hp5i06lNACQfTcbLy4vWrVs7dX+SCJxgyZIlnDt3jtGjR/PfX/9LKf9STG472aUxRYZFsvGRjSgU7ea244LXBVatWkVSSir1WrSlyrjvLX7Tl2GKXadvk3B6Fj/B2TljSTv3F9Uf+C+jPhjG1D8HM3rlaGqUqcFvw38j+tFo/jhQE2NV260U5NqiydyQ2ZYkJqffNtmSt5c3D9Z9kL1P7mVmr5kcu3iM5l82Z8zKMVxPu35zWx8fH6ZOncr333/Prl27iIyMvNnJTdxq0z+bKO1fmoPrDhIZGUlQUJBT9yeJwAlmzJhB9erVMdQwEPVXFJPbTKZcsXJ5b+hkdYPr8vuI3/H39qf93PasOnuasn3/j5TL5zi/+HVOJ1wx+01fhil2jevXrzNy5Ejef/E/3NW4AT/98R0h3Tfz4e6xlCtWjqghUfw+4nfaVm0LWH4/NLn3WM4aMjsoMO9WPbndPfh4+TCq2SiOjz3O082f5rMdn1H/s/qs+WvNLesNGjSIzZs3o5SiTZs2rFu3Ls/9epo//vmDFmEt2LF9Bx07dnT6/iQRONiBAwfYtGkTTzz5BBPXTaRm2ZqMbj7a1WHdVKtcLX4b8RuBvoFM+P0B0sP8Kd/reVLj/uTi8vdJSku/7Zt+YZptq6g4fPgwzZs3Z86cOTz30nPUnViX+1fez4krJ5h932x2PL6DLjW63NIr2NL7YWkGuuz6Ngln7ytd+Ghg41zXs6avRCn/UkzvPp1Nj2wiwCeALt92YdyqcaRmpN5cp0mTJkRHRxMREUH37t1ZsGBBnq/rKS4kXeDIhSNUTKtIRkaGJILC6LPPPiMgIIBqnapx8PxBXmn7Civ3J7hVRWvNsjX5bfhvaEMA5/z/D986lSjT4VGSjkVzecPs275ZFqbZtoqCZ974mAaNm/HnqXhCxwzky+JzmbtvLv9t9V+OjTnGI00euTn8eHaOeJ/6Ngm3mDiCAn1t6mzYukpr9j65l6ebP83H2z/m7tl3E3Mp5ubzlSpVYtOmTbRq1YrBgwffHIzR0/3xzx8ApBxNwd/fn7vvdvyMZDlJInCgpKQk5s2bx6BBg/jq0FeElgjFP721W1a01ihbg4YB76Pw5Zz/SwTc1YSSzXpzbcdS1KFVt6xbmGbbKszS0tLoPmA4018eh0+1KviNq0J8uQWkpZbn3TareLfLu5T0L2lxe0e9T5YSypT7bO/VGuATwPTu01kycAl/X/6bpjObsuzPZTefDwoKIioqij59+jB27Fjef/99m/dR1ETFRFHctziH1x6mdevWBAY6/85b+hE40I8//kj//v2Z/ctsRu4ayRvt32BldCuzbbTdYajnpXvieP6nVZzyfgGNgZDkN7m27FtuHNvKTz/9RN++fV0anyeJj4+nf//+REdHE9CvKakN/gQyCUofQcnMHlQKKlGg54szhsk+deUU/Rf1Z0f8Dt5o/waT7p10s2grPT2dhx9+mEWLFvHmm28yadKkPF6taNJaU/G9CNKuh3DltZ1U6TKS6dNec9iXLmcOQy1MFi1aRIUKFdiqtxLgE8ATkU/w5cptZtct6IpWyx/s7ry6yof9ac9ysdhk3vl0Id//30sMHjyYDRs20LJlywKN0xNFR0fzwAMPkJiZiN+z1UkpvRv/zPqUSx+Hrw4FCv58ccY0mxFBEfw+4nce++Ux/m/D/3Ew4SCz75tNoG8gvr6+fPfdd/j7+/PSSy+RmZnJyy+/7ND9FwYzNm3kfNJpiscaJ6BJC6lXIJNFSdGQgyQlJbF8+XJ6PNCDefvnMbThUMoXK+8WFa259QPo2yScPZNGsO8/mygZCB8cHMmM+TMIDw+nd+/exMTE5Pn6Iv+++uor2rVrB7Uh4NkAMkrHUiZtFCFpb91MAlB0KuYDfQP59v5vmdpxKgsPLqTTvE5cSr4EGJuXzpkzh2HDhjF58mTee+89F0db8N7fuBAAfTgF5VcMv4o1C6SptiQCB1m5ciVJSUn4tPAhOSOZcS3GAa6taM3qDfzMwr159gOoX6E+a4et5WrqVfov78/Xi78GoFu3bhS2+R8Kg/T0dJ5++mkee+oxKjxagbPtz1K1bFU+ar+aEK/7Udk+mkWtYn7Z3nh++aM55VNfYMvpHTT8rAWnrpwCjPMezJ49m4EDBzJ+/HhmzJjh4mgL1tm0rfgYKpF25BgBEQ1RppEInH1HKInAQRYtWkRwSDCrLq6ic/XO1KtgrFhzVUVr9rsAS3KeXI0rNubXIb9yMfkij258lNmLZhMXF0evXr24ceOGU+N1J84eTuPSpUt069aNT374hLITyxJfMZ4XWr/A1se2MrZN+yJdMZ/9vCxmuIcKqa8Rf+0M9Wc058A5YxGIt7c38+bNo0+fPowZM4avv/7axVEXjKT0JFK9D+KfVIeMxHMERDS6+Zyz7wiljsABsoqFOjzWgeXXljO92/RbnndGeWtezPUGzsncyXVX+F2sfng1Xb7twoRDE/hi3heMHDjy5qilRX0oYWdPI3n48GF639ebUyGn8HnKB/8S/qy5fw0dq//bVtwV54sjWFPBnPO8DDA0oGLq25xnMnd/1YbfRqylWVgzfH19WbhwIffddx+PPfYYZcqUKfKNFzac2IAmHd/TxukosxJBQdwRyh2BA6xatYqkpCQy6mRQyr8UPe+wfjJpZ8nrVjK3k6tV5VasfGgl/yT+wzvn3+HdGe+yatUqHn/88SI/65Qzh9NYuXIlLdq1IK51HJldMul2Rzf2P7X/liRQWFk7HpW589JPVyUk9R3S0wPo8E0Hok9HA+Dv789PP/3EXXfdxaBBg9i4cWNB/CsuszpmNcV8ixERe4mAcuH4latcYHeEkggcYNGiRQSHBhN9JZp+dfoR4BPg6pByvZW05uS6N+JeVjy0ghOXTzBHz2HClAnMnTuXiRMn5jumwjCCqTOG09Ba895779HzyZ6kPpKKoaaBD7t+yM+DfqZ8sfJ5v0AhYG0CtXRe+uqKBKdMJaR4CF3mdeG3k78BULx4cVasWEH16tXp3bt3kR6baFXMKu4Jv4dD27YwduRDnHy7183xnJxNEoGNcl7MFm6JYfny5TQZ0ISrqVd5qP5Drg4RsFxJ/dHAxlafXO2qtuOXwb8QcymGlRVWMvw/w3nnnXd4++23bY6nsIxgaulCpSFfySs1NZURj4xg/NLxqJGK8NBwNo/czDMtn7Fq0vjCwtoEOr5rbbMTlQNUKV2FjY9sJCIogp7f9eT3k78DUK5cOaKioihdujTdu3fn1KlTjgzdLcRciuGvy38Rej2UjIwM+vXrV6D7l0RgA3MXs/Gf/sCNGze4Uf0GIcVDaF+tvavDBBxXSd2xekeWP7Scvy79xc56O7l/yP1MnDiRmTNn2vQ6hWEE06V74riRmmHxeVuT19mzZ7mnyz18k/ENdIZ+dfux98m93BV+l6NCdhvWNpPu2ySch1tWuS0ZZBVVVixRkfXD1hNR2pgMsoZjrly5MqtWrSIlJYXu3btz6dIlu+ItyLtTa/a14tgKAM78cYawsDCaN2/utHjMkcpiG5i7mCXG7IJiPuy8upMnmj2Bj5f7HFJHVTp2qNaB5Q8tp9d3vTC0NNDxekeeeuopSpUqxeDBg616jYIawdRchSWQZyWmpekac8pKXnkd1127dtH9ye5caHsB31K+TO8+nScjnyxSdwHZje9a2+zcyubqod7o24DIiLIW35OQEiGsH76ednPa0eO7HkQNieLuyndTr149li5dSpcuXejbty+//vorAQG2F8M6u0FAfva14NACGgQ3YNPbm3jkkUfsnpvYVu5z1SoEzF20kk/sxqdVRVIzY3mogeViodxaVDijO7+jdajWgZUPr6TXd71IbZdKi+QWDB06FD8/Px544IE8tw8LCjQ/964Dm8WZ+9CNX7QPFKRn6pvLzH0QrWlllSWv5DX/u/mM+GoEGT0yqFKyCksfXkqT0Cb5+ZcKjaxjae15nNeXlIolKt5MBt3nd2dyi4X8tM2P+CvJVH1gApu+f4Nhw4axYMECmy+aud2dOvpzZ82+Tlw+wdbYrQypOIQDyQcKvFgI7CwaUkqVVUqtUUodN/0uY2G9bkqpo0qpGKXUxGzLpyil4pRSe00/PeyJx9lyXrQyrl8iPeEkPg001ctUp3m4+du53MrHC0vZORjrDNYOW8ullEvEdomlUYdGDBo0iCVLluS5bUF0rDP3oUs36JtJIIu5Iilb7kwsJa+MjAz+M+E/DFk9hIw2GfSr3Y+DYw8W+SSQpW+T8NsmrbFHWMkwJjSbT3JqIBN+H8iJxD/RQGqVlgR3fJRFixbx4osvWtzeUpFMQc6vYc2+Fh4y9ia+se0GZcuWpU2bNg6PIy/23hFMBNZpraeZLvATgReyr6CU8gZmAJ2BWGCHUupnrfVh0yofaq0LRV/ynLe/KSf3QjFIDTrD4PovWrztz6t8vKC+nThCy0ot2TB8A13mdSG2cyx1VV0GDBjAjz/+SJ8+fSxuZ+s3xvyw5YOcc11Ldyw5WUpeFy9epNOTndhbbS8+1X34pPsnPHHXE0W2KKggLN0Tx/urLhKc8Trn/Cdy3v9lQlKn4avDCGzWl5DrCbzzzjtc9SnL/pJ33VYcaK5IZuepS3gpRaaZZtDO6LRlzZ3wgoMLaBnekg0fbaBPnz4u6atjb0FUH2Cu6e+5QF8z6zQHYrTWf2ut04AFpu0KJX+ffw+ZIXYfAQ1LoDHQ986+FrfJ7VtBYZz9q3HFxmx8ZCMBvgGcaHeCWl1q8eCDD7Jw4cJct3P0N8acbPkg51w3t+kasy7llirct+3cRo0na7C3/l7CS4ezb/Q+nmxedOsDCkrWFyhfHUaF1DfQZHDO7//I4AJKKQLaPEqzezrwxdRJxOzadMsd9au/HDL7BWv+1n/MJgFnddrK6074SMIR9p3bR1Pfply5coVthpouaV5tbyII0VqfATD9rmBmnXDgdLbHsaZlWcYopfYrpWZbKloCUEqNUkrtVErtdMXYN1lFOFeS0wFj2/CrMbspGRlEheIVaBra1OK2ubWocIdB6czJq6XDneXvJHpkNBFBEcS0jKFG3xoMHjyYL7/80kURm//Q+XopfL1vvSCb+9Bnb2UF4G26iIcHBfLhwMactJC83vjiDVp91YrE+on0q9yP4xOOUze4rt3/S2Hoc5Ff1v5v2b8M+ekqVEh9DYO6xnn/l8kkkfCyJfDp9By+wVVJ+Plt0s7/DRgv+JeT0s2+prnukN5KOa3TVl6t974/+D1eyos9S07i5V+MG8F1XVJEnOd8BEqptUBFM0+9BMzVWgdlW/ey1vqWi7lSqj/QVWv9mOnxUKC51nqsUioEuIDx/XkdCNVaj8wraFfMR9B62vpbbvHSzp/gzJyxeL0UwJBmA5jbd67Fbc21SAn09WZqvwYAFp9zVdFQbvHmjOly8mX6LOjDpn82UeufWhyffZz333+f5557rqDDBvLfashWN27coPOLndlSagu++PLVfV8xtPlQh8XrbueEo9hybuX8zAGkeO3nnN8rBFCN2T1/ZtLiGNKvXeDsN88DUHHY+/iUtK2TngJOTCuY0QCyv9+hpQM46fs4tcpUZtOTWyjeoAvlujx1y/qOnrck3/MRaK075fKi55RSoVrrM0qpUOC8mdVigcrZHlcC4k2vfS7ba/0PWJ5XPK6Ss6gm+cQeCAeDTwo9auZex21N+bg7tRqyVKfx/A/7eHbh3ltiLBNYhl+H/spjPz/GfOZT5ZkqPP/C88TGxvLuu+/i7W2+uMVZLLVGceTxXLdjHX2+6sON0BtUN1Tn92d/p1JQJZtfx1LTwgBfr0JVb2QLW1rsmGuSGmBoSDX1EqfU6/zv8FNULD2BM5SnQv9XODv/BRIWv07IQ9MoW7oUqRkGq1qCFdTdd873+8TVg5wNOEH1i/XRGemUbNz1tm0KqojY3srin4HhwDTT72Vm1tkB1FJKVQPigEHAQwBZScS03v3AQTvjcZqclT4pJ/fg1agUBq7TpUaXPLfPrbmcuw0yZunkyypbzdkEM8AngHn3z6NO+Tr834b/o+LEinw4/UNOnDjB/PnzKVasmEPjc1VzW4PBwGMfP8bX576G8jCm+himD5ludv5ga+K1dFG0dPFy53oja9lSJ2b5C1RP5u2rzrClw2hR0Z+ApDFQoTrB973A+cWvcWn5u3w4/we8fXx4N+poro0ACnKI75zv9w2fdaB92PXdXkpUuhO/CtVv26agkpS9dQTTgM5KqeMYWwVNA1BKhSmlVgJorTOAMUAUcAT4QWt9yLT9O0qpA0qp/UB74Fk743Ga7OXPhvRUUk4fRN3hRZ2ykZQJtFi1UShZc/LlbIKplOKlNi/xY/8fuRZ4jRL/LcHS/Utp164dsbGxDovNVc1td8XsIvS/oXyd+DVBaUFED43mk6GfWJUELMVr64Xd1fVGjmBrnZilBgZDGw3lo64fse3saipX/5aw0gEUqxFJ9T5Pc+P4dtZ9/TZ9GoexeWIHi0NaAAVa3Jb9/TaQxHXvtQRca0DKP6cZ9shIl81bAnYmAq31Ra11R611LdPvS6bl8VrrHtnWW6m1vkNrXUNr/Wa25UO11g201g211vdluztwO9krfdLPHIPAdDJLX2FI40LbAMqi3FrQZGfuQvZA3QfY8fgOqpSvghqm2Be0jybNmrB+/XqHxOaIoSpsqYjNNGTSZerDRH4dyfnA85T5pzWzBu+hVe1Wdsdr6eIXFOjr0ouCMzmyP8m4luN4uc3LrP1nAfdG/sqJaT35a8mHTJgwgc8///zmDGeWjnN4UGCB3olnj+O691q0SoYdPnj5BfL2hKdcOg+F9Cy2QVYRztSp25h0xLisRy237gOXLzlvyW1td300thQlE9+hWMb73Gi9gas1r9NpQCemjp/K+PHj7eo+b29zW1uGF/hl7y8Mnj+UGyUSUecCKe89iWLBTZi87E98vX2t+pDmFu+HAxubrTidcp9xUiN3qjdyFEf3J3m13atcTLrIO9HvUDawLC/c8wJTp07l1KlTTJgwgYiICMZ3bW318BfOlFXnkZSezjWfX/DLqEXqlv107tOfEiVK0LdJCZe9x5II8mHz5s2UbFqSEiVK0CikUd4bFELZ6y0stfQw90H6d10ox3MEGJpyucLnqP94MfHHiUT9GsXXs78mIiIiX3HZO1SFNZWVsYmxDJw5kOjkaDBAsYP3Uq7qc3h5+5pdP4u5uoDc4s3rolgULvzmOLJOTCnFJz0+4UrqFSaum0hQQBBPRD7BnDlziI+PZ+jQoURFRTG1XwOXJ9as/b24ci4ZGWcIPtmFhIzjTJ3k+hJxSQQ2MhgMRG+NJnV0KgNqDfCITkO2fIvLfqFVKEpkticgswHXi31CYq9d/B73O3U71uXTlz5lxIgRNh8/WwY3M8dSxWHclWQSUxJ5euHTzPtrHhpN5bjKZPj8F78aNW5bP+c3fUt3Gg80C2fxrjiL8bpbQ4HCyEt5MafPHBJTEnlqxVOUDijNoPqDePy1z9g5sBcduvak4ZMfMWVED5cf675Nwvns4G9cPR8G6w/SunVrmja13AepoEgisNGxY8e4HHgZvKBrjdubexVV1l6wzBWF+FCeoKQpTB90keejnudi2EVGLh7J/777H1+8/wUNGzYErGsNZG/RgreZYi4DN7iavoAKb/YjzSeNwBOBvN7hdZ579TnueXuDVXcglu40NvyZ4BbfRos6X29fFvVfRLf53Ri6ZCj7TyezJDqUsg9M4ey34zn41QuMSfPmmdIhhLvwPTiccJg1f6+hV2AvlscuZ97ceQUegzmSCGy0efNmqGL8u01EwQ8O5e4sFYWEBxVjeONe9LmzD5M3TOZT9Slb0rfQaHwjHqn1CG36Ps3bv5+1quzenm/R2ZNABpdITP+e6wFrIDADr7+9GFV9FB988QHFixcHrL8Dya0uQL71F4xA30B+GfwLnb7pxLTtTxCc+TKBpZpSof+rnJs/gXM/TKbiQ28TB04bdjov70W/h7+3P9s/307btm1p39495i+RiWlsFB0djW8tX2qXq01IiRBXh+N28moVEhQQxMfdP+bI6CM8WP9BaAVfl/6aR6Y3459NU8m4+m+fRGdMXBNW2p9ktZez6ROJ8x/O9ZKr4C8D5bd3Iv6deGa+MvNmEgDrJ/hx16FCoGgPV5FTKf9SrB6yGh9DJRL83iTF6wB+wREEP/gKmVcvcG7h/5GZfM0lkyLtP7efOXvn0MKrBedPnue1115zm6JluSOw0ebozfAg3FvlXleH4pasLbqpXb42iwYt4s8Lf/LiyhdZ6v0zSd4bSfpnI74Hq1OyZF9KVG7rkE5UBm1gW+w2vtr6FftTFnEj4CoYgJ1+FE9uT2ij4bz7QhtCQswndmu+0dtbd+EsBTkJi7soG1iWxgHvsTflGc77vUqFtCkEVKpPcL//4/ziVzm/6BVCBr5B/JWCjWv8mvEEBQRx6NNDdOrUySXDTVuS51hD7sgVYw2Bcajh8vXKw1PwTd9vGNrI9rFlhHnNpy7h6MUFXFMr0CVuGBfGe+N3LYIAnyZUj+jBK/26WnXxSkxJ5MiFI0Sfimbp3qXsvLCTZJIhA/gLQq5UoXiJfmRUvpdKwUEOKy92xwmGzI3XA44fw8bdLN0Tx/iffuek1wtkqgQqpL1CgKEhSTHbSFjyFv7hdWj82DS2Ti6YMYZWx6ym+/zudFfdWfXKKqKjo2nVyrq+KI5kaawhSQQ2WL58Ob1f7w094OS4k0QE5a8JpLhd1jfXpPQM0vTfXL26hBTfnRjKXP+3ADNFEZhegvBiIZQtVpZAv0AC/QJJ02lcTrlMYnoiCWkJXFPX/n3hy8BJqKqrMqLVCIYOGEr16rd35S+qqk1cYXbEzYIcaM1Vlu6J483VW9iX8jwZ6hzBaS8TaGjMjSObuPDLu9zZqBlbf1tD6dKlbXpNW5N9hiGDxl805mrSVc6+fJb7et7Hjz/+aO+/ly/5HnRO/Cs6OhoVoQgvGS5JwMFuLVKqQbGg8WRqTWZyEkmXfyMpaSsZxJPql0hMUgz4Ad6mnwwgGUgCrkHZzLJULV6VyEqR9OrYi3vuuYcyZYrWMCDWKogpQt2VsUjvQc7faEPzmW05fe01yqdO4I5WXRh5b3U+nDSGjh07EhUVRbly5fJ8vfwWs83eM5tDCYeotr0aQSWD+Pzzzx3zDzqQJAIbbI7ejE8rH9pWbevqUIqk7GXx1SauAMDbqxgly/WgZDljD24FHHu9C99tOsLHq/Zz5vxFgkv680S3etzfvCblypXDz8/PVf+C23HXuouCVKF4BXY+uYme3/VkZ/xbvNklgseajqJt3Ur069ePdu3asXr1asLDc/9mn5+5jo9dPMbzvz5PhI7gxMoTLFmyhODgYIf9b44irYaslJ6ezrbj20gPSJdmo3awtgVLbq1wVhw8z7QN8Vz0LoNfxZokFq/MJztvsO2sQZJADta2eirqyhcrz7ph6+hcvTOP//I4b2x8g+7du7NixQpOnjzJXXfdRV7FzbYOb5KcnsyARQPw1t6c/vg0w4YNo2/fvvb+K04hicBK+/btIzUkFZAWQ/lly8ihuTVDdcTAc67gqmaczp4itLAo4VeCXwb/wpCGQ3h5w8sMXTKUVm1aER0djZ+fH23atMm17N7WJsLPRj3LvnP78P7Zm7DiYUyfPt0h/4czSCKw0u7duyECyvqX5c7yd7o6nELJlgt4bt9kC+M8z64aPttV3LXvgq+3L3P7zuWN9m/w3YHvaD27NSUrl2T79u00btyY/v378+yzz5KcfPu5ZMvIqfP3z2fmrpmU3FsSr7+8WLVqFUFBQc76t+wmicBKe/bsQVVTtK3WFqWU257o7syWC3hurTPcufOWJYX1LiY/3D3peSkvXmrzEssfWs6JyyeInBXJxgsbWb9+PWPGjOGjjz6iWbNm7Nq165btrC1m+2bfNwxfOhz/s/74bPJh7dq1xKSXcevrhSQCK209tBVdWtMmoo3bn+juytoLeF7H15Fj2heUwngXk1+FJen1qNWDHY/voGpQVfov6s+wX4bx8rSXiYqK4urVq7Rs2ZIxY8YQF/fv5zqvYrYPtnzA8KXDUacUAYsDWPvrWk4Yyrv99UISgRUyMjI4dNU4qdrdle8uNCe6u7H2Ap7X8S2MFaCF8S4mvwpT0qtVrhZbH9vKWx3eYtnRZdT7rB6HSx1m2+5tjBw5kpkzZ1KjRg3GjRvHgQMH0FqbLQ1ITElk8NzBPP/r83AI7jp2F1t+30LTpk0tns9Tfj5kIaqCJ81HrXD06FHSy6fjjTeNQhoRf2Wt2fXc8UR3J9YOP2HNhaSwDeTmSc04C1vfBR8vH16890Xuq30fY1eN5dmoZ5lafCr/HfZfNo/bzMz3ZzJjxgw+/vhjyoWEkhHaCFWqAnj5cMVHMXjbH6TWPoYO1Pjv9efjHh/z2KOP3ZyAydL5fCU5naV74tziPJZEYIU9e/ZAGNQOqo2/j3+hO9FdxVI5f14nflE8vo6emcudFdakV69CPdYPX8+mU5t4fePrTFg7AYDIlpGM7TOWxJOJLFq5leunNkBAqnEU4ipACfA5H8SLVcfy9P+epnz58re8rqXzGci1D0JBsisRKKXKAguBqsBJYIDW+rKZ9WYDvYDzWuv6tm7vart274JwuLva3UDhPdELkj2DnRXV41vY7mLyy9VJz94xn+6NuJdfh/7KvrP7+OXYL6w8vpKP936MQRugFcYfwDszGL+MWpRI6Uixks157cleZl9vfNfaPLNwr9nn3KUUwa6xhpRS7wCXtNbTlFITgTJa6xfMrNcGuA58kyMRWLV9TgU91lCLHi3Y3mI7s3rN4vFmjwPuOcCYO7F3sDM5viI/LE2ram8d0tXUq1xIukC/z9dx9voVfAwh+PDvsBR5nddNXvuVy0npty0v6MH/nDXWUB+gnenvucBvwG0Xcq31RqVU1fxu70paaw5cMH6TvSv8rtsuUB8ObCwXKDPsrTD0lG/PwrHyMwyENUr5l6KUfymmdPc3JhqDbXerPRuG8u3Wf25b3v5O9xhuwt5EEKK1PgOgtT6jlKrgrO2VUqOAUQBVqlTJb7w2O3HiBMllkvHBh5i4IF5e6llju+dXUSznF+7P2S2W8lvsteHPBJuWF7Q8E4FSai1Q0cxTLzk+HMu01rOAWWAsGiqo/WZVFN8ZdCcfrvnbKd82iqKiWs4v3FtBfAHJz92quzepzbMfgda6k9a6vpmfZcA5pVQogOn3+dxf7Tb2bu90u/fshlBoXb2127+Z7qQwtvUXhZ+7djZ0934k9hYN/QwMB6aZfi8r4O2dbtPhTdAIWlZuyQEp7rCJlPOLgubqFkuWuPsdsr2JYBrwg1LqUeAfoD+AUioM+FJr3cP0+HuMlcLllVKxwCta668sbe9O9l/YD8BdYXcR1DXIrd9MIYR7fgFx1wSVxa5EoLW+CHQ0szwe6JHt8WBbtncXZ8+eJbF4In74cWf5O6lXwXjL6a5vpieT5qbC3bljgsoiPYtzsXfvXmOP4tK18fYyJgF3fjM9lT2d14QQMuhcrvYf3A+hcHfVu10disiFDAIohH0kEeRiS8wW8IV7q8uMZO5MWnMJYR9JBLk4kGAsXmga2tTFkYjcuHvTPCHcndQRWKC15nTaaby1N7XK1XJ1OB7J2grg/DbNkwpmIYwkEVgQFxdHWuk0KvlWwsdLDlNBs6UCOD9N86SCWYh/yRXOgsOHD0MI1C1X19WheCRbBw+ztTWXswYnE6IwkjoCC3Ye2gmloEX1Fq4OxSM5uwJYKpiF+JfcEViwJWYLVIBW1Vq5OhSPZM/gYdaU/cvoqEL8S+4ILDh00TixdIOQBi6OxDPld/CwrLL/uCvJaP4t+1+6J84hry9EUSSJwAytNXHpcfgZ/AgvKeXFrpDf0Uut7Vwmo6MK8S8pGjLj7NmzpAWlUd2vOkopV4fjsZw97rsMFyKEkccnAnPlycUvHIYKUD+4ft4vINyKlP0LYTuPLhqyVJ781drVEAB315AxhgobKfsXwnYenQgslSdHHdoEQKsa0mKosJGyfyFs59FFQ5bKk6/pU4C0GCqspOxfCNt49B2BuXJjrTWGYpconlmcMoFlXBCVEEIULI9OBObKk/3SrqHLZ1DFv4qLohJCiILl0UVD5gYr61wmkVdjoX4FaTEkhCeQUWjtTARKqbLAQqAqcBIYoLW+bGa92UAv4LzWun625VOAx4EE06JJWuuV9sRkq5zlyZM/mQw+cHdNaTEkRFEno9Aa2Vs0NBFYp7WuBawzPTZnDtDNwnMfaq0bm34KNAmYs/v0bgDuvUNmJROiqJNpTo3sTQR9gLmmv+cCfc2tpLXeCFyyc18FIuZKDAB1KtRxcSRCCGeTUWiN7E0EIVrrMwCm3xXy8RpjlFL7lVKzlVIWm+kopUYppXYqpXYmJCRYWs1uZ9LPEJgWSDHfYk7bhxDCPcg0p0Z5JgKl1Fql1EEzP30csP/PgRpAY+AM8L6lFbXWs7TWkVrryODgYAfs+naZmZlc87tGBe/85DMhRGEjPdGN8qws1lp3svScUuqcUipUa31GKRUKnLdl51rrc9le63/Aclu2d6Sle+J4bcFv6HKay5eDWLonzqMqi4TwRPmZ5rQosrf56M/AcGCa6fcyWzbOSiKmh/cDB+2MJ1+yWg4kxB6AO0BfqeyRLQeE8ETSE93+OoJpQGel1HGgs+kxSqkwpdTNFkBKqe+BLUBtpVSsUupR01PvKKUOKKX2A+2BZ+2MJ1+yWg6kpf0JgJ/fnR7ZckAI4ZnsuiPQWl8EOppZHg/0yPZ4sIXth9qzf0fJaiGQZjCOMeQfcOcty4UQoijz6CEmsmS1EMj0OQsZCh9T4ydPazkghPBMkgj4t+VAZuAV1LVAFF4e2XJACOGZPHqsoSx9m4STmZnJg9+k4JMSTnhFz2w5IITwTJIITBqWTYUy0KVUI1Y838HV4QghRIGRoiGTPw7+AV7QMLyhq0MRQogCJYnAZPvf2wG4+w4ZdVQI4VkkEZgcOncIgNZ3tnZxJEIIUbCkjsDk1PVTeONN2WJlXR2KEEIUKLkjMEkwJBCUEeTqMIQQosBJIsA46mhy8WTC/MNcHYoQQhQ4KRoCDv99GIrDHaXucHUoQghR4OSOANh4aCMAjSs1dm0gQgjhApIIgJ0ndwLSYkgI4ZkkEQDHLhwDDa3ubOXqUIQQosBJHQEQdyMOHx8fAnwDXB2KEEIUOLkjAC4aLlIyo6SrwxBCCJeQRAAk+ScR7Bvs6jCEEMIlPL5o6NLVSxiKG6jsVdnVoQghhEt4/B3B1j+3AlA7WCahEUJ4JrsSgVKqrFJqjVLquOl3GTPrVFZKbVBKHVFKHVJKjbNle2fb+bex6WjDyjL8tBDCM9l7RzARWKe1rgWsMz3OKQN4XmtdB2gJjFZK1bVhe6c6HH8YgBZ3tCjoXQshhFuwNxH0Aeaa/p4L9M25gtb6jNZ6t+nva8ARINza7Z3tr8t/QRrUr1a/oHcthBBuwd5EEKK1PgPGCz5QIbeVlVJVgSbANlu3V0qNUkrtVErtTEhIsDPsf51JPoPfDT98fDy+3lwI4aHyvPoppdYCFc089ZItO1JKlQAWA89ora/asi2A1noWMAsgMjJS27q9JZe5TClDKUe9nBBCFDp5JgKtdSdLzymlzimlQrXWZ5RSocB5C+v5YkwC87XWP2V7yqrtnUVrTXJAMtWoVpC7FUIIt2Jv0dDPwHDT38OBZTlXUEop4CvgiNb6A1u3d6bTl06jfTURpSIKcrdCCOFW7E0E04DOSqnjQGfTY5RSYUqplaZ1WgNDgQ5Kqb2mnx65bV9Qth01VlXUriB9CIQQnsuuGlKt9UWgo5nl8UAP099/AMqW7QvK7pO7AWhStYmrQhBCCJfz6J7FR84cAaBFbelDIITwXB7dZvJE4glIghpVarg6FCGEcBmPviM4m3IW/2R/vL29XR2KEEK4jEcngkSvRIJ0kKvDEEIIl/LYRJCWmUaqfyoV/c31lRNCCM/hsYkgJiEGvKBakHQmE0J4No9NBNuPbQegTsU6Lo5ECCFcy2MTwZ5TewBoWq2piyMRQgjX8thEcOz8MciEZnc0c3UoQgjhUh6bCE5fPQ2JULmSzFUshPBsHpsIEtIS8E/1l3kIhBAez2MTwVWuUtJQ0tVhCCGEy3lkIsg0ZJLil0KwX7CrQxFCCJfzyEQQfy0evCCsRJirQxFCCJfzyERwOO4wANXKSmcyIYTwyESw/9R+AO4MvdPFkQghhOt5ZCI4euYoAA0jGro4EiGEcD2PTAR/X/obUqB2VZmiUggh7EoESqmySqk1Sqnjpt9lzKxTWSm1QSl1RCl1SCk1LttzU5RScWbmMnaq+OvxkAihoaEFsTshhHBr9t4RTATWaa1rAetMj3PKAJ7XWtcBWgKjlVJ1sz3/oda6selnpZntHS4hPQH/FH98fX0LYndCCOHW7E0EfYC5pr/nAn1zrqC1PqO13m36+xpwBAi3c792uaauUYpSrgxBCCHchr2JIERrfQaMF3ygQm4rK6WqAk2AbdkWj1FK7VdKzTZXtORoN9JukO6bLp3JhBDCJM9EoJRaq5Q6aOanjy07UkqVABYDz2itr5oWfw7UABoDZ4D3c9l+lFJqp1JqZ0JCgi27vsXpq6cBqFSiUr5fQwghipI8R1zTWney9JxS6pxSKlRrfUYpFQqct7CeL8YkMF9r/VO21z6XbZ3/ActziWMWMAsgMjJS5xW3JUfPGpuOVisnncmEEALsLxr6GRhu+ns4sCznCkopBXwFHNFaf5DjuezNdu4HDtoZT54O/HMAgDphMjOZEEKA/YlgGtBZKXUc6Gx6jFIqTCmV1QKoNTAU6GCmmeg7SqkDSqn9QHvgWTvjydPRs0dBQ4OIBs7elRBCFAp2Dcavtb4IdDSzPB7oYfr7D0BZ2H6oPfvPj5OXTsI1qFqlakHvWggh3JLH9SyOv2HsTBYWJiOPCiEEeGAiuJhxEf8UfwICAlwdihBCuAWPSgRaa655XaO0Ku3qUIQQwm14VCK4kHQBg5dBOpMJIUQ2HpUI/kn8B4DKpSq7OBIhhHAfHpUIjiccB6B6+eoujkQIIdyHRyWCQ6cPAdKZTAghsvOoRHDs3DFIhzpVJBEIIUQWj0oEV+L8YBcMX/gXraetZ+meOFeHJIQQLucxiWDpnjj2/OYLq8GrRDniriTz4k8HJBkIITyexySCd6OOkpJ4Hq+AEnj5GTuTJadn8m7UURdHJoQQrmXXWEOFSfyVZIo36Ix/5Qa3LRdCCE/mMYkgLCiQOGriX7HmbcuFEMKTeUzR0PiutQn09b5lWaCvN+O71nZRREII4R485o6gb5NwwFhXEH8lmbCgQMZ3rX1zuRBCeCqPSQRgTAZy4RdCiFt5TNGQEEII8yQRCCGEh/OYoqGle+KkfkAIIcyw645AKVVWKbVGKXXc9LuMmXUClFLblVL7lFKHlFKv2rK9IyzdE8eLPx0g7koyGqRXsRBCZGNv0dBEYJ3WuhawzvQ4p1Sgg9a6EdAY6KaUamnD9nZ7N+ooyemZtyyTXsVCCGFkbyLoA8w1/T0X6JtzBW103fTQ1/Sjrd3eESz1HpZexUIIYX8iCNFanwEw/a5gbiWllLdSai9wHlijtd5my/b2stR7WHoVCyGEFYlAKbVWKXXQzE8fa3eitc7UWjcGKgHNlVL1bQ1UKTVKKbVTKbUzISHBpm2lV7EQQliWZ6shrXUnS88ppc4ppUK11meUUqEYv/Hn9lpXlFK/Ad2Ag4DV22utZwGzACIjI7Wl9cyRXsVCCGGZvc1HfwaGA9NMv5flXEEpFQykm5JAINAJeNva7R1FehULIYR59tYRTAM6K6WOA51Nj1FKhSmlVprWCQU2KKX2Azsw1hEsz217IYQQBceuOwKt9UWgo5nl8UAP09/7gSa2bC+EEKLgyBATQgjh4SQRCCGEh5NEIIQQHk5pbVNLTLeglEoATuVz8/LABQeG4ygSl20kLttIXLZx17jAvtgitNbBORcWykRgD6XUTq11pKvjyEniso3EZRuJyzbuGhc4JzYpGhJCCA8niUAIITycJyaCWa4OwAKJyzYSl20kLtu4a1zghNg8ro5ACCHErTzxjkAIIUQ2kgiEEMLDFclEoJTqb5of2aCUstjMSinVTSl1VCkVo5SamG25U+ZStnKO59pKqb3Zfq4qpZ4xPTdFKRWX7bkeBRWXab2TSqkDpn3vtHV7Z8SllKqslNqglDpies/HZXvOocfL0vmS7XmllPrY9Px+pVRTa7d1clwPm+LZr5SKVko1yvac2fe0gOJqp5RKzPb+TLZ2WyfHNT5bTAeVUplKqbKm55xyvJRSs5VS55VSBy0879xzS2td5H6AOkBt4Dcg0sI63sBfQHXAD9gH1DU99w4w0fT3ROBtB8Vl0+uaYjyLsRMIwBTgv044XlbFBZwEytv7fzkyLoyj2zY1/V0SOJbtfXTY8crtfMm2Tg9gFaCAlsA2a7d1clx3A2VMf3fPiiu397SA4moHLM/Pts6MK8f6vYH1BXC82gBNgYMWnnfquVUk7wi01ke01nnNTN8ciNFa/621TgMWYJxDGZw3l7Ktr9sR+Etrnd9e1Nay9/912fHSWp/RWu82/X0NOAI4Y+KJ3M6X7PF+o422AkHKOOGSNds6LS6tdbTW+rLp4VaMMwU6mz3/s0uPVw6Dge8dtG+LtNYbgUu5rOLUc6tIJgIrhQOnsz2O5d8LiLPmUrb1dQdx+0k4xnRrONtRRTA2xKWBX5VSu5RSo/KxvbPiAkApVRXjkOfbsi121PHK7XzJax1rtnVmXNk9ivGbZRZL72lBxdVKKbVPKbVKKVXPxm2dGRdKqWIYZ1NcnG2xs45XXpx6btk7Q5nLKKXWAhXNPPWS1tqamc6UmWV2t6XNLS4bX8cPuA94Mdviz4HXMcb5OvA+MLIA42qttY5XSlUA1iil/jR9k8k3Bx6vEhg/sM9ora+aFuf7eJnbhZllOc8XS+s45VzLY5+3r6hUe4yJ4J5six3+ntoQ126MxZ7XTfU3S4FaVm7rzLiy9AY2a62zf1N31vHKi1PPrUKbCHQucylbKRaonO1xJSDe9LdNczFbG5eybY7n7sBurfW5bK9982+l1P+A5eY2dFZc2jjhEFrr80qpJRhvSzfi4uOllPLFmATma61/yvba+T5eZuR2vuS1jp8V2zozLpRSDYEvge7aOCEUkOt76vS4siVstNYrlVKfKaXKW7OtM+PK5rY7cicer7w49dzy5KKhHUAtpVQ107fvQRjnUIZ/51IGx86lbMvr3lY2aboYZrkfMNvCwBlxKaWKK6VKZv0NdMm2f5cdL6WUAr4CjmitP8jxnCOPV27nS/Z4h5laeLQEEk1FWtZs67S4lFJVgJ+AoVrrY9mW5/aeFkRcFU3vH0qp5hivRxet2daZcZniKQ20Jds55+TjlRfnnluOrv12hx+MH/pYIBU4B0SZlocBK7Ot1wNjK5O/MBYpZS0vB6wDjpt+l3VQXGZf10xcxTB+IErn2H4ecADYb3qzQwsqLoytEvaZfg65y/HCWMyhTcdkr+mnhzOOl7nzBXgSeNL0twJmmJ4/QLYWa5bONQcdp7zi+hK4nO347MzrPS2guMaY9rsPYyX23e5wvEyPRwALcmzntOOF8UvfGSAd47Xr0YI8t2SICSGE8HCeXDQkhBACSQRCCOHxJBEIIYSHk0QghBAeThKBEEJ4OEkEQgjh4SQRCCGEh/t/5MS6xuaq8fYAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a data matrix X\n", "p=5\n", "X = np.vstack([np.ones(len(x)),x,x**2,x**3,x**4,x**5]).T\n", "\n", "# degree-p polynomial linear regression\n", "w5 = np.array(p+1)\n", "w5 = np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),y)\n", "yh5= np.matmul(X,w5)\n", "\n", "plt.plot(x,y,'o')\n", "plt.plot(t,y0,'k-')\n", "plt.plot(t, np.matmul(np.vstack([np.ones(len(t)),t,t**2,t**3,t**4,t**5]).T,w5), 'g')\n", "plt.show()\n", "\n", "MSE_train = (1/float(n))*np.sum((y - yh5)**2)\n", "\n", "# MSE on fresh data not used in training\n", "X_ = np.vstack([np.ones(len(x_)),x_,x_**2,x_**3,x_**4,x_**5]).T\n", "yh_= np.matmul(X_,w5)\n", "MSE_test = (1/float(n_))*np.sum((y_ - yh_)**2) \n", "MSE = np.append(MSE,[[p,MSE_train,MSE_test]],axis=0) " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a data matrix X\n", "p=10\n", "X = np.vstack([np.ones(len(x)),x,x**2,x**3,x**4,x**5,x**6,x**7,x**8,x**9,x**10]).T\n", "\n", "# degree-p polynomial linear regression\n", "w10 = np.array(p+1)\n", "w10 = np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),y)\n", "yh10= np.matmul(X,w10)\n", "\n", "plt.plot(x,y,'o')\n", "plt.plot(t,y0,'k-')\n", "plt.plot(t, np.matmul(np.vstack([np.ones(len(t)),t,t**2,t**3,t**4,t**5,t**6,t**7,t**8,t**9,t**10]).T,w10), 'g')\n", "plt.show()\n", "\n", "MSE_train = (1/float(n))*np.sum((y - yh10)**2)\n", "\n", "# MSE on fresh data not used in training\n", "X_ = np.vstack([np.ones(len(x_)),x_,x_**2,x_**3,x_**4,x_**5,x_**6,x_**7,x_**8,x_**9,x_**10]).T\n", "yh_= np.matmul(X_,w10)\n", "MSE_test = (1/float(n_))*np.sum((y_ - yh_)**2) \n", "MSE = np.append(MSE,[[p,MSE_train,MSE_test]],axis=0) " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a data matrix X\n", "p=15\n", "X = np.vstack([np.ones(len(x)),x,x**2,x**3,x**4,x**5,x**6,x**7,x**8,x**9,x**10,x**11,x**12,x**13,x**14,x**15]).T\n", "\n", "# degree-p polynomial linear regression\n", "w15 = np.array(p+1)\n", "w15 = np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),y)\n", "yh15= np.matmul(X,w15)\n", "\n", "plt.plot(x,y,'o')\n", "plt.plot(t,y0,'k-')\n", "plt.plot(t, np.matmul(np.vstack([np.ones(len(t)),t,t**2,t**3,t**4,t**5,t**6,t**7,t**8,t**9,t**10,t**11,t**12,t**13,t**14,t**15]).T,w15), 'g')\n", "plt.show()\n", "\n", "MSE_train = (1/float(n))*np.sum((y - yh15)**2)\n", "\n", "# MSE on fresh data not used in training\n", "X_ = np.vstack([np.ones(len(x_)),x_,x_**2,x_**3,x_**4,x_**5,x_**6,x_**7,x_**8,x_**9,x_**10,x_**11,x_**12,x_**13,x_**14,x_**15]).T\n", "yh_= np.matmul(X_,w15)\n", "MSE_test = (1/float(n_))*np.sum((y_ - yh_)**2) \n", "MSE = np.append(MSE,[[p,MSE_train,MSE_test]],axis=0) " ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a data matrix X\n", "p=20\n", "X = np.vstack([np.ones(len(x)),x,x**2,x**3,x**4,x**5,x**6,x**7,x**8,x**9,x**10,x**11,x**12,x**13,x**14,x**15,x**16,x**17,x**18,x**19,x**20]).T\n", "\n", "# degree-p polynomial linear regression\n", "w20 = np.array(p+1)\n", "w20 = np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),y)\n", "yh20= np.matmul(X,w20)\n", "\n", "plt.plot(x,y,'o')\n", "plt.plot(t,y0,'k-')\n", "plt.plot(t, np.matmul(np.vstack([np.ones(len(t)),t,t**2,t**3,t**4,t**5,t**6,t**7,t**8,t**9,t**10,t**11,t**12,t**13,t**14,t**15,t**16,t**17,t**18,t**19,t**20]).T,w20), 'g')\n", "plt.show()\n", "\n", "MSE_train = (1/float(n))*np.sum((y - yh20)**2)\n", "\n", "# MSE on fresh data not used in training\n", "X_ = np.vstack([np.ones(len(x_)),x_,x_**2,x_**3,x_**4,x_**5,x_**6,x_**7,x_**8,x_**9,x_**10,x_**11,x_**12,x_**13,x_**14,x_**15,x_**16,x_**17,x_**18,x_**19,x_**20]).T\n", "yh_= np.matmul(X_,w20)\n", "MSE_test = (1/float(n_))*np.sum((y_ - yh_)**2) \n", "MSE = np.append(MSE,[[p,MSE_train,MSE_test]],axis=0) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "feature engineering requires domain knowledge about what are good features for the application\n", "\n" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.plot(MSE.T[0],MSE.T[1],'o-',label='train error')\n", "plt.plot(MSE.T[0],MSE.T[2],'o-',label='test error')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- the **training error** always decrease as we increase the complexity of the model (which in this example is increasing the degree of the polynomial)\n", "- on the other hand, the **test error** that we compute, which is the average error over fresh drawn samples, has a sweet spot where the test error is minimum\n", "- this corresponds usually to the true complexity of the model, which in this case is degree-5 polynomial\n", "-although we did not know (just frmo the samples) that the ground truth is a degree-5 polynomial, we could use the test error to guess the degree of the model we need to use to fit this data (and this process is known as hyper parameter tuning using test error)\n", "- we will learn much more about it in next couple of weeks" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.8.5" } }, "nbformat": 4, "nbformat_minor": 2 }