506 lines
		
	
	
		
			157 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			506 lines
		
	
	
		
			157 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
{
 | 
						|
 "cells": [
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "# Optional Lab: Feature Engineering and Polynomial Regression\n",
 | 
						|
    "\n",
 | 
						|
    "\n"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "## Goals\n",
 | 
						|
    "In this lab you will:\n",
 | 
						|
    "- explore feature engineering and polynomial regression which allows you to use the machinery of linear regression to fit very complicated, even very non-linear functions.\n"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "## Tools\n",
 | 
						|
    "You will utilize the function developed in previous labs as well as matplotlib and NumPy. "
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 1,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [],
 | 
						|
   "source": [
 | 
						|
    "import numpy as np\n",
 | 
						|
    "import matplotlib.pyplot as plt\n",
 | 
						|
    "from lab_utils_multi import zscore_normalize_features, run_gradient_descent_feng\n",
 | 
						|
    "np.set_printoptions(precision=2)  # reduced display precision on numpy arrays"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "<a name='FeatureEng'></a>\n",
 | 
						|
    "# Feature Engineering and Polynomial Regression Overview\n",
 | 
						|
    "\n",
 | 
						|
    "Out of the box, linear regression provides a means of building models of the form:\n",
 | 
						|
    "$$f_{\\mathbf{w},b} = w_0x_0 + w_1x_1+ ... + w_{n-1}x_{n-1} + b \\tag{1}$$ \n",
 | 
						|
    "What if your features/data are non-linear or are combinations of features? For example,  Housing prices do not tend to be linear with living area but penalize very small or very large houses resulting in the curves shown in the graphic above. How can we use the machinery of linear regression to fit this curve? Recall, the 'machinery' we have is the ability to modify the parameters $\\mathbf{w}$, $\\mathbf{b}$ in (1) to 'fit' the equation to the training data. However, no amount of adjusting of $\\mathbf{w}$,$\\mathbf{b}$ in (1) will achieve a fit to a non-linear curve.\n"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "<a name='PolynomialFeatures'></a>\n",
 | 
						|
    "## Polynomial Features\n",
 | 
						|
    "\n",
 | 
						|
    "Above we were considering a scenario where the data was non-linear. Let's try using what we know so far to fit a non-linear curve. We'll start with a simple quadratic: $y = 1+x^2$\n",
 | 
						|
    "\n",
 | 
						|
    "You're familiar with all the routines we're using. They are available in the lab_utils.py file for review. We'll use [`np.c_[..]`](https://numpy.org/doc/stable/reference/generated/numpy.c_.html) which is a NumPy routine to concatenate along the column boundary."
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 2,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "name": "stdout",
 | 
						|
     "output_type": "stream",
 | 
						|
     "text": [
 | 
						|
      "Iteration         0, Cost: 1.65756e+03\n",
 | 
						|
      "Iteration       100, Cost: 6.94549e+02\n",
 | 
						|
      "Iteration       200, Cost: 5.88475e+02\n",
 | 
						|
      "Iteration       300, Cost: 5.26414e+02\n",
 | 
						|
      "Iteration       400, Cost: 4.90103e+02\n",
 | 
						|
      "Iteration       500, Cost: 4.68858e+02\n",
 | 
						|
      "Iteration       600, Cost: 4.56428e+02\n",
 | 
						|
      "Iteration       700, Cost: 4.49155e+02\n",
 | 
						|
      "Iteration       800, Cost: 4.44900e+02\n",
 | 
						|
      "Iteration       900, Cost: 4.42411e+02\n",
 | 
						|
      "w,b found by gradient descent: w: [18.7], b: -52.0834\n"
 | 
						|
     ]
 | 
						|
    },
 | 
						|
    {
 | 
						|
     "data": {
 | 
						|
      "image/png": "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v1jHLwy9fR87doyLFy+aHpnllpWVle8+i3Le2Qr6O12/fp2UlBQaN26c57VBQUH5tudu1atXx9XV1eyxPD09OXbsGADPP/88zz//vO5+rl27BhTvXIv697TVtRF/kyBRgTg6OupuV7kS0vl9syvuoCyj0YibmxvffPNNgXWHDh3K1q1beemll2jTpg3e3t44ODgwe/bsHHc9+cmvneY+2HN/YGa3u0GDBixatKjQr8n9+sKed7aC/k7Z/9U7x9x/y+Ic5+79GI1GQEscd+nSRbduSEiIqW5Rz7Wg65ebra6N+JsECZFDvXr1OHr0aJ7t2duyew8VVaNGjdi8eTPNmzfH39/fbL1bt26xceNGIiIi8ozUnj59ep765oJB9jfM3MnQtLQ0Ll++XKR2//LLL3Tv3j3Ho7qivL4w510U2T17Tpw4kafs5MmTFjlGtuxEs6urKw8++GCBdS19rkVly2tTUUhOQuTQt29fTp06xddff23appTirbfeMpUXx9ChQwGYMWOGbvn169cB7ZuiwWAwfYPN9vPPP/P777/neZ2Hh4dur5h69erh5OTE//3f/+XY/u9//7vAR0S5252YmMi8efPylCmluHHjRoGvh4LPuygcHR15+OGH2bJlS46upampqSxevLjI+8tPmzZtaNKkCe+9957uud7dfmuca1HZ8tpUFHInIXKYMmUKa9asYejQoaYusN9//z2bNm3i2WefpXnz5sXab5cuXXj55Zd5++23OXLkCH379qVKlSrExsayadMmWrRowdKlS/H09OSBBx5g3rx5pKamEhQUxKFDh1iyZAkhISGmhGq2du3asXLlSqKioggKCsLDw4O+ffvi5eVFaGgo//nPf1BKcc8997Bz5062b9+Or69vods9bNgw1q9fz7Rp09ixY4epa+XZs2dZv349w4YNy3duqsKed1HNmjWLzZs30717d8aPH2/q5pndBdhSczU5ODiwZMkSHnroIZo1a8ZTTz1FgwYNuHHjBvv37+ebb74xjauw1rkWla2uTYVhp15Vwoayu8Bu2bIlTxmgIiIicmy7ePGiGjFihPL19VWVK1dWwcHBasGCBXm6KpqDThfYbJ9//rnq0qWL8vDwUG5ubqpRo0Zq5MiRaufOnaY6V69eVWFhYcrPz0+5ubmpTp06qZ9++kmFh4erwMDAPG3t06eP8vT0VECO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\n",
 | 
						|
      "text/plain": [
 | 
						|
       "<Figure size 432x288 with 1 Axes>"
 | 
						|
      ]
 | 
						|
     },
 | 
						|
     "metadata": {},
 | 
						|
     "output_type": "display_data"
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "# create target data\n",
 | 
						|
    "x = np.arange(0, 20, 1)\n",
 | 
						|
    "y = 1 + x**2\n",
 | 
						|
    "X = x.reshape(-1, 1)\n",
 | 
						|
    "\n",
 | 
						|
    "model_w,model_b = run_gradient_descent_feng(X,y,iterations=1000, alpha = 1e-2)\n",
 | 
						|
    "\n",
 | 
						|
    "plt.scatter(x, y, marker='x', c='r', label=\"Actual Value\"); plt.title(\"no feature engineering\")\n",
 | 
						|
    "plt.plot(x,X@model_w + model_b, label=\"Predicted Value\");  plt.xlabel(\"X\"); plt.ylabel(\"y\"); plt.legend(); plt.show()"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "Well, as expected, not a great fit. What is needed is something like $y= w_0x_0^2 + b$, or a **polynomial feature**.\n",
 | 
						|
    "To accomplish this, you can modify the *input data* to *engineer* the needed features. If you swap the original data with a version that squares the $x$ value, then you can achieve $y= w_0x_0^2 + b$. Let's try it. Swap `X` for `X**2` below:"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 3,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [],
 | 
						|
   "source": [
 | 
						|
    "# create target data\n",
 | 
						|
    "x = np.arange(0, 20, 1)\n",
 | 
						|
    "y = 1 + x**2\n",
 | 
						|
    "\n",
 | 
						|
    "# Engineer features \n",
 | 
						|
    "X = x**2      #<-- added engineered feature"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 4,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "name": "stdout",
 | 
						|
     "output_type": "stream",
 | 
						|
     "text": [
 | 
						|
      "Iteration         0, Cost: 7.32922e+03\n",
 | 
						|
      "Iteration      1000, Cost: 2.24844e-01\n",
 | 
						|
      "Iteration      2000, Cost: 2.22795e-01\n",
 | 
						|
      "Iteration      3000, Cost: 2.20764e-01\n",
 | 
						|
      "Iteration      4000, Cost: 2.18752e-01\n",
 | 
						|
      "Iteration      5000, Cost: 2.16758e-01\n",
 | 
						|
      "Iteration      6000, Cost: 2.14782e-01\n",
 | 
						|
      "Iteration      7000, Cost: 2.12824e-01\n",
 | 
						|
      "Iteration      8000, Cost: 2.10884e-01\n",
 | 
						|
      "Iteration      9000, Cost: 2.08962e-01\n",
 | 
						|
      "w,b found by gradient descent: w: [1.], b: 0.0490\n"
 | 
						|
     ]
 | 
						|
    },
 | 
						|
    {
 | 
						|
     "data": {
 | 
						|
      "image/png": "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\n",
 | 
						|
      "text/plain": [
 | 
						|
       "<Figure size 432x288 with 1 Axes>"
 | 
						|
      ]
 | 
						|
     },
 | 
						|
     "metadata": {},
 | 
						|
     "output_type": "display_data"
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "X = X.reshape(-1, 1)  #X should be a 2-D Matrix\n",
 | 
						|
    "model_w,model_b = run_gradient_descent_feng(X, y, iterations=10000, alpha = 1e-5)\n",
 | 
						|
    "\n",
 | 
						|
    "plt.scatter(x, y, marker='x', c='r', label=\"Actual Value\"); plt.title(\"Added x**2 feature\")\n",
 | 
						|
    "plt.plot(x, np.dot(X,model_w) + model_b, label=\"Predicted Value\"); plt.xlabel(\"x\"); plt.ylabel(\"y\"); plt.legend(); plt.show()"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "Great! near perfect fit. Notice the values of $\\mathbf{w}$ and b printed right above the graph: `w,b found by gradient descent: w: [1.], b: 0.0490`. Gradient descent modified our initial values of $\\mathbf{w},b $ to be (1.0,0.049) or a model of $y=1*x_0^2+0.049$, very close to our target of $y=1*x_0^2+1$. If you ran it longer, it could be a better match. "
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "### Selecting Features\n",
 | 
						|
    "<a name='GDF'></a>\n",
 | 
						|
    "Above, we knew that an $x^2$ term was required. It may not always be obvious which features are required. One could add a variety of potential features to try and find the most useful. For example, what if we had instead tried : $y=w_0x_0 + w_1x_1^2 + w_2x_2^3+b$ ? \n",
 | 
						|
    "\n",
 | 
						|
    "Run the next cells. "
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 5,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [],
 | 
						|
   "source": [
 | 
						|
    "# create target data\n",
 | 
						|
    "x = np.arange(0, 20, 1)\n",
 | 
						|
    "y = x**2\n",
 | 
						|
    "\n",
 | 
						|
    "# engineer features .\n",
 | 
						|
    "X = np.c_[x, x**2, x**3]   #<-- added engineered feature"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 6,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "name": "stdout",
 | 
						|
     "output_type": "stream",
 | 
						|
     "text": [
 | 
						|
      "Iteration         0, Cost: 1.14029e+03\n",
 | 
						|
      "Iteration      1000, Cost: 3.28539e+02\n",
 | 
						|
      "Iteration      2000, Cost: 2.80443e+02\n",
 | 
						|
      "Iteration      3000, Cost: 2.39389e+02\n",
 | 
						|
      "Iteration      4000, Cost: 2.04344e+02\n",
 | 
						|
      "Iteration      5000, Cost: 1.74430e+02\n",
 | 
						|
      "Iteration      6000, Cost: 1.48896e+02\n",
 | 
						|
      "Iteration      7000, Cost: 1.27100e+02\n",
 | 
						|
      "Iteration      8000, Cost: 1.08495e+02\n",
 | 
						|
      "Iteration      9000, Cost: 9.26132e+01\n",
 | 
						|
      "w,b found by gradient descent: w: [0.08 0.54 0.03], b: 0.0106\n"
 | 
						|
     ]
 | 
						|
    },
 | 
						|
    {
 | 
						|
     "data": {
 | 
						|
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEeCAYAAAB/vulGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeVjU5drA8e8Asg6bgwuCouKCoqLlkrlbmhvmkjsK5drJVkqz5YDLe9JKj3Usc8kwNZeOHkrT3EqzRTNTVMpdUKEUJGRRFJjn/WNiZBx2kGG5P9c1V/I8v/nNPRPX3Dy7RimlEEIIIfJgZekAhBBCVFySJIQQQuRLkoQQQoh8SZIQQgiRL0kSQggh8iVJQgghRL4kSQhRRZw+fZq+ffvi5uaGRqMhIiLC0iGJKkCShLC4nj17sm/fvgKv0Wg0eZbv27ePKVOm0KJFC5ycnPD29mbw4MEcOXLkPkSav5iYGBo2bFjgNREREYSEhORZ9/bbb9OtWzdq166NnZ0dPj4+jBw5khMnThQ5hpCQEI4cOUJ4eDhr1qyhe/fuxXgHRafX6wkPDycyMvK+3F9ULJIkhEXs3r2bzMxMs/ITJ05w+fJlsrOz2bVrV57P3bVrF9nZ2QC8+uqr7Nixg379+vHee+/xzDPPEBUVRceOHdm2bdt9fQ8pKSl8//33ZuVKKXbs2AFAdHQ0sbGxZtekp6ezf/9+48+HDx+mefPmzJw5k6VLlzJx4kQOHz5Mhw4dOHjwYKGxZGRkcPDgQcaMGcMLL7xAUFAQjRs3LsW7y59er2f27NmSJKoLJUQ50+v1auzYsap169bqwIEDqkePHuqrr75SM2bMUI0aNVLffvutunLliurQoYMaPHiwio2NVYCKjY1VgwcPVp06dVJXrlxRSim1b98+lZWVZXL/q1evKp1Op1q3bn1f38fx48dV8+bN1VNPPaV++eUX5ePjo06cOKG6dOmi+vXrp9LS0tSGDRuUt7e3WrBggVqxYoUKDg5WX3zxhfL19VUzZ84s8P5//PGHsrGxUaNHjy40lpzP6PXXXy+rt5evzMxMBajg4OAyv3dWVpa6fft2md9XlJwkiWrq9u3bqm3btqpOnTrq2rVrJnUDBgxQ9vb2Kjo6utj3HTBggHJ0dFSnTp0yKX/66aeVRqNRe/bsMZYdOnRI9ezZUzk6OipPT0/1f//3f+rmzZvGer1er9avX6/atGmjANWmTRu1cePGIsUxbNgwZW1tXez4lVLq3LlzSqvVqkcffVTp9XpjeVJSkvLy8lJ+fn7GODMzM9UHH3ygGjdurGxtbVWHDh3U7t27Te6XlJSkXnrpJVWzZk3l5OSkhg4dqk6fPl1oHNnZ2crZ2Vn169evwOuCg4MVYPbIkZmZqebPn69atGih7OzslE6nU+PGjVOXL182uc93332nxowZoxo2bGi8bvjw4SaxXrx4Mc/X6tGjh1JKqU8++UQB6uLFi2ZxAiosLMz487fffqsAtXz5cvXOO++oxo0bK2tra/Xtt98qpZRKS0tTs2bNMn62np6e6umnn1ZJSUkm9z169KgaNGiQql27trKzs1P169dXw4cPV7GxsYV+xqJwNuXedBEVgq2tLevWrePBBx9k8uTJxq6DDz/8kO3bt/P+++/TsmXLYt931apVtG7dmqCgIH788Udq1KjB9u3bWbp0KS+99BKPPPKI8VorKys0Gg3q7+3DNBqNydiDRqPB2tra5P75jU3cKz4+nlq1ahU7fgBfX1/ee+89Jk6cyOLFi3nxxRcBmDZtGteuXePLL7/EwcEh3xjvde81977P3BITE9Hr9Vy5coVFixaRmprKY489VuD9p06dStu2bXnxxRd5/PHHeeKJJ4x1SilGjBjB9u3bCQkJ4fnnnycuLo4lS5bw3XffcfToUXQ6HQCbNm0iPj6e4OBgvLy8iI2NZfny5XTr1o2TJ09Sq1YtatWqxerVqwkODqZbt25MmTIFgDp16hTyqebvvffeIysriylTpuDo6Iinpye3b9/mkUceITo6milTptC8eXPOnDnDBx98wMGDB/npp5+ws7MjISGBRx99FDc3N1566SU8PDyIj49n165dXLlyhQYNGpQ4LvE3S2cpYVnvv/++AtSKFSvUqVOnlKOjo3rsscdM/oIuri+++MLY9ZGQkKDq1KmjWrdurTIyMpRShhbC+PHjTbqbtm3bpl555RXVqFEjtW/fPnXlyhXVqVMns+6mwMBA9dBDD6m4uLh8X3/37t0KUC+99FKJ34NShtaInZ2dOnHihPr0008VoP71r38Z60+cOKFatmypnnzySbPupv79+6u0tDS1adMmVb9+fTV//nxjd1NkZKTy9fVVr776qtlrkuuvcxcXFzVr1iyz7rS85PyFf29308aNGxWgtm7dalL+66+/Kmtra5Pr09LSzO57+vRpZWtrq9566y1jWUHdTSVpSdSuXVslJyebXLtgwQJVo0YNdeTIEZPynN+tFStWKKWUioyMVID6+eefzV5PlA1JEtWcXq9X/fr1U05OTqp169bKw8NDxcfHl/q+U6ZMUdbW1qpDhw7GL9rcdu7cqe7cuaOUUqpHjx7GLobjx4+rS5cuqaysLPX1118br8/998zXX3+d7xfn5cuXVd26dVWjRo3UjRs3SvUeEhMTVb169VTLli2Vi4uL6tatm8rOzjbW37hxQx04cEApZfiS9vHxUUoZPtPt27crpZQ6efKkiomJUUoZvkBzvljT0tLUvn37zF5z9+7daseOHWrJkiWqQ4cO6tlnn1W3bt0qNNb8ksTQoUOVt7e3SkhIMHs0bdpUPfTQQ3neLzU1VSUmJqqEhATVunVrNWzYMGNdWSeJF1980ezadu3aqc6dO5vFfO3aNeXg4GAcp8m5x5tvviljGfeJJAmh/vjjD+Xo6KgA9d///rdM7pmenq68vb0VoN59990Cr82dJPJTlEZvQkKCatGihdLpdCUaT8lLzl+uTk5Oxi/7vOROEvnJnSSKIjk5WTVo0EAFBQUVem1+SaJFixZ5jiHkPBo3bmy8Nj4+Xk2YMEG5u7ubXderVy/jdWWdJN5//32zax0cHAqMu3fv3kopQ0IeOXKkApRWq1X9+/dX7733nkpISCj0MxNFI2MSgv3793Pz5k0AoqKiGD58eKnvefToUf744w/jPQtS2BoJwDhukZ/k5GT69u3LlStX+Oabb0o0npKX7du3A3Dz5k3OnTuHj49Pntc1bNiQmJiYAu8VEhKS7zqJvLi6ujJgwACWL1/OihUrsLe3L/Jzc+j1eho3bsyyZcvyrM8ZW9Hr9fTt25e4uDhefPFF/P390Wq1WFlZ8cILL6DX64v0evmNteRMWS4ohnvj7ty5M3PmzMnzOe7u7sbX27hxIzNmzGD79u3s2bOHl156iTlz5rBnzx7atm1bpLhFASydpYRlXb58Wbm7u6suXbqo8ePHK2tra/XTTz+V6p4pKSmqUaNGytfXV7388ssKUJs2bSqjiM2lpqaqhx56SDk4OOTZhVNSW7duVYB6/vnnlZ+fn/Ly8jKbWXO/hYSEKEBdvXq1wOvya0kMHDhQOTs7q8zMzAKff+zYMQWoTz75xKzO09PTOHtJKcM0VfJpSeS0vH799VeT8jNnzuTbksgZX8jN399ftWjRosCY8xMVFaVsbGzUmDFjSvR8YUoW01VjSimCg4PJyspizZo1LFmyhPr16xMUFERaWlqJ7/vcc89x6dIl1q5dy1tvvUXHjh2ZNm0a8fHxZRi9wa1btwgMDOTIkSP897//pUePHmVy34SEBCZOnEi7du14++23WbduHdeuXePpp58uk/vnlp6eTnp6ull5XFwcW7duxcfHh9q1a5fo3mPGjCE1NZW3337brE4pRWJiIoBx9tW9LYbVq1cbW4Q5rK2tsbe356+//jK7Z9OmTQH45ptvTMoXL15c7Lh///13PvvsM7O67OxskpKSAPjrr7/MWpktWrTAwcHBeI0oHeluqsYWLVrEN998w6pVq2jUqBEAa9asoUePHrz44ousWLHCeG3Pnj3Zv39/od0+W7ZsISIign/+85889NBDAKxdu5Z27doREhLCzp07izyNtSjGjRvHvn37GD58OElJSaxdu9akfujQoTg5OQGGrTMaNWpEcHBwofsaTZw4kZSUFL799ltsbW154IEHCA8P5/XXXycwMJBx48aV2Xs4e/YsvXv3ZsSIETRv3hytVsuZM2eIiIggOTmZVatWlfjeY8eOJTIyktdff50ff/yR3r174+DgwMWLF4mMjGTs2LGEh4fj5+eHn58foaGhxMbGUq9ePQ4dOkRkZGSeK7c7dOjAnj17ePfdd/H29qZ27dr07t2bFi1a0KNHD9544w2uX7+Ot7c3u3btIi4urlhxh4aGsn37doKCgti2bRudO3cG4Ny5c2zevJl58+YREhLC6tWr+c9//sPQoUNp0qQJWVlZbNiwgdTU1DL9f1StWbYhIyzl+PHjys7OzmTWSo5Zs2YpQH3xxRfGsgcffFDVrVu3wHvGx8crnU6nOnbsaNa9sWzZMgWo9957r2zewN98fHwKHODMPYB64sQJBeQ59TSvWO8dUM3OzlZdu3ZVrq6uZbpQKyEhQT399NPK399fubi4KBsbG+Xl5aVGjRpV5Kmd+XU35cS9ZMkS9cADDygHBwel1WpVixYt1DPPPGMywH/u3DkVGBio3N3djYsJjx49qnr06GHS3aSUYdZW9+7djRMectdfunRJDRo0SDk6Oio3Nzc1fvx4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\n",
 | 
						|
      "text/plain": [
 | 
						|
       "<Figure size 432x288 with 1 Axes>"
 | 
						|
      ]
 | 
						|
     },
 | 
						|
     "metadata": {},
 | 
						|
     "output_type": "display_data"
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "model_w,model_b = run_gradient_descent_feng(X, y, iterations=10000, alpha=1e-7)\n",
 | 
						|
    "\n",
 | 
						|
    "plt.scatter(x, y, marker='x', c='r', label=\"Actual Value\"); plt.title(\"x, x**2, x**3 features\")\n",
 | 
						|
    "plt.plot(x, X@model_w + model_b, label=\"Predicted Value\"); plt.xlabel(\"x\"); plt.ylabel(\"y\"); plt.legend(); plt.show()"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "Note the value of $\\mathbf{w}$, `[0.08 0.54 0.03]` and b is `0.0106`.This implies the model after fitting/training is:\n",
 | 
						|
    "$$ 0.08x + 0.54x^2 + 0.03x^3 + 0.0106 $$\n",
 | 
						|
    "Gradient descent has emphasized the data that is the best fit to the $x^2$ data by increasing the $w_1$ term relative to the others.  If you were to run for a very long time, it would continue to reduce the impact of the other terms. \n",
 | 
						|
    ">Gradient descent is picking the 'correct' features for us by emphasizing its associated parameter\n",
 | 
						|
    "\n",
 | 
						|
    "Let's review this idea:\n",
 | 
						|
    "- Intially, the features were re-scaled so they are comparable to each other\n",
 | 
						|
    "- less weight value implies less important/correct feature, and in extreme, when the weight becomes zero or very close to zero, the associated feature is not useful in fitting the model to the data.\n",
 | 
						|
    "- above, after fitting, the weight associated with the $x^2$ feature is much larger than the weights for $x$ or $x^3$ as it is the most useful in fitting the data. "
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "### An Alternate View\n",
 | 
						|
    "Above, polynomial features were chosen based on how well they matched the target data. Another way to think about this is to note that we are still using linear regression once we have created new features. Given that, the best features will be linear relative to the target. This is best understood with an example. "
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 7,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [],
 | 
						|
   "source": [
 | 
						|
    "# create target data\n",
 | 
						|
    "x = np.arange(0, 20, 1)\n",
 | 
						|
    "y = x**2\n",
 | 
						|
    "\n",
 | 
						|
    "# engineer features .\n",
 | 
						|
    "X = np.c_[x, x**2, x**3]   #<-- added engineered feature\n",
 | 
						|
    "X_features = ['x','x^2','x^3']"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 8,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "data": {
 | 
						|
      "image/png": "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+LPw40NSyRvgNJcMCD+e18E4kAhccQfb6/UqEGg7vyMQCCgtLS3inxHJnedId/XgzjQQXX/Kk/51SPryR+8wDU2V3r6O5hpwmo7y+qc8+2oC7OaKBjs7O1stLS364osvNHLkSElSeXl5xAscJZpnwE1GpAebabawBJyPvALteYwxxu4iIjF9+nR5PB4VFxerrKxMkydP1s6dO9s02UeO/PCc1pOnlACJyMmZcHJtgB2cnAkn1wbYobNMuGIOtiQ9/vjjam5u1s9+9jPddNNNWr16dZfuYAMAAACx4Jo72JH48W8TANpy2l0n8gp0jLwC7uHqO9gAAACAG9BgAwAAABaKqykiAAAAgN24gw0AAABYiAYbAAAAsBANNgAAAGChhGmwDx8+rClTpig1NVWZmZl69tln7S6pSy677DIlJyfL6/XK6/XqnHPOsbuksFatWqWxY8cqKSlJBQUFbY5t375dOTk5SklJ0YQJE1RdXW1PkafQUf0HDhyQx+MJ/f/v9Xq1bNky+wpNAG7I7Ole78YYLVq0SBkZGcrIyFBhYaHsWg5z7NgxzZkzR5mZmUpLS9P555+v1157LXTcLechSfn5+Ro4cKDS09OVnZ2t4uLi0DE3nYcbOT2v0bzODxw4oAkTJiglJUU5OTnatm1bTM/tiy++UHJysvLz811/Phs2bNC5556r1NRUZWVlaceOHe49H5Mgpk+fbm688UbT0NBgduzYYdLT083u3bvtLiti48ePN08++aTdZXSqpKTEvPTSS2bevHlm9uzZofGvv/7apKenmxdeeME0Nzeb3/72t2bcuHH2FdqBjuqvqqoykszx48ftKy7BuCGzp3u9P/HEEyY7O9t8+eWXpqamxpx77rlm9erVNpyBMY2NjWbx4sWmqqrKtLa2mi1bthiv12uqqqpcdR7GGLN7925z9OhRY4wxe/bsMf379zcffvih687DjZye12he57/4xS/M3Xffbf773/+ajRs3Gp/PZ+rr62N2bpMmTTJ5eXlmxowZxpjuv/7YdT5bt241w4YNM++//75pbW01NTU1pqamxrXnkxANdmNjo+nVq5f5/PPPQ2P5+flm0aJFNlbVNW5psL/3wAMPtGk41qxZYy688MLQ542NjSY5Odns2bPHhuo6d3L9NNix5bbMdvV6v/DCC82aNWtCx4uLix31C+fo0aPNxo0bXX0ee/fuNQMGDDDPP/+8q8/DDdyW1+9ZcZ1//vnnpnfv3iYQCISO5+XlxewXtOeee87ccMMNZvHixaEG263nc+GFF5ri4uJ24249n4SYIrJv3z716NFD2dnZobHc3FxVVFTYWFXX3XffferXr58uvvhivfXWW3aX0yUVFRXKzc0Nff792z9u+zvIzMzUkCFDdMstt+jQoUN2lxO33J7Zzq73k4876dzq6uq0b98++f1+V57HnXfeGXoreODAgZo8ebIrz8NN3JhXq67ziooKnXXWWUpLSwt7PJoCgYB+//vfa8WKFW3G3Xg+ra2t+vDDD/X111/r7LPP1pAhQzR//nw1Nze78nykBJmD3djY2O4xlj6fTw0NDTZV1HWPPPKI9u/fr9raWt1+++26+uqrVVlZaXdZEXP730G/fv30z3/+U9XV1froo4/U0NCgGTNm2F1W3HL79dJZ/Scf9/l8amxstH3e7/HjxzVjxgzNnj1bOTk5rjyPxx9/XA0NDdqxY4emTp2qpKQkV56Hm7gtr1Ze53aee1FRkebMmaOhQ4e2GXfj+dTV1en48ePauHGjduzYobKyMn388cdavny5K89HSpAG2+v1KhAItBkLBAJtfqNxunHjxiktLU1JSUmaPXu2Lr74Yr366qt2lxUxt/8deL1ejR07Vj179lT//v21atUqbd26td05wRrxcL2cqv6TjwcCAXm9Xnk8npjW+WMnTpzQzJkz1bt3b61atUqSO89Dknr06KG8vDzV1NRo9erVrj0Pt3BTXq2+zu0697KyMm3btk133313u2NuPJ8+ffpIkhYsWKCBAweqX79+uueee/Tqq6+68nykBGmws7Oz1dLSoi+++CI0Vl5eLr/fb2NV3ePxeFx1d8Xv96u8vDz0eVNTkyorK137d/D9P7xu+jtwE7dntrPr/eTjdp+bMUZz5sxRXV2dSkpK1KtXL0nuO4+TtbS0hOp183k4nVvyGo3r3O/3a//+/W3uiMbi3N966y0dOHBAw4YN04ABA/Too4+qpKREP//5z115Pn379tWQIUPC/lLrxvORlDi7iEybNs1Mnz7dNDY2mnfffddxK5xP5dtvvzWvv/66aW5uNsePHzfr1683KSkpZu/evXaX1s7x48dNc3Oz+d3vfmfy8/NDNdfX15v09HSzceNG09zcbAoLCx25iKij+nft2mX27t1rWltbzaFDh8yNN95oLrvsMrvLjWtuyOzpXu+rV682OTk5pqamxtTW1ppRo0bZumvF3Llzzbhx40xDQ0ObcTedR11dnXnuuedMQ0ODaWlpMa+//rpJSUkxmzdvdtV5uJUb8hqt63zcuHFm4cKFprm52WzatCkmu1Q0NTWZr776KvRn4cKF5vrrrzf19fWuPB9jjCkqKjJjx441dXV15vDhwyYvL888+OCDrj2fhGmwv/nmG3PttdealJQUM3ToUPPMM8/YXVLE6uvrzdixY43X6zU+n8+MGzfObN261e6ywlq8eLGR1ObP4sWLjTHGvPnmm+acc84xycnJZvz48aaqqsrWWsPpqP5nn33WDB8+3KSkpJgBAwaYmTNnmq+++srucuOaGzJ7utf7iRMnzL333mv69u1r+vbta+69915z4sQJW87hwIEDRpJJSkoyqampoT/r16931XnU19ebSy+91Ph8PpOWlmbOO+88s3bt2tBxt5yHWzk9r9G8zquqqsz48eNNcnKyyc7ONm+++WasT6/NLiLGuPN8/ve//5k77rjD+Hw+079/f7NgwQLT3Nzs2vPxGMN73AAAAIBVEmIONgAAABArNNgAAACAhWiwAQAAAAvRYAMAAAAWosEGAAAALESDDQAAAFiIBhsAEpAxRgUFBfJ4PLr++uvV2tpqd0kAOkBe3YcGGwAS0Pz58/Xyyy+ruLhY7733ngoKCnTyYxE+/fRTzZw5U8OHD1dycrJGjBihu+66S//5z39sqhpITJHktbm5WVdddZWGDRum5ORk9e/fX9ddd50+++wzm6pObDTYAJBgCgsLtXnzZr3zzjuaM2eO3n33Xb333nu644472nzdv/71L3m9XhUXF+uzzz7TE088oS1btuimm26yqXIg8USaV4/Ho0mTJumFF17Q559/rn/84x9qaWnR5ZdfrqNHj9pUfQKLyfMiEfcOHTpkhgwZYn7zm9+Exurq6syAAQNMYWGhjZUBiSOSHD700ENm5MiRbR41bIwxBw8eNKNHjzb33HPPKf83Nm7caDwejzly5Ijl9QOJJBZ5LSsrM5JMWVmZ5fXj1HhUOizzzjvv6PLLL9emTZt01VVX6YorrtCRI0e0Y8cO9erVy+7ygIQQ7Rz+7W9/04IFC3TkyBH17NnTgoqBxBXNvDY0NOj+++/XSy+9pH379iklJcWiqhGJHkuWLFlidxGID5mZmTLG6P7771d9fb22bNmiN998UxkZGXaXBiSMaObw3//+t26++WYVFBToiiuusKBaILFFI6+LFi3SlClTtHTpUgUCAW3dulX9+/e3sGpEgjvYsNSJEyeUl5en999/Xxs2bNC0adPsLglIONHIYX19vSZOnKihQ4dq8+bNvCsFWMTqvB46dEjffvutamtr9eijj6q6ulo7d+5UWlqaRRUjEixyhKW++uor7du3Tz169NC+ffvsLgdISFbnsKamRuPHj1dmZqY2bdpEcw1YyOq89uvXTyNHjtRll12mTZs26bsf1UoAAAFwSURBVMCBA3rmmWcsqBRdQYMNy5w4cUL5+fny+/3auHGjli5dqnfffdfusoCEYnUOKysrdckll2jUqFHatGmTkpKSLKwWSGyx+HfTGKNjx45Z+jPROVaowDIPP/ywPv30U5WVlWnIkCGaN2+eZsyYobKyMvXt29fu8oCEYGUOP/vsM02cOFFjxozRX/7yF33zzTehY2eeeaZ69OhhdflAQrEyr2+99Zb27Nmjiy66SH379tWXX36pRx55RGeccYamTJkSpTNAR5iDDUvs3LlT48ePV0lJia655hpJ0rFjx3TBBRfo7LPPVklJic0VAvHP6hwuWbJEDz30UNhjVVVVGj58eHdLBhKW1Xn94IMPVFhYqN27d6uxsVEDBgzQJZdcovvvv1+jRo2KxingFGiwAQAAAAsxBxsAAACwEA02AAAAYCEabAAAAMBCNNgAAACAhWiwAQAAAAvRYAMAAAAWosEGAAAALESDDQAAAFjo/wPM+TMU0vfSzQAAAABJRU5ErkJggg==\n",
 | 
						|
      "text/plain": [
 | 
						|
       "<Figure size 864x216 with 3 Axes>"
 | 
						|
      ]
 | 
						|
     },
 | 
						|
     "metadata": {},
 | 
						|
     "output_type": "display_data"
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "fig,ax=plt.subplots(1, 3, figsize=(12, 3), sharey=True)\n",
 | 
						|
    "for i in range(len(ax)):\n",
 | 
						|
    "    ax[i].scatter(X[:,i],y)\n",
 | 
						|
    "    ax[i].set_xlabel(X_features[i])\n",
 | 
						|
    "ax[0].set_ylabel(\"y\")\n",
 | 
						|
    "plt.show()"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "Above, it is clear that the $x^2$ feature mapped against the target value $y$ is linear. Linear regression can then easily generate a model using that feature."
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "### Scaling features\n",
 | 
						|
    "As described in the last lab, if the data set has features with significantly different scales, one should apply feature scaling to speed gradient descent. In the example above, there is $x$, $x^2$ and $x^3$ which will naturally have very different scales. Let's apply Z-score normalization to our example."
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 17,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "name": "stdout",
 | 
						|
     "output_type": "stream",
 | 
						|
     "text": [
 | 
						|
      "Peak to Peak range by column in Raw        X:[  19  361 6859]\n",
 | 
						|
      "Peak to Peak range by column in Normalized X:[3.3  3.18 3.28]\n"
 | 
						|
     ]
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "# create target data\n",
 | 
						|
    "x = np.arange(0,20,1)\n",
 | 
						|
    "X = np.c_[x, x**2, x**3]\n",
 | 
						|
    "print(f\"Peak to Peak range by column in Raw        X:{np.ptp(X,axis=0)}\")\n",
 | 
						|
    "\n",
 | 
						|
    "# add mean_normalization \n",
 | 
						|
    "X = zscore_normalize_features(X)     \n",
 | 
						|
    "print(f\"Peak to Peak range by column in Normalized X:{np.ptp(X,axis=0)}\")"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "Now we can try again with a more aggressive value of alpha:"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 18,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "name": "stdout",
 | 
						|
     "output_type": "stream",
 | 
						|
     "text": [
 | 
						|
      "Iteration         0, Cost: 9.42147e+03\n",
 | 
						|
      "Iteration     10000, Cost: 3.90938e-01\n",
 | 
						|
      "Iteration     20000, Cost: 2.78389e-02\n",
 | 
						|
      "Iteration     30000, Cost: 1.98242e-03\n",
 | 
						|
      "Iteration     40000, Cost: 1.41169e-04\n",
 | 
						|
      "Iteration     50000, Cost: 1.00527e-05\n",
 | 
						|
      "Iteration     60000, Cost: 7.15855e-07\n",
 | 
						|
      "Iteration     70000, Cost: 5.09763e-08\n",
 | 
						|
      "Iteration     80000, Cost: 3.63004e-09\n",
 | 
						|
      "Iteration     90000, Cost: 2.58497e-10\n",
 | 
						|
      "w,b found by gradient descent: w: [5.27e-05 1.13e+02 8.43e-05], b: 123.5000\n"
 | 
						|
     ]
 | 
						|
    },
 | 
						|
    {
 | 
						|
     "data": {
 | 
						|
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEeCAYAAAB/vulGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeXiMV/vA8e8kJGQlS4ktCBJCg2pVUanSWpoireW1JYo3tGpfSpXEVnvVT2nwElstbYillqqW0pYqFZJaiiZILIkgi4Qkc35/REbGJAQxk8T9ua5cbc45zzP3jMnc8zxn0yilFEIIIUQuzEwdgBBCiMJLkoQQQog8SZIQQgiRJ0kSQggh8iRJQgghRJ4kSQghhMiTJAnxWKKiotBoNISEhOjKQkJC0Gg0REVFGT0ef39/qlatavTHFcazYsUKPDw8sLCwQKPRmDqc544kiQKyd+9eNBoNGo2GHTt2GNRnf5D++OOPJohOGFtUVNQjk1dISAj+/v4G5ampqXz99de0a9eOypUrY2VlRZ06dRg9ejQ3b958NgHnITAwkMDAwIe28fb2Zu/evQblV65cwc/Pjzp16mBvb4+1tTWenp5MmjSJpKSkfD3+yZMn+eCDD6hQoQLBwcGsWrXqCZ5F/hw9epTAwECTfNkpzCRJPAOfffaZqUMwql69epGamoqrq6upQzGpxMREDhw4YFCulNJ9cYiMjCQ6OtqgTUpKCvv27QMgOjqagQMHkpyczMCBA5k/fz4tWrTgiy++4OWXXyYxMfGZPo8//viD+Ph4g/L4+Hj++OMPAHbv3k16erpBmxMnTnDx4kUArl+/zr///su7777L559/zty5c2nWrBlTp06lZcuWZGRkPDKWffv2odVqmTlzJn369KFnz55P+ezydvToUYKCgiRJPECSRAFr2LAhR44cYdOmTc/8sW7fvv3MHyM/zM3NKVWq1HN/KyA6Opp+/frRt29frl+/DkBERATNmzdn/vz5pKSkEBERQbNmzZg5c6buQ3LLli14eXnpEomzszPHjh3jl19+Ydy4cfTr149FixYRHBzM2bNnWbp06TN9Hr/99hsNGzZk2bJlKKVQSrFs2TJeeuklDh06hFKKkJAQXnrpJV1SvH37NmPGjKFDhw6cO3cOAE9PT3755RemT5/Ohx9+SEBAAMHBwUydOpU///yTPXv2PDKWa9euAVCmTJln94SNoLD8rT4RJQrEzz//rAD11VdfqSpVqqh69eoprVarq1++fLkC1O7du/WOu3TpkvLz81MvvPCCsrCwULVr11Zz587VO1YppVq0aKEqVqyoTp06pdq2batsbW1VixYt9OrOnz+v2rdvr2xsbNQLL7ygxo8fr7RarYqPj1c9e/ZUZcuWVba2tuqDDz5QqampeuffvHmz6tChg6pUqZKysLBQ5cqVU35+fury5ct67f79918FqOXLlxs8t3///VfvtcjrJ7udUkpdu3ZNffjhh6pSpUqqZMmSytXVVX3yyScqLS3N4DWeO3euqlatmrK0tFT169dXW7duVX5+fsrV1fWh/zZ37txR9evXV+XKlVPXrl3Tq2vXrp0qVaqUioyMzPP4s2fPKhsbG9WqVSu9f5eEhARVsWJF5eHhoW7fvq2UUio9PV199dVXqnr16srCwkK9/PLLBv/mCQkJavjw4crBwUFZW1urTp06qdOnTz/0OSilVGJiogJU3759H9k2NzNmzFCAWrlypV75hg0bFKAmTJigK7t06ZLq06ePsrOzU3Z2duqDDz5QMTExescdOnRIeXt7KysrK+Xi4qKmTp2qex0eJvvx1q1b99B2ub13/Pz8dPXnz59XvXr10v3t1KpVS82cOVNlZmbqnWfOnDnq9ddfV87OzsrCwkK5ubmpCRMmqLt37+raTJw4MdfHy36ft2jRQvf3ltOD732llPLz81OAunDhguratasqU6aMqlq1qq7+2LFjqmPHjsrBwUFZWlqqevXqqWXLlj3ydTOVEkbKRc8NCwsLPvvsM/r378/69evp1q1bnm2vX7/Oa6+9xpUrV/joo4+oXr0627ZtY/jw4Zw7d44FCxbotb99+zatWrXi7bffZvbs2Zibm+vqUlNTadWqFW+99RYzZ85k06ZNTJkyBRsbG9avX0/t2rWZOnUq+/btY9myZZQrV45p06bpjl+2bBkZGRkMGDCAF154gVOnTrFkyRIOHTrEsWPHsLS0zPdrULt2bYN7x5mZmYwaNYrk5GRsbW11z//VV18lKSmJ//73v1SpUoUjR44wa9YsTpw4wbZt23THT506lfHjx9O8eXOGDh1KTEwM3bt3z9ctLgsLC9asWcNLL71E//79CQsLA2DhwoVs376d+fPnU6dOnTyPd3Nz48svv6Rv377MmzePYcOGATBgwACuXbvGli1bKF26NAAajUbv3yU3D7bJ7st6lNjYWCDrSuNJjBw5kh07djBo0CBef/11XF1diYmJISAggFdeeUXvNqlGo8HMzEzv9weZmZmh0WhQ95Z/y+t53Llzh6SkJNLS0jh27Bhjx47FysqK5s2bPzTeVatWsXHjRjZt2sTs2bMpV64cbm5uAJw9e5YmTZpgY2PDxx9/jLOzM3v37mX06NFERUXx1Vdf6c4za9Ys3n77bd59912srKw4cOAAU6ZM4cKFCyxfvhwAX19fLl26xP/+9z/GjRtH7dq1AXjttdfy+/IaaNu2LbVr12batGncuXMHyLpKa926NW5ubowePRpbW1u2bt3KBx98QHx8PKNGjXrix3tmTJ2liovsb89LlixR6enpqkaNGsrd3V1lZGQopXK/khg1apQC1Hfffacr02q1qlOnTgpQx48f15W3aNFCAerzzz83eOzsunnz5unK7t69q1xcXJRGo1HDhw/Xa9+oUSPl4OCgV5acnGxw3r179ypArV27VleWnyuJ3Hz88ccG3x4HDhyoypYtqy5cuKDX9ssvv9R7reLj45WlpaV67bXXVHp6uq7d9u3bFfDIK4ls8+fP1/0bnTp1SllZWam3337b4KotL76+vsrS0lKdOHFCrVy5UgFq2rRpuvoTJ06oOnXqqD59+qg///xTubq6qhMnTqimTZuqtm3bquTkZLVhwwZVuXJlNX36dLVkyRLl5+enwsLClJubm/rkk08e+vg9evRQGo1GhYeH5yve3Fy4cEGVKVNGNW/eXKWnp6tWrVopa2tr9c8//+jazJ8/X1WpUkUtXbpUTZgwQU2YMEEtXbpUValSRc2fP19ptVrVq1cvVa9ePbV//37VokULtW3bNjVq1ChVrVo1tXfvXr3HzH5/ZP/Url3b4OoqL9nf8HPGp5RSbdu2VdWqVVO3bt3SKx82bJjSaDTqzJkzurLc3tuBgYHKzMxMXbp0SVe2ZMkSBaiff/7ZoP2TXEkEBATotdVqtapOnTrq1Vdf1XsfK6VUp06dlJWVlbp586bBY5iaJIkCkjNJKKXUqlWrFKBCQkKUUrknCXd3d1WjRg2Dc/32228KUFOnTtWVZSeC3N5ELVq0UGZmZga3kDp06KAAvT8YpZQaMmSIAlRCQoLBubRarbp165aKi4tTcXFxqkyZMnpJ5kmSxOLFixWgxo8fr/c4Dg4OqmvXrrrHyv75+++/FaD70Fy7dq0C1DfffGNw7tq1a+c7SWi1WtWmTRtlbW2t6tWrp5ycnFRsbGy+jlUqK1lVqFBB1alTR9nZ2anmzZvr3dq4deuW2r9/v1Iq63XKjkur1art27crpZSKiIhQUVFRSqms1y379klycrLBh2tO2R9gDyb8J5H9ejZp0kTvPZvt4MGDKi4uTimV9SE9ceJEpZRScXFx6uDBg0oppXbt2qW7XdOiRQvdB+vx48cNkn5sbKzavXu3Cg0NVSNHjlQNGjRQ3377bb5izS1J3LhxQ2k0GjVy5EiD987OnTsVoL7++muDc2VkZKgbN26ouLg4tW/fPgWoLVu26OoLOkk8mMzDw8MVoObPn28Qd/Zj79y5M1+vizHJ7aZnpHv37nz++edMmjSJ7t2759omKiqK1q1bG5Rn3/r4999/9codHBywt7fP9VwvvPACpUqV0ivL7uyrUqVKruUJCQmULVsWgDNnzvDJJ5+we/dukpOT9drfuHEj18fMj3379vHRRx/RsWNHJk2apCuPi4sjISGB9evXs379+lyPze60zB5t4u7ubtDG3d2dv/76K1+xaDQali9fjpubGydOnOC7777DxcUl38/F0dGRRYsW0aFDB6ytrVm1apXeLRk7OzuaNWuW6+O2bdsWyOrMzY21tTUtWrTItW7z5s0MHDgQHx8fZsyYke9489KtWzc2bNjApk2baN++Pf369dOrb9y4ca7HOTk54eTkBMBbb72Va5t69eoZlLm4uOheZ19fXzZt2oSvry+7d++mVatWjx3/mTNnUEoxe/ZsZs+enWub7PcOwM6dO5k0aRJ//vmnwYisp3lvP0q1atX0fj916hQAgwcPZvDgwbkekzPuwkKSxDNiZmZGYGAgXbp0YdmyZXne03/YvegH67Lve+fmYffB86pT9+4lJyUl0aJFC0qWLMnEiROpWbMmVlZWaDQaunXrhlarzfPcD/Pvv//y/vvv4+HhwapVq/SeT/Y5O3XqxIcffpjr8RUqVNCLsyBGT+3bt0830iQ8PJz33nvvsY7fvn07kNU/dPbs2Tz7RKpWrfrIoZT+/v65zpPI6YcffqBr1640b96cDRs2UKLE0//JJiQkcOjQISDr3v7t27exsrLKte2j5kgAuc6ReJgOHTpgZWXF8uXLnyhJZL93BgwYkOe/X/Xq1QE4ePAg7du3p3Hjxvzf//0flSpVwtLSkpiYGPz9/fP93s7Z95JTZmZmnsc8+Pea/ViBgYE0bdo012Py+hJhSpIknqH3338fLy8vpkyZwvjx4w3qq1atysmTJw3Ks8uMNZP4p59+4sqVK/z88894e3vrylNTU5/4m1ZSUhI+Pj5oNBq2bNmCjY2NXr2zszN2dnakpaU98oMi+xvZqVOnaNCggV7d6dOn8x3TpUuXGDhwIE2bNqV69epMmzaNdu3a8eqrr+br+G3bthEcHMyQIUPYtWsXfn5+nDhxQnc1VtB++eUXOnbsiJeXF1u2bDG4UnxSAQEBxMfH88UXXzB8+HBGjRql19H7rGVmZpKRkfHE7y03NzddJ/mj3jvr16/HwsKCPXv26H1o79q1y6Dtw76ElC1bVje0N6fz58/nO+4aNWoAWcnjSZKjqcg8iWdIo9EwadIkLl26xOLFiw3qfXx8OHv2rN6ciuzL6Ox6Y8i+0njwW9XMmTOf6CpCq9XSvXt3zpw5Q2hoaK7JztzcnC5durBr165cJ6ClpaXpZuW2bt0aS0tLFixYoDcBa8eOHbkm2dwopfDz8yMjI4NVq1axYMECKleuTM+ePQ1ur+UmLi6Ovn370qBBA2bOnMmaNWu4du0aAwcOzNfjP64//viDd955hxo1arBz506DJPukVqxYwXfffcfUqVMZOnQow4YNY+HChbmuEvC08rp1smzZMu7evcsrr7zyROd1dnbmzTffZMWKFZw9e9agPjExUTeayNzcHI1Go/eNPzMzk1mzZhkcl/0a55a8atasyalTp7h8+bKu7NatW7rRUfnRsGFD3N3d+fLLL3OdrBgXF5fvcxmTXEk8Y++++y6vvPKKbqZqTp988gkbNmzgP//5j24I7Pfff8+OHTv46KOPcr2/+yw0bdoUZ2dnevXqxccff4ydnR0//fQThw8fxtHR8bHP9/XXX7Nt2zbatWtHdHS0wQzjTp06YW1tzfTp0/nll19o2bIl/v7+NGjQgLS0NE6fPs23335LaGgo3t7eODo6Mm7cOCZOnEjLli3p3LkzMTExLFy4kLp16+ZriYe5c+fy008/sWzZMt2VyapVq2jRogXDhg1jyZIlDz2+b9++JCYm8vPPP2NhYUHDhg0JDAzk008/xcfHhx49ejz265SX6Oho2rRpQ2pqKn5+fnz//fd69eXKldPrywoMDCQoKMjgSvBBUVFRDB48GG9vb4YPHw7AtGnT2L17Nx988AEnTpzQ9TkUhGnTprFv3z7atGlDtWrVSElJ4cCBA2zatIlatWoxZMiQJz73okWLaNq0KQ0aNKBfv37Url2bW7duERERQWhoKBEREVStWpUOHTowd+5cWrZsiZ+fH6mpqaxfvz7XLz+NGjVCo9Hw+eefc/PmTUqXLk3jxo2pVq0a/fv3Z86cObRq1YqAgABu377NkiVLqFSpkl7ieBgzMzOWL1/OW2+9RZ06dejbty/Vq1cnPj6ev/76i82bN+uSW6Fiyl7z4uTB0U057dq1Szf8L7fJdL1791ZOTk7KwsJCeXh4qDlz5uQ5mS43edVlj7J4cLhdbiNGjhw5ot544w1la2urypQpozp16qTOnz+vXF1d9SYw5Wd0U14Tk7J/co4EuXHjhho1apSqUaOGsrCwUI6Ojurll19WgYGB6vr163pxz549W7m6uipLS0vl5eWV78l0x48fV5aWlsrX19egbuzYsQpQmzdvzvP44OBg3aiUnDIzM1WzZs2Uvb29io6OfmgMj+NRkxEfHGUzYsQIpdFo1MmTJ/M8Z3asZcqUMRh9lP36dOrUqcCeg1JK/fDDD6pjx46qcuXKytLSUpUuXVrVrVtXjRs3Lt9DPfMaAqtU1t/OgAEDVOXKlVXJkiXVCy+8oJo1a6ZmzpypN9Jv3bp1ql69eqpUqVKqQoUKasiQISoiIsLgfayUUgsXLlTVq1dX5ubmBvWhoaHKw8NDlSxZUrm5uakFCxY8dHTTg3932U6ePKl69Oihypcvr0qWLKkqVKigWrVqpb766qt8vSbGplEql94YIUSR8fLLL1O1alW+/fZbU4ciiiFJEkIUYTdu3KBcuXKEh4frZgkLUZAkSQghhMiTjG4SQgiRJ0kSQggh8lSshsDeunXL1CEIIUSRlduyP3IlIYQQIk+SJIQQQuSpWN1uyimv1VKFEELc96jb9HIlIYQQIk+SJIQQQuRJkoQQQog8Fds+iQcppUhISHjiDXRE8WVmZoaDg0OBbGokhNEFBYG7O3TrBuvWwenTMHFigZ3+uUkSCQkJWFtbF9jGLaL4SEtLIyEh4YmWRRfCpAIDs5KEmVlWgti6FbRaUCqrrgA8N7ebtFqtJAiRq1KlSskVpih6goIgKIj9bs1Ixww2b85KEDnqCsJzkySEEKJYcXfnN7emvDlkD28O2cMVu3L368zMsm5BFQBJEkIIUQRd9unG+x9tIb2EBftrvs5Lnxzh92r39mv38cnqoygAkiSKOX9/f8aPHw/A/v37cS+gbxePotFoct1/+GlVrVqVH3/8scDPK0RRcjcTOq+J43IpB11ZbJmKXLZ3yfpl69asPooCYNQk0bNnT1xcXLCzs6NWrVosXboUyNp7V6PRYGNjo/uZPHmy7jilFGPGjMHR0RFHR0dGjx5NcdoGo2rVqpQuXRobGxvKlStHnz59SE5OLvDHad68OadPn35ku5CQEJo1a1bgjw8QEBBA7969DcqPHz+OpaUlCQkJz+RxhShORvwGv2Y665V9sutzfI9tyvpFq80a5VQAjJokxo4dS1RUFImJiWzZsoXx48dz5MgRXf3NmzdJTk4mOTmZzz77TFe+ePFiwsLCCA8P5/jx42zbto3g4GBjhv7Mbd26leTkZI4ePcrhw4eZMmWKQZuMjAwTRFaw/P392bhxIykpKXrlK1eu5J133sHBwSGPI4UQACtPw4II/bLWJ3czhcNZfRGQNQS2gIbBGjVJeHp6YmlpCWTdjtBoNJw7d+6Rx61YsYIRI0ZQqVIlKlasyIgRIwgJCXmqWDSLnu3Pk6pYsSJt27YlIiLrXaDRaPjqq6+oWbMmNWvWBGDbtm3Ur1+fMmXK8Nprr3H8+HHd8X/99RcNGzbE1taWrl27kpaWpqvbu3cvlSpV0v1+8eJFfH19cXZ2xtHRkUGDBnHy5EkGDBjA77//jo2NDWXKlAHgzp07jBw5kipVqlCuXDkGDBhAamqq7lyzZs3CxcWFChUqsGzZsjyfX5MmTahYsSKhoaG6sszMTL755hv8/Pw4d+4cLVu2xNHREScnJ3r06MHNmzdzPVfOW2m5Pb/Y2Fjee+89nJ2dqVatGvPnz3/4iy9EIXc0DgL26Ze5Zt5k7atJmIdthDVrsoa+FtDwVzBBn8SHH36IlZUVHh4euLi40K5dO12dq6srlSpVok+fPsTHx+vKIyMj8fLy0v3u5eVFZGSkUeM2losXL7J9+3YaNGigKwsLC+PQoUP8/fffHD16lA8++IDg4GCuX79OQEAA7777Lnfu3OHu3bt07NiRXr16kZCQQOfOnfU+jHPKzMzknXfewdXVlaioKGJiYujWrRu1a9fm66+/pkmTJiQnJ+s+oMeMGcOZM2c4duwYZ8+eJSYmhkmTJgGwc+dOZs+eze7du/nnn38e2WfQu3dvVq5cqfv9xx9/JD09nbZt26KUYuzYscTGxnLy5EkuXrxI4BO84bVaLT4+Pnh5eRETE8OePXuYN28eu3bteuxzCVEYXE8D312Qlnm/rJQ5bOpaBsfuvlkF3boV6EQ6MEGSWLhwIUlJSezfvx9fX18sLS1xcnLi8OHDREdHc+TIEZKSkujRo4fumOTkZL1VXe3t7UlOTi5W/RIdO3akTJkyNGvWjBYtWjBu3Dhd3dixY3FwcKB06dIsWbKEgIAAGjdujLm5OX5+flhaWnLw4EEOHjxIeno6Q4cOpWTJkrz//vu8/PLLuT7eH3/8QWxsLLNmzdJNMsyrH0IpxZIlS/jiiy9wcHDA1taWcePGse5ex9iGDRvo06cPdevWxdra+pEf6r169WLfvn1cunQJyLrV1L17d0qWLEmNGjVo3bo1lpaWODs7M3z4cPbt2/fQ8+Xm8OHDxMXFMWHCBCwsLKhevTr9+/fXxSxEUZKphf/shugk/fLFLaCBc+7HFBSTzLg2NzenWbNmrF69mkWLFjF48GAaNWoEQLly5ViwYAEuLi4kJiZiZ2eHjY0NiYmJuuMTExOxsbEpVssohIWF0apVq1zrKleurPv/6OhoVqxYwf/93//pyu7evUtsbCwajYaKFSvqvS6urq65nvPixYu4urpSosSj3wJxcXHcvn2bl156SVemlCIzM+srTWxsrF5dXo+ZrUqVKrz++uusXr2aQYMGERYWxv79+wG4du0agwcPZv/+/SQlJaHVailbtuwjY3xQdHQ0sbGxuttlkHX11Lx588c+lxCmNv4P2H1Jv2xQXehlhMGKJl2WIyMjI9c+iewPuewrBU9PT8LDw3nllVcACA8Px9PT86keWw18qsONKueHfuXKlfn000/59NNPDdrt27ePmJgYlFK6Yy5cuICbm5tB28qVK3PhwgUyMjIMEsWDydfJyYnSpUsTGRlJxYoVDc7l4uLCxYsXdb9fuHDhkc/Jz8+P6dOn4+LiQrVq1WjYsCGQddWk0Wg4fvw4jo6OhIWFMWjQoFzPYW1tze3bt3W/X7lyRe/5VatWjX/++eeRsQhRmIWeg+l/6Zc1LQ9zXjPO4xvtdtO1a9dYt24dycnJZGZmsmvXLtauXUvLli05dOgQp0+fRqvVcv36dQYPHoy3t7fuFlPv3r2ZO3cuMTExxMbGMmfOHPz9/Y0VeqHSv39/vv76aw4dOoRSipSUFL7//nuSkpJo0qQJJUqUYP78+WRkZLBx40b++OOPXM/zyiuv4OLiwieffEJKSgppaWn8+uuvQNbV3KVLl7h79y6QtQBe//79GTZsGNeuXQMgJiZGd3+/S5cuhISE8Pfff3P79m2C8rEcwHvvvcfFixeZOHEifn5+uvKkpCRdh3lMTAyzZs3K8xz169dn+/btJCQkcOXKFebNm6f3/Ozs7JgxYwapqalkZmYSERHB4cOHHxmbEIXF3wng/7N+mYsVfPsWWJgbJwajJQmNRsOiRYuoVKkSZcuWZeTIkcybN48OHTpw/vx52rRpg62tLXXr1sXS0pK1a9fqjg0ICMDHx4d69epRt25d2rdvT0BAgLFCL1QaNWrEkiVLGDRoEGXLlqVGjRq6kV4WFhZs3LiRkJAQypYty/r16/H19c31PObm5mzdupWzZ89SpUoVKlWqxPr16wFo2bIlnp6elC9fHicnJwBmzJhBjRo1ePXVV7Gzs6NVq1a6ORdt27Zl6NChtGzZkho1atCyZctHPg9ra2tdosjZ/zRx4kSOHj2Kvb097du3zzN+yOrb8PLyomrVqrz11lt07drV4PkdO3aMatWq4eTkRL9+/R65C5cQhcWtO9BpJySn3y8raQbfvQ0u1saLQ6OKUe9vzg+AB7cvjYuLw9n5GffwiCJL3h+iMNEq8N0Jm6P0yxc2h4F1C/axHva5CbIshxBCFDqfHzVMEP7uMODpumKfiCQJIYQoRHZEw2cPdCW+5AwLXwdTDOiUJCGEEIXEuVvQ/UfI2QfgWApC34bSJhqLKklCCCEKgdvpWTOqb969X2amgXWtwdXWdHE9N9uXCiFEoRQUhKrlTn/nbhy/rl81vTG0qpT7YcYiVxJCCGEq9xbjm7/0IN88MO+zsxuMrG+SqPRIkhBCCFO4tw/1vpqvM6LTbL2qOrGRLDs4zSQd1Q+SJCGEEKbg7s55Zzfe6x9Kpvn9O/92qbfYtPQ9bGpVN2Fw90mSEDqBgYH07NmzwM/7LHe6E6KoutWpGz6jfuK6jZNe+aqQXtRq7FFge1Q/LUkShYi3tzdly5blzp07+WpvrA/fmJgYSpQoketijJ06dWLkyJHPPAYhipMMLXRbGcvfNlX0ygO3TeTdE1sLdI/qpyVJopCIiopi//79aDQatmzZYupw9FSsWJE333yTVatW6ZUnJCSwfft2vQX6hBCPNup32JlRQa+s2+G1TNietZFXQe5R/bQkSTxKUND9jL5uXdbvz8DKlSt59dVX8ff3Z8WKFXp1j7PNqLe3N0uXLtUd++DVxpAhQ6hcuTJ2dna89NJLun0cHsXPz88gSaxbtw5PT0/q1avH9OnTcXNzw9bWljp16rBp06ZczxMVFYVGoz51aPQAACAASURBVNHbr/vBmJctW0bt2rUpW7Ysb7/9NtHR0fmKUYiiYPHfMO+4ftnLUX+w7OYmNM9gj+qnJUniYbL3iu3RAzp2zPpvAe8fm23lypX06NGDHj16sGvXLq5evQo8/jajj/Lyyy9z7NgxEhIS6N69O507d9bbBzsvnTp1Ij4+ngMHDujKVq1aRe/evQFwc3Nj//793Lp1i4kTJ9KzZ08uX7782K9DWFgY06ZNY+PGjcTFxdG8eXP+85//PPZ5hCiMfo6Bjx74XlYxM5HNXrGU3rjhmexR/bQkSeTl3vA0IOvSb/PmrP8+WFcADhw4QHR0NF26dOGll17Czc2Nb775Bni8bUbzo2fPnjg6OlKiRAlGjBjBnTt3dEt+P0zp0qXp3Lmzbm/qf/75hyNHjtC9e3cAOnfuTIUKFTAzM6Nr167UrFkzz70sHiY4OJixY8dSu3ZtSpQowbhx4zh27JhcTYgi75+b8N6urP6IbFYlYGtXO1y6d8wqeAZ7VD8tSRJ5cXcHszxeHjOzrPoCsmLFCt566y3d3g3du3fX3XJ6nG1G82POnDnUrl0be3t7ypQpw61bt4iPj8/XsX5+fmzYsIG0tDRWrVpFmzZteOGFF4CsK6H69etTpkwZypQpQ0RERL7Pm1N0dDRDhgzRncfBwQGlFDExMY99LiEKi5t3wGcH3HhgTMqqN5/9HtVPS5blyEu3bll9EJs3G9b5+BTY8LTU1FQ2bNhAZmYm5cuXB+DOnTvcvHmT8PDwx9pmFB6+pef+/fuZMWMGe/bswdPTEzMzM8qWLUt+txRp3rw5jo6ObN68mdWrVzNz5kwg64O9f//+7NmzhyZNmmBubk79+vVzPa+1ddZuKbdv38bOzs4gxuztWXNuRCREUZahhS4/wOkH7ghPfQV8C8dUiIeSK4m8rFuXNQwtNwU4PC0sLAxzc3P+/vtvjh07xrFjxzh58iTNmzdn5cqVj7XNKGRt6blx40Zu377N2bNn+d///qerS0pKokSJEjg7O5ORkcGkSZNITEx8rHh79+7NmDFjuHnzJj4+PgCkpKSg0Wh0m/YsX76ciIiIXI93dnamYsWKrF69mszMTJYtW6Y3tHbAgAF8/vnnREZGAlkbonz77bePFaMQhcmwX2H3Jf2yHjVhbEPTxPO4jJokevbsiYuLC3Z2dtSqVUtvRMuePXvw8PDAysqKN954Q+8etFKKMWPG4OjoiKOjI6NHj873t98ndvr0/T6IBxXg8LQVK1bQp08fqlSpQvny5XU/gwYNYs2aNSilHmub0WHDhmFhYUG5cuXw8/PT+0b+9ttv07ZtW2rVqoWrqyulSpWicuXKjxVv7969uXDhAl27dsXS0hKAOnXqMGLECJo0aUK5cuU4ceIETZs2zfMcS5YsYdasWTg6OhIZGclrr93f0b1Tp06MGTOGbt26YWdnR926ddmxY8djxShEYbEwAhY88H3p1XKw1Ns0e0M8EWVEERERKi0tTSml1MmTJ1W5cuXUn3/+qeLi4pSdnZ3asGGDSk1NVSNHjlSNGzfWHff111+rWrVqqYsXL6pLly6p2rVrq0WLFhmc/+bNm7qfB127du3xA544USlQysxMqQ4dsv4LWeWiWHmi94cQD7H7olLmi5Ri4f2fyiuVupJi6sj0PexzUymljNon4el5f+89jUaDRqPh3LlzHDlyBE9PTzp37gxkLQ/h5OTEqVOn8PDwYMWKFYwYMYJKlbLWzB0xYgRLlixhwIABzzbgwMCsdO/ufr+P4vTpQjf6QAhRuJy+AZ13QWaOGx7WJWBrWyhnZbq4noTR+yQ+/PBDrKys8PDwwMXFhXbt2hEZGYmXl5eujbW1NW5ubrr70g/We3l56eqeuYkT73dSF8LhaUKIwiUhLWskU87NgzTAN63AyynPwwotoyeJhQsXkpSUxP79+/H19cXS0pLk5GTs7e312tnb25OUlARgUG9vb09ycvKz75cQQojHkJ4JnX+Af27pl09/Fd6tZpqYnpZJRjeZm5vTrFkzLl26xKJFi7CxsTEYZZOYmIitbdaefQ/WJyYmYmNjk+sQUCGEMAWl4OMD8NMDU3r83GFUIdg86EmZdAhsRkYG586dw9PTk/DwcF15SkqKrhwwqA8PD9fr3xBCCJO5t77bgggI/lu/qml5CG5RhEYy5cJoSeLatWusW7eO5ORkMjMz2bVrF2vXrqVly5Z06tSJiIgIQkNDSUtLY9KkSbz44ot4eHgAWcMu586dS0xMDLGxscyZMwd/f//HenwzM7N8rVEknj9paWmY5TW7XoiHubfO0s4pKxm6P1OvqqotbGoDluamCa2gGG10k0ajYdGiRQwYMACtVourqyvz5s2jQ4cOAISGhjJo0CB69uxJ48aNWZdjslpAQADnz5+nXr16APTr14+AgIDHenwHBwcSEhJ0/RxCZDMzM8PBwcHUYYii5t4abifLe9D1g7VoNfezgU1aEluvr8K59IcmDLBgaFQx6v29det+b9GDHeFCCFGg1q3jyoDhvDryN6Idq+qKNVotW4M70H5cj0Kzu9zDPOpzU9ZuEkKIJ5Dk24120S8TbVdVr3z2xpG0r25eJBJEfsiNWCGEeEzpmdB5xWX+snPTK+93YAnDfvqiUG0/+rQkSQghxGNQCvrvg10ZLnrl7SK+Z9G6gWigUG0/+rQkSQghxGOYcBhWPPD53yj6MOuvrKIE97p4C9H2o09L+iSEECKfgiNhyhH9suqZCXz/4iVspq+DdR2L3fpuMrpJCCHyYWsUdNwJ2hyfmE6l4LdOULOMycJ6ao/63JTbTUII8QiHrkLX3foJonQJ2NauaCeI/JAkIYQQD/HPTXhnO6Rm3C8z08D61tC4nOniMhZJEkIIkYdrt6Ht9xD/wIo+C5uDT1WThGR0kiSEECIXKenwzg4498A28J82hIDnaH1RSRJCCPGADC10+QEOX9Mv710LJr9imphMRZKEEELkoBQM/AW2X9Avb10JlngX7WW/n4QkCSGEyGHKEVh6Ur+svhOEvg0WRXzZ7ychSUIIIe5ZfiprRnVOrrawvR3YWpgmJlOTJCGEeL7d21lu5wXo/7NWr6qsJexoDy7WJoqtEJBlOYQQz6/AQAgK4ohrI94f0YHMEqV1VZbmsLUt1C5ruvAKA7mSEEI8n+7tLPevY1XaD9hKSo4EodFq+SZhPU1dHnL8c0KShBDi+eTuzuUyFWj98W6u2pfXq/oydCi+VYvNsnZPxWhJ4s6dO/Tt2xdXV1dsbW1p0KABO3bsACAqKgqNRoONjY3uZ/LkybpjlVKMGTMGR0dHHB0dGT16NMVoXUIhhAlc79iN1mN/49wLNfTKR+2eycd2F4rNznJPy2h9EhkZGVSuXJl9+/ZRpUoVtm/fTpcuXThx4oSuzc2bNylRwjCkxYsXExYWRnh4OBqNhtatW1O9enUGDBhgrPCFEMVI4l1os/I6kbaueuXd/1jD9LBPsiZDrFsniQIjXklYW1sTGBhI1apVMTMz45133qFatWocOXLkkceuWLGCESNGUKlSJSpWrMiIESMICQl59kELIYqd2+ngsx3+zHTUK/c5voWQlf6YKVWsdpZ7Wibrk7h69SpnzpzB0/P+Iiiurq5UqlSJPn36EB8fryuPjIzEy8tL97uXlxeRkZFGjVcIUfTdzYT3f4BfLuuXtzy9hw1XV1GSe0Ngi9HOck/LJEkiPT2dHj164Ofnh4eHB05OThw+fJjo6GiOHDlCUlISPXr00LVPTk7W2wzD3t6e5ORk6ZcQQuRbphZ67oEdDyy30Tj9Epsb36DUxm9hzZqsYbGBgaYIsVAy+s50Wq2W7t27k5iYyObNmylZsqRBmytXruDi4sKtW7ews7PD3t6e3bt388orWStrHTlyBG9vb5KSkvSOk53phBC50SrotzdrRnVOLzrCz++CQymThFUoFKqd6ZRS9O3bl6tXrxIaGpprggDQ3FtBKzt/eXp6Eh4erqsPDw/Xu00lhBB5UQqG/WqYIGraww/vPN8JIj+MmiQGDhzIyZMn2bp1K6VL35+4cujQIU6fPo1Wq+X69esMHjwYb29vXVbr3bs3c+fOJSYmhtjYWObMmYO/v78xQxdCFFETD8P8E/pllW3gRx8oZ2WamIoSow2BjY6OJjg4GEtLS8qXvz9xJTg4GDMzM8aNG8e1a9ews7OjdevWrF27VtcmICCA8+fPU69ePQD69etHQECAsUIXQhRRs4/B5AcGUJYrDXt8oIqtaWIqaozeJ/EsSZ+EECLb4r8hYJ9+WRkL2Ncxqy9CZClUfRJCCGEMa/+BAQ8kCOsSsPMdSRCPS5KEEKJY2fIv9NoDOW+RWJrD1nbQuJzJwiqyJEkIIYqNPZegy27IzJEhSpjBd2/BGxVNF1dRJklCCFG03ds06OAV6LA1nTuZ96s0wKqW8E5VUwVX9MmmQ0KIouvepkHhlevTduQ7pJS00asObgHdapomtOJCriSEEEXTvU2DzrxQk7c+2snNBxLEnKRd9K9jotiKEUkSQoiiyd2d0+U98B66l2t2+j3SE7cHMbzKDRMFVrzIPAkhRJF06ga0DEngcikHvfKhe75gbsY+NGFhJoqsaJF5EkKIYufkDfBen2qQIPodWMLc0OFotm7N2jRIPDXpuBZCFCl/J8AbW+CaKq1X3u/AEoLXBqAB2TSoAMmVhBCiyIi4Dt6b4Vqqfvl/DywmOGU7ZvdWkJZNgwqOXEkIIYqEE9fhzS0Ql6ZfPuD2n3z1jh1m/9mUdYvp9GlJEAVIOq6FEIXe8XsJIv6BBPGhJyxoDtkXEOLxSce1EKJIOxYPLXNJEIPqSoIwBrndJIQotP6Kg1ZbIeGOfvngejCvqSQIY5ArCSFEoXQ0Dt7MJUEMfVEShDFJkhBCFDpH4rL6IG48kCCGe8Hc1yRBGJPRksSdO3fo27cvrq6u2Nra0qBBA3bs2KGr37NnDx4eHlhZWfHGG28QHR2tq1NKMWbMGBwdHXF0dGT06NEUo/52IUQOh69Bqy1w865++UgvmN1EEoSxGS1JZGRkULlyZfbt28etW7eYPHkyXbp0ISoqivj4eHx9fZk8eTIJCQk0atSIrl276o5dvHgxYWFhhIeHc/z4cbZt20ZwcLCxQhdCGMmhq9B6q2GCGF0fZkqCMAmTDoF98cUXmThxItevXyckJITffvsNgJSUFJycnPjrr7/w8PDgtddew9/fn//+978A/O9//2PJkiUcPHhQ73wyBFaIIigoCNzdOejdjbc33SURC73qsQ1gamNJEM9KoR0Ce/XqVc6cOYOnpyeRkZF4eXnp6qytrXFzcyMyMhLAoN7Ly0tXJ4QowgIDITCQ38f/H299e9sgQXzaUBKEqZkkSaSnp9OjRw/8/Pzw8PAgOTnZIIPZ29uTlJQEYFBvb29PcnKy9EsIUZTd2w/igFtT3vpoJ0klrPSqP0vZx+RXJEGYmtGThFarpVevXlhYWLBgwQIAbGxsSExM1GuXmJiIra1trvWJiYnY2NigkXePEEWXuzvb67bnrY9/ILmUrV7VxO1BTKp0WRJEIWDUJKGUom/fvly9epXQ0FBKliwJgKenJ+Hh4bp2KSkpnDt3Dk9Pz1zrw8PDdXVCiKLpm4bd6DAgjFQL/SuIwG0TCTT/C7p1M1FkIiejJomBAwdy8uRJtm7dSunS95f57dSpExEREYSGhpKWlsakSZN48cUX8fDwAKB3797MnTuXmJgYYmNjmTNnDv7+/sYMXQhRgBacgB57IMNMf9GHKVs+ZeL2SSD7QRQaRksS0dHRBAcHc+zYMcqXL4+NjQ02NjasWbMGZ2dnQkND+fTTTylbtiyHDh1iXY43SEBAAD4+PtSrV4+6devSvn17AgICjBW6EKKAKAWBh+HjA/rlGq2WhWsH8unOaVkFsh9EoSGrwAohjEKrYMgBWBChX14iM51VK/3oVuF21hWEVpu11HdgoEnifN486nNTFvgTQjxz6Zng9xOsPatfblUCQm+up83wd7P6IGQ/iEJHriSEEM/U7XR4/wfYcUG/vKwlfN8OmpQ3TVwiS4FNpnNzc2P69OlcvXq1YCITQhR7N+5A622GCcLFCn7pIAmiKMh3kujduzfBwcFUqVIFX19fdu3a9SzjEkIUcZdToEUY/HZFv7yGPfzaCeo6miYu8XjynSQmTpzI+fPn2bJlC+bm5rz77rtUrVqVKVOmEBsb+yxjFEIUMeduQbMwOJGgX+7lCAc6QjU708QlHt8T90nExcWxePFipkyZQkZGBu3atWPkyJE0b968oGPMN+mTEML0jl+Ht7fBldv65c1dYEtbKGNpmrhE7p7JAn+nTp1ixowZzJs3DxsbGz7++GNKlSpFq1atmDBhwpNHK4Qo0g5chtfDDBPEO66w6x1JEEVRvq8k0tLS+Pbbb1myZAm//vorTZs2JSAggPfffx9Ly6x/+S1bttCrVy+9zGRMciUhhAncW+p7e5NuvL89g9QHRtb3qgX/84aS5qYJTzxcgc2TcHFxwczMjJ49e/L1119Tp04dgzavv/46Dg4OTxiqEKLICQyEoCDWvNIT/+vvGyyzMfRFmPMamMlCfUVWvpPEF198Qbdu3ShVqlSebcqUKcO///5bIIEJIQq5oCBUUBBfvjGEYZ3nGVRPSf6Jca+1lJVci7h890n4+/s/NEEIIZ4vGbU8GNTtK4MEodFqWbTuQz6tfE0SRDEgy3IIIR5b4l3oatuVna/rl5fMuMvqkJ50qXxXlvouJky2fakQomi6kATNNsHOi/rltqmJbFv0Dl2OfitLfRcjciUhhMi3w9fAZztcTdUvr3I9mu8Xtqfu5Xt7z8tS38WGXEkIIfJl43losdkwQbwc9QeHZjeh7is1wOzeR8rEibKSazEhVxJCiIdSCmYfg9EHDeveqw4rr+3G6uu5stR3MSVLhQsh8pSeCR/thyUnDevGNIBpjWUORFEnmw4JIZ7IzTvQ+Qf48ZJ+eQkzWNQc+hnOpxXFkFH7JBYsWECjRo2wtLTE399fVx4VFYVGo9Hte21jY8PkyZN19UopxowZg6OjI46OjowePZpidAEkRKHzbyI03WSYIOwtYEd7SRDPE6NeSVSoUIHx48eza9cuUlNTDepv3rxJiRKGIS1evJiwsDDCw8PRaDS0bt2a6tWrM2DAAGOELcRz5fcr0GEHxKXpl1e1zdpJro6svPNcMeqVhK+vLx07dsTR8fF2G1mxYgUjRoygUqVKVKxYkREjRhASEvJsghTiObbhLLyxxTBBvFoODvlKgngeFaohsK6urlSqVIk+ffoQHx+vK4+MjMTLy0v3u5eXF5GRkaYIUYjiJygItXYd045A191wJ1O/umsN+OldeMHKNOEJ0yoUScLJyYnDhw8THR3NkSNHSEpKokePHrr65ORkvV53e3t7kpOTpV9CiKcVGMjdyVP5YGcan/5hWP1pQ/imFZSWIS7PrULxT29jY0OjRo0AKFeuHAsWLMDFxYXExETs7OywsbEhMTFR1z4xMREbGxs0snqYEE8uKIjLXwTTechP/FqjmV5VyYy7LLm9Hb/GHU0UnCgsCsWVxIOyP/yzrxQ8PT0JDw/X1YeHh+Pp6WmS2IQoLg64NaXh2KMGCaJsSgI/fNUGP9e0PI4UzxOjJomMjAzS0tLIzMwkMzOTtLQ0MjIyOHToEKdPn0ar1XL9+nUGDx6Mt7e37hZT7969mTt3LjExMcTGxjJnzhy9IbRCiPxTCv7vBLyR0oor9i56dW7XzvL7rCZ4e9jJKq4CMHKSmDJlCqVLl2b69OmsXr2a0qVLM2XKFM6fP0+bNm2wtbWlbt26WFpasnbtWt1xAQEB+Pj4UK9ePerWrUv79u0JCAgwZuhCFAu306HXHhh8ADK0+nWtT/7AoVmNcb92RlZxFTqyLIcQz4lzt8B3Fxy/blg3budUJm2dgLnKkTkCA2UNpufAoz43C2WfhBCiYG2PhkbfGSYIW+0dNgV3ZOq2CZi/6yOruAoDhWJ0kxDi2dAqmPwnBP0JD94yqFMWNr5tiXt8A/ikm6ziKnIlt5uEKKZu3Mnqf/g+2rCusxssewNsSho/LlG4yCqwQjyHjl8H351wLlG/3FwDM16F4V4g04xEfkiSEKKY+eYM9NsHqRn65c6lYP1b8EZF08QliibpuBaiqAsKgnXrSM+EIctO02OPYYJ45QU40lkShHh8ciUhRFEWGAhBQVyxd6HLuXrsdzBciSCgDnzZDCzNjR+eKPokSQhRVAUFQVAQ+92a0bXvei6XqaBXbakyWPhGCT6obaL4RLEgt5uEKKIyankwwWcS3sP2GiSIKgnRHLDbIwlCPDW5khCiCPo3EXpYduX3toZ1rU7uZu3llTh9usr4gYliR64khChivjkDXhvg96uGdWN3TmPngjY4bfxG1l4SBUKuJIQoIhLvwkf7YfUZw7ryty6zckVvWp/6MatAkTVzWoinJFcSQhQBB69A/Q25J4h3Tmzl+Of1ae1uLWsviQInVxJCFGKZWvj8Lwg8DJkPLKBTyhxmvwYfXjuKJvhLWXtJPBOydpMQhdSFpKy1l365bFhX1wHWtoK6jsaPSxQvsnaTEEXQt+fgv3vh5l3Duo/rZa2/VFr+eoURyNtMiEIkOR2GHIBlpwzrnEpBSEto72r8uMTzy6gd1wsWLKBRo0ZYWloa7FG9Z88ePDw8sLKy4o033iA6+v76xkopxowZg6OjI46OjowePZpidJdMPO/urb10JA4aLkvMNUG8VRlOdJUEIYzPqEmiQoUKjB8/ng8++ECvPD4+Hl9fXyZPnkxCQgKNGjWia9euuvrFixcTFhZGeHg4x48fZ9u2bQQHBxszdCGejcBAtEFBzFz+F002pPOP1k6vuqQZzH0NdrSH8lYmilE814yaJHx9fenYsSOOjvq9bRs3bsTT05POnTtTqlQpAgMDCQ8P59SprK9UK1asYMSIEVSqVImKFSsyYsQIQkJCjBm6EAUvKIjTi9biPXQvYzrOIN1Mfwcgj4w4DvnCMC8wk70fhIkUinkSkZGReHl56X63trbGzc2NyMjIXOu9vLx0dUIURRlamO7aEa9Pw9lf83WD+oADwRxx2ksDZxMEJ0QOhaLjOjk5GWdn/b8Ge3t7kpKSdPU5h2bZ29uTnJyMUgqNbK8liphj8dD3Zzia6gUPbB/qkHydpWv60amqgv+EmSZAIXIoFEnCxsaGxET9fRYTExOxtbXNtT4xMREbGxtJEKJIScuAyUdgxl+GE+MA2kZsZ/E3/6XSzRg4YZY1Ma5bN+MHKkQOheJ2k6enJ+Hh4brfU1JSOHfuHJ6enrnWh4eH6+qEKAp+uwINvoVpRw0ThGNyPKuX9+D7he2zEgSAVitrL4lCwahJIiMjg7S0NDIzM8nMzCQtLY2MjAw6depEREQEoaGhpKWlMWnSJF588UU8PDwA6N27N3PnziUmJobY2FjmzJljMIRWiMIoOR0GH4Bmm+DUTcP6rmkR/D2pDj2OrEPToYOsvSQKHaPebpoyZQpBQUG631evXs3EiRMJDAwkNDSUQYMG0bNnTxo3bsy6HMscBwQEcP78eerVqwdAv379CAgIMGboQjy2Hy7Cf/dBdJJhXQVrWNgcOlSrC4kfgbu7rL0kCiVZu0mIApaQBiN+g5A87hb1rw0zm0AZS+PGJURuZO0mIZ61oCDdlUDoygN8lFifq+Y2Bs2q28GSFtCykgliFOIJSZIQ4mkEBkJQEFfsXRh0sgqh5ZuBuX4TMw0MfREmvQzWJXM9ixCFliQJIZ5UUBCZkyaztNl/Gdvhc25YOxg08SwL/3sDGpczQXxCFABJEkI8oV+qN2PIJ39yrHIDg7qSGXcZZ3OGcZ3rYmGey8FCFBGSJIR4TBeSYNTvsCH5TahsWP9y1B/8L2YN9VZ/afzghChgkiSEyKfb6TDrGMw4BqkZhvVWd1KYtG0CQ3+ah7kGeKeJzJgWRZ4kCSEeQamsneJG/Q4XknNv0/2PNcwIG3N/xrRCZkyLYkGShBAPER4PQ36FfbG51zdMj2X+l51pGnUQfHxg6+WsJTVkxrQoJiRJCJGL+FT47A9YfBK0uUw3faE0TGsM/u4VML/xFrh/LDOmRbEkM66FyDEZLn3tehZdtGOiY1tu3jVsWsIMBteDCS+BvcyYFsWAzLgW4mHuTYbDzIwff/ibIZW68reLJ+SSINpUhi+agkdZo0cphMlIkhDPr6AgCArizAs1GdNxBmH1O+XarKZ9VnJoVwVkCxPxvJEkIZ5b52s0ZFLvEFa90hOtmeGMN1vS+ezVkgx5EZkQJ55bkiTEc+diMkw5AsuSfch4Nfc2/jF7+Hzcm5S3Mm5sQhQ2kiTEc+NyStbOcIv/hrva3Nu8ev535n87mJcvHoW6a2QynHjuSZIQxV5cata+0l9FQFpm7m08rpwkaNtE3v/rO8yyB/zJZDghCsce10I8CwlpMO4gVFsNc8JzTxBuGQmsCulJxNQX6VL5LmbZPdMyGU4IoJAlCW9vb0qVKoWNjQ02Nja4u7vr6vbs2YOHhwdWVla88cYbREdHmzBSUZjdugOBh6HaGvj8L0jJZZ2lKjaw1BtOfuhAz3Y1MV+9CsLCYM2arGGxgYFGjlqIwqlQTabz9vamZ8+e9OvXT688Pj4eNzc3li5dio+PD5999hn79+/n4MGDeu1kMt1z6t5kuOT3uvF/q8OZdbsWN8xK59q0gjWMbwh9a8uIJSGgmEym27hxI56ennTu3BmAwMBAnJycOHXqFB4eHiaOTphUYCApn88i+PUBTL/ShjhLr1yvj18oDWMbQIAnlC4S73ohCodCdbsJYOzYsTg5OdG0aVP27t0LQGRkJF5eXro21tbWuLm5ERkZaaIoRWEQM3kuY49ZUnnqRUb4ziHOsoxBG8dSMONVON8DhnpJ7702DgAAEMdJREFUghDicRWqP5kZM2ZQp04dLCwsWLduHT4+Phw7dozk5GScnZ312trb25OUlGSiSIUpHY2DueGw3mkoGW/n/j3H/vZNRjpcYHCPF7GzMHKAQhQjhSpJNG7cWPf/fn5+rF27lu3bt2NjY0NiYqJe28TERGxtbY0dojARrYJtUTD3eM5luw0ThE1aEkN/msdwy1OU/W6NMUMUolgqVEniQRqNBqUUnp6erFixQleekpLCuXPn8PT0NGF0whhS0iHkNMw7Dmdv5d3OIfk6Aw58zbA9X+CUch3MzGCdj0yGE+IpFZokcfPmTQ4dOkSLFi0oUaIE69ev55dffmHevHk4ODgwatQoQkNDad++PZMmTeLFF1+UTuti7FIyLIjImh19407e7dyvnGLoz/PofXAlVump9yu0WpkMJ0QBKDRJIj09nfHjx3Pq1CnMzc3x8PAgLCxMN1ciNDSUQYMG0bNnTxo3bsy6detMHLEoMDn2cziyehdfxLmw3upFMvJYOgOgZUUY7gVtl6/HbH9w1pVDhw6wdavsDCdEASpU8ySelsyTKIICA8mcNJltL77LF50ns8+hbp5NS5rBf2rAMC+o75SjIkeSkZ3hhHg8j/rclCQhTObUlAWE/JnMqsa9iC1TMc92DpYw0BM+qgsu1kYMUIjnQLGYTCeKj5t3YP3ZrM7og46D4O2827qbJTK0mR29a4FVSePFKIS4T5KEeOYytfDjpazEsOlfuJPHSqzZWp7aw/CU32i75DPMZCc4IUxKkoR4Zk7fgBWnYeUZiEl5eFvrtGS6HN3A4L3zqX8pPKsjulVNGcIqhIlJkhBPL0fH8a21oWy4YMHymj78fvXRh3qf+Zk+vy/H99hGbO7kyCQyhFWIQkGShHg6gYFkTJ7Czx5vEhLpwkandqTZlYaHJIiqtuDvDr3dodrcfXBolQxhFaKQkiQhnkjSXdg1dwObo9z4fsY1blg7PLS9VQno7JaVHF6vwP2+hsBA0GhkCKsQhZQMgRX5FpsCW6KyfvZcynuf6JxaVMhKDO9VB1tZaE+IQkeGwIonphREJsDmqKyfw9fyd5zr9Sj8bhyk94RuuEmuFqJIkyQh9DqeM9au58C/qWxu4c+WKDif+MijgawF9nxObKX3oZV4/7M3a6/ol5HRSUIUcZIknneBgcTPXsBe95ZsiSjH92VakVDWEY4/+tDqmQl02BtCh+ObaXruV0poc0yAUEpGJwlRDEiS+P/27j8mqjPdA/gXARlmBrgKAiouQivYRcvay0pcfnpto239kSZVsYCIbK25SdM07da6rQVrTa2mt2lCdtO0Xa1FawxTs7e76EWbCqi12xCxwqJUi9OrUCjQCkMHHJhn/xhhgZkzzMj8EPh+kgkw8553njy8zMM573vOmYT0XUBVM1D1t2pUmdehfl+Rw9suDgfWzAXWxAC/njYdPm2dgK6Sq5OIJigWiYnAzgXuRID6n+4UhTuP7w13tgv8TyDQftcBvsCy2ZaisDIamDXy2klcnUQ0oXF103hXVGQpElOmAKtWoe/vZbgwOxFV//0Gqh5cjjPNQFuPc11ON7Rj5a2LWJ3/X1j+K0DL6yYRTVhc3TSB9e98HY1/KkFt4hpcnJ2Is79Kwbm9JehWaS0NGh3rZ4q5H7+5UYPMhtNYfel/LfMLEGDBIeA+TjwTTWYsEveCUe6HIAL8vwGo7bA86u58/Wf4H9Gz8zWn3y7A1zK3kHa1Cul/eQNLGr9EcE+XdUNOPBNNeiwS3jbkcJEcOYKW0/9AXeQDqFUdR23yo4NFoctka2PHfn1B/kBKJJA203K2c9IMQOUHAGmAYQmws3zwcBUnnoloKM5JAGO/s5mD2/9iApp+sZy53NQNNB37P9z8qhZNIbNwY1oU6iMfQLs2zMYbOCe8swVp184g7XcxSH/8ITwYCvhOGXv8RDTxTJg5iY6ODhQUFKC8vBxhYWF488038dRTT42946ETv0eO/Ps/aRHLawpEAJMZML7xJoz/82cYAzRoPV6Nm5ca0RQciSZNFZoeSsPN7n8XhZ9vj+gkaDnwsJ277jgg1NCGhU2XkNBUh9/cqEH61UrMa/0WPgAwuwiY8dDonQwtCDz5jYiGGDd7Ehs2bIDZbMaHH36ImpoaPP744zh37hwSEhIG2zi9J7Fz52AhuBwRj32P/AE9fioYpwbC6B8I47wHYIyai55+wNh359EP9Nz5avZg5oKnAgumAwnTLF8XTAcSpgPhe4vgM2R107DDRXaKHBERMEH2JLq7u6HT6VBbWwutVovU1FSsXr0aH3/8Mfbs2XP3HcfHWz5czWb8qJ2Bv/yuwLqNg9crcpXA27/g183/xILmOixY+iASli7CglAgSmM5HcEKz1MgIjcaF0WioaEBvr6+iIuLG3wuMTERFRUVY+t44EP1r3+Fqs/Jkwnugt8UYKYamKW2nJQ2u+4fmHXyGGb93ITZP9/E3I7riGlrhK/cubxqbBEQvWj0jnm4iIjcZFwUCYPBYLUbFBISgq4uG8s2nTEwBwEg8LbR6c19YUZgTzcCTUaoTD0I7W7HrFtNlg/9zibMevIxzMr4LWZrLEVhRiCG37N5xWKgqwzYeXDI4aJGQMDVRUR0TxgXRUKr1aKzc/jlSDs7OxEUFDS2jq9csRy/BxD18w28X/J7qPp6EHjbiECTEYFPrYdqcx4C/YBAX8uy0UBfINAPUPkC/m/ssn/cPwlA3m/tx8DDRUR0DxsXRSIuLg59fX349ttvMW/ePADAxYsXh01a35XCQssypZ078R+9Xfj9jLbhE79/zHN4+zGdZ8DDRUR0jxo3q5uysrLg4+ODDz74ADU1NXjsscfGvrppgIfOkyAiuteM9rk5bopER0cHNm/ejJMnTyI0NBR79uyxOk9iUl7gj4hoDCZMkXAEiwQRkXNG+9y0d7EGIiKa5FgkiIhI0bhY3XQ3hu5CERHR3eGeBBERKWKRICIiRRNqdRMREbkW9ySIiEgRiwQRESmaVEWio6MDTzzxBDQaDaKjo3H48GHFtu+88w4iIyMREhKCzZs3o7e3162x9fb2oqCgANHR0QgKCsKiRYtw/Phxm20PHDgAX19faLXawcfp06fdGh8AZGZmQqVSDb5nfHy8YltP529oLrRaLXx9ffHss8/abOup/BUXFyMpKQkBAQHYtGnTsNc+//xzzJ8/H2q1GkuXLoVer1fsx5lx64r4zp8/j0ceeQTTp0/HjBkzsHbtWjQ3Nyv248y4cEV8169fh4+Pz7Df365duxT78XT+Dh06NCw2tVoNHx8fVFdX2+zHXflzGZlEsrKyZN26ddLV1SVVVVUSHBwstbW1Vu1OnDgh4eHhUltbKx0dHZKRkSHbtm1za2wGg0EKCwulsbFR+vv75bPPPhOtViuNjY1Wbffv3y8pKSlujceWjIwMef/990dt5438DWUwGESj0UhFRYXN1z2VP51OJ8eOHZOtW7dKXl7e4PM//vijBAcHy9GjR8VoNMqLL74oycnJiv04Om5dFV9ZWZkcPXpUbt26Jd3d3ZKfny/Lly9X7MfRceGq+BobGwWAmEwmh/rxdP5G2r9/v8TGxorZbLb5urvy5yqTpkgYDAbx9/eXK1euDD6Xk5Nj88Nrw4YNsn379sGfT506JRERER6Jc6iFCxdKaWmp1fP3epHwdv4OHDggMTExin+Uns7fK6+8MuxD5L333pMlS5YM/mwwGESlUkl9fb3Vts6MW1fFN1J1dbVotVrF1939ITcyPmeKxL2Qv8zMTCkqKlJ8/V4vEpPmcJPS3e3q6uqs2tbV1SExMXFYu5aWFrS3t3skVgBoaWlBQ0OD4uXQL1y4gLCwMMTFxWHXrl3o6+vzSFzbt29HWFgYUlJSFA/ReDt/H330ETZu3Agfm/d7tfBW/gDr/Gg0Gtx33302x6Iz49ZdKisrR70svyPjwtWio6MRFRWF/Px8tLW12Wzj7fzp9XpUVlZi48aNdtt5I3+OmjRFwpm7241sO/D9mO+E5yCTyYTs7Gzk5eVh/vz5Vq+np6ejtrYWra2t0Ol0+OSTT7Bv3z63x/XWW2/hu+++w82bN7FlyxasWrUK165ds2rnzfx9//33qKioQF6e8r1AvJW/AWMZi/bausM333yD119/3W5+HB0XrhIWFoavv/4aer0e1dXV6OrqQnZ2ts223s7fwYMHkZaWhpiYGMU2ns6fsyZNkXDm7nYj2w58P+Y74TnAbDYjNzcXU6dORXFxsc02sbGxiImJwZQpU7Bw4UK89tprKC0tdXtsycnJCAoKQkBAAPLy8pCSkoKysjKrdt7M38GDB5Gammr3j9Jb+RswlrFor62rXb16FY8++ijeffddpKWlKbZzdFy4ilarRVJSEvz8/BAREYHi4mKUl5db5WmgrbfyB1jGo71/WADP589Zk6ZIDL273QClu9slJCTg4sWLw9pFREQgNDTUrTGKCAoKCtDS0gKdTgd/f3+HtvPx8YF44ZxIpff1Vv4Ax/4oR/J0/kbmp7u7G9euXbM5Fp0Zt66k1+vx8MMPY8eOHcjNzXVqW0/nc+Cwoq339Fb+AODs2bNoamrCk08+6dR23vp7VuTF+RCPW79+vWRlZYnBYJAzZ84ornI4fvy4RERESF1dnXR0dMjSpUs9sjrnmWeekeTkZOnq6rLbrqysTH744QcREamvr5eEhAS7E2Ou8NNPP8mJEyfEaDSKyWSSkpISUavVcvnyZau23srf2bNnRa1WS2dnp912nsqfyWQSo9EoL7/8suTk5AzmrrW1VYKDg6W0tFSMRqO89NJLdlc3OTpuXRXfjRs3JDY2Vvbu3TtqH86MC1fFd/78ebl8+bL09/dLW1ubrFu3TjIzMxX78XT+Bjz99NOSm5trtw935s9VJlWRaG9vlzVr1oharZY5c+bIoUOHREREr9eLRqMRvV4/2Pbtt9+W8PBwCQoKkk2bNklPT49bY7t+/boAkICAANFoNIOPkpISq/heeOEFCQ8PF7VaLTExMbJjxw65ffu2W+NrbW2VpKQk0Wq1EhISIsnJyVJeXi4i90b+RES2bNkiOTk5Vs97K3+FhYUCYNijsLBQREROnjwp8fHxolKpJCMjY9hS5927d8uKFSsGf1Yat+6Kr6ioSAAMG4cajcZmfPbGhbviO3z4sMydO1fUarVERkZKbm6uNDc324xPxPP5ExExGo0SEhIip06dstrOU/lzFV67iYiIFE2aOQkiInIeiwQRESlikSAiIkUsEkREpIhFgoiIFLFIEBGRIhYJIiJSxCJBRESKWCSIiEgRiwSRm7S3t2POnDl47rnnBp9rbW3FzJkzsW3bNi9GRuQ4XpaDyI0qKyuxbNkyfPrpp1i5ciVWrFiBW7duoaqqyuGr/BJ5k5+3AyCayNLT0/Hqq68iPz8feXl5+Oqrr3DhwgUWCBo3uCdB5GZmsxmpqan48ssvceTIEaxfv97bIRE5jHMSRG7W3Nw8eK/lhoYGb4dD5BTuSRC5kdlsxrJly2A2m/H8889j7dq1+OKLL5Camurt0IgcwjkJIjfavXs3Ll26hJqaGkRFRWHr1q3Izs5GTU0Npk2b5u3wiEbFPQkiNzl37hwyMjKg0+mwevVqAEBvby8WL16M+++/HzqdzssREo2ORYKIiBRx4pqIiBSxSBARkSIWCSIiUsQiQUREilgkiIhIEYsEEREpYpEgIiJFLBJERKSIRYKIiBT9C7+E1xyYIDo5AAAAAElFTkSuQmCC\n",
 | 
						|
      "text/plain": [
 | 
						|
       "<Figure size 432x288 with 1 Axes>"
 | 
						|
      ]
 | 
						|
     },
 | 
						|
     "metadata": {},
 | 
						|
     "output_type": "display_data"
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "x = np.arange(0,20,1)\n",
 | 
						|
    "y = x**2\n",
 | 
						|
    "\n",
 | 
						|
    "X = np.c_[x, x**2, x**3]\n",
 | 
						|
    "X = zscore_normalize_features(X) \n",
 | 
						|
    "\n",
 | 
						|
    "model_w, model_b = run_gradient_descent_feng(X, y, iterations=100000, alpha=1e-1)\n",
 | 
						|
    "\n",
 | 
						|
    "plt.scatter(x, y, marker='x', c='r', label=\"Actual Value\"); plt.title(\"Normalized x x**2, x**3 feature\")\n",
 | 
						|
    "plt.plot(x,X@model_w + model_b, label=\"Predicted Value\"); plt.xlabel(\"x\"); plt.ylabel(\"y\"); plt.legend(); plt.show()"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "Feature scaling allows this to converge much faster.   \n",
 | 
						|
    "Note again the values of $\\mathbf{w}$. The $w_1$ term, which is the $x^2$ term is the most emphasized. Gradient descent has all but eliminated the $x^3$ term."
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "### Complex Functions\n",
 | 
						|
    "With feature engineering, even quite complex functions can be modeled:"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 19,
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "name": "stdout",
 | 
						|
     "output_type": "stream",
 | 
						|
     "text": [
 | 
						|
      "Iteration         0, Cost: 2.20188e-01\n",
 | 
						|
      "Iteration    100000, Cost: 1.70074e-02\n",
 | 
						|
      "Iteration    200000, Cost: 1.27603e-02\n",
 | 
						|
      "Iteration    300000, Cost: 9.73032e-03\n",
 | 
						|
      "Iteration    400000, Cost: 7.56440e-03\n",
 | 
						|
      "Iteration    500000, Cost: 6.01412e-03\n",
 | 
						|
      "Iteration    600000, Cost: 4.90251e-03\n",
 | 
						|
      "Iteration    700000, Cost: 4.10351e-03\n",
 | 
						|
      "Iteration    800000, Cost: 3.52730e-03\n",
 | 
						|
      "Iteration    900000, Cost: 3.10989e-03\n",
 | 
						|
      "w,b found by gradient descent: w: [ -1.34 -10.    24.78   5.96 -12.49 -16.26  -9.51   0.59   8.7   11.94\n",
 | 
						|
      "   9.27   0.79 -12.82], b: -0.0073\n"
 | 
						|
     ]
 | 
						|
    },
 | 
						|
    {
 | 
						|
     "data": {
 | 
						|
      "image/png": "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\n",
 | 
						|
      "text/plain": [
 | 
						|
       "<Figure size 432x288 with 1 Axes>"
 | 
						|
      ]
 | 
						|
     },
 | 
						|
     "metadata": {},
 | 
						|
     "output_type": "display_data"
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "x = np.arange(0,20,1)\n",
 | 
						|
    "y = np.cos(x/2)\n",
 | 
						|
    "\n",
 | 
						|
    "X = np.c_[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]\n",
 | 
						|
    "X = zscore_normalize_features(X) \n",
 | 
						|
    "\n",
 | 
						|
    "model_w,model_b = run_gradient_descent_feng(X, y, iterations=1000000, alpha = 1e-1)\n",
 | 
						|
    "\n",
 | 
						|
    "plt.scatter(x, y, marker='x', c='r', label=\"Actual Value\"); plt.title(\"Normalized x x**2, x**3 feature\")\n",
 | 
						|
    "plt.plot(x,X@model_w + model_b, label=\"Predicted Value\"); plt.xlabel(\"x\"); plt.ylabel(\"y\"); plt.legend(); plt.show()\n"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "\n",
 | 
						|
    "## Congratulations!\n",
 | 
						|
    "In this lab you:\n",
 | 
						|
    "- learned how linear regression can model complex, even highly non-linear functions using feature engineering\n",
 | 
						|
    "- recognized that it is important to apply feature scaling when doing feature engineering"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "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.7.6"
 | 
						|
  },
 | 
						|
  "toc-autonumbering": false
 | 
						|
 },
 | 
						|
 "nbformat": 4,
 | 
						|
 "nbformat_minor": 5
 | 
						|
}
 |