{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "Reference:\n", "* Sebastian Raschka, et al. Machine Learning with PyTorch and Scikit-Learn: Develop machine learning and deep learning models with Python. Packt Publishing Ltd, 2022." ], "metadata": { "id": "tWXBaFotVinr" } }, { "cell_type": "markdown", "source": [ "## Introducing Stochastic Gradient Descent with Adaline - comparing different training schemes" ], "metadata": { "id": "FN1HA0UCVqp1" } }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 415 }, "id": "RQJgoIeqVIjY", "outputId": "c0e0110f-ff50-4b50-8742-b1af97eacc76" }, "outputs": [ { "output_type": "display_data", "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {} } ], "source": [ "from IPython.display import Image\n", "from IPython.display import display\n", "#----- ADALINE -----#\n", "display(Image(url=\"https://raw.githubusercontent.com/cfteach/NNDL_2025/webpage-src/NNDL_2025/NNDL_2025/images/adaline_flowchart.png\", width=700))" ] }, { "cell_type": "markdown", "source": [ "### Using the Iris data" ], "metadata": { "id": "wI_O3OXKeWTQ" } }, { "cell_type": "code", "source": [ "import os\n", "import pandas as pd\n", "\n", "try:\n", " s = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'\n", " print('From URL:', s)\n", " df = pd.read_csv(s,\n", " header=None,\n", " encoding='utf-8')\n", "\n", "except HTTPError:\n", " s = 'iris.data'\n", " print('From local Iris path:', s)\n", " df = pd.read_csv(s,\n", " header=None,\n", " encoding='utf-8')\n", "\n", "df.tail()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 221 }, "id": "Vyhpq5WRXRNy", "outputId": "800de0a1-78e1-4367-fc4b-c1e3362fd545" }, "execution_count": 2, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "From URL: https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ " 0 1 2 3 4\n", "145 6.7 3.0 5.2 2.3 Iris-virginica\n", "146 6.3 2.5 5.0 1.9 Iris-virginica\n", "147 6.5 3.0 5.2 2.0 Iris-virginica\n", "148 6.2 3.4 5.4 2.3 Iris-virginica\n", "149 5.9 3.0 5.1 1.8 Iris-virginica" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
01234
1456.73.05.22.3Iris-virginica
1466.32.55.01.9Iris-virginica
1476.53.05.22.0Iris-virginica
1486.23.45.42.3Iris-virginica
1495.93.05.11.8Iris-virginica
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "summary": "{\n \"name\": \"df\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": 0,\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.30331501776206193,\n \"min\": 5.9,\n \"max\": 6.7,\n \"num_unique_values\": 5,\n \"samples\": [\n 6.3,\n 5.9,\n 6.5\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": 1,\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.31937438845342625,\n \"min\": 2.5,\n \"max\": 3.4,\n \"num_unique_values\": 3,\n \"samples\": [\n 3.0,\n 2.5,\n 3.4\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": 2,\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.14832396974191348,\n \"min\": 5.0,\n \"max\": 5.4,\n \"num_unique_values\": 4,\n \"samples\": [\n 5.0,\n 5.1,\n 5.2\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": 3,\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.23021728866442667,\n \"min\": 1.8,\n \"max\": 2.3,\n \"num_unique_values\": 4,\n \"samples\": [\n 1.9,\n 1.8,\n 2.3\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": 4,\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"Iris-virginica\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 2 } ] }, { "cell_type": "markdown", "source": [ "### Plotting the Iris data" ], "metadata": { "id": "dOnnZ3F0ebeB" } }, { "cell_type": "code", "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "\n", "\n", "# select setosa and versicolor\n", "#y = df.iloc[0:100, 4].values\n", "\n", "y = df.iloc[:, 4].values\n", "X = df.iloc[:, [0, 2]].values # extract sepal length and petal length\n", "\n", "# Map y values to 0, 1, or -1\n", "y_mapped = np.select(\n", " [y == 'Iris-setosa', y == 'Iris-versicolor'], # Conditions\n", " [0, 1], # Values to assign if the condition is True\n", " default=-1 # Value to assign if none of the conditions are True\n", ")\n", "\n", "\n", "mask = (y_mapped == 0) | (y_mapped == 1) # Mask for selecting only 0 and 1 in y_mapped\n", "\n", "\n", "X_filtered = X[mask]\n", "y_filtered = y_mapped[mask]\n", "\n", "\n", "# Filter the first 50 occurrences of category 0\n", "mask_0 = (y_filtered == 0)\n", "X_0 = X_filtered[mask_0][:50]\n", "\n", "# Filter the first 50 occurrences of category 1\n", "mask_1 = (y_filtered == 1)\n", "X_1 = X_filtered[mask_1][:50]\n", "\n", "\n", "print(np.shape(X_0))\n", "print(np.shape(X_1))\n", "\n", "\n", "# plot data\n", "plt.scatter(X_0[:, 0], X_0[:, 1],\n", " color='red', marker='o', label='Setosa')\n", "plt.scatter(X_1[:, 0], X_1[:, 1],\n", " color='blue', marker='s', label='Versicolor')\n", "\n", "plt.xlabel('Sepal length [cm]')\n", "plt.ylabel('Petal length [cm]')\n", "plt.legend(loc='upper left')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 500 }, "id": "Lkd_NrHfeZX5", "outputId": "618f3a94-2480-4ae9-98e4-636c3f2406d8" }, "execution_count": 4, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(50, 2)\n", "(50, 2)\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 4 }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGwCAYAAACHJU4LAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAP+xJREFUeJzt3Wl4FFX69/FfE8hGFjZDAgk7AUFQYtQBhk1AEFRQNhmUoOCO4Iw4yOj80XFBcQNnFBmXxHEdRUQcRAQERFwGwSCuBAyGJRAGJCEsiST1vMiT1iYL3enq9OnO93NdfWFXna6+61TZdafq1F0Oy7IsAQAAGKievwMAAACoCokKAAAwFokKAAAwFokKAAAwFokKAAAwFokKAAAwFokKAAAwVn1/B+CN0tJS7d27V9HR0XI4HP4OBwAAuMGyLB05ckQtWrRQvXrVnzMJ6ERl7969SkpK8ncYAACgBnbt2qXExMRq2wR0ohIdHS2pbEVjYmL8HA0AAHBHQUGBkpKSnMfx6gR0olJ+uScmJoZEBQCAAOPOsA0G0wIAAGORqAAAAGORqAAAAGMF9BgVd5WUlOiXX37xdxjwUoMGDRQSEuLvMAAAtSioExXLsrRv3z4dPnzY36HAJo0aNVJ8fDx1cwCgjgjqRKU8SYmLi1NkZCQHtwBmWZaOHTumvLw8SVJCQoKfIwIA1IagTVRKSkqcSUrTpk39HQ5sEBERIUnKy8tTXFwcl4EAoA4I2sG05WNSIiMj/RwJ7FS+PRlzBAB1Q9AmKuW43BNc2J4AULcE7aUfADBZVpZ05EjV86OjpY4day8ewFQkKgBQy7KypOTk07fbto1kBQj6Sz8AYJrqzqTUpB0QzEhU3FFSIq1dK732Wtm/JSU+/boDBw7opptuUqtWrRQWFqb4+HgNGTJEGzZscOvz99xzj8455xyfxggAQG3g0s/pLF4sTZ8u7d7967TERGn+fOmKK3zylaNGjVJxcbFefPFFtWvXTvv379fq1at18OBBn3wfAACm4oxKdRYvlkaPdk1SJGnPnrLpixfb/pWHDx/W+vXr9fDDD2vAgAFq3bq1zj//fM2aNUuXXXaZs82UKVN0xhlnKCYmRhdeeKG2bNkiScrIyNC9996rLVu2yOFwyOFwKCMjQ5KUk5OjESNGKCoqSjExMRo7dqz279/v/O4tW7ZowIABio6OVkxMjM4991x98cUXkqSDBw9q/PjxatmypSIjI9WtWze99tprtq8/AAC/RaJSlZKSsjMpllVxXvm0226z/TJQVFSUoqKitGTJEhUVFVXaZsyYMcrLy9Py5cu1adMmpaSkaODAgTp06JDGjRun22+/XV27dlVubq5yc3M1btw4lZaWasSIETp06JDWrVunlStX6scff9S4ceOcy50wYYISExO1ceNGbdq0SXfeeacaNGggSTpx4oTOPfdcLVu2TF9//bWuv/56XX311frvf/9r6/oDAODCCmD5+fmWJCs/P7/CvOPHj1vffvutdfz48ZotfM0ayypLSap/rVnj1TpUZtGiRVbjxo2t8PBwq1evXtasWbOsLVu2WJZlWevXr7diYmKsEydOuHymffv21sKFCy3LsqzZs2dbZ599tsv8Dz74wAoJCbFycnKc07755htLkvXf//7XsizLio6OtjIyMtyOc/jw4dbtt99ek1WsMa+3K2CATZvc+3nZtMnfkQK+Ud3x+1SMUalKbq697TwwatQoDR8+XOvXr9dnn32m5cuXa+7cuXruued09OhRFRYWVngswPHjx7Vjx44ql/ndd98pKSlJSUlJzmldunRRo0aN9N133+m8887Tn/70J02ZMkUvvfSSBg0apDFjxqh9+/aSyh5J8OCDD+qNN97Qnj17VFxcrKKiIir/AsD/R20c3/BronLPPffo3nvvdZnWqVMnff/9936K6Dfcfeidjx6OFx4ersGDB2vw4MH661//qilTpmj27Nm6+eablZCQoLVr11b4TKNGjbz6znvuuUd/+MMftGzZMi1fvlyzZ8/W66+/rssvv1yPPPKI5s+fr3nz5qlbt25q2LChbrvtNhUXF3v1nUBdFB1tbzv4H7VxfMfvZ1S6du2qVatWOd/Xr+/3kMr06VN2d8+ePZWPU3E4yub36VMr4XTp0kVLlixRSkqK9u3bp/r166tNmzaVtg0NDVXJKWNnzjzzTO3atUu7du1ynlX59ttvdfjwYXXp0sXZLjk5WcnJyfrjH/+o8ePHKz09XZdffrk2bNigESNG6KqrrpIklZaWatu2bS6fBeCejh3LDlj89R08qI3jO37PCurXr6/4+Hh/h1FRSEjZLcijR5clJb9NVsqfNzNvXlk7Gx08eFBjxozRtddeq+7duys6OlpffPGF5s6dqxEjRmjQoEHq2bOnRo4cqblz5yo5OVl79+7VsmXLdPnllys1NVVt2rRRdna2MjMzlZiYqOjoaA0aNEjdunXThAkTNG/ePJ08eVI333yz+vXrp9TUVB0/flx33HGHRo8erbZt22r37t3auHGjRo0aJUnq2LGjFi1apE8++USNGzfW448/rv3795OoADVEEgK4x+93/WRlZalFixZq166dJkyYoJycnCrbFhUVqaCgwOXlU1dcIS1aJLVs6To9MbFsug/qqERFRemCCy7QE088ob59++qss87SX//6V1133XX6xz/+IYfDoffee099+/bVNddco+TkZF155ZX66aef1Lx5c0llY1yGDh2qAQMG6IwzztBrr70mh8Ohd955R40bN1bfvn01aNAgtWvXTv/+978lSSEhITp48KAmTpyo5ORkjR07VhdffLHz0tzdd9+tlJQUDRkyRP3791d8fLxGjhxp+/oDAPBbDsuq7LpG7Vi+fLkKCwvVqVMn5ebm6t5779WePXv09ddfK7qSi7OVjWmRpPz8fMXExLhMO3HihLKzs9W2bVuFh4d7F2hJibR+fdnA2YSEsss9Np9JgXts3a4AYJPNm6Vzzz19u02bpJQU38djuoKCAsXGxlZ6/D6VXxOVUx0+fFitW7fW448/rsmTJ1eYX1RU5FJbpKCgQElJSb5PVGAMtisAE5GoeMaTRMXvY1R+q1GjRkpOTtb27dsrnR8WFqawsLBajgoAAPiLUYlKYWGhduzYoauvvtrfoQAA3EDtELME4/bwa6IyY8YMXXrppWrdurX27t2r2bNnKyQkROPHj/dnWAAAN1A75Fcm1MYJ1u3h10Rl9+7dGj9+vA4ePKgzzjhDv//97/XZZ5/pjDPO8GdYAAA3UDvkVybUxgnW7eHXROX111/359cDAGCbQDpLEUj8XkcFAACgKiQqAADAWCQqkCQ5HA4tWbLE2OUBAOomEhXDXHrppRo6dGil89avXy+Hw6GvvvrK9u/Nzc3VxRdfbPtyAQDwhlF1VEzjj/vRJ0+erFGjRmn37t1KTEx0mZeenq7U1FR1797do2UWFxcrNDS02jamPRjSnZgBAMGPMypVKL8f/dxzq34lJ5e1s9Mll1yiM844QxkZGS7TCwsL9eabb2ry5Mn6+OOP1adPH0VERCgpKUnTpk3T0aNHnW3btGmj++67TxMnTlRMTIyuv/56FRcXa+rUqUpISFB4eLhat26tOXPmOD9z6qWa8lvHmzRpooYNGyo1NVWff/65c/6CBQvUvn17hYaGqlOnTnrppZeqXa+tW7fqwgsvVEREhJo2barrr79ehYWFzvmTJk3SyJEj9cADD6hFixbq1KlTDXsQ8L2srLKS6VW97P5dMJUJtUOCibf7VbBuD86oVMFf96PXr19fEydOVEZGhu666y45HA5J0ptvvqmSkhL17NlTvXv31v33368XXnhBBw4c0NSpUzV16lSlp6c7l/Poo4/q//7v/zR79mxJ0pNPPqmlS5fqjTfeUKtWrbRr1y7t2rWr0hgKCwvVr18/tWzZUkuXLlV8fLw2b96s0tJSSdLbb7+t6dOna968eRo0aJD+85//6JprrlFiYqIGDBhQYXlHjx7VkCFD1LNnT23cuFF5eXmaMmWKpk6d6pKQrV69WjExMVq5cqVd3QnYLliLatWECbVDgoUd+1XQbg8rgOXn51uSrPz8/Arzjh8/bn377bfW8ePHa7TsTZssSzr9a9Mmb9eiou+++86SZK1Zs8Y5rU+fPtZVV11lTZ482br++utd2q9fv96qV6+ec11bt25tjRw50qXNrbfeal144YVWaWlppd8pyXr77bcty7KshQsXWtHR0dbBgwcrbdurVy/ruuuuc5k2ZswYa9iwYZUu75///KfVuHFjq7Cw0Dl/2bJlVr169ax9+/ZZlmVZaWlpVvPmza2ioqIqeqWMt9sV8JY/fxsQvOraflXd8ftUXPoxUOfOndWrVy+98MILkqTt27dr/fr1mjx5srZs2aKMjAxFRUU5X0OGDFFpaamys7Ody0hNTXVZ5qRJk5SZmalOnTpp2rRp+uCDD6r8/szMTPXo0UNNmjSpdP53332n3r17u0zr3bu3vvvuuyrbn3322WrYsKFL+9LSUv3www/Oad26dWNcCgDABYmKoSZPnqy33npLR44cUXp6utq3b69+/fqpsLBQN9xwgzIzM52vLVu2KCsrS+3bt3d+/rdJgSSlpKQoOztb9913n44fP66xY8dq9OjRlX53RESET9etKqfGDAAAiYqhxo4dq3r16unVV1/Vv/71L1177bVyOBxKSUnRt99+qw4dOlR4ne5sRExMjMaNG6dnn31W//73v/XWW2/p0KFDFdp1795dmZmZlc6TpDPPPFMbNmxwmbZh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rl27tsL+6XA4tG/fvlqM2kxt2rSptG9uueWWKj/jj9/NgK5MGyw2btyohQsXqnv37qdtGxMTox9++MH5PhgfHVBTXbt21apVq5zv69evevf+5JNPNH78eM2ZM0eXXHKJXn31VY0cOVKbN2/WWWedVRvhGs2TvpTYL6vz888/q3fv3howYICWL1+uM844Q1lZWWrcuHGVn8nOztbw4cN144036pVXXtHq1as1ZcoUJSQkaMiQIbUYvVlq0pflfvjhB5fKqnFxcb4MNSBs3LhRJSUlzvdff/21Bg8erDFjxlTa3m+/mxb86siRI1bHjh2tlStXWv369bOmT59eZdv09HQrNja21mILJLNnz7bOPvtst9uPHTvWGj58uMu0Cy64wLrhhhtsjizweNqX7JfVmzlzpvX73//eo8/8+c9/trp27eoybdy4cdaQIUPsDC3g1KQv16xZY0myfv75Z98EFUSmT59utW/f3iotLa10vr9+N7n042e33HKLhg8frkGDBrnVvrCwUK1bt1ZSUpJGjBihb775xscRBo6srCy1aNFC7dq104QJE5STk1Nl208//bRCnw8ZMkSffvqpr8MMCJ70pcR+WZ2lS5cqNTVVY8aMUVxcnHr06KFnn3222s+wf1auJn1Z7pxzzlFCQoIGDx6sDRs2+DjSwFNcXKyXX35Z1157bZVnRP21X5Ko+NHrr7+uzZs3a86cOW6179Spk1544QW98847evnll1VaWqpevXpp9+7dPo7UfBdccIEyMjL0/vvva8GCBcrOzlafPn105MiRStvv27dPzZs3d5nWvHlzrlvL875kv6zejz/+qAULFqhjx45asWKFbrrpJk2bNk0vvvhilZ+pav8sKCjQ8ePHfR2ysWrSlwkJCXrmmWf01ltv6a233lJSUpL69++vzZs312Lk5luyZIkOHz6sSZMmVdnGb7+bPj1fgyrl5ORYcXFx1pYtW5zTTnfp51TFxcVW+/btrbvvvtsHEQa2n3/+2YqJibGee+65Suc3aNDAevXVV12mPfXUU1ZcXFxthBdQTteXp2K/dNWgQQOrZ8+eLtNuvfVW63e/+12Vn+nYsaP14IMPukxbtmyZJck6duyYT+IMBDXpy8r07dvXuuqqq+wMLeBddNFF1iWXXFJtG3/9bnJGxU82bdqkvLw8paSkqH79+qpfv77WrVunJ598UvXr13cZ4FSVBg0aqEePHtq+fXstRBxYGjVqpOTk5Cr7Jj4+Xvv373eZtn//fsXHx9dGeAHldH15KvZLVwkJCerSpYvLtDPPPLPay2lV7Z8xMTGKiIjwSZyBoCZ9WZnzzz+f/fM3fvrpJ61atUpTpkyptp2/fjdJVPxk4MCB2rp1qzIzM52v1NRUTZgwQZmZmQoJCTntMkpKSrR161YlJCTUQsSBpbCwUDt27Kiyb3r27KnVq1e7TFu5cqV69uxZG+EFlNP15anYL1317t3b5Y4oSdq2bZtat25d5WfYPytXk76sTGZmJvvnb6SnpysuLk7Dhw+vtp3f9kufnq+BR0699HP11Vdbd955p/P9vffea61YscLasWOHtWnTJuvKK6+0wsPDrW+++cYP0Zrl9ttvt9auXWtlZ2dbGzZssAYNGmQ1a9bMysvLsyyrYl9u2LDBql+/vvXoo49a3333nTV79myrQYMG1tatW/21CsbwtC/ZL6v33//+16pfv771wAMPWFlZWdYrr7xiRUZGWi+//LKzzZ133mldffXVzvc//vijFRkZad1xxx3Wd999Zz311FNWSEiI9f777/tjFYxRk7584oknrCVLllhZWVnW1q1brenTp1v16tWzVq1a5Y9VME5JSYnVqlUra+bMmRXmmfK7SaJikFMTlX79+llpaWnO97fddpvVqlUrKzQ01GrevLk1bNgwa/PmzbUfqIHGjRtnJSQkWKGhoVbLli2tcePGWdu3b3fOP7UvLcuy3njjDSs5OdkKDQ21unbtai1btqyWozaTp33Jfnl67777rnXWWWdZYWFhVufOna1//vOfLvPT0tKsfv36uUxbs2aNdc4551ihoaFWu3btrPT09NoL2GCe9uXDDz9stW/f3goPD7eaNGli9e/f3/rwww9rOWpzrVixwpJk/fDDDxXmmfK76bAsy/LtORsAAICaYYwKAAAwFokKAAAwFokKAAAwFokKAAAwFokKAAAwFokKAAAwFokKAAAwFokKAAAwFokKAI85HA4tWbKkyvn9+/fXbbfdVmvxVGft2rVyOBw6fPiw25/ZuXOnHA6HHA6HzjnnHJ/FJkkZGRnO7zKlzwCTkKgAAeLAgQO66aab1KpVK4WFhSk+Pl5DhgzRhg0b/B2aMexOkFatWlXhIWx2GzdunHJzc+v8AweBqtT3dwAA3DNq1CgVFxfrxRdfVLt27bR//36tXr1aBw8e9HdoQatp06Zq2rSpT78jIiJCERERCg0N9en3AIGKMypAADh8+LDWr1+vhx9+WAMGDFDr1q11/vnna9asWbrssstc2k2ZMkVnnHGGYmJidOGFF2rLli3O+ffcc4/OOeccLVy4UElJSYqMjNTYsWOVn5/vbLNx40YNHjxYzZo1U2xsrPr166fNmzd7FX9RUZFmzJihli1bqmHDhrrgggu0du1a5/yMjAw1atRIK1as0JlnnqmoqCgNHTpUubm5zjYnT57UtGnT1KhRIzVt2lQzZ85UWlqaRo4cKUmaNGmS1q1bp/nz5zsvpezcudP5+U2bNik1NVWRkZHq1auXfvjhhxqtywsvvKCuXbsqLCxMCQkJmjp1qnOew+HQwoULdckllygyMlJnnnmmPv30U23fvl39+/dXw4YN1atXL+3YsaNG3w3URSQqQACIiopSVFSUlixZoqKioirbjRkzRnl5eVq+fLk2bdqklJQUDRw4UIcOHXK22b59u9544w29++67ev/99/Xll1/q5ptvds4/cuSI0tLS9PHHH+uzzz5Tx44dNWzYMB05cqTG8U+dOlWffvqpXn/9dX311VcaM2aMhg4dqqysLGebY8eO6dFHH9VLL72kjz76SDk5OZoxY4Zz/sMPP6xXXnlF6enp2rBhgwoKClzGycyfP189e/bUddddp9zcXOXm5iopKck5/6677tJjjz2mL774QvXr19e1117r8XosWLBAt9xyi66//npt3bpVS5cuVYcOHVza3HfffZo4caIyMzPVuXNn/eEPf9ANN9ygWbNm6YsvvpBlWS7JDYDT8PnzmQHYYtGiRVbjxo2t8PBwq1evXtasWbOsLVu2OOevX7/eiomJsU6cOOHyufbt21sLFy60LMuyZs+ebYWEhFi7d+92zl++fLlVr149Kzc3t9LvLSkpsaKjo613333XOU2S9fbbb1cZa79+/azp06dblmVZP/30kxUSEmLt2bPHpc3AgQOtWbNmWZZlWenp6ZYka/v27c75Tz31lNW8eXPn++bNm1uPPPKI8/3JkyetVq1aWSNGjKj0e8utWbPGkmStWrXKOW3ZsmWWJOv48eOVxp+dnW1Jsr788kuX6S1atLDuuuuuKtdbknX33Xc733/66aeWJOv55593Tnvttdes8PDwCp+tLHYAlsUZFSBAjBo1Snv37tXSpUs1dOhQrV27VikpKcrIyJAkbdmyRYWFhWratKnzDExUVJSys7NdLjW0atVKLVu2dL7v2bOnSktLnZdC9u/fr+uuu04dO3ZUbGysYmJiVFhYqJycnBrFvXXrVpWUlCg5OdklrnXr1rnEFRkZqfbt2zvfJyQkKC8vT5KUn5+v/fv36/zzz3fODwkJ0bnnnut2HN27d3dZtiTn8t2Rl5envXv3auDAgW5/T/PmzSVJ3bp1c5l24sQJFRQUuP3dQF3GYFoggISHh2vw4MEaPHiw/vrXv2rKlCmaPXu2Jk2apMLCQiUkJLiM/SjXqFEjt78jLS1NBw8e1Pz589W6dWuFhYWpZ8+eKi4urlHMhYWFCgkJ0aZNmxQSEuIyLyoqyvnfDRo0cJnncDhkWVaNvrMyv12+w+GQJJWWlrr9+YiIiBp/j7ffDdRlnFEBAliXLl109OhRSVJKSor27dun+vXrq0OHDi6vZs2aOT+Tk5OjvXv3Ot9/9tlnqlevnjp16iRJ2rBhg6ZNm6Zhw4Y5B43+73//q3GMPXr0UElJifLy8irEFR8f79YyYmNj1bx5c23cuNE5raSkpMIg39DQUJWUlNQ41upER0erTZs2Pr9dGYArzqgAAeDgwYMaM2aMrr32WnXv3l3R0dH64osvNHfuXI0YMUKSNGjQIPXs2VMjR47U3LlzlZycrL1792rZsmW6/PLLlZqaKqnsrExaWpoeffRRFRQUaNq0aRo7dqwzaejYsaNeeuklpaamqqCgQHfccYfbZxMqk5ycrAkTJmjixIl67LHH1KNHDx04cECrV69W9+7dNXz4cLeWc+utt2rOnDnq0KGDOnfurL///e/6+eefnWcoJKlNmzb6/PPPtXPnTkVFRalJkyY1jrsy99xzj2688UbFxcXp4osv1pEjR7Rhwwbdeuuttn4PgF+RqAABICoqShdccIGeeOIJ7dixQ7/88ouSkpJ03XXX6S9/+YuksksK7733nu666y5dc801OnDggOLj49W3b1/nWAlJ6tChg6644goNGzZMhw4d0iWXXKKnn37aOf/555/X9ddfr5SUFCUlJenBBx90ufumJtLT03X//ffr9ttv1549e9SsWTP97ne/0yWXXOL2MmbOnKl9+/Zp4sSJCgkJ0fXXX68hQ4a4XE6aMWOG0tLS1KVLFx0/flzZ2dlexX2qtLQ0nThxQk888YRmzJihZs2aafTo0bZ+BwBXDsvOi8AAjHbPPfdoyZIlyszM9HcoXistLdWZZ56psWPH6r777rN12Tt37lTbtm315Zdf+ryEfrn+/fvrnHPO0bx582rl+4BAwRgVAAHhp59+0rPPPqtt27Zp69atuummm5Sdna0//OEPPvvOXr16qVevXj5bviS98sorioqK0vr16336PUCg4tIPgIBQr149ZWRkaMaMGbIsS2eddZZWrVqlM8880/bvSkxMdBajCwsLs335v3XZZZfpggsukOTZ3VlAXcGlHwAAYCwu/QAAAGORqAAAAGORqAAAAGORqAAAAGORqAAAAGORqAAAAGORqAAAAGORqAAAAGP9P2JyMgmnFlbCAAAAAElFTkSuQmCC\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "print(type(X), np.shape(X))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "1-hKH1AZnFng", "outputId": "290e6c95-4454-4d37-bc97-1717d064ee53" }, "execution_count": 5, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " (150, 2)\n" ] } ] }, { "cell_type": "markdown", "source": [ "### Standardize Data\n", "\n", "This can be very helpful: as we already saw, gradient descent is one of many algorithms that benefit from feature scaling." ], "metadata": { "id": "Jkzrh2zzgTw8" } }, { "cell_type": "code", "source": [ "X_std = np.copy(X_filtered)\n", "X_std[:,0] = (X_filtered[:,0]-X_filtered[:,0].mean())/X_filtered[:,0].std()\n", "X_std[:,1] = (X_filtered[:,1]-X_filtered[:,1].mean())/X_filtered[:,1].std()" ], "metadata": { "id": "_N5D0_TUecjm" }, "execution_count": 6, "outputs": [] }, { "cell_type": "markdown", "source": [ "### Gradient Descent Methods" ], "metadata": { "id": "fQqdd9vdgoOp" } }, { "cell_type": "markdown", "source": [ "\n", "1. **Gradient Descent**: (also known as batch gradient descent): updates based on entire dataset - computationally quite expensive especially for large datasets; stable updates and smooth convergence, but can be very slow. Can leverage vectorization as we saw in lecture 2.\n", "\n", "2. **Stochastic Gradient Descent (SGD)**: updates the model after each individual data point; more noise/stochasticity, possibility of escaping local minima, faster updates but could lead to unstable convergence\n", "\n", "3. **Mini-batch GD**: compromise between the above two cases; updates every mini-batch. Can leverage vectorization.\n", "\n" ], "metadata": { "id": "SNvcf8YjgqYx" } }, { "cell_type": "markdown", "source": [ "### 1. (Batch) Gradient Descent" ], "metadata": { "id": "yJjxBobihI5t" } }, { "cell_type": "markdown", "source": [ "(the following code is inherited from the previous lecture 2)" ], "metadata": { "id": "qr9waz_xhN9K" } }, { "cell_type": "code", "source": [ "import numpy as np\n", "\n", "\n", "class AdalineGD:\n", " \"\"\"Perceptron classifier.\n", "\n", " Parameters\n", " ------------\n", " eta : float\n", " Learning rate (between 0.0 and 1.0)\n", " n_iter : int\n", " Passes over the training dataset.\n", " random_state : int\n", " Random number generator seed for random weight\n", " initialization.\n", "\n", " Attributes\n", " -----------\n", " w_ : 1d-array\n", " Weights after fitting.\n", " b_ : Scalar\n", " Bias unit after fitting.\n", " losses_ : list\n", " Mean squared error loss values at each epoch\n", "\n", " \"\"\"\n", " def __init__(self, eta=0.01, n_iter=50, random_state=1):\n", " self.eta = eta\n", " self.n_iter = n_iter\n", " self.random_state = random_state\n", "\n", " def fit(self, X, y):\n", " \"\"\"Fit training data.\n", "\n", " Parameters\n", " ----------\n", " X : {array-like}, shape = [n_examples, n_features]\n", " Training vectors, where n_examples is the number of examples and\n", " n_features is the number of features.\n", " y : array-like, shape = [n_examples]\n", " Target values.\n", "\n", " Returns\n", " -------\n", " self : object\n", "\n", " \"\"\"\n", " rgen = np.random.RandomState(self.random_state)\n", " self.w_ = rgen.normal(loc=0.0, scale=0.01, size=X.shape[1])\n", " self.b_ = np.float_(0.)\n", "\n", " self.losses_ = []\n", "\n", " for i in range(self.n_iter):\n", " net_input = self.net_input(X)\n", " output = self.activation(net_input)\n", " errors = (y-output)\n", " # Remember the formula for w's updates and complete:\n", " # Delta w_j = -eta* dL/dw_j\n", " # dL/dw_j = -2/n * \\Sum_i errors_i* x_j\n", " # Use vectorization:\n", " # [n_features,n_examples]*[n_examples] = [n_features]\n", "\n", " # self.w_ +=\n", "\n", " # Remember the formula for b update and complete:\n", " # Delta b = -eta* dL/b\n", " # dL/db = -2/n * \\Sum_i errors_i\n", "\n", " # self.b_ +=\n", "\n", " loss = (errors**2).mean()\n", " self.losses_.append(loss)\n", " return self\n", "\n", " def net_input(self, X):\n", " \"\"\"Calculate net input\"\"\"\n", " return np.dot(X, self.w_) + self.b_\n", "\n", " def activation(self, X):\n", " \"\"\"Compute linear activation\"\"\"\n", " return X\n", "\n", " def predict(self, X):\n", " \"\"\"Return class label after unit step\"\"\"\n", " return np.where(self.activation(self.net_input(X)) >= 0.5, 1, 0)" ], "metadata": { "id": "JEE-zvXxgmay" }, "execution_count": 7, "outputs": [] }, { "cell_type": "markdown", "source": [ "Training the Adaline model" ], "metadata": { "id": "9WJWpxK8iis8" } }, { "cell_type": "code", "source": [ "ada_gd = AdalineGD(n_iter=20, eta=0.5).fit(X_std, y_filtered)" ], "metadata": { "id": "pJLW4ZOcilkI" }, "execution_count": 8, "outputs": [] }, { "cell_type": "code", "source": [ "plt.plot(range(1, len(ada_gd.losses_) + 1), ada_gd.losses_, marker='o')\n", "plt.xlabel('Epochs')\n", "plt.ylabel('Mean squared error')\n", "\n", "plt.tight_layout()\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 487 }, "id": "uBrVN6eail_r", "outputId": "9ce38e18-3429-4920-a85c-2fc81098eb55" }, "execution_count": 9, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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FrtOnTq5vv75z3+u559/Xtdff71rWd++fZWUlKTp06e75qPD+UmILp9UmSlPAABAQ7k9eGL79u3q0qVLteVdunTRrl27PFIUzumKpcUOAAA0kNvB7qKLLlJ6erpKS0tdy0pLS5Wenq6LLrrIo8UFs4SYcEl0xQIAgIZze+bbBQsWaMSIEerQoYNrBOyXX34pwzD07rvverzAYFUx3UluQYkcTlMhlroHrQAAALgd7AYNGqT9+/fr9ddf1549eySV3z3iF7/4hSIjIz1eYLCKbWGVxZAcTlPHCktcgykAAABq06h7VUVGRupXv/qVp2vBOUJDLGobZVNOfomy84oJdgAAoF6NuvPEq6++qssvv1zt2rXTwYMHJUnPPvusVq5c6dHigh13nwAAAO5wO9jNnz9fU6dO1fDhw/X999+7JiRu1aqV5s6d6+n6ghpz2QEAAHe4HexeeOEFvfTSS3r00UcVGlrZkztw4EBt377do8UFu8q7TxDsAABA/dwOdpmZmerfv3+15TabTUVFRR4pCuXi6YoFAABucDvYdenSRdu2bau2fNWqVcxj52GJMXTFAgCAhnN7VOzUqVM1efJkFRcXyzRNbdq0SYsXL1Z6err+9re/eaPGoFUxeCKLrlgAANAAbge7u+66S+Hh4Xrsscd06tQp/eIXv1C7du303HPPacyYMd6oMWjFV7TYEewAAEADuBXszpw5ozfeeENDhw7V2LFjderUKRUWFiouLs5b9QW1iha7olKHCorLFGUP83NFAACgKXPrGrvQ0FDdc889Ki4ub0GKiIgg1HlRpC1UUbby7M11dgAAoD5uD54YNGiQtm7d6o1aUIN415QnJX6uBAAANHVuX2N377336je/+Y2+/fZbDRgwoNr9Yfv27eux4lDeHftNbiFTngAAgHq5HewqBkjcf//9rmWGYcg0TRmG4boTBTyDu08AAICGcjvYZWZmeqMO1CKRu08AAIAGcjvYderUyRt1oBYV19gxlx0AAKiP28Guwq5du3To0CGVlpZWWX7jjTeed1GolEBXLAAAaCC3g93+/fs1atQobd++3XVtnVR+nZ0krrHzsATuFwsAABrI7elOHnjgAXXp0kW5ubmKiIjQzp079fHHH2vgwIFau3atF0oMbvExNknSscISlTmcfq4GAAA0ZW4Hu40bN2r27NmKjY2VxWKRxWLR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\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "**Plotting decision regions**" ], "metadata": { "id": "ja-Meey2i9ih" } }, { "cell_type": "code", "source": [ "from matplotlib.colors import ListedColormap\n", "\n", "\n", "def plot_decision_regions(X, y, classifier, resolution=0.02):\n", "\n", " # setup marker generator and color map\n", " markers = ('o', 's', '^', 'v', '<')\n", " colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')\n", " cmap = ListedColormap(colors[:len(np.unique(y))])\n", "\n", " # plot the decision surface\n", " x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n", " x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n", " xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),\n", " np.arange(x2_min, x2_max, resolution))\n", " lab = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)\n", " lab = lab.reshape(xx1.shape)\n", " plt.contourf(xx1, xx2, lab, alpha=0.3, cmap=cmap)\n", " plt.xlim(xx1.min(), xx1.max())\n", " plt.ylim(xx2.min(), xx2.max())\n", "\n", " # plot class examples\n", " for idx, cl in enumerate(np.unique(y)):\n", " plt.scatter(x=X[y == cl, 0],\n", " y=X[y == cl, 1],\n", " alpha=0.8,\n", " c=colors[idx],\n", " marker=markers[idx],\n", " label=f'Class {cl}',\n", " edgecolor='black')" ], "metadata": { "id": "W2PdahQSiqch" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "plot_decision_regions(X_std, y_filtered, classifier=ada_gd)\n", "plt.xlabel('Sepal length [cm]')\n", "plt.ylabel('Petal length [cm]')\n", "plt.legend(loc='upper left')\n", "\n", "\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 449 }, "id": "CvAGmiVPjAuz", "outputId": "7a3b66ea-7333-402a-87ce-e130c8224aa7" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "**Accuracy**" ], "metadata": { "id": "lftUPY1IjGCL" } }, { "cell_type": "code", "source": [ "y_pred = ada_gd.predict(X_std)\n", "\n", "accuracy = np.sum(y_pred == y_filtered) / len(y_filtered)\n", "print(f\"Accuracy: {accuracy * 100:.2f}%\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "KSVHvfRTjCpi", "outputId": "d7a5a370-e2d1-4ca9-adfb-3f1a28613792" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Accuracy: 100.00%\n" ] } ] }, { "cell_type": "markdown", "source": [ "### 2. Stochastic Gradient Descent" ], "metadata": { "id": "36ysdKvDlQy8" } }, { "cell_type": "code", "source": [ "class AdalineSGD:\n", " \"\"\"ADAptive LInear NEuron classifier.\n", "\n", " Parameters\n", " ------------\n", " eta : float\n", " Learning rate (between 0.0 and 1.0)\n", " n_iter : int\n", " Passes over the training dataset.\n", " shuffle : bool (default: True)\n", " Shuffles training data every epoch if True to prevent cycles.\n", " random_state : int\n", " Random number generator seed for random weight\n", " initialization.\n", "\n", "\n", " Attributes\n", " -----------\n", " w_ : 1d-array\n", " Weights after fitting.\n", " b_ : Scalar\n", " Bias unit after fitting.\n", " losses_ : list\n", " Mean squared error loss function value averaged over all\n", " training examples in each epoch.\n", "\n", "\n", " \"\"\"\n", " def __init__(self, eta=0.01, n_iter=10, shuffle=True, random_state=None):\n", " self.eta = eta\n", " self.n_iter = n_iter\n", " self.w_initialized = False\n", " self.shuffle = shuffle\n", " self.random_state = random_state\n", "\n", "\n", " def fit(self, X, y): #-------- this is for SGD training from scratch\n", " \"\"\" Fit training data.\n", "\n", " Parameters\n", " ----------\n", " X : {array-like}, shape = [n_examples, n_features]\n", " Training vectors, where n_examples is the number of examples and\n", " n_features is the number of features.\n", " y : array-like, shape = [n_examples]\n", " Target values.\n", "\n", " Returns\n", " -------\n", " self : object\n", "\n", " \"\"\"\n", " self._initialize_weights(X.shape[1])\n", " self.losses_ = []\n", " for i in range(self.n_iter):\n", " if self.shuffle:\n", " X, y = self._shuffle(X, y)\n", " losses = []\n", " for xi, target in zip(X, y):\n", " #complete the following using the _update_weights\n", " losses.append()\n", " avg_loss = np.mean(losses)\n", " self.losses_.append(avg_loss)\n", " return self\n", "\n", " def _shuffle(self, X, y):\n", " \"\"\"Shuffle training data\"\"\"\n", " r = self.rgen.permutation(len(y))\n", " return X[r], y[r]\n", "\n", " def _initialize_weights(self, m):\n", " \"\"\"Initialize weights to small random numbers\"\"\"\n", " self.rgen = np.random.RandomState(self.random_state)\n", " self.w_ = self.rgen.normal(loc=0.0, scale=0.01, size=m)\n", " self.b_ = np.float_(0.)\n", " self.w_initialized = True\n", "\n", " def _update_weights(self, xi, target):\n", " \"\"\"Apply Adaline learning rule to update the weights\"\"\"\n", " output = self.activation(self.net_input(xi))\n", " error = (target - output)\n", " # Please complete the following updates, at the example level\n", " self.w_ +=\n", " self.b_ +=\n", " loss = error**2\n", " return loss\n", "\n", " def net_input(self, X):\n", " \"\"\"Calculate net input\"\"\"\n", " return np.dot(X, self.w_) + self.b_\n", "\n", " def activation(self, X):\n", " \"\"\"Compute linear activation\"\"\"\n", " return X\n", "\n", " def predict(self, X):\n", " \"\"\"Return class label after unit step\"\"\"\n", " return np.where(self.activation(self.net_input(X)) >= 0.5, 1, 0)\n", "\n", " #def partial_fit(self, X, y): #-------- this is for online learning\n", " # \"\"\"Fit training data without reinitializing the weights\"\"\"\n", " # if not self.w_initialized:\n", " # self._initialize_weights(X.shape[1])\n", " # if y.ravel().shape[0] > 1:\n", " # for xi, target in zip(X, y):\n", " # self._update_weights(xi, target)\n", " # else:\n", " # self._update_weights(X, y)\n", " # return self" ], "metadata": { "id": "xamSFDm7jJir" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "ada_sgd = AdalineSGD(n_iter=15, eta=0.01, random_state=1)\n", "ada_sgd.fit(X_std, y_filtered)\n", "\n", "plot_decision_regions(X_std, y_filtered, classifier=ada_sgd)\n", "plt.title('Adaline - Stochastic gradient descent')\n", "plt.xlabel('Sepal length [standardized]')\n", "plt.ylabel('Petal length [standardized]')\n", "plt.legend(loc='upper left')\n", "\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "plt.plot(range(1, len(ada_sgd.losses_) + 1), ada_sgd.losses_, marker='o')\n", "plt.xlabel('Epochs')\n", "plt.ylabel('Average loss')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 940 }, "id": "pU3YdJdqui9o", "outputId": "b7d992f6-b30d-40b4-9110-618872914725" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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cHNzQ6dOnXD+/HnN+ry3SuvWrYOvry+cnJwwcOBAJCUlabY5deoUunbtivLly8Pd3R3t27fHmTNnihV/ZmYmpk6diipVqsDZ2RktWrTAoUOHNOvDw8Ph4eGBPXv2oFatWnBxcUH37t1x9+5dzTY5OTmYMGECPDw84OXlhXfffRehoaGaJsOwsDD8/vvvWLlypaYZLzY2VrP/6dOn0bRpUzg5OaF169a4cuWKwddx6NAhNG/eHM7OzvDw8ECbNm1w48YNhIeHY+7cuTh//rzm3OHh4QCATz75BPXq1YOzszN8fX0xduxYpKamGnTtKpUKkydP1lz79OnT8exU4Lt378YLL7yg2ebll1/GtWvXNOvzmpe/++47tG/fHg4ODti8ebNex87/JjSvafvZn7CwMM32P/74Ixo3bgwHBwcEBQVh7ty5yMnJ0ay/evUq2rVrBwcHB9SuXRt79+41+FkQlUVM7IhkwsXFBS4uLtixYwcyMzML3e7VV1/FgwcPsGvXLpw+fRqNGzdG586d8ejRI8020dHR+P777/HTTz9h9+7dOHv2LMaOHatZn5KSgtDQUBw9ehTHjx9H9erV0aNHD6SkpBgd//jx43Hs2DFERETgwoULePXVV9G9e3dcvXpVs016ejqWLl2Kb775BocPH0ZcXBymTp2qWb9o0SJs3rwZGzduxB9//IHk5GStPlkrV65Eq1atMGLECNy9exd3796Fr6+vZv17772HZcuW4a+//oKtrS2GDx9u0DXk5OSgT58+aN++PS5cuIBjx45h5MiRkCQJr732GqZMmYI6depozv3aa68BABQKBT799FNcvnwZmzZtwoEDBzB9+nStYz/v2pctW4bw8HB89dVXOHr0KB49eoTt27drHSMtLQ2TJ0/GX3/9hf3790OhUKBv375Qq9Va282YMQMTJ07EP//8g27duul17Pxat26tuca7d+/iwIEDcHBwQLt27QAAR44cwdChQzFx4kT8/fffWLduHcLDwzF//nwAgFqtRr9+/aBUKnHixAmsXbsW7777rkHPgqjMEkQkG1u3bhXlypUTDg4OonXr1mLmzJni/PnzmvVHjhwRbm5uIiMjQ2u/atWqiXXr1gkhhJg9e7awsbERt27d0qzftWuXUCgU4u7duzrPq1KphKurq/jpp580ywCI7du3Fxpr+/btxcSJE4UQQty4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\n" }, "metadata": {} }, { "output_type": "execute_result", "data": { "text/plain": [ "Text(0, 0.5, 'Average loss')" ] }, "metadata": {}, "execution_count": 20 }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAG0CAYAAADacZikAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAARkNJREFUeJzt3Xl8VNX9x//3zCSZhJBEISYzwUhA+IIYBGWJQSouqUGsFsWKFoWiP60UEUz1p7hArUtcQKPiD0rr8rUuUKtS5KtYmuJCBYNEFERBK0uELEQkk4VsM/f3R8hAJCGZMDN3yLyeD+dB5s65cz93iOSdc88512IYhiEAAIAwYjW7AAAAgGAjAAEAgLBDAAIAAGGHAAQAAMIOAQgAAIQdAhAAAAg7BCAAABB2CEAAACDsEIAAAEDYIQABAICwY3oAevbZZ5WWlqbo6GhlZGSooKCgzbZffvmlJkyYoLS0NFksFuXl5R31vR955BFZLBbNmjXLv0UDAIDjWoSZB1+6dKlycnK0aNEiZWRkKC8vT9nZ2dq6dauSkpKOaF9TU6O+ffvqV7/6lW677bajvvf69ev1pz/9SWeccYbPdXk8Hu3Zs0dxcXGyWCw+7w8AAILPMAxVVlYqJSVFVms7fTyGiUaOHGlMnz7d+9ztdhspKSlGbm5uu/v27t3bePLJJ1t9rbKy0ujfv7+xatUqY8yYMcbMmTN9qquoqMiQxIMHDx48ePA4Dh9FRUXt/qw3rQeovr5eGzZs0OzZs73brFarsrKytHbt2mN67+nTp+uSSy5RVlaWHnzwwXbb19XVqa6uzvvcMAxJUlFRkeLj44+pFgAAEBwul0upqamKi4trt61pAai8vFxut1vJycktticnJ+vrr7/u9PsuWbJEhYWFWr9+fYf3yc3N1f3333/E9vj4eAIQAADHmY4MXzF9ELQ/FRUVaebMmXrllVcUHR3d4f1mz56tiooK76OoqCiAVQIAALOZ1gOUmJgom82m0tLSFttLS0vlcDg69Z4bNmxQWVmZzjrrLO82t9utDz/8UAsWLFBdXZ1sNtsR+9ntdtnt9k4dEwAAHH9M6wGKiorSsGHDlJ+f793m8XiUn5+vzMzMTr3nhRdeqE2bNmnjxo3ex/DhwzVp0iRt3Lix1fADAADCj6nT4HNycjRlyhQNHz5cI0eOVF5enqqrqzV16lRJ0uTJk9WrVy/l5uZKaho4vWXLFu/Xu3fv1saNG9W9e3f169dPcXFxSk9Pb3GM2NhY9ezZ84jtAAAgfJkagCZOnKi9e/dqzpw5Kikp0dChQ7Vy5UrvwOhdu3a1mMe/Z88enXnmmd7n8+bN07x58zRmzBi9//77wS4fAAAcpyxG85xveLlcLiUkJKiiooJZYAAAHCd8+fndpWaBAQAAdAQBCAAAhB0CEAAACDumDoION26PoYLt+1RWWaukuGiN7NNDNis3WwUAINgIQEGycnOx7n97i4orar3bnAnRmnvpII1Nd5pYGQAA4YdLYEGwcnOxpr1c2CL8SFJJRa2mvVyolZuLTaoMAIDwRAAKMLfH0P1vb1Fraw00b7v/7S1ye1iNAACAYCEABVjB9n1H9PwczpBUXFGrgu37glcUAABhjgAUYGWVbYefzrQDAADHjgAUYElx0X5tBwAAjh0BKMBG9ukhZ0K02prsblHTbLCRfXoEsywAAMIaASjAbFaL5l46qNXXmkPR3EsHsR4QAABBRAAKgrHpTi289iw5Elpe5nIkRGvhtWexDhAAAEHGQohBMjbdqZ8PcmjUI/kqddXpD5cO0nWZafT8AABgAnqAgshmtSitZ6wkqUd3O+EHAACTEICCzHnwMlhJxQGTKwEAIHwRgILMkRAjSdqzn3V/AAAwCwEoyA71ABGAAAAwCwEoyJpnghW7CEAAAJiFABRkKQcvgTEGCAAA8xCAgqy5B6issk4Nbo/J1QAAEJ4IQEHWMzZKkTaLDEPaW1lndjkAAIQlAlCQWa0WJccfHAfEZTAAAExBADJB80ywYmaCAQBgCgKQCRzegdAEIAAAzEAAMkEKPUAAAJiKAGQCB4shAgBgKgKQCQ6NAWIQNAAAZiAAmaB5DBCXwAAAMAcByATOwxZDbGQxRAAAgo4AZILE7nZFWC1yewyVV9WbXQ4AAGGHAGQCG4shAgBgKgKQSZgJBgCAeQhAJnGwFhAAAKYhAJnEySUwAABMQwAyCT1AAACYhwBkEif3AwMAwDQEIJM4T6AHCAAAsxCATNK8GGKpq1Yej2FyNQAAhBcCkElO6m6X1SI1egyVV9eZXQ4AAGGFAGSSCJtVSXEHL4Pt5zIYAADBRAAyETPBAAAwBwHIRE7vatCsBQQAQDARgEzUPBW+2EUPEAAAwWR6AHr22WeVlpam6OhoZWRkqKCgoM22X375pSZMmKC0tDRZLBbl5eUd0SY3N1cjRoxQXFyckpKSNH78eG3dujWAZ9B5Tu4HBgCAKUwNQEuXLlVOTo7mzp2rwsJCDRkyRNnZ2SorK2u1fU1Njfr27atHHnlEDoej1TYffPCBpk+frnXr1mnVqlVqaGjQRRddpOrq6kCeSqd4xwAxCBoAgKCyGIZh2iI0GRkZGjFihBYsWCBJ8ng8Sk1N1YwZM3TXXXcddd+0tDTNmjVLs2bNOmq7vXv3KikpSR988IHOPffcDtXlcrmUkJCgiooKxcfHd2ifzvh0xz5duWitUnvE6KP/94KAHQcAgHDgy89v03qA6uvrtWHDBmVlZR0qxmpVVlaW1q5d67fjVFRUSJJ69OjRZpu6ujq5XK4Wj2Bo7gEqrahjMUQAAILItABUXl4ut9ut5OTkFtuTk5NVUlLil2N4PB7NmjVL55xzjtLT09tsl5ubq4SEBO8jNTXVL8dvT3J8tCwWqd7t0b6a+qAcEwAAhMAg6ECaPn26Nm/erCVLlhy13ezZs1VRUeF9FBUVBaW+SJtVJ3W3S2IgNAAAwRRh1oETExNls9lUWlraYntpaWmbA5x9ccstt2jFihX68MMPdfLJJx+1rd1ul91uP+ZjdoYzIVpllXUqrqhVeq8EU2oAACDcmNYDFBUVpWHDhik/P9+7zePxKD8/X5mZmZ1+X8MwdMstt+itt97Sv//9b/Xp08cf5QbModWgWQwRAIBgMa0HSJJycnI0ZcoUDR8+XCNHjlReXp6qq6s1depUSdLkyZPVq1cv5ebmSmoaOL1lyxbv17t379bGjRvVvXt39evXT1LTZa9XX31V//jHPxQXF+cdT5SQkKCYmBgTzvLovIshcgkMAICgMTUATZw4UXv37tWcOXNUUlKioUOHauXKld6B0bt27ZLVeqiTas+ePTrzzDO9z+fNm6d58+ZpzJgxev/99yVJCxculCSdd955LY71wgsv6De/+U1Az6czHCyGCABA0JkagKSmsTq33HJLq681h5pmaWlpam/ZIhOXNeoUJ5fAAAAIui49C+x40HwJjB4gAACChwBkskM9QLXHXe8VAADHKwKQyZLim6bf1zV69GNNg8nVAAAQHghAJrNH2JTYPUoS44AAAAgWAlAIYCYYAADBRQAKAawFBABAcBGAQoCTHiAAAIKKABQCHIfNBAMAAIFHAAoBLIYIAEBwEYBCgCOexRABAAgmAlAIYDFEAACCiwAUAprHAB1ocMt1oNHkagAA6PoIQCEgOtKmHrEHF0N0MQ4IAIBAIwCFCEc8M8EAAAgWAlCI8I4D2k8AAgAg0AhAIeLQ7TC4BAYAQKARgEKEk8UQAQAIGgJQiGi+H1iJiwAEAECgEYBCBD1AAAAEDwEoRDi4ISoAAEFDAAoRzQGoqq5RrtoGk6sBAKBrIwCFiG5REUqIiZRELxAAAIFGAAohjAMCACA4CEAhxMlaQAAABAUBKIQ4Dk6FpwcIAIDAIgCFECczwQAACAoCUAhpngm2hwAEAEBAEYBCCGOAAAAIDgJQCGEWGAAAwUEACiHNg6AraxtVVddocjUAAHRdBKAQ0t0eobjoCEkMhAYAIJAIQCGGmWAAAAQeASjENF8G28NAaAAAAoYAFGKc8fQAAQAQaASgEOM8gZlgAAAEGgEoxLAWEAAAgUcACjHcDwwAgMAjAIUYFkMEACDwCEAhpvl+YBUHGlRTz2KIAAAEAgEoxMTZIxQbZZPETDAAAAKFABRiLBaLnCc0jQMiAAEAEBgEoBDEOCAAAAKLABSCHM2LIboIQAAABAIBKAQ19wDt2c9aQAAABILpAejZZ59VWlqaoqOjlZGRoYKCgjbbfvnll5owYYLS0tJksViUl5d3zO8ZiprXAmIMEAAAgWFqAFq6dKlycnI0d+5cFRYWasiQIcrOzlZZWVmr7WtqatS3b1898sgjcjgcfnnPUMQYIAAAAsvUAPTEE0/oxhtv1NSpUzVo0CAtWrRI3bp10/PPP99q+xEjRujxxx/X1VdfLbvd7pf3DEXN9wNjDBAAAIFhWgCqr6/Xhg0blJWVdagYq1VZWVlau3ZtUN+zrq5OLperxcNMzvimS2D7qutV2+A2tRYAALoi0wJQeXm53G63kpOTW2xPTk5WSUlJUN8zNzdXCQkJ3kdqamqnju8v8TERiolsWgyxlF4gAAD8zvRB0KFg9uzZqqio8D6KiopMrcdisRw2E4wABACAv0WYdeDExETZbDaVlpa22F5aWtrmAOdAvafdbm9zTJFZHAnR+q68WiUupsIDAOBvpvUARUVFadiwYcrPz/du83g8ys/PV2ZmZsi8p1kczAQDACBgTOsBkqScnBxNmTJFw4cP18iRI5WXl6fq6mpNnTpVkjR58mT16tVLubm5kpoGOW/ZssX79e7du7Vx40Z1795d/fr169B7Hi9SWAsIAICAMTUATZw4UXv37tWcOXNUUlKioUOHauXKld5BzLt27ZLVeqiTas+ePTrzzDO9z+fNm6d58+ZpzJgxev/99zv0nscLeoAAAAgci2EYhtlFhBqXy6WEhARVVFQoPj7elBryvyrVDf/7qQb3StDbM0abUgMAAMcTX35+MwssRB3qAWIQNAAA/kYAClHOg2OAyqvqVdfIYogAAPgTAShEndgtUvaIpr+eMledydUAANC1EIBC1OGLITIQGgAA/yIAhTDGAQEAEBgEoBDmZC0gAAACggAUwlgLCACAwCAAhTAnl8AAAAgIAlAIc8Q3BSAugQEA4F8EoBCWckLTGCAugQEA4F8EoBDWPAZob1WdGtwek6sBAKDrIACFsB7dohRls8owpLJKFkMEAMBfCEAhzGq1KDnBLkkq3s9AaAAA/IUAFOKc8YwDAgDA3whAIa55HBAzwQAA8B8CUIhznsBiiAAA+BsBKMQ5m9cCcjEGCAAAfyEAhThHAmOAAADwNwJQiPPeDmM/AQgAAH8hAIW45gBUVlmrRhZDBADALwhAIS6xu10RVos8RtOK0AAA4NgRgEKc1WpRcjwzwQAA8CcC0HHAyVpAAAD4FQHoONC8GCI9QAAA+IfPAaioqEjff/+993lBQYFmzZqlxYsX+7UwHHJoJhhrAQEA4A8+B6Bf//rXWr16tSSppKREP//5z1VQUKB77rlHf/zjH/1eIA5bC8hFDxAAAP7gcwDavHmzRo4cKUn629/+pvT0dH388cd65ZVX9OKLL/q7PkhKYQwQAAB+5XMAamhokN1ulyT961//0mWXXSZJGjhwoIqLi/1bHSRxQ1QAAPzN5wB0+umna9GiRfroo4+0atUqjR07VpK0Z88e9ezZ0+8FQnIevARW6qqV22OYXA0AAMc/nwPQo48+qj/96U8677zzdM0112jIkCGSpOXLl3svjcG/Toqzy2a1qNFjqJzFEAEAOGYRvu5w3nnnqby8XC6XSyeeeKJ3+0033aRu3br5tTg0sVktSoqzq7iiVsUVtd6FEQEAQOf43AN04MAB1dXVecPPzp07lZeXp61btyopKcnvBaLJoXFATIUHAOBY+RyAfvnLX+qll16SJO3fv18ZGRmaP3++xo8fr4ULF/q9QDRJaZ4Kz0BoAACOmc8BqLCwUD/72c8kSX//+9+VnJysnTt36qWXXtLTTz/t9wLRhJlgAAD4j88BqKamRnFxcZKkf/7zn7riiitktVp19tlna+fOnX4vEE2c3A4DAAC/8TkA9evXT8uWLVNRUZHee+89XXTRRZKksrIyxcfH+71ANDl0PzDGAAEAcKx8DkBz5szR7bffrrS0NI0cOVKZmZmSmnqDzjzzTL8XiCb0AAEA4D8+T4O/8sorNXr0aBUXF3vXAJKkCy+8UJdffrlfi8MhjsMWQ/R4DFmtFpMrAgDg+OVzAJIkh8Mhh8PhvSv8ySefzCKIAZYUZ5fVIjW4Df1QXa+T4uxmlwQAwHHL50tgHo9Hf/zjH5WQkKDevXurd+/eOuGEE/TAAw/I4/EEokZIirRZvaGHmWAAABwbn3uA7rnnHj333HN65JFHdM4550iS1qxZoz/84Q+qra3VQw895Pci0cSREKNSV52KKw5o8MkJZpcDAMBxy+cA9L//+7/6y1/+4r0LvCSdccYZ6tWrl373u98RgALIGR+tz8VAaAAAjpXPl8D27dungQMHHrF94MCB2rdvn1+KQusczAQDAMAvfA5AQ4YM0YIFC47YvmDBghazwuB/Tu4HBgCAX/gcgB577DE9//zzGjRokG644QbdcMMNGjRokF588UU9/vjjPhfw7LPPKi0tTdHR0crIyFBBQcFR27/++usaOHCgoqOjNXjwYL3zzjstXq+qqtItt9yik08+WTExMRo0aJAWLVrkc12hyHkC9wMDAMAffA5AY8aM0bZt23T55Zdr//792r9/v6644gpt3brVe4+wjlq6dKlycnI0d+5cFRYWasiQIcrOzlZZWVmr7T/++GNdc801uuGGG/TZZ59p/PjxGj9+vDZv3uxtk5OTo5UrV+rll1/WV199pVmzZumWW27R8uXLfT3VkOPtAXIRgAAAOBYWwzAMsw6ekZGhESNGeC+peTwepaamasaMGbrrrruOaD9x4kRVV1drxYoV3m1nn322hg4d6u3lSU9P18SJE3Xfffd52wwbNkwXX3yxHnzwwQ7V5XK5lJCQoIqKipC6vUfRvhr97LHVioqwausDY2WxsBgiAADNfPn53aFZYF988UWHD37GGWd0qF19fb02bNig2bNne7dZrVZlZWVp7dq1re6zdu1a5eTktNiWnZ2tZcuWeZ+PGjVKy5cv1/XXX6+UlBS9//772rZtm5588sk2a6mrq1NdXZ33ucvl6tA5BFtyfFMPUH2jR/uq69WzO4shAgDQGR0KQEOHDpXFYlF7nUUWi0Vut7tDBy4vL5fb7VZycnKL7cnJyfr6669b3aekpKTV9iUlJd7nzzzzjG666SadfPLJioiIkNVq1Z///Gede+65bdaSm5ur+++/v0N1mykqwqrE7naVV9WpuKKWAAQAQCd1KABt37490HX4zTPPPKN169Zp+fLl6t27tz788ENNnz5dKSkpysrKanWf2bNnt+hZcrlcSk1NDVbJPnEmRKu8qk4lFbVK78ViiAAAdEaHAlDv3r39fuDExETZbDaVlpa22F5aWiqHw9HqPg6H46jtDxw4oLvvvltvvfWWLrnkEklNl+Q2btyoefPmtRmA7Ha77PbjozfFmRCtTbsrVMxAaAAAOs3nWWD+EhUVpWHDhik/P9+7zePxKD8/X5mZma3uk5mZ2aK9JK1atcrbvqGhQQ0NDbJaW56WzWbrMvcpYy0gAACOXafuBu8vOTk5mjJlioYPH66RI0cqLy9P1dXVmjp1qiRp8uTJ6tWrl3JzcyVJM2fO1JgxYzR//nxdcsklWrJkiT799FMtXrxYkhQfH68xY8bojjvuUExMjHr37q0PPvhAL730kp544gnTztOfHAmsBQQAwLEyNQBNnDhRe/fu1Zw5c1RSUqKhQ4dq5cqV3oHOu3btatGbM2rUKL366qu69957dffdd6t///5atmyZ0tPTvW2WLFmi2bNna9KkSdq3b5969+6thx56SDfffHPQzy8QmnuAivcTgAAA6CxT1wEKVaG6DpAkrfvuB129eJ36JMZq9e3nmV0OAAAhw5ef350aA7R//3795S9/0ezZs703QC0sLNTu3bs783bwQYr3EtiBdpclAAAArfP5EtgXX3yhrKwsJSQkaMeOHbrxxhvVo0cPvfnmm9q1a5deeumlQNSJg5Lim2ar1TZ4VHGgQSd0izK5IgAAjj8+9wDl5OToN7/5jb755htFR0d7t48bN04ffvihX4vDkaIjbeoZ2xR6GAgNAEDn+ByA1q9fr9/+9rdHbO/Vq1eLFZkROA7vVHgCEAAAneFzALLb7a3eK2vbtm066aST/FIUjq55Jtge1gICAKBTfA5Al112mf74xz+qoaFBUtP9v3bt2qU777xTEyZM8HuBOBI9QAAAHBufA9D8+fNVVVWlpKQkHThwQGPGjFG/fv0UFxenhx56KBA14iecLIYIAMAx8XkWWEJCglatWqU1a9boiy++UFVVlc4666w277MF/3PSAwQAwDHp9ErQo0eP1ujRo/1ZCzqo+RJYMWOAAADoFJ8D0NNPP93qdovFoujoaPXr10/nnnuubDbbMReH1h1+CcwwDFksFpMrAgDg+OJzAHryySe1d+9e1dTU6MQTT5Qk/fjjj+rWrZu6d++usrIy9e3bV6tXr1ZqaqrfC4bkiG/qAaqpd8tV26iEmEiTKwIA4Pji8yDohx9+WCNGjNA333yjH374QT/88IO2bdumjIwMPfXUU9q1a5ccDoduu+22QNQLSTFRNp3QrSn0MA4IAADf+dwDdO+99+qNN97Qqaee6t3Wr18/zZs3TxMmTNB3332nxx57jCnxAeZMiNH+mgYVVxzQAEec2eUAAHBc8bkHqLi4WI2NjUdsb2xs9K4EnZKSosrKymOvDm1iJhgAAJ3ncwA6//zz9dvf/lafffaZd9tnn32madOm6YILLpAkbdq0SX369PFflTjCoZlgBCAAAHzlcwB67rnn1KNHDw0bNkx2u112u13Dhw9Xjx499Nxzz0mSunfvrvnz5/u9WBzijKcHCACAzvJ5DJDD4dCqVav09ddfa9u2bZKkAQMGaMCAAd42559/vv8qRKsc3A8MAIBO6/RCiAMHDtTAgQP9WQt80LwWED1AAAD4rlMB6Pvvv9fy5cu1a9cu1dfXt3jtiSee8EthODrnCVwCAwCgs3wOQPn5+brsssvUt29fff3110pPT9eOHTtkGIbOOuusQNSIVjQvhlhZ16jK2gbFRbMYIgAAHeXzIOjZs2fr9ttv16ZNmxQdHa033nhDRUVFGjNmjH71q18Foka0ItYeofjopvxa6qIXCAAAX/gcgL766itNnjxZkhQREaEDBw6oe/fu+uMf/6hHH33U7wWibc3jgPbsJwABAOALnwNQbGysd9yP0+nUf//7X+9r5eXl/qsM7XKwGCIAAJ3i8xigs88+W2vWrNFpp52mcePG6fe//702bdqkN998U2effXYgakQbnCyGCABAp/gcgJ544glVVVVJku6//35VVVVp6dKl6t+/PzPAgsw7Fd7FWkAAAPjCpwDkdrv1/fff64wzzpDUdDls0aJFASkM7aMHCACAzvFpDJDNZtNFF12kH3/8MVD1wAeMAQIAoHN8HgSdnp6u7777LhC1wEfNPUB79nMJDAAAX/gcgB588EHdfvvtWrFihYqLi+VyuVo8EDzNPUCu2kZV1zWaXA0AAMcPnwdBjxs3TpJ02WWXyWKxeLcbhiGLxSK32+2/6nBUcdGR6m6PUFVdo0pctTr1pO5mlwQAwHHB5wC0evXqQNSBTnImROubsiqVVBCAAADoKJ8D0JgxYwJRBzrJcTAAMRMMAICO83kMkCR99NFHuvbaazVq1Cjt3r1bkvTXv/5Va9as8WtxaJ/TOxOMgdAAAHSUzwHojTfeUHZ2tmJiYlRYWKi6ujpJUkVFhR5++GG/F4ijczTfD4weIAAAOqxTs8AWLVqkP//5z4qMjPRuP+ecc1RYWOjX4tA+J2sBAQDgM58D0NatW3XuuecesT0hIUH79+/3R03wgYPVoAEA8JnPAcjhcOjbb789YvuaNWvUt29fvxSFjktpvh8YY4AAAOgwnwPQjTfeqJkzZ+qTTz6RxWLRnj179Morr+j222/XtGnTAlEjjqK5B+jHmgbVNrAGEwAAHeHzNPi77rpLHo9HF154oWpqanTuuefKbrfr9ttv14wZMwJRI44iPjpC3aJsqql3q6SiVmmJsWaXBABAyPM5AFksFt1zzz2644479O2336qqqkqDBg1S9+4swmcGi8UiR0K0vttbrT0VBwhAAAB0gM+XwF5++WXV1NQoKipKgwYN0siRIwk/JmMmGAAAvvE5AN12221KSkrSr3/9a73zzjvc+ysEOA8OhGYmGAAAHeNzACouLtaSJUtksVh01VVXyel0avr06fr4448DUR86gB4gAAB843MAioiI0C9+8Qu98sorKisr05NPPqkdO3bo/PPP16mnnhqIGtEO1gICAMA3nboXWLNu3bopOztbF198sfr3768dO3b4/B7PPvus0tLSFB0drYyMDBUUFBy1/euvv66BAwcqOjpagwcP1jvvvHNEm6+++kqXXXaZEhISFBsbqxEjRmjXrl0+13a88PYAuVgLCACAjuhUAKqpqdErr7yicePGqVevXsrLy9Pll1+uL7/80qf3Wbp0qXJycjR37lwVFhZqyJAhys7OVllZWavtP/74Y11zzTW64YYb9Nlnn2n8+PEaP368Nm/e7G3z3//+V6NHj9bAgQP1/vvv64svvtB9992n6OjozpzqccERf3AM0H56gAAA6AiLYRiGLztcffXVWrFihbp166arrrpKkyZNUmZmZqcOnpGRoREjRmjBggWSJI/Ho9TUVM2YMUN33XXXEe0nTpyo6upqrVixwrvt7LPP1tChQ7Vo0SJvfZGRkfrrX//aqZokyeVyKSEhQRUVFYqPj+/0+wTLj9X1OvOBVZKkrx8Yq+hIm8kVAQAQfL78/Pa5B8hms+lvf/ubiouLtWDBghbh5/CemPbU19drw4YNysrKOlSM1aqsrCytXbu21X3Wrl3bor0kZWdne9t7PB793//9n/7nf/5H2dnZSkpKUkZGhpYtW3bUWurq6uRyuVo8jicndItUdGTTX2WZq87kagAACH0+B6DmS182W1MvQ2VlpRYvXqyRI0dqyJAhHX6f8vJyud1uJScnt9ienJyskpKSVvcpKSk5avuysjJVVVXpkUce0dixY/XPf/5Tl19+ua644gp98MEHbdaSm5urhIQE7yM1NbXD5xEKLBbLYVPhGQcEAEB7Oj0I+sMPP9SUKVPkdDo1b948XXDBBVq3bp0/a/OZx+ORJP3yl7/UbbfdpqFDh+quu+7SL37xC+8lstbMnj1bFRUV3kdRUVGwSvYbR3zzQGjGAQEA0B6fboVRUlKiF198Uc8995xcLpeuuuoq1dXVadmyZRo0aJBPB05MTJTNZlNpaWmL7aWlpXI4HK3u43A4jto+MTFRERERR9Ry2mmnac2aNW3WYrfbZbfbfao/1DiZCg8AQId1uAfo0ksv1YABA/TFF18oLy9Pe/bs0TPPPNPpA0dFRWnYsGHKz8/3bvN4PMrPz29zUHVmZmaL9pK0atUqb/uoqCiNGDFCW7dubdFm27Zt6t27d6drPR541wLazyUwAADa0+EeoHfffVe33nqrpk2bpv79+/vl4Dk5OZoyZYqGDx+ukSNHKi8vT9XV1Zo6daokafLkyerVq5dyc3MlSTNnztSYMWM0f/58XXLJJVqyZIk+/fRTLV682Pued9xxhyZOnKhzzz1X559/vlauXKm3335b77//vl9qDlX0AAEA0HEd7gFas2aNKisrNWzYMGVkZGjBggUqLy8/poNPnDhR8+bN05w5czR06FBt3LhRK1eu9A503rVrl4qLi73tR40apVdffVWLFy/WkCFD9Pe//13Lli1Tenq6t83ll1+uRYsW6bHHHtPgwYP1l7/8RW+88YZGjx59TLWGuuZB0IwBAgCgfT6vA1RdXa2lS5fq+eefV0FBgdxut5544gldf/31iouLC1SdQXW8rQMkSZt3V+gXz6zRSXF2rb8nq/0dAADoYgK6DlBsbKyuv/56rVmzRps2bdLvf/97PfLII0pKStJll13W6aJxbJovgZVX1am+0WNyNQAAhLZjuhfYgAED9Nhjj+n777/Xa6+95q+a0Ak9YqMUZbPKMKSySi6DAQBwNMcUgJrZbDaNHz9ey5cv98fboRMsFgt3hQcAoIP8EoAQGghAAAB0DAGoC0k5GIBKuB0GAABHRQDqQhze+4HRAwQAwNEQgLoQp7cHiAAEAMDREIC6EMYAAQDQMQSgLuTQ7TAYAwQAwNEQgLqQ5h6gsso6NbhZDBEAgLYQgLqQxFi7Im0WGYa0t7LO7HIAAAhZBKAuxGq1KDmecUAAALSHANTFMBMMAID2EYC6mENrATEQGgCAthCAuhgnU+EBAGgXAaiLccRzCQwAgPYQgLqYlBNYCwgAgPYQgLqY5jFA9AABANA2AlAX0zwGqLSyTm6PYXI1AACEJgJQF5PY3S6b1SK3x2AxRAAA2kAA6mJsVouS4+ySGAcEAEBbCEBdkIPFEAEAOCoCUBfkPKF5MUQCEAAArSEAdUHO5rWAXAQgAABaQwDqghysBg0AwFERgLogZ/P9wPYzCBoAgNYQgLogeoAAADg6AlAX1Hw7jFJXrTwshggAwBEIQF3QSd3tslqkRo+h8moWQwQA4KcIQF1QhM2qpDjWAgIAoC0EoC6KcUAAALSNANRFNd8UlZlgAAAciQDURXl7gFgMEQCAIxCAuqiUg2sBMQYIAIAjEYC6KMYAAQDQNgJQF+XkjvAAALSJANRFOQ4LQIbBYogAAByOANRFJcVFy2KR6t0e/VBdb3Y5AACEFAJQFxUVYVVid7skLoMBAPBTBKAuLIWB0AAAtIoA1IUdGgfEYogAAByOANSFOQ+uBUQPEAAALRGAujAHU+EBAGgVAagLa14LaA+XwAAAaCEkAtCzzz6rtLQ0RUdHKyMjQwUFBUdt//rrr2vgwIGKjo7W4MGD9c4777TZ9uabb5bFYlFeXp6fqw59jnh6gAAAaI3pAWjp0qXKycnR3LlzVVhYqCFDhig7O1tlZWWttv/44491zTXX6IYbbtBnn32m8ePHa/z48dq8efMRbd966y2tW7dOKSkpgT6NkJRywqExQCyGCADAIaYHoCeeeEI33nijpk6dqkGDBmnRokXq1q2bnn/++VbbP/XUUxo7dqzuuOMOnXbaaXrggQd01llnacGCBS3a7d69WzNmzNArr7yiyMjIYJxKyEmKb1oHqK7Ro/01DSZXAwBA6DA1ANXX12vDhg3KysrybrNarcrKytLatWtb3Wft2rUt2ktSdnZ2i/Yej0fXXXed7rjjDp1++unt1lFXVyeXy9Xi0RXYI2xK7B4liZlgAAAcztQAVF5eLrfbreTk5Bbbk5OTVVJS0uo+JSUl7bZ/9NFHFRERoVtvvbVDdeTm5iohIcH7SE1N9fFMQpd3JpiLgdAAADQz/RKYv23YsEFPPfWUXnzxRVkslg7tM3v2bFVUVHgfRUVFAa4yeBzxTeOA9uynBwgAgGamBqDExETZbDaVlpa22F5aWiqHw9HqPg6H46jtP/roI5WVlemUU05RRESEIiIitHPnTv3+979XWlpaq+9pt9sVHx/f4tFVOFkLCACAI5gagKKiojRs2DDl5+d7t3k8HuXn5yszM7PVfTIzM1u0l6RVq1Z521933XX64osvtHHjRu8jJSVFd9xxh957773AnUyIcp7A/cAAAPipCLMLyMnJ0ZQpUzR8+HCNHDlSeXl5qq6u1tSpUyVJkydPVq9evZSbmytJmjlzpsaMGaP58+frkksu0ZIlS/Tpp59q8eLFkqSePXuqZ8+eLY4RGRkph8OhAQMGBPfkQoCTMUAAABzB9AA0ceJE7d27V3PmzFFJSYmGDh2qlStXegc679q1S1broY6qUaNG6dVXX9W9996ru+++W/3799eyZcuUnp5u1imEtOYxQPQAAQBwiMVghbwjuFwuJSQkqKKi4rgfD7SjvFrnzXtf3aJs+vL+7A4PDAcA4Hjjy8/vLjcLDC01T4OvqXfLdaDR5GoAAAgNBKAuLjrSphO7Na2EXcw4IAAAJBGAwoIzgXFAAAAcjgAUBlgLCACAlghAYaB5HBA9QAAANCEAhYFDPUCMAQIAQCIAhQUHY4AAAGiBABQGUrgEBgBACwSgMOBgEDQAAC0QgMJAcwCqqmtUZW2DydUAAGA+AlAY6BYVoYSYpsUQ6QUCAIAAFDaaZ4LtIQABAEAAChcOpsIDAOBFAAoT3A4DAIBDCEBhgtthAABwCAEoTHA7DAAADiEAhQl6gAAAOIQAFCYOzQJjEDQAAASgMNF8P7DK2kZV1TWaXA0AAOYiAIWJ7vYIxUVHSOIyGAAABKAwwjggAACaEIDCSHJ8UwB6Z9Merf3vD3J7DJMrAgDAHBFmF4DgWLm5WJ/u+FGS9GpBkV4tKJIzIVpzLx2kselOk6sDACC46AEKAys3F2vay4U60OBusb2kolbTXi7Uys3FJlUGAIA5CEBdnNtj6P63t6i1i13N2+5/ewuXwwAAYYUA1MUVbN931NWfDTWtDl2wfV/wigIAwGQEoC6urLJjM7462g4AgK6AANTFJcVF+7UdAABdAQGoixvZp4ecCdGytNNu0+79MgzGAQEAwgMBqIuzWS2ae+kgSToiBB3+/OF3vtaNL32q/TX1QasNAACzEIDCwNh0pxZee5YcCS0vczkSorVw0ll6cHy6oiKs+tdXZRr31EfasJMB0QCArs1icN3jCC6XSwkJCaqoqFB8fLzZ5fiN22OoYPs+lVXWKikuWiP79JDN2tQP9OWeCt3y6mfaXl4tm9Wi2y8aoN+e21dWa3sXzwAACA2+/PwmALWiqwag9lTVNeqetzbpHxv3SJLOG3CS5v9qiHp2t5tcGQAA7fPl5zeXwODV3R6hvIlD9cgVg2WPsOr9rXs17umP9Ml3P5hdGgAAfkUAQgsWi0VXjzxF/7jlHJ16UqxKXXW65s/rtODf38jDatEAgC6CAIRWDXTE6+0ZozXhrJPlMaR5/9ymKS8UaG9lndmlAQBwzAhAaFO3qAjNv2qIHr/yDMVE2vTRN+Ua9/RH+vjbcrNLAwDgmBCA0K5fDU/V8lvO0f8kd9feyjpNeu4TPblqGzdQBQActwhA6JD+yXH6x/TRmjg8VYYhPZX/ja79yycqc3EPMQDA8YcAhA6LibLp0SvPUN7EoeoWZdPa737QuKc/0kff7DW7NAAAfEIAgs/Gn9lLK2aM1mnOeJVX1Wvy8wWa995WNbo9ZpcGAECHEIDQKX1P6q63fjdKkzJOkWFIC1Z/q1//+RMVVxwwuzQAANpFAEKnRUfa9NDlg/XMNWequz1CBTv2adxTH2n11jKzSwMA4KgIQDhmlw5J0YoZo5XeK14/1jRo6gvrlfvuV2rgkhgAIESFRAB69tlnlZaWpujoaGVkZKigoOCo7V9//XUNHDhQ0dHRGjx4sN555x3vaw0NDbrzzjs1ePBgxcbGKiUlRZMnT9aePXsCfRphLS0xVm9MG6Upmb0lSX/64DtN/NNa7d7PJTEAQOgxPQAtXbpUOTk5mjt3rgoLCzVkyBBlZ2errKz1yygff/yxrrnmGt1www367LPPNH78eI0fP16bN2+WJNXU1KiwsFD33XefCgsL9eabb2rr1q267LLLgnlaYckeYdP9v0zXwklnKS46QoW79mvcUx9p1ZZSSU13o1/73x/0j427tfa/P7COEADANKbfDT4jI0MjRozQggULJEkej0epqamaMWOG7rrrriPaT5w4UdXV1VqxYoV329lnn62hQ4dq0aJFrR5j/fr1GjlypHbu3KlTTjml3ZrC9W7w/lS0r0a3vFqoz7+vkCRdODBJX+5xqeSwdYOcCdGae+kgjU13mlUmAKALOW7uBl9fX68NGzYoKyvLu81qtSorK0tr165tdZ+1a9e2aC9J2dnZbbaXpIqKClksFp1wwgmtvl5XVyeXy9XigWOT2qObXr95lG4Y3UeSlP91WYvwI0klFbWa9nKhVm4uNqNEAEAYMzUAlZeXy+12Kzk5ucX25ORklZSUtLpPSUmJT+1ra2t155136pprrmkzDebm5iohIcH7SE1N7cTZ4KeiIqy6e9xpOrFbZKuvN3c93v/2Fi6HAQCCyvQxQIHU0NCgq666SoZhaOHChW22mz17tioqKryPoqKiIFbZtRVs36cfaxrafN2QVFxRq4Lt+4JXFAAg7EWYefDExETZbDaVlpa22F5aWiqHw9HqPg6Ho0Ptm8PPzp079e9///uo1wLtdrvsdnsnzwJHU1bZsXuF/eHtLzU5s7d+PihZSXHRAa4KABDuTO0BioqK0rBhw5Sfn+/d5vF4lJ+fr8zMzFb3yczMbNFeklatWtWifXP4+eabb/Svf/1LPXv2DMwJoF0dDTNbSyp1z1ublfFwvq5atFbPrdmu73+sCXB1AIBwZWoPkCTl5ORoypQpGj58uEaOHKm8vDxVV1dr6tSpkqTJkyerV69eys3NlSTNnDlTY8aM0fz583XJJZdoyZIl+vTTT7V48WJJTeHnyiuvVGFhoVasWCG32+0dH9SjRw9FRUWZc6JhamSfHnImRKukolatjfKxSEqMs2vKqN5a9WWpPv++QgU79qlgxz49sGKLzjg5QdmnOzQ23aFTT+oe7PIBAF2U6dPgJWnBggV6/PHHVVJSoqFDh+rpp59WRkaGJOm8885TWlqaXnzxRW/7119/Xffee6927Nih/v3767HHHtO4ceMkSTt27FCfPn1aPc7q1at13nnntVsP0+D9a+XmYk17uVCSWoQgy8E/F157lncq/O79B/Te5hKt/LJE63fs0+Hfnf2TuuvidIey0x0a5IyXxWIRAADNfPn5HRIBKNQQgPxv5eZi3f/2FhVXdHwdoL2VdVq1pVQrvyzRx9+Wq/GwmWKpPWI09nSHxqY7dWbqCbJaCUMAEO4IQMeIABQYbo+hgu37VFZZq6S4aI3s00O2DgaXipoG/Xtrqd7dVKIPtu1VXeOh+4wlxdm9l8ky+vRQhK31oW3HcnwAQOgjAB0jAlBoq6lv1Adb92rllyXK/6pMVXWN3tdO6Bapn5+WrLHpDp3TL1HRkTZJneuBAgAcXwhAx4gAdPyoa3Tr429/0MrNJfrnlpIWaw51t0fo/IFJcsTb9ZePth8xCLu1MUgAgOMXAegYEYCOT41ujwp27PMOoi511bW7j0WSIyFaa+68gMthAHCcIwAdIwLQ8c/jMbTx+/16Yc12vf1F+/cam3lhf110erL6JMaqW5Tpq0MAADqBAHSMCEBdxz827tbMJRt92ic53q60nrHqe1Ks0nrGKi0xVn0SY3VKj27eMUWdwSBsAAgsX35+86suurSOrkTdLylW5VX12l/ToFJXnUpddfrkJ/cns1iklIQY9TkYiJqCUTel9YxVao9uimxj9pkUOoOwCWEA0IQeoFbQA9R1uD2GRj/676OuRH34GKD9NfXaXl6tHT9Ua/veam3/oUY7yqu1vby6xWyzn7JZLUo9McbbW9Qnsan3qE9irDZ9X6HprxaaPgg7VEKYmQiAQNfGJbBjRADqWnxZibothmGovKq+KRgdDETNwWjHD9WqbfAcdf+jSewepSU3ZSo+JkLd7RGKibT5fZXr5s/A7BBmZgAJhQBodgAz+/ihUIPZxzdbVz9/AtAxIgB1PYH84efxGCqtrP1JMKrRjh+avj58BeuOsFqk2KgIxdojFGu3qbu9+esIxUbZFGuPaLGtu9122NcRio1qfr1pe4TVop89trrFuR8uWDPhzAwgoRAAzQ5gZh8/FGow+/gSvwQE+vwJQMeIANQ1mfEPz1uf7dZtSze2284eYVW926NA/N9otUgdyWCXDnHq1JO6KybSppgom6IjbU1fR9rULcqm6KhDzw9/PdJmabfHyswA0nwZ1MwAaHYAM/v4oVCD2cdvroFfAgJ7/gSgY0QAgr+s/e8PuubP69pt99qNZ+vsvj1UU+9WdX2jquvcqq5rVFVd42F/ttxWXd+oqp9uqzu07UCDOwhn2DT+qVtky4DU9LW16etIq97fWn7UerrbI3Rd5imSLDIMyZChg//JMAwZRlOIM2R4Q6JhGDIkeQ6+3tRW0sE2Tfs09c59uK283fO4ekSq+ifHyR5hbXpE2g59HWFT1MGvoyObnjdvt0daFWWztnk/OjMCmGEY8hhSo8ej+kaPsp744KjrYiXF2fXm70Ypwto0kL85z3qrOawsy8EnR7SRvEHY4n3e9KfbY2jc0x+1WYNFUlK8Xe/c+jPZrJZDf8c/OacjtzW3O3IH47A2bo+hy/+//6issu3jd+UQ3NDo0c8e+7dKjvI9kBxv179yxsge0bFfanwVrPMnAB0jAhD8xddB2P4+dk19oz7cVq7prxa22/6SwQ6dGBulA/Ue1Ta4daDBrQP1btU0uFVbf/D5wa9rGtxy+3hpr6uLsjUHp0MBKSrCqga3R//dW93u/mecnKD46Eg1ejxyeww1egx5Dv7pPuxPt/e554jth38N38VEWhVrj2jx9/fTIHwoIP/0ua3peyDyJ20jrYq0WjVr6Ub9UF3f5rF7xEbp0SsGq8FjqLbBrbpGj+qa/2z0HNrW6FZdQyvbGj2qa/Co9rDXm7fXN/o+RjHCalGkzaoIm0VRB/+MtFkPPiyKsDb9Gdnaa7amXwoirBZFRlhls0hvFu5WdX3rvwT5899BpsEDIcJmtWjupYM07eVCWdT6IOy5lw4KyG+dNqtFcdGRGpvukDMhut0Q9vQ1Z/lUR32jpykQHQxKLQLSYc8Ltu/T3zd83+77jfmfRJ16UpwslqaaLJamHoWm55aW25ufWyxHbvvJvkU/1Oi19UXtHv+8/0lUQreogz88Dv3gqWvlB0pzm8NzRr3bo3q3R210MrTri+8rOrejn1gtktVi6XCvSyg4vJPiUK+T5YhthmHI3YG6DzR4dKCh7ZASSPuq63XjXzeYcuzWNHoMNXrcUkP7bY+VIam4olYF2/cp89SegT/gQQQgIMDGpju18Nqzjrj27QjStf9AhbCog78hJ8REHrVd6ondOhSAbh7TLyD/+Lk9ht7ftrfdAPjcb0b6/Bk0uj3tBqXPv/9Rj7+3rd33mjbmVA10xslmtchmschmtSjCZpHNav3J85avR1gPa+N9bvE+L9z5o37zwvp2j//K/3N2pz9/b1Bq9RKUoXXf/aBrnyvoQA0ZOrtvUw0/vYzW9HXnflHo6KXoJ68aotNS4lv+PTY0Bdsj/n5b6WVp67W9rjoVu1q/BHq4U3rEyBEfc6h36Se9SdGRtlZ7nw5tb33bpu/36+aX2+8FfnHqCJ2ZeqIaPB41uD1qdBtqcHvU4P3To0aPoYZGjxoO/tno8ajebajxYPt6t0eNzft4PGpoNLRlT4Xe21La7vHLKtv/jPyJAAQEwdh0p34+yGHa7A8zQ9jIPj061AM1sk+PgBw/kL1wETarImxWxdrbbpN5ak+9vG5Xu+d/e/aAgHw//Kz/SQH//L1jf1ot36LMUxM7VMPZfXsG5DPo6PfgZUN7BeT4HQ1gj04YEpBfAhzx0R06/5/1Pylg59+RANTRhWv9pe2lawH4lc1qUeapPfXLob2UeWpg/qE/mrHpTq258wK9duPZeurqoXrtxrO15s4LgtYDJbUcMHv480BdBmzWHAAdCS3/gXUkRAd89ovZ52/28UOhBrOP3xzA2np3i5pmQwX6l4DmY/302FLXPv+2MAi6FQyCBvwvHNYgORqzz9/s44dCDaEwDV3q/IKs/qihq58/s8COEQEICIyuvgpte8w+f7OPHwo1hHMIlrr++ROAjhEBCAAQCGYHQLOF0krQDIIGACBImscChqtQOn8GQQMAgLBDAAIAAGGHAAQAAMIOAQgAAIQdAhAAAAg7BCAAABB2CEAAACDsEIAAAEDYIQABAICww0rQrWi+O4jL5TK5EgAA0FHNP7c7cpcvAlArKisrJUmpqakmVwIAAHxVWVmphISEo7bhZqit8Hg82rNnj+Li4mSxdK2b1LlcLqWmpqqoqCgsb/Qa7ucv8Rlw/uF9/hKfQVc+f8MwVFlZqZSUFFmtRx/lQw9QK6xWq04++WSzywio+Pj4LveN74twP3+Jz4DzD+/zl/gMuur5t9fz04xB0AAAIOwQgAAAQNghAIUZu92uuXPnym63m12KKcL9/CU+A84/vM9f4jMI9/NvxiBoAAAQdugBAgAAYYcABAAAwg4BCAAAhB0CEAAACDsEoDCQm5urESNGKC4uTklJSRo/fry2bt1qdlmmeuSRR2SxWDRr1iyzSwma3bt369prr1XPnj0VExOjwYMH69NPPzW7rKBxu92677771KdPH8XExOjUU0/VAw880KF7Bh2PPvzwQ1166aVKSUmRxWLRsmXLWrxuGIbmzJkjp9OpmJgYZWVl6ZtvvjGn2AA52mfQ0NCgO++8U4MHD1ZsbKxSUlI0efJk7dmzx7yC/ay974HD3XzzzbJYLMrLywtafWYjAIWBDz74QNOnT9e6deu0atUqNTQ06KKLLlJ1dbXZpZli/fr1+tOf/qQzzjjD7FKC5scff9Q555yjyMhIvfvuu9qyZYvmz5+vE0880ezSgubRRx/VwoULtWDBAn311Vd69NFH9dhjj+mZZ54xu7SAqK6u1pAhQ/Tss8+2+vpjjz2mp59+WosWLdInn3yi2NhYZWdnq7a2NsiVBs7RPoOamhoVFhbqvvvuU2Fhod58801t3bpVl112mQmVBkZ73wPN3nrrLa1bt04pKSlBqixEGAg7ZWVlhiTjgw8+MLuUoKusrDT69+9vrFq1yhgzZowxc+ZMs0sKijvvvNMYPXq02WWY6pJLLjGuv/76FtuuuOIKY9KkSSZVFDySjLfeesv73OPxGA6Hw3j88ce92/bv32/Y7XbjtddeM6HCwPvpZ9CagoICQ5Kxc+fO4BQVRG2d//fff2/06tXL2Lx5s9G7d2/jySefDHptZqEHKAxVVFRIknr06GFyJcE3ffp0XXLJJcrKyjK7lKBavny5hg8frl/96ldKSkrSmWeeqT//+c9mlxVUo0aNUn5+vrZt2yZJ+vzzz7VmzRpdfPHFJlcWfNu3b1dJSUmL/w8SEhKUkZGhtWvXmliZuSoqKmSxWHTCCSeYXUpQeDweXXfddbrjjjt0+umnm11O0HEz1DDj8Xg0a9YsnXPOOUpPTze7nKBasmSJCgsLtX79erNLCbrvvvtOCxcuVE5Oju6++26tX79et956q6KiojRlyhSzywuKu+66Sy6XSwMHDpTNZpPb7dZDDz2kSZMmmV1a0JWUlEiSkpOTW2xPTk72vhZuamtrdeedd+qaa67pkjcIbc2jjz6qiIgI3XrrrWaXYgoCUJiZPn26Nm/erDVr1phdSlAVFRVp5syZWrVqlaKjo80uJ+g8Ho+GDx+uhx9+WJJ05plnavPmzVq0aFHYBKC//e1veuWVV/Tqq6/q9NNP18aNGzVr1iylpKSEzWeA1jU0NOiqq66SYRhauHCh2eUExYYNG/TUU0+psLBQFovF7HJMwSWwMHLLLbdoxYoVWr16tU4++WSzywmqDRs2qKysTGeddZYiIiIUERGhDz74QE8//bQiIiLkdrvNLjGgnE6nBg0a1GLbaaedpl27dplUUfDdcccduuuuu3T11Vdr8ODBuu6663TbbbcpNzfX7NKCzuFwSJJKS0tbbC8tLfW+Fi6aw8/OnTu1atWqsOn9+eijj1RWVqZTTjnF+2/izp079fvf/15paWlmlxcU9ACFAcMwNGPGDL311lt6//331adPH7NLCroLL7xQmzZtarFt6tSpGjhwoO68807ZbDaTKguOc84554ilD7Zt26bevXubVFHw1dTUyGpt+TufzWaTx+MxqSLz9OnTRw6HQ/n5+Ro6dKgkyeVy6ZNPPtG0adPMLS6ImsPPN998o9WrV6tnz55mlxQ011133RFjIbOzs3Xddddp6tSpJlUVXASgMDB9+nS9+uqr+sc//qG4uDjvNf6EhATFxMSYXF1wxMXFHTHmKTY2Vj179gyLsVC33XabRo0apYcfflhXXXWVCgoKtHjxYi1evNjs0oLm0ksv1UMPPaRTTjlFp59+uj777DM98cQTuv76680uLSCqqqr07bffep9v375dGzduVI8ePXTKKado1qxZevDBB9W/f3/16dNH9913n1JSUjR+/Hjzivazo30GTqdTV155pQoLC7VixQq53W7vv409evRQVFSUWWX7TXvfAz8NfJGRkXI4HBowYECwSzWH2dPQEHiSWn288MILZpdmqnCaBm8YhvH2228b6enpht1uNwYOHGgsXrzY7JKCyuVyGTNnzjROOeUUIzo62ujbt69xzz33GHV1dWaXFhCrV69u9f/7KVOmGIbRNBX+vvvuM5KTkw273W5ceOGFxtatW80t2s+O9hls3769zX8bV69ebXbpftHe98BPhds0eIthdNFlUAEAANrAIGgAABB2CEAAACDsEIAAAEDYIQABAICwQwACAABhhwAEAADCDgEIAACEHQIQAAAIOwQgAGiDxWLRsmXLzC4DQAAQgACEpN/85jeyWCxHPMaOHWt2aQC6AG6GCiBkjR07Vi+88EKLbXa73aRqAHQl9AABCFl2u10Oh6PF48QTT5TUdHlq4cKFuvjiixUTE6O+ffvq73//e4v9N23apAsuuEAxMTHq2bOnbrrpJlVVVbVo8/zzz+v000+X3W6X0+nULbfc0uL18vJyXX755erWrZv69++v5cuXe1/78ccfNWnSJJ100kmKiYlR//79jwhsAEITAQjAceu+++7ThAkT9Pnnn2vSpEm6+uqr9dVXX0mSqqurlZ2drRNPPFHr16/X66+/rn/9618tAs7ChQs1ffp03XTTTdq0aZOWL1+ufv36tTjG/fffr6uuukpffPGFxo0bp0mTJmnfvn3e42/ZskXvvvuuvvrqKy1cuFCJiYnB+wAAdJ7Zt6MHgNZMmTLFsNlsRmxsbIvHQw89ZBiGYUgybr755hb7ZGRkGNOmTTMMwzAWL15snHjiiUZVVZX39f/7v/8zrFarUVJSYhiGYaSkpBj33HNPmzVIMu69917v86qqKkOS8e677xqGYRiXXnqpMXXqVP+cMICgYgwQgJB1/vnna+HChS229ejRw/t1ZmZmi9cyMzO1ceNGSdJXX32lIUOGKDY21vv6OeecI4/Ho61bt8pisWjPnj268MILj1rDGWec4f06NjZW8fHxKisrkyRNmzZNEyZMUGFhoS666CKNHz9eo0aN6tS5AgguAhCAkBUbG3vEJSl/iYmJ6VC7yMjIFs8tFos8Ho8k6eKLL9bOnTv1zjvvaNWqVbrwwgs1ffp0zZs3z+/1AvAvxgABOG6tW7fuiOennXaaJOm0007T559/rurqau/r//nPf2S1WjVgwADFxcUpLS1N+fn5x1TDSSedpClTpujll19WXl6eFi9efEzvByA46AECELLq6upUUlLSYltERIR3oPHrr7+u4cOHa/To0XrllVdUUFCg5557TpI0adIkzZ07V1OmTNEf/vAH7d27VzNmzNB1112n5ORkSdIf/vAH3XzzzUpKStLFF1+syspK/ec//9GMGTM6VN+cOXM0bNgwnX766aqrq9OKFSu8AQxAaCMAAQhZK1eulNPpbLFtwIAB+vrrryU1zdBasmSJfve738npdOq1117ToEGDJEndunXTe++9p5kzZ2rEiBHq1q2bJkyYoCeeeML7XlOmTFFtba2efPJJ3X777UpMTNSVV17Z4fqioqI0e/Zs7dixQzExMfrZz36mJUuW+OHMAQSaxTAMw+wiAMBXFotFb731lsaPH292KQCOQ4wBAgAAYYcABAAAwg5jgAAcl7h6D+BY0AMEAADCDgEIAACEHQIQAAAIOwQgAAAQdghAAAAg7BCAAABA2CEAAQCAsEMAAgAAYef/B6HWpT1KeFhJAAAAAElFTkSuQmCC\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "### 3. Mini-batch SGD Implementation" ], "metadata": { "id": "odrkFPBevsKO" } }, { "cell_type": "code", "source": [ "# here we combine all we have seen so far...\n", "\n", "class AdalineMiniBatchSGD:\n", " def __init__(self, eta=0.01, n_iter=10, shuffle=True, random_state=None, batch_size=64):\n", " self.eta = eta\n", " self.n_iter = n_iter\n", " self.batch_size = batch_size\n", " self.shuffle = shuffle\n", " self.random_state = random_state\n", " self.w_initialized = False\n", "\n", " def fit(self, X, y):\n", " \"\"\" Fit training data using mini-batch gradient descent.\"\"\"\n", " self._initialize_weights(X.shape[1])\n", " self.losses_ = []\n", " for i in range(self.n_iter):\n", " if self.shuffle:\n", " X, y = self._shuffle(X, y)\n", " # Process each mini-batch\n", " loss = []\n", " for start in range(0, X.shape[0], self.batch_size):\n", " end = start + self.batch_size\n", " X_mini = X[start:end]\n", " y_mini = y[start:end]\n", " # Update weights for mini-batch\n", " tmploss = self._update_weights_mini_batch(X_mini, y_mini)\n", " loss.append(tmploss)\n", " self.losses_.append(np.mean(loss))\n", " return self\n", "\n", " def _update_weights_mini_batch(self, X_mini, y_mini):\n", " \"\"\" Vectorized update for weights using a mini-batch.\"\"\"\n", " output = self.activation(self.net_input(X_mini)) # (m, 1) output for mini-batch\n", " errors = (y_mini - output) # (m, 1) vector of errors for mini-batch\n", "\n", " # Update weights (Vectorized form)\n", " self.w_ += self.eta * 2.0 * X_mini.T.dot(errors) / X_mini.shape[0] # (n, m) dot (m, 1) => (n, 1)\n", " #self.b_ += self.eta * 2.0 * np.sum(errors) / X_mini.shape[0] # Scalar update for bias\n", " self.b_ += self.eta * 2.0 * errors.mean()\n", "\n", " # Mean squared error for the mini-batch\n", " loss = np.mean(errors**2)\n", " return loss\n", "\n", " def _initialize_weights(self, m):\n", " \"\"\"Initialize weights.\"\"\"\n", " self.rgen = np.random.RandomState(self.random_state)\n", " self.w_ = self.rgen.normal(loc=0.0, scale=0.01, size=m)\n", " self.b_ = np.float_(0.)\n", " self.w_initialized = True\n", "\n", " def _shuffle(self, X, y):\n", " \"\"\"Shuffle training data.\"\"\"\n", " r = self.rgen.permutation(len(y))\n", " return X[r], y[r]\n", "\n", " def net_input(self, X):\n", " \"\"\"Calculate net input (linear activation).\"\"\"\n", " return np.dot(X, self.w_) + self.b_\n", "\n", " def activation(self, X):\n", " \"\"\"Linear activation (no transformation).\"\"\"\n", " return X\n", "\n", " def predict(self, X):\n", " \"\"\"Return class label after unit step\"\"\"\n", " return np.where(self.activation(self.net_input(X)) >= 0.5, 1, 0)" ], "metadata": { "id": "xBILyyfiuj-m" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "ada_mb_sgd = AdalineMiniBatchSGD(n_iter=20, eta=0.25, random_state=1, batch_size=64)\n", "ada_mb_sgd.fit(X_std, y_filtered)\n", "\n", "plot_decision_regions(X_std, y_filtered, classifier=ada_mb_sgd)\n", "plt.title('Adaline - Mini-Batch Stochastic gradient descent')\n", "plt.xlabel('Sepal length [standardized]')\n", "plt.ylabel('Petal length [standardized]')\n", "plt.legend(loc='upper left')\n", "\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "plt.plot(range(1, len(ada_mb_sgd.losses_) + 1), ada_mb_sgd.losses_, marker='o')\n", "plt.xlabel('Epochs')\n", "plt.ylabel('Average loss')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 936 }, "id": "W6EVyxByv0-z", "outputId": "9f247970-deb4-4e8b-9668-2fba747edcea" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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SiXHkyf+SE7OgSQpmdyZgRCASmXHpI6IiMgATOwKyHsFyNeAREREZFlYPEFERERkJZjYEREREVkJJnZEREREVoKJHREREZGVYGJHREREZCWY2BERERFZCSZ2RERERFaCiR0RERGRlWBiR0RERGQlmNgRERERWQkmdkRERERWgokdERERkZVgYkdERERkJZjYEREREVkJJnZEREREVoKJHREREZGVYGJHREREZCWY2BERERFZCVtzB0BEROaVkBCHzMz0QtcrFI7w9vYvxYiIyFBM7IiIyrGEhDiEh/dDZmbhbRQKICJiO5M7IgvAxI6IqBzLzExHZiZgazsHdnbVCqzPzo5FZubMIp/oEVHZwcSOiIhgZ1cNcnktretycko5GCIyGIsniIiIiKwEEzsiIiIiK8FXsURERGUAq5PJGJjYERERmRmrk8lYmNgRERGys2P1Wk7GxepkMhYmdkRE5ZhC4QiFAsjMnFlo9atCkduOTI/VyVRSTOyIiMoxb29/RERsZ98uIivBxI6IqJyzlKSNxQXGx2tqfZjYERFRmcfiAuPjNbVOTOyIiKjMY3GB8fGaWicmdkREZDGsvbjAHNXJ1n5NyxsmdkRERGbG6mQyFiZ2REREZsbqZDIWJnZERFaCFY6WrST3hvee8jCxIyKyAqxwLL947yk/JnZERFagvFQ4cuqzgkp673lNrQsTOyIiK2KtFY4sLiievvee19Q6MbEjIqIyj8UFxsdrap2Y2BERkUEuXz6B1NTHha53dvZArVotSzEiy2aOAghD98dijbKLiR0REent8uUT+M9/ekKlsi+0jUyWgfnzfzJKcmftBQKWdH6WFGt5xMSOiIj0lpr6GCqVPSRpBWSykALrVaoYqFTji3yipw9rLw6xpPOzpFjLIyZ2RERWpLQrHGWyEMhkjbSuUyqNfzxrLQ7JU5LzK+17b+33wlLplNj169dP7x2vXbsWPj4+em9HRET6Y4Vj+cV7T/nplNjt3LkTgwYNgoODg0473bx5M1JTU5nYERGVElY4ll+895Sfzq9iV65cqXOitnXrVoMDIiIiw5T2X9xC5ECIWK0FFELEQgjLfh9naOWnJVW3kvXRKbE7ePAgPD09dd7p7t27UaVKFYODIiKisi0p6QGEyEBOTjgAuZYWWQAykJT0oJQjMw5DKz9ZMUrmplNi165dO712+tJL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aPX6lJQUhIaG4tixY/jjjz9QvXp1dO/eHSkpKQbH//777+PEiROIiorC+fPnMXDgQHTr1g1Xr15Vt0lPT8eSJUvwzTff4MiRI4iLi8PkyZPV6xcuXIhNmzZhw4YN+P3335GcnKzRJ2vFihVo2bIlRowYgbt37+Lu3bvw8/NTr//www+xdOlS/PXXX7C1tcXw4cP1OoecnBz06dMH7dq1w/nz53HixAm8++67kCQJr732GiZNmoS6deuqj/3aa68BAGQyGVauXImLFy9i48aNOHDgAKZOnaqx7+LOfenSpYiMjMRXX32FY8eO4dGjR9ixY4fGPtLS0jBx4kT89ddf2L9/P2QyGfr27QuVSqXRbvr06Rg/fjz++ecfdO3aVad959eqVSv1Od69excHDhyAvb092rZtCwA4evQohg4divHjx+PSpUtYt24dIiMjMW/ePACASqVCv379IJfLcfLkSaxduxbTpk3T614QlVuCiKzG1q1bhYeHh7C3txetWrUSM2bMENHR0er1R48eFa6uriIjI0Nju+DgYLFu3TohhBDh4eHCxsZG3L59W71+9+7dQiaTibt372o9rlKpFC4uLuLHH39ULwMgduzYUWis7dq1E+PHjxdCCHHz5k1hY2Mj7ty5o9GmU6dOYsaMGUIIITZs2CAAiJiYGPX61atXi4oVK6o/V6xYUSxevFj9OScnR/j7+4tXX31V63HzHDx4UAAQv/32m3rZzz//LACIp0+fao0/NjZWABBnz55VL0tMTBQAxKFDh7RuEx4eLho2bKh1XX7ff/+98PLyUn/W5dwrV64sFi1apP6cnZ0tqlatqnHuz0tISBAAxIULFzTOafny5RrtdNm3tusqhBAPHz4UQUFBYvTo0eplnTp1EvPnz9do980334jKlSsLIYTYu3evsLW11fg+7N69W+t3asOGDcLNza3QcyQqb/jEjsiK9O/fH/Hx8di1axe6deuGQ4cO4YUXXlC/8ouOjkZqaiq8vLzUT/icnZ0RGxur8UrO398fVapUUX9u2bIlVCqV+tXk/fv3MWLECFSvXh1ubm5wdXVFamoq4uLiDIr7woULUCqVqFGjhkZchw8f1ojL0dERwcHB6s+VK1fGgwcPAABJSUm4f/8+mjVrpl5vY2ODJk2a6BxHgwYNNPYNQL1/XXh6eiIsLAxdu3ZFr169sGLFCo3X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\n" }, "metadata": {} }, { "output_type": "execute_result", "data": { "text/plain": [ "Text(0, 0.5, 'Average loss')" ] }, "metadata": {}, "execution_count": 28 }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGwCAYAAABB4NqyAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASMdJREFUeJzt3Xl4VOXB/vF7MklmkpCEhEAWjLIWRAQUJMaluEQC+qpYVKC2Iu2LFtGfGrFKrUSrLYoUqcoLrRXRagFt1VqXKEawIgEq0QKCCJRVmIQA2ck2c35/JBmIZJlJZk2+n+s6VzJnzjx5DieTuXnOs5gMwzAEAADQhYT4uwIAAAC+RgACAABdDgEIAAB0OQQgAADQ5RCAAABAl0MAAgAAXQ4BCAAAdDmh/q5AIHI4HDp06JCio6NlMpn8XR0AAOACwzBUVlamlJQUhYS03sZDAGrGoUOHlJqa6u9qAACAdjhw4IDOOOOMVo8hADUjOjpaUv0/YExMjJ9rAwAAXFFaWqrU1FTn53hrCEDNaLztFRMTQwACACDIuNJ9hU7QAACgyyEAAQCALocABAAAuhwCEAAA6HIIQAAAoMshAAEAgC6HAAQAALocAhAAAOhyCEAAAKDLYSZoH7I7DG3cc0yFZVXqFW3V6L7xMoew2CoAAL5GAPKRnK2H9dg/t+lwSZVzX3KsVdnXDtG4ocl+rBkAAF0Pt8B8IGfrYc14Nb9J+JEkW0mVZryar5yth/1UMwAAuiYCkJfZHYYe++c2Gc0817jvsX9uk93R3BEAAMAbCEBetnHPsdNafk5lSDpcUqWNe475rlIAAHRxBCAvKyxrOfy05zgAANBxBCAv6xVt9ehxAACg4whAXja6b7ySY61qabC7SfWjwUb3jfdltQAA6NIIQF5mDjEp+9ohzT7XGIqyrx3CfEAAAPgQAcgHxg1N1uKfnK9e0ZYm+5NirVr8k/OZBwgAAB9jIkQfGTc0WZcM6Kmhj34oSVo6dZTGDOpFyw8AAH5AC5APdbOGKiLMLEka0Cua8AMAgJ8QgHwsPipcknSsssbPNQEAoOsiAPlYXFSYJOl4BQEIAAB/IQD5WFxkQwsQAQgAAL8hAPlY4y2w49wCAwDAbwhAPkYLEAAA/kcA8jFnJ2gCEAAAfkMA8rE4AhAAAH5HAPKx+Ej6AAEA4G8EIB9rHAZPCxAAAP5DAPKxk6PAav1cEwAAui4CkI81BqDiyhrZHYafawMAQNdEAPKxxmHwDkMqPUErEAAA/kAA8rEwc4iiraGSWA8MAAB/IQD5gbMfEB2hAQDwCwKQHzAbNAAA/kUA8gPWAwMAwL8IQH5wsgWITtAAAPgDAcgP4hsmQ6QFCAAA/wiIALRo0SL16dNHVqtVaWlp2rhxY4vHvvnmmxo1apS6d++uqKgojRgxQn/5y1+aHGMYhubMmaPk5GRFREQoIyNDO3fu9PZpuKxxPbCj5QQgAAD8we8BaOXKlcrKylJ2drby8/M1fPhwZWZmqrCwsNnj4+Pj9fDDDysvL0+bN2/WtGnTNG3aNH344YfOY+bNm6dnn31WS5Ys0YYNGxQVFaXMzExVVVX56rRaxXpgAAD4l8kwDL9OR5yWlqYLLrhAzz//vCTJ4XAoNTVVd999tx566CGXyjj//PN1zTXX6PHHH5dhGEpJSdH999+vWbNmSZJKSkqUmJioZcuWafLkyae9vrq6WtXV1c7HpaWlSk1NVUlJiWJiYjxwlk19+LVNd/xlk0akdtfbMy/2ePkAAHRFpaWlio2Ndenz268tQDU1Ndq0aZMyMjKc+0JCQpSRkaG8vLw2X28YhnJzc7Vjxw798Ic/lCTt2bNHNputSZmxsbFKS0trscy5c+cqNjbWuaWmpnbwzFrHKDAAAPzLrwGoqKhIdrtdiYmJTfYnJibKZrO1+LqSkhJ169ZN4eHhuuaaa/Tcc8/pqquukiTn69wpc/bs2SopKXFuBw4c6MhptYl5gAAA8K9Qf1egPaKjo/XVV1+pvLxcubm5ysrKUr9+/XTZZZe1qzyLxSKLxeLZSraiR0MLUFlVnWrtDoWZ/d4VCwCALsWvASghIUFms1kFBQVN9hcUFCgpKanF14WEhGjAgAGSpBEjRmj79u2aO3euLrvsMufrCgoKlJyc3KTMESNGeP4k2iEmIkwhpvoFUY9X1qhXtNXfVQIAoEvxa9NDeHi4Ro4cqdzcXOc+h8Oh3Nxcpaenu1yOw+FwdmLu27evkpKSmpRZWlqqDRs2uFWmN5lDTOreOBKMyRABAPA5v98Cy8rK0tSpUzVq1CiNHj1aCxcuVEVFhaZNmyZJuvXWW9W7d2/NnTtXUn2H5VGjRql///6qrq7W+++/r7/85S9avHixJMlkMunee+/VE088oYEDB6pv37565JFHlJKSogkTJvjrNE8TFxmmYxU19AMCAMAP/B6AJk2apCNHjmjOnDmy2WwaMWKEcnJynJ2Y9+/fr5CQkw1VFRUVuvPOO3Xw4EFFRERo8ODBevXVVzVp0iTnMb/85S9VUVGh22+/XcXFxbrkkkuUk5MjqzVwbjXFR4Vr95EKRoIBAOAHfp8HKBC5M49Ae93+yhf6aFuBnpgwVD+58Cyv/AwAALqSoJkHqCtzzgXELTAAAHyOAOQnjeuBHeMWGAAAPkcA8pN4JkMEAMBvCEB+4mwBIgABAOBzBCA/iY8Kk8R6YAAA+AMByE/imAgRAAC/IQD5STy3wAAA8BsCkJ80BqATtXadqLH7uTYAAHQtBCA/6WYJVZjZJIl+QAAA+BoByE9MJpOzHxC3wQAA8C0CkB85Z4OmBQgAAJ8iAPkRLUAAAPgHAciPWA8MAAD/IAD5UVzDZIjHKpkLCAAAXyIA+VF8JC1AAAD4AwHIj1gPDAAA/yAA+RGzQQMA4B8EID9yrgfGMHgAAHyKAORHtAABAOAfBCA/ijtlIkTDMPxcGwAAug4CkB81jgKrtRsqr67zc20AAOg6CEB+FBFuVkSYWZJ0vIK5gAAA8BUCkJ85+wHRERoAAJ8hAPlZ42zQTIYIAIDvEID8jAVRAQDwPQKQn8VHMRcQAAC+RgDyM1qAAADwPQKQn9ECBACA7xGA/KxxMsSj5QQgAAB8hQDkZ/GsBwYAgM8RgPyscRg8fYAAAPAdApCfnewDxEzQAAD4CgHIzxpvgRVX1sjuYEFUAAB8gQDkZ90bApDDkEpP0AoEAIAvEID8LDw0RNHWUEmsBwYAgK8QgAKAsx8QHaEBAPAJAlAAYDZoAAB8iwAUAJgNGgAA3yIABYCTLUB0ggYAwBcIQAEgvmEyRFqAAADwDQJQAGhcD4w+QAAA+AYBKADE0wkaAACfCogAtGjRIvXp00dWq1VpaWnauHFji8e+8MILuvTSSxUXF6e4uDhlZGScdvxtt90mk8nUZBs3bpy3T6PdaAECAMC3/B6AVq5cqaysLGVnZys/P1/Dhw9XZmamCgsLmz1+zZo1mjJlilavXq28vDylpqZq7Nix+u6775ocN27cOB0+fNi5LV++3Ben0y6MAgMAwLf8HoAWLFig6dOna9q0aRoyZIiWLFmiyMhILV26tNnjX3vtNd15550aMWKEBg8erD//+c9yOBzKzc1tcpzFYlFSUpJzi4uL88XptAvzAAEA4Ft+DUA1NTXatGmTMjIynPtCQkKUkZGhvLw8l8qorKxUbW2t4uPjm+xfs2aNevXqpUGDBmnGjBk6evRoi2VUV1ertLS0yeZLjS1AZVV1qrU7fPqzAQDoivwagIqKimS325WYmNhkf2Jiomw2m0tlPPjgg0pJSWkSosaNG6dXXnlFubm5euqpp/Tpp59q/PjxstvtzZYxd+5cxcbGOrfU1NT2n1Q7xEaEyWSq/57bYAAAeF+ovyvQEU8++aRWrFihNWvWyGq1OvdPnjzZ+f25556rYcOGqX///lqzZo2uvPLK08qZPXu2srKynI9LS0t9GoLMISbFRYbrWEWNjlfUqle0te0XAQCAdvNrC1BCQoLMZrMKCgqa7C8oKFBSUlKrr50/f76efPJJffTRRxo2bFirx/br108JCQnatWtXs89bLBbFxMQ02XwtLrJ+MkT6AQEA4H1+DUDh4eEaOXJkkw7MjR2a09PTW3zdvHnz9PjjjysnJ0ejRo1q8+ccPHhQR48eVXJyskfq7Q2MBAMAwHf8PgosKytLL7zwgl5++WVt375dM2bMUEVFhaZNmyZJuvXWWzV79mzn8U899ZQeeeQRLV26VH369JHNZpPNZlN5ebkkqby8XA888IDWr1+vvXv3Kjc3V9dff70GDBigzMxMv5yjKxgJBgCA7/i9D9CkSZN05MgRzZkzRzabTSNGjFBOTo6zY/T+/fsVEnIypy1evFg1NTW68cYbm5STnZ2tRx99VGazWZs3b9bLL7+s4uJipaSkaOzYsXr88cdlsVh8em7ucLYAEYAAAPA6k2EYhr8rEWhKS0sVGxurkpISn/UHeirnGy1es1vTLu6j7GvP8cnPBACgM3Hn89vvt8BQr3E9MFqAAADwPgJQgGhcD+woAQgAAK8jAAWI+Kj6YfCMAgMAwPsIQAEiznkLrNbPNQEAoPMjAAWIxlFgDIMHAMD7CEABorEP0Ilau07UNL9mGQAA8AwCUICItoQqzFy/Iir9gAAA8C4CUIAwmUzMBg0AgI8QgAII64EBAOAbBKAAQgsQAAC+QQAKIKwHBgCAbxCAAkhcw2SIxyqZCwgAAG8iAAUQ1gMDAMA3CEABpHEuoGN0ggYAwKsIQAHEORt0OQEIAABvIgAFEOd6YLQAAQDgVQSgAMJ6YAAA+AYBKIDEnTIRomEYfq4NAACdFwEogDSOAqu1GyqvrvNzbQAA6LwIQAEkItwsa1j9JTlewVxAAAB4CwEowPSIskhiKDwAAN5EAAowjbNBMxkiAADeQwAKMCyICgCA9xGAAkx8FHMBAQDgbQSgAEMLEAAA3kcACjC0AAEA4H0EoAATx2zQAAB4HQEowMRzCwwAAK8jAAWYxmHwBCAAALyHABRgTvYBYiZoAAC8hQAUYBpvgRVX1sjuYEFUAAC8gQAUYLo3BCCHIZWeoBUIAABvIAAFmPDQEEVbQiWxHhgAAN5CAApA8d0a+gHRERoAAK8gAAUgZoMGAMC7CEABiNmgAQDwLgJQADrZAkQnaAAAvMHtAHTgwAEdPHjQ+Xjjxo2699579ac//cmjFevK4hsmQ6QFCAAA73A7AP34xz/W6tWrJUk2m01XXXWVNm7cqIcffli/+c1vPF7Broj1wAAA8C63A9DWrVs1evRoSdLrr7+uoUOHat26dXrttde0bNkyT9evS2qcDJFRYAAAeIfbAai2tlYWi0WS9PHHH+u6666TJA0ePFiHDx/2bO26qMYWoKMEIAAAvMLtAHTOOedoyZIl+uyzz7Rq1SqNGzdOknTo0CH16NHD4xXsihgFBgCAd7kdgJ566in98Y9/1GWXXaYpU6Zo+PDhkqR33nnHeWsMHcM8QAAAeJfbAeiyyy5TUVGRioqKtHTpUuf+22+/XUuWLGlXJRYtWqQ+ffrIarUqLS1NGzdubPHYF154QZdeeqni4uIUFxenjIyM0443DENz5sxRcnKyIiIilJGRoZ07d7arbv7Q2AJUVlWnWrvDz7UBAKDzcTsAnThxQtXV1YqLi5Mk7du3TwsXLtSOHTvUq1cvtyuwcuVKZWVlKTs7W/n5+Ro+fLgyMzNVWFjY7PFr1qzRlClTtHr1auXl5Sk1NVVjx47Vd9995zxm3rx5evbZZ7VkyRJt2LBBUVFRyszMVFVVldv184fYiDCZTPXfcxsMAAAvMNx01VVXGYsXLzYMwzCOHz9uJCYmGmeccYZhtVqN//u//3O3OGP06NHGzJkznY/tdruRkpJizJ0716XX19XVGdHR0cbLL79sGIZhOBwOIykpyXj66aedxxQXFxsWi8VYvnx5s2VUVVUZJSUlzu3AgQOGJKOkpMTt8/GUEY99aJz14LvGN4dL/VYHAACCSUlJicuf3263AOXn5+vSSy+VJP3tb39TYmKi9u3bp1deeUXPPvusW2XV1NRo06ZNysjIcO4LCQlRRkaG8vLyXCqjsrJStbW1io+PlyTt2bNHNputSZmxsbFKS0trscy5c+cqNjbWuaWmprp1Ht7AXEAAAHiP2wGosrJS0dHRkqSPPvpIP/rRjxQSEqILL7xQ+/btc6usoqIi2e12JSYmNtmfmJgom83mUhkPPvigUlJSnIGn8XXulDl79myVlJQ4twMHDrh1Ht7Qg5FgAAB4jdsBaMCAAXr77bd14MABffjhhxo7dqwkqbCwUDExMR6vYGuefPJJrVixQm+99ZasVmu7y7FYLIqJiWmy+RsjwQAA8B63A9CcOXM0a9Ys9enTR6NHj1Z6erqk+tag8847z62yEhISZDabVVBQ0GR/QUGBkpKSWn3t/Pnz9eSTT+qjjz7SsGHDnPsbX9eeMgOJcy4gAhAAAB7ndgC68cYbtX//fn3xxRf68MMPnfuvvPJKPfPMM26VFR4erpEjRyo3N9e5z+FwKDc31xmsmjNv3jw9/vjjysnJ0ahRo5o817dvXyUlJTUps7S0VBs2bGi1zEDj7APELTAAADwutD0vSkpKUlJSknNV+DPOOKPdkyBmZWVp6tSpGjVqlEaPHq2FCxeqoqJC06ZNkyTdeuut6t27t+bOnSupfiLGOXPm6K9//av69Onj7NfTrVs3devWTSaTSffee6+eeOIJDRw4UH379tUjjzyilJQUTZgwoV119AfWAwMAwHvcDkAOh0NPPPGEfv/736u8vFySFB0drfvvv18PP/ywQkLca1SaNGmSjhw5ojlz5shms2nEiBHKyclxdmLev39/kzIXL16smpoa3XjjjU3Kyc7O1qOPPipJ+uUvf6mKigrdfvvtKi4u1iWXXKKcnJwO9RPytZMtQLV+rgkAAJ2PyTAMw50XzJ49Wy+++KIee+wxXXzxxZKktWvX6tFHH9X06dP129/+1isV9aXS0lLFxsaqpKTEbx2iP/mmQD9b9oWG9o7Ru3df6pc6AAAQTNz5/Ha7Bejll1/Wn//8Z+cq8JI0bNgw9e7dW3feeWenCECBIM55C4wWIAAAPM3tTtDHjh3T4MGDT9s/ePBgHTt2zCOVwslRYAyDBwDA89wOQMOHD9fzzz9/2v7nn3/euTI8Oq6xD9CJWrtO1Nj9XBsAADoXt2+BzZs3T9dcc40+/vhj57DyvLw8HThwQO+//77HK9hVRVtCFRpiUp3D0PHKGkWER/i7SgAAdBputwCNGTNG3377rW644QYVFxeruLhYP/rRj7Rjxw7nGmHoOJPJxHpgAAB4SbvmAUpJSaGzsw/ER4brSFk164EBAOBhLgWgzZs3u1zgqctSoGPoCA0AgHe4FIBGjBghk8mktqYMMplMstvpsOsprAcGAIB3uBSA9uzZ4+16oBlxUWGSmA0aAABPcykAnXXWWd6uB5rBemAAAHiH26PA4DusCA8AgHcQgAIYfYAAAPAOAlAAa1wPjFFgAAB4FgEogDEMHgAA72hXACouLtaf//xnzZ4927kAan5+vr777juPVq6ra+wDdLyyps0pCAAAgOvcngl68+bNysjIUGxsrPbu3avp06crPj5eb775pvbv369XXnnFG/XskhpHgdXaDZVX1ynaGubnGgEA0Dm43QKUlZWl2267TTt37pTVanXuv/rqq/Wvf/3Lo5Xr6iLCzbKG1V+i4xXMBQQAgKe4HYD+/e9/64477jhtf+/evWWz2TxSKZzU2ArEUHgAADzH7QBksVhUWlp62v5vv/1WPXv29EilcFIcQ+EBAPA4twPQddddp9/85jeqra2/JWMymbR//349+OCDmjhxoscr2NUxEgwAAM9zOwD9/ve/V3l5uXr16qUTJ05ozJgxGjBggKKjo/Xb3/7WG3Xs0uJPGQkGAAA8w+1RYLGxsVq1apXWrl2rzZs3q7y8XOeff74yMjK8Ub8uj8kQAQDwPLcDUKNLLrlEl1xyiSfrgmbQAgQAgOe5HYCeffbZZvebTCZZrVYNGDBAP/zhD2U2mztcOZyyICotQAAAeIzbAeiZZ57RkSNHVFlZqbi4OEnS8ePHFRkZqW7duqmwsFD9+vXT6tWrlZqa6vEKdzWNw+CZBwgAAM9xuxP07373O11wwQXauXOnjh49qqNHj+rbb79VWlqa/vCHP2j//v1KSkrSfffd5436djlxUfWzPx+tqPZzTQAA6DzcbgH69a9/rb///e/q37+/c9+AAQM0f/58TZw4Uf/97381b948hsR7yMk+QLQAAQDgKW63AB0+fFh1dXWn7a+rq3POBJ2SkqKysrKO1w7OW2DFlTWyO1gQFQAAT3A7AF1++eW644479OWXXzr3ffnll5oxY4auuOIKSdKWLVvUt29fz9WyC+veEIAchlR6glYgAAA8we0A9OKLLyo+Pl4jR46UxWKRxWLRqFGjFB8frxdffFGS1K1bN/3+97/3eGW7ovDQEEVb6u9Ush4YAACe4XYfoKSkJK1atUrffPONvv32W0nSoEGDNGjQIOcxl19+uedqCMVFhausuq5+PTCWWwMAoMPaPRHi4MGDNXjwYE/WBS2IiwrX/mOVzAUEAICHtCsAHTx4UO+8847279+vmpqmH8oLFizwSMVwUg9mgwYAwKPcDkC5ubm67rrr1K9fP33zzTcaOnSo9u7dK8MwdP7553ujjl3eyfXA6AQNAIAnuN0Jevbs2Zo1a5a2bNkiq9Wqv//97zpw4IDGjBmjm266yRt17PLiGyZDpAUIAADPcDsAbd++XbfeeqskKTQ0VCdOnFC3bt30m9/8Rk899ZTHKwjWAwMAwNPcDkBRUVHOfj/JycnavXu387mioiLP1QxOJ9cDIwABAOAJbvcBuvDCC7V27VqdffbZuvrqq3X//fdry5YtevPNN3XhhRd6o45dnrMFiFtgAAB4hNsBaMGCBSovL5ckPfbYYyovL9fKlSs1cOBARoB5STy3wAAA8Ci3ApDdbtfBgwc1bNgwSfW3w5YsWeKViuGkk6PACEAAAHiCW32AzGazxo4dq+PHj3urPmhGYwtQWVWdau0OP9cGAIDg53Yn6KFDh+q///2vN+qCFsRGhMlkqv+eofAAAHSc2wHoiSee0KxZs/Tuu+/q8OHDKi0tbbK5a9GiRerTp4+sVqvS0tK0cePGFo/9+uuvNXHiRPXp00cmk0kLFy487ZhHH31UJpOpyRbsS3aYQ0zqHtEwFxCTIQIA0GFud4K++uqrJUnXXXedTI3NEpIMw5DJZJLdbne5rJUrVyorK0tLlixRWlqaFi5cqMzMTO3YsUO9evU67fjKykr169dPN910k+67774Wyz3nnHP08ccfOx+HhrZ7ybOAERcVruOVtfQDAgDAA9xOBqtXr/bYD1+wYIGmT5+uadOmSZKWLFmi9957T0uXLtVDDz102vEXXHCBLrjgAklq9vlGoaGhSkpKcrke1dXVqq6udj5uT0uWt8VHhuu/quAWGAAAHuB2ABozZoxHfnBNTY02bdqk2bNnO/eFhIQoIyNDeXl5HSp7586dSklJkdVqVXp6uubOnaszzzyzxePnzp2rxx57rEM/09uYDRoAAM9xuw+QJH322Wf6yU9+oosuukjfffedJOkvf/mL1q5d63IZRUVFstvtSkxMbLI/MTFRNputPdWSJKWlpWnZsmXKycnR4sWLtWfPHl166aUqKytr8TWzZ89WSUmJcztw4EC7f763OFeEJwABANBhbgegv//978rMzFRERITy8/Odt45KSkr0u9/9zuMVdNf48eN10003adiwYcrMzNT777+v4uJivf766y2+xmKxKCYmpskWaJgNGgAAz2nXKLAlS5bohRdeUFhYmHP/xRdfrPz8fJfLSUhIkNlsVkFBQZP9BQUFbvXfaUv37t31gx/8QLt27fJYmf7AemAAAHiO2wFox44d+uEPf3ja/tjYWBUXF7tcTnh4uEaOHKnc3FznPofDodzcXKWnp7tbrRaVl5dr9+7dSk5O9liZ/nCyBYhh8AAAdJTbASgpKanZ1pS1a9eqX79+bpWVlZWlF154QS+//LK2b9+uGTNmqKKiwjkq7NZbb23SSbqmpkZfffWVvvrqK9XU1Oi7777TV1991aQ+s2bN0qeffqq9e/dq3bp1uuGGG2Q2mzVlyhR3TzWgxEc1zgNECxAAAB3l9iiw6dOn65577tHSpUtlMpl06NAh5eXladasWXrkkUfcKmvSpEk6cuSI5syZI5vNphEjRignJ8fZMXr//v0KCTmZ0Q4dOqTzzjvP+Xj+/PmaP3++xowZozVr1kiSDh48qClTpujo0aPq2bOnLrnkEq1fv149e/Z091QDCuuBAQDgOSbDMAx3XmAYhn73u99p7ty5qqyslFTfiXjWrFl6/PHHvVJJXystLVVsbKxKSkoCpkP0vqMVGvP0GkWEmbX98XH+rg4AAAHHnc9vt1uATCaTHn74YT3wwAPatWuXysvLNWTIEHXr1q3dFUbbGvsAnai160SNXRHhZj/XCACA4OV2H6BXX31VlZWVCg8P15AhQzR69GjCjw9EW0IVGlK/9AizQQMA0DFuB6D77rtPvXr10o9//GO9//77bq39hfYzmUzMBg0AgIe4HYAOHz6sFStWyGQy6eabb1ZycrJmzpypdevWeaN+OIVzLiBagAAA6BC3A1BoaKj+53/+R6+99poKCwv1zDPPaO/evbr88svVv39/b9QRDeIahsLTAgQAQMe43Qn6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a1lZmfHll18aX375pSHJWLBggfHll186Rz09+eSTRvfu3Y1//OMfxubNm43rr7/e6Nu3r3HixAlnGVdccYXx3HPPOR+vWLHCsFgsxrJly4xt27YZt99+u9G9e3fDZrP5/Py+r7XzrampMa677jrjjDPOML766qsm7+Pq6mpnGd8/37beC/7S2rmWlZUZs2bNMvLy8ow9e/YYH3/8sXH++ecbAwcONKqqqpxlBMu1bev32DAMo6SkxIiMjDQWL17cbBnBcl1d+az5xS9+YZx55pnGJ598YnzxxRdGenq6kZ6e3qScQYMGGW+++abzsSvv9Y4iAHVSkprdXnrpJecxY8aMMaZOnep8fO+99xpnnnmmER4ebiQmJhpXX321kZ+f7/vKt8OkSZOM5ORkIzw83Ojdu7cxadIkY9euXc7nv3+uhmEYr7/+uvGDH/zACA8PN8455xzjvffe83Gt2+/DDz80JBk7duw47blgvq6rV69u9ve28XwcDofxyCOPGImJiYbFYjGuvPLK0/4NzjrrLCM7O7vJvueee875bzB69Ghj/fr1Pjqj1rV2vnv27Gnxfbx69WpnGd8/37beC/7S2rlWVlYaY8eONXr27GmEhYUZZ511ljF9+vTTgkywXNu2fo8NwzD++Mc/GhEREUZxcXGzZQTLdXXls+bEiRPGnXfeacTFxRmRkZHGDTfcYBw+fPi0ck59jSvv9Y4yNfxgAACALoM+QAAAoMshAAEAgC6HAAQAALocAhAAAOhyCEAAAKDLIQABAIAuhwAEAAC6HAIQAADocghAANACk8mkt99+29/VAOAFBCAAAem2226TyWQ6bRs3bpy/qwagEwj1dwUAoCXjxo3TSy+91GSfxWLxU20AdCa0AAEIWBaLRUlJSU22uLg4SfW3pxYvXqzx48crIiJC/fr109/+9rcmr9+yZYuuuOIKRUREqEePHrr99ttVXl7e5JilS5fqnHPOkcViUXJysu66664mzxcVFemGG25QZGSkBg4cqHfeecf53PHjx3XLLbeoZ8+eioiI0MCBA08LbAACEwEIQNB65JFHNHHiRP3nP//RLbfcosmTJ2v79u2SpIqKCmVmZiouLk7//ve/9cYbb+jjjz9uEnAWL16smTNn6vbbb9eWLVv0zjvvaMCAAU1+xmOPPaabb75Zmzdv1tVXX61bbrlFx44dc/78bdu26YMPPtD27du1ePFiJSQk+O4fAED7eXRteQDwkKlTpxpms9mIiopqsv32t781DMMwJBm/+MUvmrwmLS3NmDFjhmEYhvGnP/3JiIuLM8rLy53Pv/fee0ZISIhhs9kMwzCMlJQU4+GHH26xDpKMX//6187H5eXlhiTjgw8+MAzDMK699lpj2rRpnjlhAD5FHyAAAevyyy/X4sWLm+yLj493fp+ent7kufT0dH311VeSpO3bt2v48OGKiopyPn/xxRfL4XBox44dMplMOnTokK688spW6zBs2DDn91FRUYqJiVFhYaEkacaMGZo4caLy8/M1duxYTZgwQRdddFG7zhWAbxGAAASsqKio025JeUpERIRLx4WFhTV5bDKZ5HA4JEnjx4/Xvn379P7772vVqlW68sorNXPmTM2fP9/j9QXgWfQBAhC01q9ff9rjs88+W5J09tln6z//+Y8qKiqcz3/++ecKCQnRoEGDFB0drT59+ig3N7dDdejZs6emTp2qV199VQsXLtSf/vSnDpUHwDdoAQIQsKqrq2Wz2ZrsCw0NdXY0fuONNzRq1Chdcskleu2117Rx40a9+OKLkqRbbrlF2dnZmjp1qh599FEdOXJEd999t376058qMTFRkvToo4/qF7/4hXr16qXx48errKxMn3/+ue6++26X6jdnzhyNHDlS55xzjqqrq/Xuu+86AxiAwEYAAhCwcnJylJyc3GTfoEGD9M0330iqH6G1YsUK3XnnnUpOTtby5cs1ZMgQSVJkZKQ+/PBD3XPPPbrgggsUGRmpiRMnasGCBc6ypk6dqqqqKj3zzDOaNWuWEhISdOONN7pcv/DwcM2ePVt79+5VRESELr30Uq1YscIDZw7A20yGYRj+rgQAuMtkMumtt97ShAkT/F0VAEGIPkAAAKDLIQABAIAuhz5AAIISd+8BdAQtQAAAoMshAAEAgC6HAAQAALocAhAAAOhyCEAAAKDLIQABAIAuhwAEAAC6HAIQAADocv4/N59VbYrdtOoAAAAASUVORK5CYII=\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [], "metadata": { "id": "awqBNti1v2Q9" }, "execution_count": null, "outputs": [] } ] }