{ "cells": [ { "cell_type": "markdown", "id": "7415d1af-3f30-4166-9f72-7b2ec8a42f61", "metadata": {}, "source": [ "# Predicting categories: logistic regression\n", "\n", "In the past chapters we have seen how we could create an ML model to predict a **continuous** variable such as the price of an apartment. However very often we want to predict a category, i.e. a **discrete** value. Such a prediction is generally called **classification** and can be obtained by multiple methods. Here we will first have a loot at **logistic regression**, which is conceptually close to the linear regression seen before. We will first try to solve the problem with linear regression to understand why it is not a good solution." ] }, { "cell_type": "markdown", "id": "324e28c0-c74a-4ea3-878a-cbf0aa53e396", "metadata": {}, "source": [ "## Data exploration\n", "\n", "Here we use a datasets where different types of movements were recorded, resulting in variables indicating acceleration and angular velocity." ] }, { "cell_type": "code", "execution_count": 3, "id": "74fbc59c-6326-4ae2-898d-d61bf70fee80", "metadata": { "tags": [] }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "movement = pd.read_csv('../data/movement.csv')\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "94e13e6d-4cfd-43c7-b116-c429b77e5b51", "metadata": {}, "outputs": [ { "data": { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tx_accy_accz_accx_roty_rotz_rotmove_type
00.0016582.603237-0.0687079.4576330.0985320.079406-1.5394681
10.0116101.871558-0.64276310.2193990.128653-0.004559-1.4950451
20.0215621.897454-0.99647810.0462090.142974-0.081562-1.5055011
30.0315142.120041-0.3385969.8399380.115268-0.088669-1.5571051
40.0414662.452201-0.2561179.4705060.050623-0.083579-1.6364831
\n", "
" ], "text/plain": [ " t x_acc y_acc z_acc x_rot y_rot z_rot \\\n", "0 0.001658 2.603237 -0.068707 9.457633 0.098532 0.079406 -1.539468 \n", "1 0.011610 1.871558 -0.642763 10.219399 0.128653 -0.004559 -1.495045 \n", "2 0.021562 1.897454 -0.996478 10.046209 0.142974 -0.081562 -1.505501 \n", "3 0.031514 2.120041 -0.338596 9.839938 0.115268 -0.088669 -1.557105 \n", "4 0.041466 2.452201 -0.256117 9.470506 0.050623 -0.083579 -1.636483 \n", "\n", " move_type \n", "0 1 \n", "1 1 \n", "2 1 \n", "3 1 \n", "4 1 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "movement.head(5)" ] }, { "cell_type": "markdown", "id": "7d98c60a-4281-403d-af4d-4277f5de28dd", "metadata": {}, "source": [ "If we do some data exploration, we can see that the ```Z``` acceleration is mostly capable of identifying the two types of movements and we'll use that as an example. " ] }, { "cell_type": "code", "execution_count": 5, "id": "85b0a639-e5c6-47d2-beda-d2cd83f08e67", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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roYiCAEA0IL9x3/8h9atW+cQiLZu3aqOHTuqe/fukqT27dtr3LhxWr16tb799ltde+21ioyMtI9x4403au/everXr59LNbRr187pu72mTp2qiIgIZWRk6OzZs06D1ueff24PNT/99JP27dun/v372+vas2ePy3W5A0+NAQDQgiUmJqq4uFi/+93v9PXXX+uvf/2r5syZo+TkZLVp8+8/xu+//3599NFHWrFihSZOnOgwxnPPPaeVK1fq+eef1549e2SxWLR27Vo988wz9aqhd+/e+uSTT1RSUqKffvrJ3h4eHq5bbrlFM2fO1H333af27dvXOnfevHn65JNP9OWXX+rBBx9UQECAfa3RzJkzlZ+fr8cff1y7du3SN998ow8++EC/+93vXJgp1xCEAABowbp3767s7Gxt27ZNgwYNUkJCgqZMmVIrxPzqV79Sly5dtHfvXv33f/+3w7ERI0bof//3f5Wbm6shQ4bolltuUVpamnr16lWvGl577TXl5uaqZ8+eGjx4sMOxKVOmqKqqSg8//LDTc19++WU9+eSTioyMlM1m0wcffGB/g/zAgQOVl5enb775RjExMRo8eLCeffZZBQcH13d6Go2vxgAAaEYbN26s1Xbw4MFabT9/qDs2Nlbbtm276Lje3t4XfQJsxIgRGjFiRL3r/LnRo0dr9OjRTo/ZbDZFRERoyJAhTo/feuut+vLLL+sce8iQIcrJyXGpLnfgjhAAAGiwkydPavv27frjH//odLFza0EQAgDAxFavXq0rrrjC6WfAgLq3NHniiSd06623KjY2ts6vxVoDjwehjIwM+6ZIkZGR9g2m6pKXl+ewRfiyZctq9UlPT9d1111n3647KSlJZ86caapLAACg1br77ru1a9cup5/s7Ow6z8vKylJlZaXWrl1r36/o54YPHy7DMHTllVc2YfWN59E1QmvXrtX06dOVkZGhYcOG6c0331R8fLy++uorp/sHHDhwQCNHjtQjjzyiVatWacuWLUpMTFS3bt00fvx4SeeT7axZs7RixQoNHTpU+/bt04MPPihJev3115vz8gAAaPE6duyojh07eroMj/FoEEpLS9OUKVM0depUSefv5GzYsEFLly5Vampqrf7Lli1TaGiofcOm8PBwFRQUaOHChfYglJ+fr2HDhtlXzPfu3Vv33XffJReZAQAA8/HYV2NVVVUq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4PLnsSBUVlam6upqBQYGOrQHBgaqpKTE6TklJSVO+587d05lZWX2tuPHj+uKK66Qj4+PRo0apT/+8Y+666676qwlNTVVnTt3tn969uzZiCsDAACthccXS3t5eTn8bBhGrbZL9f9le8eOHbVr1y5t375d8+fPV3JysjZu3FjnmCkpKTp+/Lj9U1xc7MKVAACA1sZjr9gICAiQt7d3rbs/paWlte76XBAUFOS0f9u2bdW1a1d7W5s2bdSvXz9J0g033CCLxaLU1FQNHz7c6bi+vr7y9fVtxNUAAIDWyGN3hHx8fBQZGanc3FyH9tzcXA0dOtTpOdHR0bX65+TkKCoqSu3atavzdxmGocrKysYXDQAALisefelqcnKyJk2apKioKEVHR2v58uWyWq1KSEiQdP4rq0OHDmnlypWSpISEBC1evFjJycl65JFHlJ+fr8zMTK1Zs8Y+ZmpqqqKiotS3b19VVVUpOztbK1eurPNJNAAAYF4eDUITJkzQkSNHNG/ePNlsNkVERCg7O1u9evWSJNlsNoc9hcLCwpSdna2kpCQtWbJEISEhWrRokcaPH2/vc+rUKSUmJur7779X+/bt1b9/f61atUoTJkxo9usDAAAtm0eDkCQlJiYqMTHR6bGsrKxabbGxsdqxY0ed47344ot68cUX3VUeAAC4jHn8qTEAAABPIQgBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTauvpAgBcnMVi8ci5AGAGBCGghSo/+qMkaeLEiY0ey3b0RKPHAIDLEUEIaKFOnyyXJI16dLauGxjp0hh7vyjUR2/O17GTZ9xZGgBcNghCQAvXNaSXelwzwKVzy8rK3FwNAFxeWCwNAABMiyAEAABMiyAEAABMizVCJme1Whu1joTHswEArRlByMSsVqv6h4frdEVFo8c6efKkGyoCAKB5EYRMrKysTKcrKnT/zAUKDO3r0hiWbXn6+E9v6MwZHs8GALQ+BCEoMLSvy49n/2Dd7+ZqAABoPh5fLJ2RkaGwsDD5+fkpMjJSmzdvvmj/vLw8RUZGys/PT3369NGyZcscjr/11luKiYnR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0KHas2ePW+eKO0LNzNnir19+CgoK6j2el5dXrTbDMJy2m8Evr9vMc9FQzF1tTzzxhL744guH9xlewHz923XXXaddu3bp888/12OPPaYHHnhAX331lf04c3VecXGxnnzySa1atUp+fn519mO+zouPj9f48eN1/fXX684779RHH30kSfrTn/5k7+OOueKOUDN74okndO+99160T+/eves1VlBQkP75z386tP300086e/ZsrZR8uQsICJC3t3etuz+lpaWmm4uGuvAURklJiYKDg+3tZp+73/3ud/rggw+0adMm9ejRw97OfNXm4+Ojfv36SZKioqK0fft2vfHGG5o5c6Yk5uqCwsJClZaWKjIy0t5WXV2tTZs2afHixfanE5kv5zp06KDrr79e33zzjcaOHSvJPXPFHaFmFhAQoP79+1/0c7H/Uvi56Ohoffnll7LZbPa2nJwc+fr6OvyDZgY+Pj6KjIxUbm6uQ3tubq6GDh3qoapah7CwMAUFBTnMXVVVlfLy8kw5d4Zh6IknntD69ev1j3/8Q2FhYQ7Hma9LMwxDlZWVzNUv3HHHHdq9e7d27dpl/0RFRen+++/Xrl271KdPH+brIiorK2WxWBQcHOzev7cavo4bzaWoqMjYuXOnMXfuXOOKK64wdu7caezcudM4ceKEYRiGce7cOSMiIsK44447jB07dhh///vfjR49ehhPPPGEhyv3jHfffddo166dkZmZaXz11VfG9OnTjQ4dOhgHDx70dGked+LECfvfP5KMtLQ0Y+fOnUZRUZFhGIbx8ssvG507dzbWr19v7N6927jvvvuM4OBgo7y83MOVN7/HHnvM6Ny5s7Fx40bDZrPZPxUVFfY+zNe/paSkGJs2bTIOHDhgfPHFF8bTTz9ttGnTxsjJyTEMg7m6lJ8/NWYYzNfP/f73vzc2btxofPfdd8bnn39u/Od//qfRsWNH+7/T3TVXBKEW7IEHHjAk1fp8+umn9j5FRUXGqFGjjPbt2xtdunQxnnjiCePMmTOeK9rDlixZYvTq1cvw8fExbrzxRvsjz2b36aefOv176YEHHjAM4/yjqHPmzDGCgoIMX19f47bbbjN2797t2aI9xNk8STLeeecdex/m698efvhh+z9z3bp1M+644w57CDIM5upSfhmEmK9/mzBhghEcHGy0a9fOCAkJMcaNG2fs2bPHftxdc+VlGIbRuJtVAAAArRNrhAAAgGkRhAAAgGkRhAAAgGkRhAAAgGkRhAAAgGkRhAAAgGkRhAAAgGkRhAAAgGkRhAAAgGkRhAAAgGkRhAAAgGkRhAC0GgcPHpSXl1etz/Dhwy963pEjR3TfffepR48e8vf31/XXX681a9Y49KmpqdErr7yifv36ydfXV6GhoZo/f779+Pfff697771XXbp0UYcOHRQVFaV//vOfTXGZAJpRW08XAAD11bNnT9lsNvvPJSUluvPOO3Xbbbdd9LwzZ84oMjJSM2fOVKdOnfTRRx9p0qRJ6tOnj26++WZJUkpKit566y29/vrruvXWW2Wz2fT1119Lkk6ePKnY2Fh1795dH3zwgYKCgrRjxw7V1NQ03cUCaBa8fR5Aq3TmzBkNHz5c3bp101//+le1adOwG9yjRo1SeHi4Fi5cqBMnTqhbt25avHixpk6dWqvv8uXLNWPGDB08eFBdunRx1yUAaAG4IwSgVZoyZYpOnDih3NzcS4ag6upqvfzyy1q7dq0OHTqkyspKVVZWqkOHDpIki8WiyspK3XHHHU7P37VrlwYPHkwIAi5DBCEArc6LL76ov/3tb9q2bZs6dux4yf6vvfaaXn/9daWnp+v6669Xhw4dNH36dFVVVUmS2rdvf9HzL3UcQOvFYmkArcq6des0b948vffee+rbt2+9ztm8ebPGjBmjiRMnatCgQerTp4+++eYb+/FrrrlG7du31yeffOL0/IEDB2rXrl06evSoW64BQMtBEALQanz55ZeaPHmyZs6cqQEDBqikpEQlJSWXDCj9+vVTbm6utm7dKovFokcffVQlJSX2435+fpo5c6aeeuoprVy5Uvv379fnn3+uzMxMSdJ9992noKAgjR07Vlu2bNF3332ndevWKT8/v0mvF0DTIwgBaDUKCgpUUVGhF198UcHBwfbPuHHjLnres88+qxtvvFEjRozQ8OHD7aHml31+//vf67nnnlN4eLgmTJig0tJSSZKPj49ycnJ09dVXa+TIkbr++uv18ssvy9vbu6kuFUAz4akxAABgWtwRAgAApkUQAtDqxcfH64orrnD6eemllzxdHoAWjK/GALR6hw4d0unTp50e69KlC/v/AKgTQQgAAJgWX40BAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADT+n8MVs6782zPEgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.histplot(data=movement, x='z_acc', hue='move_type', stat='density'); " ] }, { "cell_type": "markdown", "id": "0e1fda41-a1cf-4719-a0e7-b2df3553ad3c", "metadata": {}, "source": [ "Note that other variables are also different between the two types, but not optimal for binary classification:" ] }, { "cell_type": "code", "execution_count": 6, "id": "40e3c2e1-c6c2-4a64-aa3d-3c26fe35f058", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAGwCAYAAAC99fF4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9+0lEQVR4nO3de1xVdb7/8feWq+YlBQNNELyUpFYKZliETYaDnca8zGhjain+IsZMGae8TOnYlJUOkSWS5iWOTtoZdaYmOoqWZEmZqOXY1szQrQjR1oIQuQjr94cP92nHUhE3bi6v5+OxHiPf9V2f73fvlcPbtb57bYthGIYAAADgpJm7JwAAAFAfEZIAAABMEJIAAABMEJIAAABMEJIAAABMEJIAAABMEJIAAABMeLp7Ag1VVVWVTpw4oVatWslisbh7OgAAoAYMw9BPP/2kjh07qlmzi18rIiTV0okTJxQUFOTuaQAAgFo4duyYOnXqdNE+hKRaatWqlaRzb3Lr1q3dPBsAAFATRUVFCgoKcvwevxhCUi2dv8XWunVrQhIAAA1MTZbKsHAbAADABCEJAADABCEJAADABGuSAABwo8rKSlVUVLh7Go2Gl5eXPDw8XFKLkAQAgBsYhqH8/Hz9+OOP7p5Ko3PttdcqMDDwip9jSEgCAMANzgek6667Ti1atODBxC5gGIZKSkpUUFAgSerQocMV1SMkAQBwlVVWVjoCkp+fn7un06g0b95cklRQUKDrrrvuim69sXAbAICr7PwapBYtWrh5Jo3T+ff1Std6EZIAAHATbrHVDVe9r4QkAAAAE4QkAAAAE4QkAAAAE4QkAABwxSwWi/75z3+6exouRUgCAAAwQUhCk2az2bR7926Xbzabzd0vDUADNnDgQD3++OOaOnWq2rZtq4CAAC1dulSnT5/WI488olatWqlr1656//33HcdkZmbqtttuk4+Pjzp06KAZM2bo7NmzkqTXX39d119/vaqqqpzG+c1vfqPx48c7fn733XcVHh4uX19fdenSRX/5y18cNS4mJCREkjRs2DBZLBaFhIToyJEjatasmXbt2uXU99VXX1Xnzp1lGIa2bdsmi8Wi9957T7fccot8fX3Vv39/7du3z+mYHTt26K677lLz5s0VFBSkKVOm6PTp05f1ntaKgVopLCw0JBmFhYXungpq6ejRo0aLFs0NSS7fWrRobhw9etTdLxFAPXXmzBnjq6++Ms6cOWO6Pzo62mjVqpXx7LPPGl9//bXx7LPPGs2aNTNiY2ONpUuXGl9//bXx2GOPGX5+fsbp06eN48ePGy1atDASEhIMq9VqbNy40fD39zfmzJljGIZhnDx50vD29ja2bNniGOPUqVOGt7e3sWnTJsMwDON///d/jdatWxurVq0yDh8+bGzevNkICQkx5s6de8nXU1BQYEgyVq5caeTl5RkFBQWGYRjGvffeayQkJDj17dOnj/HMM88YhmEYH374oSHJCAsLMzZv3mx8+eWXxn/9138ZISEhRnl5uWEYhvHll18aLVu2NF5++WXj66+/Nj755BOjT58+xsMPP1yr9/dyfn9bDMMw6j6KNT5FRUVq06aNCgsL1bp1a3dPB7Wwe/duhYeHa/Ws3yksuL3L6lpt3+uh599Wdna2+vbt67K6ABqP0tJS5eTkKDQ0VL6+vtX2Dxw4UJWVldq+fbukc0/obtOmjYYPH660tDRJ577WpEOHDsrKytK7776r9evXy2q1Op4RlJKSoqeeekqFhYVq1qyZhg4dKn9/fy1fvlyStHTpUs2ZM0fHjx+Xh4eH7rrrLsXGxmrmzJmOeaxevVpPPvmkTpw4ccnXZLFYtHHjRj3wwAOOtrffflvx8fHKy8uTj4+PvvjiC/Xp00fffvutQkJCtG3bNt19991au3atRo0aJUk6deqUOnXqpFWrVul3v/udxo0bp+bNm+v111931P34448VHR2t06dPm75/F3t/L+f3N19LgiYvLLi9+t5wvbunAQBObr75ZsefPTw85Ofnp969ezvaAgICJJ37+g2r1arIyEinhyjecccdKi4u1vHjxxUcHKwxY8bo//2//6eUlBT5+PhozZo1Gj16tONrO7Kzs/X555/rueeec9SorKxUaWmpSkpKavV08AceeECTJ0/Wxo0bNXr0aK1YsUJ333234/bceZGRkY4/t2vXTjfeeKOsVqtjXt98843WrFnj6GMYhqqqqpSTk6OwsLDLnldNEZIAAKiHvLy8nH62WCxObecDUVVVlQzDqPaU6fM3is6333///aqqqtJ7772nfv36afv27UpKSnL0r6qq0l/+8hcNHz682lzMrtbUhLe3t8aOHauVK1dq+PDh+vvf/67k5OQaHfvz1/foo49qypQp1foEBwfXal41RUgCAKCBu+mmm7R+/XqnsLRjxw61atVK119/7kp58+bNNXz4cK1Zs0bffPONbrjhBoWHhztq9O3bVwcPHlS3bt1qNQcvLy9VVlZWa4+Li1OvXr2UkpKiiooK0xD26aefOgLPDz/8oK+//lo9evRwzGv//v21nteV4NNtAAA0cAkJCTp27Jgef/xxHThwQP/61780Z84cJSYmqlmz//tVP2bMGL333ntasWKFHnroIacazzzzjNLS0jR37lzt379fVqtV69at05///OcazSEkJERbt25Vfn6+fvjhB0d7WFiYbr/9dj311FN68MEH1bx582rHzps3T1u3btV//vMfPfzww/L393esbXrqqaeUlZWlP/zhD9q7d68OHTqkd955R48//ngt3qnLQ0gCAKCBu/7665Wenq6dO3fqlltuUXx8vCZOnFgt4PzqV79Su3btdPDgQf3+97932jd48GD9+9//VkZGhvr166fbb79dSUlJ6ty5c43m8Le//U0ZGRkKCgpSnz59nPZNnDhR5eXlmjBhgumxL7zwgp544gmFh4crLy9P77zzjry9vSWdW5uVmZmpQ4cOKSoqSn369NHTTz+tDh061PTtqTVutwEAUM9s27atWtuRI0eqtf38A+rR0dHauXPnRet6eHhc9JNqgwcP1uDBg2s8z5+7//77df/995vuy8vLU69evdSvXz/T/Xfeeaf+85//XLB2v379tHnz5lrN60pwJQkAANSJ4uJiff7553r11VdNF17Xd4QkAABwUWvWrFHLli1Nt549e17wuMmTJ+vOO+9UdHT0BW+11WfcbgMAABf1m9/8Rv379zfd98tHFfzcqlWrtGrVqgvuHzhwoOrzM60JSQAA4KJatWqlVq1auXsaVx232wAAAEwQkgAAAEwQkgAAAEwQkgAAAEywcBsAgEbAZrPJbrdftfH8/f3r/Atm3c3tISklJUULFixQXl6eevbsqeTkZEVFRV2wf2ZmphITE7V//3517NhRTz75pOLj4x37N2zYoOeff17ffPONKioq1L17d/3xj3/U2LFjr2hcAADqK5vNph5hYTpTUnLVxmzeooUOWK2NOii5NSStW7dOU6dOVUpKiu644w69/vrrio2N1VdffWX6pufk5GjIkCGaNGmSVq9erU8++UQJCQlq3769RowYIUlq166dZs+erR49esjb21v/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+WQb0JiVnTkjSbrr91MUccdAl9a27szU+2++otLSUpfWBQBUd1khaeXKlXU1D6DRaRPQSZ2693Rpze9sh11aDwBwYbX67jYAAIDGjpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABggpAEAABgwtPdEwCAK2Gz2WS3211e19/fX8HBwS6vC6DhICQBaLBsNpt6hIXpTEmJy2s3b9FCB6xWghLQhBGSADRYdrtdZ0pKNOapBQoI7uqyut/ZDmvNi3+S3W4nJAFNGCEJLlMXtz2sVqtL66FxCgjuqk7de7p7GgAaGUISXKIub3tIUnFxcZ3UBQDgQghJcIm6uu1h3Zmp9998RaWlpS6rCQBATRCS4FKuvu3xne2wy2oBAHA5eE4SAACACUISAACACUISAACACUISAACACUISAACACbeHpJSUFIWGhsrX11fh4eHavn37RftnZmYqPDxcvr6+6tKli1JTU53279+/XyNGjFBISIgsFouSk5NdMi4AAGha3BqS1q1bp6lTp2r27Nnas2ePoqKiFBsbK5vNZto/JydHQ4YMUVRUlPbs2aNZs2ZpypQpWr9+vaNPSUmJunTpohdeeEGBgYEuGRcAADQ9bg1JSUlJmjhxouLi4hQWFqbk5GQFBQVpyZIlpv1TU1MVHBys5ORkhYWFKS4uThMmTNDChQsdffr166cFCxZo9OjR8vHxccm4klRWVqaioiKnDQAANF5uC0nl5eXKzs5WTEyMU3tMTIx27NhhekxWVla1/oMHD9auXbtUUVFRZ+NK0vz589WmTRvHFhQUVKPxAABAw+S2kGS321VZWamAgACn9oCAAOXn55sek5+fb9r/7NmzNf5i1dqMK0kzZ85UYWGhYzt27FiNxgMAAA2T27+WxGKxOP1sGEa1tkv1N2t39bg+Pj4XvH0HAAAaH7ddSfL395eHh0e1qzcFBQXVrvKcFxgYaNrf09NTfn5+dTYuAABoetwWkry9vRUeHq6MjAyn9oyMDA0YMMD0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yZMnNW/ePOXl5alXr15KT09X586dJUl5eXlOz0wKDQ1Venq6pk2bpsWLF6tjx45atGiRRowY4egzYMAArV27Vn/+85/19NNPq2vXrlq3bp369+/v6HP8+HE9+OCDstvtat++vW6//XZ9+umnjnEBAADcvnA7ISFBCQkJpvtWrVpVrS06Olq7d+++aM2RI0dq5MiRF9y/du3ay5ojAABoetz+tSQAAAD1ESEJAADABCEJAADABCEJAADABCEJAADABCEJAADABCEJAADABCEJAADABCEJAADABCEJAADABCEJAADABCEJAADABCEJAADABCEJAADABCEJAADAhKe7JwAAQF2xWq0ur+nv76/g4GCX10X9Q0gCADQ6Rae+lyQ99NBDLq/dvEULHbBaCUpNACEJANDonCkukiTd9+hs3XhzuMvqfmc7rDUv/kl2u52Q1AQQkgAAjZZfx87q1L2nu6eBBoqF2wAAACYISQAAACYISQAAACZYkwQAwGWqi0cLSDxeoL4hJAEAUEN1+WgBiccL1DeEJAAAaqiuHi0g8XiB+oiQBADAZeLRAk0DC7cBAABMcCWpnrLZbLLb7S6tWVcLDQEAaIwISfWQzWZTj7AwnSkpqZP6xcXFdVIXAIDGhJBUD9ntdp0pKdGYpxYoILiry+pad2bq/TdfUWlpqctqAgDQWBGS6rGA4K4uXRj4ne2wy2oBANDYsXAbAADABCEJAADABCEJAADABCEJAADABAu3AQBArdXFc/3Oc/cX/hKSAABArdT1c/3c/YW/hCQAAOqRuvp2hLq4KlNXz/WT6scX/hKSAACoB4pOfS9Jeuihh+qkfl1elXH1c/3qC0ISAAD1wJniIknSfY/O1o03h7u0dn24KtMQEZIAAKhH/Dp2bpRXZRoiHgEAAABggitJAAA0Ea5eFF5Xi8zrC0ISAACNXF0vCi8uLq6Tuu7m9pCUkpKiBQsWKC8vTz179lRycrKioqIu2D8zM1OJiYnav3+/OnbsqCeffFLx8fFOfdavX6+nn35ahw8fVteuXfXcc89p2LBhVzQuAAANVV0tCrfuzNT7b76i0tJSl9WsT9waktatW6epU6cqJSVFd9xxh15//XXFxsbqq6++Ml19n5OToyFDhmjSpElavXq1PvnkEyUkJKh9+/YaMWKEJCkrK0ujRo3Ss88+q2HDhmnjxo363e9+p48//lj9+/ev1bgAADQGrl4U/p3tsMtq1UduXbidlJSkiRMnKi4uTmFhYUpOTlZQUJCWLFli2j81NVXBwcFKTk5WWFiY4uLiNGHCBC1cuNDRJzk5Wffee69mzpypHj16aObMmbrnnnuUnJxc63EBAEDT47YrSeXl5crOztaMGTOc2mNiYrRjxw7TY7KyshQTE+PUNnjwYC1fvlwVFRXy8vJSVlaWpk2bVq3P+ZBUm3ElqaysTGVlZY6fCwsLJUlFRUUXf6G1cP7e7n927dCJ48dcVvfIV19Ikr75T7bKS8+4rG5d1j52+MC5/z16RDu9LS6rK0nfnTghSTpx7Jh27tpd7+tK0rFjuef+9+A+7fT1cWntujqHDfG/O+Z8dWoz54Zfuy7nfCr/3O+/4uJil/6uPV/LMIxLdzbcJDc315BkfPLJJ07tzz33nHHDDTeYHtO9e3fjueeec2r75JNPDEnGiRMnDMMwDC8vL2PNmjVOfdasWWN4e3vXelzDMIw5c+YYktjY2NjY2NgawXbs2LFLZhW3L9y2WJyvDhiGUa3tUv1/2V6Tmpc77syZM5WYmOj4uaqqSqdOnZKfn99Fj6uvioqKFBQUpGPHjql169bunk6Tx/moXzgf9Qfnon5pDOfDMAz99NNP6tix4yX7ui0k+fv7y8PDQ/n5+U7tBQUFCggIMD0mMDDQtL+np6f8/Pwu2ud8zdqMK0k+Pj7y8XG+vXHttdde+AU2EK1bt26w/6E3RpyP+oXzUX9wLuqXhn4+2rRpU6N+blu47e3trfDwcGVkZDi1Z2RkaMCAAabHREZGVuu/efNmRUREyMvL66J9zteszbgAAKDpcevttsTERI0dO1YRERGKjIzU0qVLZbPZHM89mjlzpnJzc5WWliZJio+P12uvvabExERNmjRJWVlZWr58ud566y1HzSeeeEJ33XWXXnzxRQ0dOlT/+te/tGXLFn388cc1HhcAAMBtC7fPW7x4sdG5c2fD29vb6Nu3r5GZmenYN378eCM6Otqp/7Zt24w+ffoY3t7eRkhIiLFkyZJqNf/nf/7HuPHGGw0vLy+jR48exvr16y9r3KagtLTUmDNnjlFaWuruqcDgfNQ3nI/6g3NRvzS182ExjJp8Bg4AAKBpcevDJAEAAOorQhIAAIAJQhIAAIAJQhIAAIAJQlITc+TIEU2cOFGhoaFq3ry5unbtqjlz5qi8vNypn81m0/33369rrrlG/v7+mjJlSrU+cI2UlBSFhobK19dX4eHh2r59u7un1CTMnz9f/fr1U6tWrXTdddfpgQce0MGDB536GIahuXPnqmPHjmrevLkGDhyo/fv3u2nGTcf8+fNlsVg0depURxvn4urKzc3VQw89JD8/P7Vo0UK33nqrsrOzHfubyvkgJDUxBw4cUFVVlV5//XXt379fL7/8slJTUzVr1ixHn8rKSt133306ffq0Pv74Y61du1br16/XH//4RzfOvHFat26dpk6dqtmzZ2vPnj2KiopSbGysbDabu6fW6GVmZuoPf/iDPv30U2VkZOjs2bOKiYnR6dOnHX1eeuklJSUl6bXXXtPnn3+uwMBA3Xvvvfrpp5/cOPPG7fPPP9fSpUt18803O7VzLq6eH374QXfccYe8vLz0/vvv66uvvtLf/vY3p2+ZaDLnw60PIEC98NJLLxmhoaGOn9PT041mzZoZubm5jra33nrL8PHxMQoLC90xxUbrtttuM+Lj453aevToYcyYMcNNM2q6CgoKDEmOZ6ZVVVUZgYGBxgsvvODoU1paarRp08ZITU111zQbtZ9++sno3r27kZGRYURHRxtPPPGEYRici6vtqaeeMu68884L7m9K54MrSVBhYaHatWvn+DkrK0u9evVy+vK/wYMHq6yszOlyK65MeXm5srOzFRMT49QeExOjHTt2uGlWTVdhYaEkOf4u5OTkKD8/3+n8+Pj4KDo6mvNTR/7whz/ovvvu06BBg5zaORdX1zvvvKOIiAj99re/1XXXXac+ffpo2bJljv1N6XwQkpq4w4cP69VXX3X6Spb8/PxqX/bbtm1beXt7V/tiYNSe3W5XZWVltfc6ICCA9/kqMwxDiYmJuvPOO9WrVy9JcpwDzs/VsXbtWu3evVvz58+vto9zcXV9++23WrJkibp3765NmzYpPj5eU6ZMcXxFWFM6H4SkRmLu3LmyWCwX3Xbt2uV0zIkTJ/TrX/9av/3tbxUXF+e0z2KxVBvDMAzTdlyZX76nvM9X3+TJk/Xll186fQ/keZyfunfs2DE98cQTWr16tXx9fS/Yj3NxdVRVValv3756/vnn1adPHz366KOaNGmSlixZ4tSvKZwPt37BLVxn8uTJGj169EX7hISEOP584sQJ3X333Y4v+P25wMBAffbZZ05tP/zwgyoqKqr9ywG15+/vLw8Pj2r/8iooKOB9vooef/xxvfPOO/roo4/UqVMnR3tgYKCkc/9q7tChg6Od8+N62dnZKigoUHh4uKOtsrJSH330kV577TXHpw45F1dHhw4ddNNNNzm1hYWFaf369ZKa1t8NriQ1Ev7+/urRo8dFt/P/QsvNzdXAgQPVt29frVy5Us2aOf9nEBkZqf/85z/Ky8tztG3evFk+Pj5O/yeGK+Pt7a3w8HBlZGQ4tWdkZGjAgAFumlXTYRiGJk+erA0bNuiDDz5QaGio0/7Q0FAFBgY6nZ/y8nJlZmZyflzsnnvu0b59+7R3717HFhERoTFjxmjv3r3q0qUL5+IquuOOO6o9DuPrr79W586dJTWxvxtuXDQON8jNzTW6detm/OpXvzKOHz9u5OXlObbzzp49a/Tq1cu45557jN27dxtbtmwxOnXqZEyePNmNM2+c1q5da3h5eRnLly83vvrqK2Pq1KnGNddcYxw5csTdU2v0HnvsMaNNmzbGtm3bnP4elJSUOPq88MILRps2bYwNGzYY+/btMx588EGjQ4cORlFRkRtn3jT8/NNthsG5uJp27txpeHp6Gs8995xx6NAhY82aNUaLFi2M1atXO/o0lfNBSGpiVq5caUgy3X7u6NGjxn333Wc0b97caNeunTF58mSjtLTUTbNu3BYvXmx07tzZ8Pb2Nvr27ev4CDrq1oX+HqxcudLRp6qqypgzZ44RGBho+Pj4GHfddZexb98+9026CfllSOJcXF3vvvuu0atXL8PHx8fo0aOHsXTpUqf9TeV8WAzDMNxzDQsAAKD+Yk0SAACACUISAACACUISAACACUISAACACUISAACACUISAACACUISAACACUISAACACUISAACACUISAACACUISAACACUISgEYjLS1Nfn5+Kisrc2ofMWKExo0bd9FjDx8+rKFDhyogIEAtW7ZUv379tGXLFqc+ZWVlevLJJxUUFCQfHx91795dy5cvd+zfv3+/7rvvPrVu3VqtWrVSVFSUDh8+7LoXCOCqIiQBaDR++9vfqrKyUu+8846jzW6369///rceeeSRix5bXFysIUOGaMuWLdqzZ48GDx6s+++/XzabzdFn3LhxWrt2rRYtWiSr1arU1FS1bNlSkpSbm6u77rpLvr6++uCDD5Sdna0JEybo7NmzdfNiAdQ5i2EYhrsnAQCukpCQoCNHjig9PV2S9Morr2jRokX65ptvZLFYLqtWz5499dhjj2ny5Mn6+uuvdeONNyojI0ODBg2q1nfWrFlau3atDh48KC8vL5e8FgDuxZUkAI3KpEmTtHnzZuXm5kqSVq5cqYcffviSAen06dN68sknddNNN+naa69Vy5YtdeDAAceVpL1798rDw0PR0dGmx+/du1dRUVEEJKAR8XT3BADAlfr06aNbbrlFaWlpGjx4sPbt26d33333ksf96U9/0qZNm7Rw4UJ169ZNzZs318iRI1VeXi5Jat68+UWPv9R+AA0PIQlAoxMXF6eXX35Zubm5GjRokIKCgi55zPbt2/Xwww9r2LBhks6tUTpy5Ihjf+/evVVVVaXMzEzT220333yz3nzzTVVUVHA1CWgkuN0GoNEZM2aMcnNztWzZMk2YMKFGx3Tr1k0bNmzQ3r179cUXX+j3v/+9qqqqHPtDQkI0fvx4TZgwQf/85z+Vk5Ojbdu26e2335YkTZ48WUVFRRo9erR27dqlQ4cO6b//+7918ODBOnmNAOoeIQlAo9O6dWuNGDFCLVu21AMPPFCjY15++WW1bdtWAwYM0P3336/Bgwerb9++Tn2WLFmikSNHKiEhQT169NCkSZN0+vRpSZKfn58++OADFRcXKzo6WuHh4Vq2bBlXlYAGjE+3AWiU7r33XoWFhWnRokXungqABoqQBKBROXXqlDZv3qwxY8boq6++0o033ujuKQFooFi4DaBR6du3r3744Qe9+OKLTgGpZ8+eOnr0qOkxr7/+usaMGXO1pgiggeBKEoAm4ejRo6qoqDDdFxAQoFatWl3lGQGo7whJAAAAJvh0GwAAgAlCEgAAgAlCEgAAgAlCEgAAgAlCEgAAgAlCEgAAgAlCEgAAgIn/D7XOsip2QVSJAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.histplot(data=movement, x='y_acc', hue='move_type', stat='density'); " ] }, { "cell_type": "markdown", "id": "a383aef3-13ba-45ad-b4d2-dbbd53c8e649", "metadata": {}, "source": [ "## Linear regression\n", "\n", "Now our task is to predict the ```move_type``` feature based on the ```z_acc``` feature:" ] }, { "cell_type": "code", "execution_count": 7, "id": "64154760-a6c2-48ee-b33f-55d433f19f83", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjkAAAGwCAYAAABLvHTgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5h0lEQVR4nO3de3wU9b3/8fdmk93cwyUQiASMBgUJUAwWw01BiUVKpVqL2oNI0Uo1IsVWyuHUC6JBe0TbUqio4OFni5yqtLRSJVblrpUQFAEtCJgAiTmgZENCdpPd+f2R7JpNNrclZJPh9Xw89iH5zndmPvOd2eTt7O53LYZhGAIAADCZsFAXAAAAcC4QcgAAgCkRcgAAgCkRcgAAgCkRcgAAgCkRcgAAgCkRcgAAgCmFh7qA9ubxeHT8+HHFxcXJYrGEuhwAANAChmGorKxMycnJCgtr2T2a8y7kHD9+XCkpKaEuAwAABKGwsFB9+vRpUd/zLuTExcVJqhmk+Pj4EFcDAABawuFwKCUlxfd3vCXOu5DjfYkqPj6ekAMAQCfTmrea8MZjAABgSoQcAABgSoQcAABgSoQcAABgSoQcAABgSoQcAABgSoQcAABgSoQcAABgSoQcAABgSoQcAABgSiH9WofNmzfr17/+tfLy8lRUVKR169ZpypQpTa6zadMmzZ07V3v37lVycrIefPBBzZo1q30KBjqQ0gqXTpx2yXHGpS7RNrncHjnOVCvGblVkuFVhYZIMqdLtUZhFCg8L05kqtyqcbnWNDVdUmFVOj6Fqj1tR4eEqr3JLhmRIKndWKzYyXLERVklSeXXNMrs1TBaLRWdqf44Il+xhVp2ucqusdt9REVZFhFnk9hg6Ue5SlK2mzRYepgu6Rod0zACcX0IacsrLyzV06FDNmDFDN910U7P9Dx8+rOuvv1533XWXXn75ZW3btk333HOPevTo0aL1AbM4fuqM5r32sfK++Fq/vXWY/jv339p28KRv+ai07rpvXH9Zw6QzLo8iwi1a+u5BbTt4Uildo/T/Zn5bBafOaF3+Ud1zdX89/Le9um1EP63adti3ncRYm175yZVavGG/fnTlhYq1h6lrjF1PvLFPt43op+0H/k/TR6Zq/ro92lJv39nj0pQUH6lyp1vTVv5Lw/p2Ufa4NLk9hvp2j2n38QJwfrIYhmGEugip5gu3mruTM2/ePK1fv1779+/3tc2aNUsfffSRduzY0aL9OBwOJSQkqLS0lC/oRKdUWuFS9pp8bTlwQtnj05Rf8LVfwPEaldZd3x3cW6k9YvS7dw76+qzPHqVPjpXqjT1FeuR7g/TI+r0a1rdrg+28OH24Xtp2WEP7dlVyQqQuqt2Ot2/O9wdrQb2AE2jfWw+e1NJ3DvraxlzSQ324owOglYL5+92p3pOzY8cOZWVl+bVdd9112rlzp6qqqgKu43Q65XA4/B5AZ3bitEtbDpyQJA1L6RIw4EjStoMn1TM+UjH2cL8+4dYwJcVHatvBk6p2G9p28GTA7fSMt2tL7bKkOtvx9i13uQMGnPr7HpbSxa+trLK6DUYBAJrXqUJOcXGxkpKS/NqSkpJUXV2tEydOBFwnJydHCQkJvkdKSkp7lAqcM47KbwK9s9rTZF9ntUenK91+bWVnqnzrOc5UNbod73rOao/fduqv29y+627bWe1RWWXT6wFAW+lUIUeqeVmrLu+rbfXbvebPn6/S0lLfo7Cw8JzXCJxL8ZERvn/bw5t+CtvDwxQbafVri4uK8K0XHxXR6Ha869nDw/y2U3/d5vZdd9v28DDFRTa9HgC0lU4Vcnr16qXi4mK/tpKSEoWHh6t79+4B17Hb7YqPj/d7AJ1ZYqxNY/snSpLyC09pVFrga39UWneVOCpV7qz261Pt9qjEUalRad0VbrVodFr3gNspcTg1pnbZl7Xbqds3xmbVmLTEZvedX3jKry0uMqSfdwBwHulUISczM1O5ubl+bRs3btTw4cMVEcH/HeL8kBBt0+Kbhmhs/0St3HpYM0alNggo3k9XpfWMlavKUPa4NF+fe/+4S5kX13wC6vnNn2vRlMHaf7y0wXbmvfaxHv7eIH163KHeCVGyWqRHvjfI1/elbYe1aEq6xvRPbLDv7HH9NeKi7nJVGVq59bCvbVRaIm86BtBuQvrpqtOnT+vgwYOSpGHDhmnJkiUaN26cunXrpr59+2r+/Pk6duyYVq9eLanmI+Tp6em6++67ddddd2nHjh2aNWuW1qxZ0+KPkPPpKphFwHlyKqsVbauZJ8da+wpug3lyXG51jakzT47hVpQ1wDw59nDF2lo3T0507Tw5tjrz5ETWzpNjZ54cAGchmL/fIb1vvHPnTo0bN87389y5cyVJ06dP10svvaSioiIVFBT4lqempmrDhg362c9+pt///vdKTk7Wb3/7W+bIwXkpIdqmhGhbqMtoUr8eoa4AwPmsw8yT0164kwMAQOdj+nlyAAAAWoqQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATCnkIWfZsmVKTU1VZGSkMjIytGXLlib7//GPf9TQoUMVHR2t3r17a8aMGTp58mQ7VQsAADqLkIactWvXas6cOVqwYIHy8/M1ZswYTZw4UQUFBQH7b926VbfffrtmzpypvXv36s9//rM+/PBD3Xnnne1cOQAA6OhCGnKWLFmimTNn6s4779TAgQP17LPPKiUlRcuXLw/Y//3339eFF16o2bNnKzU1VaNHj9bdd9+tnTt3NroPp9Mph8Ph9wAAAOYXspDjcrmUl5enrKwsv/asrCxt37494DojR47U0aNHtWHDBhmGoS+//FKvvvqqJk2a1Oh+cnJylJCQ4HukpKS06XEAAICOKWQh58SJE3K73UpKSvJrT0pKUnFxccB1Ro4cqT/+8Y+aOnWqbDabevXqpS5duuh3v/tdo/uZP3++SktLfY/CwsI2PQ4AANAxhfyNxxaLxe9nwzAatHnt27dPs2fP1kMPPaS8vDy9+eabOnz4sGbNmtXo9u12u+Lj4/0eAADA/MJDtePExERZrdYGd21KSkoa3N3xysnJ0ahRo/SLX/xCkjRkyBDFxMRozJgxWrRokXr37n3O6wYAAJ1DyO7k2Gw2ZWRkKDc31689NzdXI0eODLhORUWFwsL8S7ZarZJq7gABAAB4hfTlqrlz5+qFF17QypUrtX//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lXJzc3XllVdq5syZOn78uBYsWKC3335bf/rTn85mFwAAAEEJKuTs2rVLq1at0po1a2S1WjVt2jQ988wzGjBggK9PVlaWxo4d22aFAgAAtEZQIeeKK67QhAkTtHz5ck2ZMkUREREN+lx22WW65ZZbzrpAAACAYAQVcg4dOqR+/fo12ScmJkarVq0KqigAAICzFdSnq8aNG6eTJ082aD916pQuuuiisy4KAADgbAUVco4cORLwO6mcTqeOHTt21kUBAACcrVa9XLV+/Xrfv9966y0lJCT4fna73frnP/+pCy+8sM2KAwAACFarQs6UKVMk1XzT+PTp0/2WRURE6MILL9TTTz/dZsUBAAAEq1Uhx+PxSKr57qoPP/xQiYmJ56QoAACAsxXUe3IOHz7cooAzePBgFRYWBrMLAACAsxJUyGmpI0eOqKqq6lzuAgAAIKBzGnIAAABChZADAABMiZADAABMiZADAABMiZADAABM6axDTmVlZaPLnnvuOSUlJZ3tLgAAAFotqJDj8Xj02GOP6YILLlBsbKwOHTokSfrVr36lF1980dfvtttuU0xMTNtUCgAA0ApBhZxFixbppZde0lNPPSWbzeZrHzx4sF544YU2Kw4AACBYQYWc1atXa8WKFfrRj34kq9Xqax8yZIg+/fTTNisOAAAgWEGFnGPHjiktLa1Bu8fjYYZjAADQIQQVcgYNGqQtW7Y0aP/zn/+sYcOGnXVRAAAAZ6tV30Lu9fDDD2vatGk6duyYPB6PXn/9dX322WdavXq1/v73v7d1jQAAAK0W1J2cyZMna+3atdqwYYMsFoseeugh7d+/X3/72980YcKEtq4RAACg1SyGYRihLqI9ORwOJSQkqLS0VPHx8aEuBwAAtEAwf7+DupMzY8YM/fOf/9R5lo8AAEAnElTIOXnypCZNmqQ+ffrogQceUH5+flvXBQAAcFaCCjnr169XcXGxHn74YeXl5Wn48OG67LLL9MQTT+jIkSNtXCIAAEDrtcl7co4ePao1a9Zo5cqVOnDggKqrq9uitnOC9+QAAND5tNt7cuqqqqrSzp079cEHH+jIkSN8IScAAOgQgg457777ru666y4lJSVp+vTpiouL09/+9jcVFha2ZX0AAABBCWoywD59+ujkyZO67rrr9Nxzz2ny5MmKjIxs69oAAACCFlTIeeihh3TzzTera9eu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d+/WRRddxHg1wel0av/+/erdu3fbXlutf0802soXX3xh5OfnG48++qgRGxtr5OfnG/n5+UZZWZlhGIZRXV1tpKenG9dcc42xa9cu4+233zb69OljZGdnh7jy9vfKK68YERERxosvvmjs27fPmDNnjhETE2McOXIk1KWFXFlZme/akWQsWbLEyM/PN7744gvDMAxj8eLFRkJCgvH6668be/bsMW699Vajd+/ehsPhCHHl7e+nP/2pkZCQYLz33ntGUVGR71FRUeHrw3h9Y/78+cbmzZuNw4cPGx9//LHxn//5n0ZYWJixceNGwzAYq+bU/XSVYTBedT3wwAPGe++9Zxw6dMh4//33je9+97tGXFyc73d6W40VISeEpk+fbkhq8Hj33Xd9fb744gtj0qRJRlRUlNGtWzcjOzvbqKysDF3RIfT73//e6Nevn2Gz2YzLL7/c97Hf8927774b8DqaPn26YRg1H8d8+OGHjV69ehl2u90YO3assWfPntAWHSKBxkmSsWrVKl8fxusbP/7xj33PuR49ehjXXHONL+AYBmPVnPohh/H6xtSpU43evXsbERERRnJysnHjjTcae/fu9S1vq7GyGIZhnN1NJgAAgI6H9+QAAABTIuQAAABTIuQAAABTIuQAAABTIuQAAABTIuQAAABTIuQAAABTIuQAAABTIuQAAABTIuQAAABTIuQAAABTIuQA6BCOHDkii8XS4HH11Vc3ud7Jkyd16623qk+fPoqOjtbgwYO1Zs0avz4ej0dPPvmk0tLSZLfb1bdvXz3++OO+5UePHtUtt9yibt26KSYmRsOHD9cHH3xwLg4TQDsKD3UBACBJKSkpKioq8v1cXFysa6+9VmPHjm1yvcrKSmVkZGjevHmKj4/XG2+8oWnTpumiiy7SiBEjJEnz58/X888/r2eeeUajR49WUVGRPv30U0nS6dOnddVVV+mCCy7Q+vXr1atXL+3atUsej+fcHSyAdsG3kAPocCorK3X11VerR48e+utf/6qwsNbddJ40aZIGDhyo//7v/1ZZWZl69OihpUuX6s4772zQd8WKFfr5z3+uI0eOqFu3bm11CAA6AO7kAOhwZs6cqbKyMuXm5jYbcNxutxYvXqy1a9fq2LFjcjqdcjqdiomJkSTt379fTqdT11xzTcD1d+/erWHDhhFwABMi5ADoUBYtWqQ333xT//rXvxQXF9ds/6efflrPPPOMnn32WQ0ePFgxMTGaM2eOXC6XJCkqKqrJ9ZtbDqDz4o3HADqM1157TQsXLtT//u//6uKLL27ROlu2bNENN9yg//iP/9DQoUN10UUX6cCBA77l/fv3V1RUlP75z38GXH/IkCHavXu3vvrqqzY5BgAdByEHQIfwySef6Pbbb9e8efM0aNAgFRcXq7i4uNnwkZaWptzcXG3fvl379+/X3XffreLiYt/yyMhIzZs3Tw8++KBWr16tzz//XO+//75efPFFSdKtt96qXr16acqUKdq2bZsOHTqk1157TTt27Dinxwvg3CPkAOgQdu7cqYqKCi1atEi9e/f2PW688cYm1/vVr36lyy+/XNddd52uvvpqX2Cp3+eBBx7QQw89pIEDB2rq1KkqKSmRJNlsNm3cuFE9e/bU9ddfr8GDB2vx4sWyWq3n6lABtBM+XQUAAEyJOzkAAMCUCDkAOrSJEycqNjY24OOJJ54IdXkAOjBergLQoR07dkxnzpwJuKxbt27MbwOgUYQcAABgSrxcBQAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATImQAwAATOn/AwbAyFojvKjSAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.scatterplot(data=movement, x='z_acc', y='move_type');" ] }, { "cell_type": "markdown", "id": "bb5f381a-eaf1-4b63-a2ca-a5d89f29f62c", "metadata": {}, "source": [ "We can first resort to the tool we have seen previously with scikit-learn's LinearRegression:" ] }, { "cell_type": "code", "execution_count": 8, "id": "b0ca9c0e-0413-4f08-9595-bd146ffc52ed", "metadata": { "tags": [] }, "outputs": [], "source": [ "from sklearn import linear_model" ] }, { "cell_type": "code", "execution_count": 9, "id": "00134b02-2226-4b72-ae6e-8bfb7b56df01", "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/gw18g940/mambaforge/envs/DAVPy2023/lib/python3.10/site-packages/sklearn/base.py:465: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", " warnings.warn(\n" ] } ], "source": [ "lin_model = linear_model.LinearRegression()\n", "lin_model.fit(X=movement[['z_acc']], y=movement['move_type'])\n", "\n", "pred = lin_model.predict(np.arange(-10,50,1)[:, np.newaxis])" ] }, { "cell_type": "code", "execution_count": 10, "id": "fe26f6e2-5a19-431d-bf7b-7d063ee38c32", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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B/77X/jtN/DxgVdegdtv12jcIoVU2O/vYo/gnZGRwYoVK9i3bx8Wi4WmTZsyYMAAvLw0KLiISKmbP9/svG23Q/365mO3du1cHZVIuVSszObHH39kwIABJCQk0LhxYwB+/fVXqlevzqpVq2jZsmWJBikiIuedPWtOgPvOO+Z6376waJE5jpKIlIpi9VkaN24czZs3588//2T37t3s3r2bo0eP0qpVK2677baSjlFERAAOHICICDNR8vCAZ56BVauUKImUsmK1LH3//ffExMRQtWpVx7aqVavy9NNP0759+xILTkREzlu+HG69FZKSzKlKFi+GHj1cHZVIhVCslqXGjRvz119/5dl+/PhxwsLCLjooERE5Ly0NJk82O3InJZnzvMXGKlESuYSKlSw988wz3HPPPSxbtow///yTP//8k2XLljFp0iSeffZZbDabYxERkWKKizOTopdfNtf/7//MASdr13ZtXCIVTLGGDvDw+DfHyhq9O+s02dctFgsZGRklEWeZpqEDRKTErV9vTlvy998QGAjvvgsDB7o6KpFypVSHDvj66681B5yISGnIzDQnwJ02zRyZ+8orzWEBGjZ0dWQiFVaxkqXu3buXcBgiIsLJk3DLLbBmjbk+bhy8+ir4+bk2LpEKrlh9lho0aMD06dM5cuRIScdzQW+88QYNGjTA19eXtm3bsnnz5gLLjh49GovFkmdp3ry5o8zChQvzLZOSknIpbkdExLRzpzkJ7po14OtrDg/w9ttKlETKgGIlS5MnT2blypVcccUV9OrVi8WLF2O320s6tjyWLFnCpEmTeOSRR4iNjaVLly706dOnwKTtlVdeIT4+3rEcPXqUatWqMWjQoBzlAgMDc5SLj4/H19e31O9HRATDgNmzoUsXOHoUwsLMxGn0aFdHJiLnXdTccN9//z0LFiwgOjqa9PR0hg0bxpgxY2jTpk1JxujQoUMH2rRpw5w5cxzbmjZtysCBA5kxY8YFj//kk0+46aabOHToEPXr1wfMlqVJkyZx+vTpQsdht9tzJIc2m426deuqg7eIFM2ZMzB+vDlmEsDNN5vTmAQFuTYukQqisB28i9WylKV169a88sorxMXFMW3aNObNm0f79u1p3bo1CxYsoCTn6E1NTWXXrl307t07x/bevXuzbdu2Qp1j/vz5XHPNNY5EKcuZM2eoX78+derUoV+/fsTGxjo9z4wZMwgKCnIsdevWLdrNiIj8/DO0b28mSl5e8NJLsHSpEiWRMuiikqW0tDQ++ugjbrjhBu6//37atWvHvHnzGDx4MI888gjDhw8vqTg5ceIEGRkZhIaG5tgeGhpKQkLCBY+Pj4/niy++YNy4cTm2N2nShIULF7Jq1Sqio6Px9fUlMjKSAwcOFHiuKVOmkJiY6FiOHj1avJsSkYrpww/NROmXX+Cyy2DjRrjvPtBbxiJlUrHehtu9ezfvvPMO0dHReHp6MmLECF5++WWaNGniKNO7d2+6du1aYoFmyT1kQdZ4TheycOFCqlSpwsBc45R07NiRjh07OtYjIyNp06YNr732Gq+++mq+57JarVit1qIHLyIVm91uJkVZXQmuuQY++MCcvkREyqxiJUvt27enV69ezJkzh4EDB+Lt7Z2nTLNmzRgyZMhFB5glJCQET0/PPK1Ix48fz9PalJthGCxYsIARI0bg4+PjtKyHhwft27d32rIkIlJkhw/DoEEQE2O2IE2dCo89Bp6ero5MRC6gWMnS77//nqffT27+/v688847xQoqPz4+PrRt25Z169Zx4403OravW7eOAQMGOD1248aNHDx4kLFjx17wOoZhsGfPHlq2bHnRMYuIAPD55zBiBJw6BdWqma1J113n6qhEpJCK1WepR48enDx5Ms/206dPc8UVV1x0UAWZPHky8+bNY8GCBezbt4/77ruPI0eOMGHCBMDsSzRy5Mg8x82fP58OHTrQokWLPPueeOIJvvzyS37//Xf27NnD2LFj2bNnj+OcIiLFlp4OjzwC/fqZidJVV5mT4CpREnErxWpZOnz4cL5zvtntduLi4i46qIJERUVx8uRJpk+fTnx8PC1atGD16tWOVq74+Pg8Yy4lJiayfPlyXnnllXzPefr0aW677TYSEhIICgoiPDycTZs2cdVVV5XafYhIBfDXXzB0KHzzjbl+993wwgtwga4AIlL2FGmcpVWrVgEwcOBA3n33XYKyveKakZHBV199xbp169i/f3/JR1qGaSJdEclh82aIioL4eAgIgHnzzHURKVNKZSLdrDfJLBYLo0aNyrHP29ubyy+/nBdffLHo0YqIlAeGAS++CA8/DBkZ0Ly5OQlutjeFRcT9FClZyszMBMy54b777jtCQkJKJSgREbdz+jTceit88om5Pnw4vPUW+Pu7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kiXJacMGM1H66y9zzKR33jGHCRAREamg9BhOTJmZZutRz55motSqFezapURJREQqPLUsCZw6BSNHwmefmeujR8Prr5vzvImIiFRwSpYqupgYGDQIDh8Gq9VMksaOdXVUIiIiZYYew1VUhgFvvQWRkWai1LAh7NihRElERCQXJUsVUXIyjBgBEyZAaqo5PEBMDFx5pasjExERKXOULFU0v/wCV10FH3wAnp7w/PPw8cdQpYqrIxMRESmT1GepIlmyxHzMlpwMtWqZ6126uDoqERGRMk0tSxWB3Q53322On5ScDN27w+7dSpREREQKQclSeXfkCHTtCrNnm+tTpsC6dVCzpmvjEhERcRN6DFeerVkDw4fDP/+YfZLeew/69XN1VCIiIm5FLUvlUUYGTJsG119vJkpt25qP3ZQoiYiIFJlalsqbv/+GYcNg/Xpz/Y474OWXzQEnRUREpMiULJUnv/4KV18NcXHmVCVz55qP4URERKTYlCyVJ/XqmR23K1eG5cuhWTNXRyQiIuL2lCyVJ76+sHIlBAaaCZOIiIhcNCVL5c1ll7k6AhERkXJFb8OJiIiIOKFkSURERMQJt0mWTp06xYgRIwgKCiIoKIgRI0Zw+vTpAsunpaXx0EMP0bJlS/z9/alduzYjR47k2LFjOcp1794di8WSYxkyZEgp342IiIi4C7dJloYNG8aePXtYs2YNa9asYc+ePYwYMaLA8mfPnmX37t1MnTqV3bt38/HHH/Prr79yww035Ck7fvx44uPjHctbb71VmrciIiIibsQtOnjv27ePNWvWsGPHDjp06ADA22+/TUREBPv376dx48Z5jgkKCmLdunU5tr322mtcddVVHDlyhHr16jm2V6pUiZqaK01ERETy4RYtS9u3bycoKMiRKAF07NiRoKAgtm3bVujzJCYmYrFYqFKlSo7tH3zwASEhITRv3pwHHniApKQkp+ex2+3YbLYci4iIiJRPbtGylJCQQI0aNfJsr1GjBgkJCYU6R0pKCg8//DDDhg0jMDDQsX348OE0aNCAmjVr8uOPPzJlyhS+//77PK1S2c2YMYMnnnii6DciIiIibselLUuPP/54ns7VuZeYmBgALBZLnuMNw8h3e25paWkMGTKEzMxM3njjjRz7xo8fzzXXXEOLFi0YMmQIy5YtY/369ezevbvA802ZMoXExETHcvTo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/5FkFxERwY8//kh8fLxj29q1a7FarTl+WcszHx8f2rZty7p163JsX7duHZ06dXJRVGVbgwYNqFmzZo46S01NZePGjRWuzgzDYOLEiXz88cd8/fXXNGjQIMd+1VXBDMPAbrerjrLp2bMne/fuZc+ePY6lXbt2DB8+nD179nDFFVeorgpgt9vZt28ftWrVujSfqRLpJi5lwh9//GHExsYaTzzxhBEQEGDExsYasbGxRlJSkmEYhpGenm60aNHC6Nmzp7F7925j/fr1Rp06dYyJEye6OPJLa/HixYa3t7cxf/584+effzYmTZpk+Pv7G4cPH3Z1aC6TlJTk+LwAxksvvWTExsYaf/zxh2EYhjFz5kwjKCjI+Pjjj429e/caQ4cONWrVqmXYbDYXR35p3XHHHUZQUJCxYcMGIz4+3rGcPXvWUUZ1ZRhTpkwxNm3aZBw6dMj44YcfjP/973+Gh4eHsXbtWsMwVEfOZH8bzjBUV1nuv/9+Y8OGDcbvv/9u7Nixw+jXr59RuXJlx9/t0q4nJUvlyKhRowwgz/LNN984yvzxxx9G3759DT8/P6NatWrGxIkTjZSUFNcF7SKvv/66Ub9+fcPHx8do06aN49Xviuqbb77J97MzatQowzDMV3OnTZtm1KxZ07BarUbXrl2NvXv3ujZoF8ivjgDjnXfecZRRXRnGmDFjHL9f1atXN3r27OlIlAxDdeRM7mRJdWWKiooyatWqZXh7exu1a9c2brrpJuOnn35y7C/terIYhmGUTBuViIiISPmjPksiIiIiTihZEhEREXFCyZKIiIiIE0qWRERERJxQsiQiIiLihJIlERERESeULImIiIg4oWRJRERExAklSyIiIiJOKFkSERERcULJkoiIiIgTSpZEpFw6fPgwFoslz9K9e3enx508eZKhQ4dSp04dKlWqRMuWLYmOjs5RJjMzk2effZawsDCsViv16tXj6aefduz/888/GTJkCNWqVcPf35927dqxc+fO0rhNEbkEvFwdgIhIaahbty7x8fGO9YSEBK655hq6du3q9LiUlBTatm3LQw89RGBgIJ9//jkjRozgiiuuoEOHDgBMmTKFt99+m5dffpnOnTsTHx/PL7/8AsCZM2fo1q0bl112GatWraJmzZrs3r2bzMzM0rtZESlVFsMwDFcHISJSmlJSUujevTvVq1dn5cqVeHgUrVG9b9++NG3alBdeeIGkpCSqV6/O7NmzGTduXJ6yc+fO5YEHHuDw4cNUq1atpG5BRFxILUsiUu6NHTuWpKQk1q1bd8FEKSMjg5kzZ7JkyRLi4uKw2+3Y7Xb8/f0B2LdvH3a7nZ49e+Z7/J49ewgPD1eiJFKOKFkSkXLtqaeeYs2aNXz77bdUrlz5guVffPFFXn75ZWbNmkXLli3x9/dn0qRJpKamAuDn5+f0+AvtFxH3ow7eIlJuLV++nOnTp/PRRx/RsGHDQh2zefNmBgwYwC233ELr1q254oorOHDggGN/o0aN8PPz46uvvsr3+FatWrFnzx7++eefErkHEXE9JUsiUi79+OOPjBw5koceeojmzZuTkJBAQkLCBZOYsLAw1q1bx7Zt29i3bx+33347CQkJjv2+vr489NBDPPjggyxatIjffvuNHTt2MH/+fACGDh1KzZo1GThwIFu3buX3339n+fLlbN++vVTvV0RKj5IlESmXYmJiOHv2LE899RS1atVyLDfddJPT46ZOnUqbNm249tpr6d69uyPxyV3m/vvv57HHHqNp06ZERUVx/PhxAHx8fFi7di01atTg+uuvp2XLlsycORNPT8/SulURKWV6G05ERETECbUsiYiIiDihZElEKpQ+ffoQEBCQ7/LMM8+4OjwRKYP0GE5EKpS4uDjOnTuX775q1appfCQRyUPJkoiIiIgTegwnIiIi4oSSJREREREnlCyJiIiIOKFkSURERMQJJUsiIiIiTihZEhEREXFCyZKIiIiIE/8PTQoQYXDw0IUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.scatterplot(data=movement, x='z_acc', y='move_type');\n", "plt.plot(np.arange(-10,50,1), pred, 'r');" ] }, { "cell_type": "markdown", "id": "55f95197-defc-4cc3-9397-bb9d4645a97a", "metadata": {}, "source": [ "We see that this model is really not appropriate. Of course we could set a limit at 0.5 and say that points below are good and those above bad, but problems remain. For example points with extreme values of acidity have a large weight in the error. \n", "\n", "A more appropriate solution would be to pass the linear model directly through a step function. Such a function $H(x, d)$ takes a value $x$ and returns 0 if $xd$. We can for example set this manually for our data:" ] }, { "cell_type": "code", "execution_count": 11, "id": "aa1ec5f5-59e3-40ef-89d9-53176f82db06", "metadata": { "tags": [] }, "outputs": [], "source": [ "def step(x, d):\n", " out = np.zeros(len(x))\n", " out[x>d] = 1\n", " return out" ] }, { "cell_type": "code", "execution_count": 12, "id": "e3b455ca-dc76-4336-ae47-14f9db4ac166", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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nxjp6enG+++/bxQVFflulZWVvnUYK8OYO3eusWHDBmP//v3Gp59+avziF78w4uLijPXr1xuGwRiFU/9sKcNgrAzDMO6//37j/fffN/bt22d89NFHxne/+12jXbt2vt/brTFGhJsomTJliiEp4Pbee+/51vn666+N8ePHG0lJSUbHjh2NGTNmGFVVVdErOkqee+45o2fPnobNZjMGDRrkO433XPbee+8Fff9MmTLFMIza0y0ffvhho2vXrobdbjdGjRpl7NixI7pFR0GwMZJkrFixwrcOY2UYP/rRj3w/Y507dzauvvpqX7AxDMYonIbhhrEyjEmTJhlZWVlGQkKC0a1bN+P66683du7c6Xu8NcbIYhiG0XzzQAAAANHFZ24AAEBMIdwAAICYQrgBAAAxhXADAABiCuEGAADEFMINAACIKYQbAAAQUwg3AAAgphBuAABATCHcAACAmEK4AQAAMYVwA6BNOHDggCwWS8DtyiuvDLvd8ePHdfPNN6t79+5KTk5Wv379tGrVKr91PB6PfvWrXyk3N1d2u109evTQ448/7nv88OHDuummm9SxY0elpKRoyJAh+sc//tESTxNAK4iPdgEAIEnZ2dkqKiry3S8uLtY111yjUaNGhd2uqqpKgwcP1pw5c5SWlqY333xTkydP1gUXXKChQ4dKkubOnasXX3xRTz/9tEaMGKGioiJ9/vnnkqSTJ0/qiiuu0Hnnnae1a9eqa9eu2rZtmzweT8s9WQAtim8FB9DmVFVV6corr1Tnzp31l7/8RXFxZzbJPH78ePXu3Vv/8z//o/LycnXu3FmLFy/W7bffHrDuCy+8oJ/+9Kc6cOCAOnbs2FxPAUAUMXMDoM2ZNm2aysvLlZ+f32iwcbvdWrhwoVavXq0jR47I6XTK6XQqJSVFkrR79245nU5dffXVQbffvn27Bg4cSLABYgjhBkCbMn/+fL311lv65z//qXbt2jW6/lNPPaWnn35azzzzjPr166eUlBTNmjVLLpdLkpSUlBR2+8YeB2A+fKAYQJvx+uuva968efrf//1fXXjhhRFts3HjRl133XX6r//6Lw0YMEAXXHCB9uzZ43u8V69eSkpK0t///veg2/fv31/bt2/XN9980yzPAUD0EW4AtAmfffaZbr31Vs2ZM0d9+vRRcXGxiouLGw0dubm5ys/P1+bNm7V7927deeedKi4u9j2emJioOXPm6Oc//7lWrlypr776Sh999JGWLVsmSbr55pvVtWtXTZw4UZs2bdK+ffv0+uuva8uWLS36fAG0HMINgDZh69atqqys1Pz585WVleW7XX/99WG3++Uvf6lBgwZp7NixuvLKK31BpeE6999/vx566CH17t1bkyZNUklJiSTJZrNp/fr16tKli77zne+oX79+WrhwoaxWa0s9VQAtjLOlAABATGHmBgAAxBTCDYA2bdy4cUpNTQ16e+KJJ6JdHoA2iLYUgDbtyJEjOnXqVNDHOnbsyPVpAAQg3AAAgJhCWwoAAMQUwg0AAIgphBsAABBTCDcAACCmEG4AAEBMIdwAAICYQrgBAAAx5f8DheKtwRKRSaQAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.scatterplot(data=movement, x='z_acc', y='move_type');\n", "plt.plot(np.arange(-10,50,1), step(np.arange(-10,50,1), 9), 'r');" ] }, { "cell_type": "markdown", "id": "371fdaac-2733-4957-9cee-450fc61ea407", "metadata": {}, "source": [ "Now we just set the limit at 9 manually. However here too we would like to let the computer find the best threshold value. The problem with the above step function is that it's not usable for gradient descent. The idea of that method is to slightly vary the parameters of the function to find in which direction the error decreases. However here when we change the parameter ```d``` by a small amount, often nothing happens, as no point changes category. So the error landscape if flat and we don't know in which direction to go!\n", "\n", "We have thus to come up with a better function to describe our data. One such function is the sigmoid, which looks like a step function with less sharp edges (the origin of this function can be explained statistically but this is beyond the scope of this course). The sigmoid can be defined with two parameter ```w``` which controls the steepness and ```d``` again the location:" ] }, { "cell_type": "code", "execution_count": 13, "id": "63df309e-ad66-47e8-8a9d-495ee943e9ab", "metadata": { "tags": [] }, "outputs": [], "source": [ "def sigmoid(x, d, w):\n", " out = 1 / (1 + np.exp(-w*(x-d)))\n", " return out" ] }, { "cell_type": "code", "execution_count": 15, "id": "2d186a43-6975-4329-9a9a-5bf3b22f7037", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABEu0lEQVR4nO3de3yT9d3/8XeatumJFmihFChYLApyGgen5aCCimPIRJ3Dw43I0MkmMobbkNufJ4bC3D2nG8OJIpPbDbmnsrmNOesBOYhOoCgnFQRsgZYKQlNamrTJ9fsjJDRt2qZp6ZWkr+fjkceVXsdPvk3bd7/XdX1jMQzDEAAAQJSIMbsAAACA1kS4AQAAUYVwAwAAogrhBgAARBXCDQAAiCqEGwAAEFUINwAAIKrEml1AW3O73Tpy5Ig6dOggi8VidjkAACAIhmGovLxc3bt3V0xM430z7S7cHDlyRNnZ2WaXAQAAQlBUVKSePXs2uk67CzcdOnSQ5Gmc1NRUk6sBAADBsNvtys7O9v0db0y7CzfeU1GpqamEGwAAIkwwl5RwQTEAAIgqhBsAABBVCDcAACCqEG4AAEBUIdwAAICoQrgBAABRhXADAACiCuEGAABEFcINAACIKoQbAAAQVUz9+IX169frV7/6lbZu3ari4mKtWbNGkydPbnSb9957T3PnztWuXbvUvXt3/fznP9fMmTPbpmDAJGWVTpWWO1ReVa1OSfFyutyyn65Rss2qhFirYmIkGZLD5ZbFIsXGxOh0tUvOapcyUmxyuQ1ZJMXEWHTK6dKpqmplpNg8+6mqUcekWCVZrXK6DVXVuGSNsSgh1qoatyFnjUvJsVbpzLb209VKTYxTcrxVkiG3Wzpe4VRivFWJcVYlxFmV1THR5BYD0J6ZGm4qKio0ZMgQTZ8+XTfeeGOT6x84cEDf/va3ddddd+mll17Spk2b9KMf/UhdunQJansgEh05eVrzXvlEWwtP6Le3DNWv8z/Xpn3HfctH5abr3rF9ZY2RTjvdiou1aMm7+/RZSble/sGlKi47rTir1Ck5Ufev2aGCwpP67S1D9dTbe7Vp33FlpMRr1Q8uVdHJ01q2Yb/uyMtRj84JOnzytFZuPqifXXOhXBaLHlizw++4o3PT9ch3Bqq8yil7VY2mvvAfDe3VUbPG5qra5Vav9GQzmgsAZDEMwzC7CMnzQVhN9dzMmzdPr7/+uvbs2eObN3PmTH388cfavHlzUMex2+1KS0tTWVkZH5yJsFdW6dSsPxdow75jmjUuVwWFJ/wChteo3HRdOyhLOV2S9bt39mnTvuNaPm2ESu1VMiRd2iddD/5tpzbtO15vP971/rGjWEN7ddLo3HTt/6pC/9xRrO+PylFOpwQ9uuZjfbS3VLFul2LdLlndLlkMQ9/M6aTpo3JUeKxCR8sdWrHpgC4+r5Ou6tdVl/ZJV7e0Mz04dX/NNPU1gMhmtUo9e7bqLpvz9zuiPhV88+bNGj9+vN+8a665RsuXL1d1dbXi4uLqbeNwOORwOHxf2+32c14n0FqOnXJqw75jkqSh2R215J19AdfbtO+4vj8qR8m2WF9o6Zpq8y131Lh982vvJ7XqlM7f/LZytm5TwrqtGptwWgkVdn3j5Eld9/UJJdU4ZDEMvdhEncPPTDlBDECSlJUlHTli2uEjKtyUlJQoMzPTb15mZqZqamp07NgxZWVl1dtm0aJFevTRR9uqRKBV2auqfc8dNe5G13XUuHWqyuX7+lSVy7eN/fTZ/ThPV+mGnW/r1u1vaNjhTxUjT69Jn2bU5ZZFbotFkmSNsXj2YLHI5TZ882Sx+N+xcGb9oL8GELkSEkw9fESFG8lz+qo271m1uvO95s+fr7lz5/q+ttvtys7OPncFAq0oNeFsb6QttvGbG22xMUpJsPq+TkmwqtLp2SY10bOfEYd2acz35mrCF5/71qvKvUDHh4zQ/x6L18Tv5Cm5R6aOWRP10/xCPTtzjKzxNt34/H9UHWOVK8aqmhirDMvZWv5+7yiV2j29ozNe3CLJc6qre8dE9c/i1C+AthdR4aZbt24qKSnxm1daWqrY2Filp6cH3MZms8lmswVcBoS7jJR4XdY3Q+v3HlNB0UmNyk1v8JqbUnuVkm1W3zqldofvmpucjGTdX/qh7vzzY4o13Crr0EnPDp2kVweO0+OzvqVSe5V27ChW7Jlrbg58VaHsi1N1JKGjcjKSNWRAL20McNzRuemqcLh01F6lI2VVfrUQbACYJaLGucnLy1N+fr7fvDfffFMjRowIeL0NEOnSkuK1+MbBGtM3Qy9sPKDpo3I0Ktc/yHvvlsrtmiJntaFZY3M1Kjdd8179RBfndFZu1xTFvLRSM1f8QrGGW/8YcIUK3tysj6f+UEc7ZGjeq59oRE5n3Tu2r3YfKZOz2tA3+3TWrLG5emVrkSRDCycP0ug6x/XeLWWLtSgrLVEvbDygUbnpmjW2r0blZqg7t4MDMImpd0udOnVK+/Z5LmwcOnSonnzySY0dO1adO3dWr169NH/+fB0+fFgrV66U5LkVfODAgbr77rt11113afPmzZo5c6ZWrVoV9K3g3C2FSOQd5+ZUVbU6ese5qapRUrxnnBvrmbOyVS63YmqPc1PjUrdD+5V59eWKqaxU+d0/0qEHH1NFtUudk22qPrOftKRYJTc0zo3LpWTr2XFuyquq1SGh/jg3CWfGuUlknBsA50Bz/n6bGm7WrVunsWPH1ps/bdo0/fGPf9Qdd9yhgwcPat26db5l7733nn7yk5/4BvGbN29eswbxI9ygXampkYYPlz75RLr6aumNN+QZ8Q8AIkvEhBszEG7QrixbJt19t9S5s7R7t1TnbkMAiBTN+fvNv3BAtKqulh57zPP84YcJNgDaDcINEK1efVUqLJS6dpXuusvsagCgzRBugGj1/POe6cyZUiIX+AJoPwg3QDQqKpLeftsz6u/3v292NQDQpgg3QDRas8YzHT1a6t3b3FoAoI0RboBo5A03119vbh0AYALCDRBtTp2SNm70PP/Od8ytBQBMQLgBos369Z7B+3JypPPPN7saAGhzhBsg2rzzjmd61VXm1gEAJiHcANFm0ybP9LLLzK0DAExCuAGiicMhbdvmeZ6XZ24tAGASwg0QTQoKJKdTysiQ+vQxuxoAMAXhBogmW7Z4pt/8pmcAPwBohwg3QDT5+GPPdOhQc+sAABMRboBo4g03Q4aYWwcAmIhwA0QLl0vaudPznHADoB0j3ADR4sAB6fRpKSGBwfsAtGuEGyBafPqpZ3rhhZLVam4tAGAiwg0QLbzhpl8/c+sAAJMRboBo8dlnnumFF5pbBwCYjHADRAt6bgBAEuEGiB5ffOGZ5uaaWwcAmIxwA0SDykqpuNjznI9dANDOEW6AaHDwoGeamip17mxqKQBgNsINEA0OHPBM+/ThM6UAtHuEGyAa7N/vmXJKCgAIN0BU8J6WOu88M6sAgLBAuAGiweHDnmnPnubWAQBhgHADRANvuOnRw9w6ACAMEG6AaHDkiGfavbu5dQBAGCDcAJHOMM6GG3puAIBwA0S8EyekqirP86wsc2sBgDBAuAEinbfXJj1dSkgwtxYACAOEGyDSeS8m5nobAJBEuAEiH9fbAIAfwg0Q6ei5AQA/hBsg0tFzAwB+CDdApKPnBgD8EG6ASEfPDQD4IdwAkY6eGwDwQ7gBIpnLJR096nlOuAEASYQbILKdOCG53Z7nGRnm1gIAYYJwA0SyY8c8044dpbg4U0sBgHBBuAEimTfc0GsDAD6EGyCSHT/umRJuAMCHcANEMm/PTXq6uXUAQBgh3ACRjNNSAFAP4QaIZIQbAKiHcANEMsINANRDuAEiGeEGAOoh3ACRjHADAPUQboBIRrgBgHoIN0AkI9wAQD2EGyBSVVdLJ096nhNuAMCHcANEqq+/9kwtFqlTJ3NrAYAwQrgBIpX3lFTnzpLVam4tABBGCDdApPJ+rhQfvQAAfkwPN0uXLlVOTo4SEhI0fPhwbdiwodH1//SnP2nIkCFKSkpSVlaWpk+fruPeX/JAe8LFxAAQkKnhZvXq1ZozZ44eeOABFRQUaMyYMZowYYIKCwsDrr9x40bdfvvtmjFjhnbt2qW//OUv+uijj3TnnXe2ceVAGCDcAEBApoabJ598UjNmzNCdd96p/v3766mnnlJ2draeeeaZgOt/8MEHOu+88zR79mzl5ORo9OjRuvvuu7Vly5YGj+FwOGS32/0eQFTgtBQABGRauHE6ndq6davGjx/vN3/8+PF6//33A24zcuRIHTp0SGvXrpVhGDp69KheeeUVTZw4scHjLFq0SGlpab5HdnZ2q74OwDTe28C5UwoA/JgWbo4dOyaXy6XMzEy/+ZmZmSopKQm4zciRI/WnP/1JU6ZMUXx8vLp166aOHTvqd7/7XYPHmT9/vsrKynyPoqKiVn0dgGm84SYtzdQyACDcmH5BscVi8fvaMIx687x2796t2bNn66GHHtLWrVv1xhtv6MCBA5o5c2aD+7fZbEpNTfV7AFHBG246djSzCgAIO7FmHTgjI0NWq7VeL01paWm93hyvRYsWadSoUfrZz34mSRo8eLCSk5M1ZswYLVy4UFlZWee8biBslJV5poQbAPBjWs9NfHy8hg8frvz8fL/5+fn5GjlyZMBtKisrFRPjX7L1zOBlhmGcm0KBcMVpKQAIyNTTUnPnztXzzz+vF154QXv27NFPfvITFRYW+k4zzZ8/X7fffrtv/UmTJum1117TM888o/3792vTpk2aPXu2vvnNb6p79+5mvQzAHJyWAoCATDstJUlTpkzR8ePHtWDBAhUXF2vgwIFau3atevfuLUkqLi72G/PmjjvuUHl5uZYsWaL77rtPHTt21Lhx4/TLX/7SrJcAmIfTUgAQkMVoZ+dz7Ha70tLSVFZWxsXFiGyJiVJVlXTwoHTmHwIAiFbN+ftt+t1SAELgcHiCjcQ1NwBQB+EGiETeU1IWi0QPJAD4IdwAkch7MXFqqhTDjzEA1MZvRSAScRs4ADSIcANEIu6UAoAGEW6ASMQYNwDQIMINEIk4LQUADSLcAJGI01IA0CDCDRCJOC0FAA0i3ACRiHADAA0i3ACRiGtuAKBBhBsgEnHNDQA0iHADRCJOSwFAgwg3QCTitBQANIhwA0QiTksBQIMIN0Ak8oYbem4AoB7CDRBpDEMqL/c879DB3FoAIAwRboBIU1HhCTgS4QYAAiDcAJHG22sTEyMlJZlbCwCEIcINEGm84SYlRbJYzK0FAMIQ4QaINFxvAwCNItwAkcYbblJTza0DAMIU4QaINPTcAECjCDdApCHcAECjCDdApCHcAECjCDdApCHcAECjCDdApCHcAECjCDdApCHcAECjCDdApCHcAECjCDdApCHcAECjCDdApCHcAECjCDdApLHbPVPCDQAERLgBIg09NwDQKMINEGkINwDQKMINEGkINwDQKMINEGn4VHAAaBThBogkNTVSVZXnOT03ABAQ4QaIJN5eG4lwAwANINwAkcQbbmw2KS7O3FoAIEwRboBIwsXEANAkwg0QSQg3ANAkwg0QSQg3ANAkwg0QSQg3ANAkwg0QSQg3ANAkwg0QSU6d8kxTUsytAwDCGOEGiCSEGwBoEuEGiCQVFZ4p4QYAGkS4ASKJt+cmOdncOgAgjBFugEhCzw0ANIlwA0QSem4AoEmEGyCSeHtuCDcA0CDCDRBJuFsKAJpEuAEiCT03ANAkwg0QSei5AYAmEW6ASELPDQA0iXADRBJ6bgCgSaaHm6VLlyonJ0cJCQkaPny4NmzY0Oj6DodDDzzwgHr37i2bzabzzz9fL7zwQhtVC5iMnhsAaFKsmQdfvXq15syZo6VLl2rUqFF69tlnNWHCBO3evVu9evUKuM33vvc9HT16VMuXL1dubq5KS0tVU1PTxpUDJnC7pcpKz3N6bgCgQRbDMIxQN3Y6nTpw4IDOP/98xcY2PyddcsklGjZsmJ555hnfvP79+2vy5MlatGhRvfXfeOMN3Xzzzdq/f786d+4c1DEcDoccDofva7vdruzsbJWVlSk1NbXZNQOmOXVK6tDB87yiQkpKMrceAGhDdrtdaWlpQf39Dum0VGVlpWbMmKGkpCQNGDBAhYWFkqTZs2dr8eLFQe3D6XRq69atGj9+vN/88ePH6/333w+4zeuvv64RI0boiSeeUI8ePXTBBRfopz/9qU6fPt3gcRYtWqS0tDTfIzs7O8hXCYQZ7/U2FouUmGhuLQAQxkIKN/Pnz9fHH3+sdevWKSEhwTf/qquu0urVq4Pax7Fjx+RyuZSZmek3PzMzUyUlJQG32b9/vzZu3KidO3dqzZo1euqpp/TKK6/onnvuabTWsrIy36OoqCio+oCwU/t6G4vF3FoAIIyFdM3NX//6V61evVqXXnqpLLV+yV500UX64osvmrUvS51f0oZh1Jvn5Xa7ZbFY9Kc//UlpaWmSpCeffFLf/e539fvf/16JAf6btdlsstlszaoJCEvcKQUAQQmp5+arr75S165d682vqKhoMJjUlZGRIavVWq+XprS0tF5vjldWVpZ69OjhCzaS5xodwzB06NChZrwCIAJxpxQABCWkcHPxxRfrn//8p+9rb6B57rnnlJeXF9Q+4uPjNXz4cOXn5/vNz8/P18iRIwNuM2rUKB05ckSnvP/BSvr8888VExOjnj17NvdlAJGFnhsACEpIp6UWLVqkb33rW9q9e7dqamr09NNPa9euXdq8ebPee++9oPczd+5cTZ06VSNGjFBeXp6WLVumwsJCzZw5U5LnepnDhw9r5cqVkqRbb71Vv/jFLzR9+nQ9+uijOnbsmH72s5/p+9//fsBTUkBUoecGAIISUs/NyJEjtWnTJlVWVur888/Xm2++qczMTG3evFnDhw8Pej9TpkzRU089pQULFugb3/iG1q9fr7Vr16p3796SpOLiYt+dWJKUkpKi/Px8nTx5UiNGjNBtt92mSZMm6be//W0oLwOILPTcAEBQWjTOTSRqzn3yQFj5wx+kH/5Quv566bXXzK4GANpUc/5+hzxCscvl0po1a7Rnzx5ZLBb1799f1113XUiD+QEIgrfnhtNSANCokJLIzp07dd1116mkpEQXXnihJM+FvV26dNHrr7+uQYMGtWqRAHT2mhtOSwFAo0K65ubOO+/UgAEDdOjQIW3btk3btm1TUVGRBg8erB/84AetXSMAiZ4bAAhSSD03H3/8sbZs2aJOnTr55nXq1EmPPfaYLr744lYrDkAt9NwAQFBC6rm58MILdfTo0XrzS0tLlZub2+KiAARAzw0ABCWkcPP4449r9uzZeuWVV3To0CEdOnRIr7zyiubMmaNf/vKXstvtvgeAVkLPDQAEJaTTUtdee60k6Xvf+55vdGLvHeWTJk3yfW2xWORyuVqjTgD03ABAUEIKN++8807QnyEFoJXQcwMAQQkp3FxxxRWtXAaAJtFzAwBBCemam5ycHC1YsMDvoxEAnGP03ABAUEIKN3PnztXf/vY39enTR1dffbVefvllORyO1q4NQG18cCYABCWkcHPvvfdq69at2rp1qy666CLNnj1bWVlZmjVrlrZt29baNQKQ+OBMAAhSSOHGa8iQIXr66ad1+PBhPfzww3r++ed18cUXa8iQIXrhhRfUzj6TEzh3DIOeGwAIUos+5bK6ulpr1qzRihUrlJ+fr0svvVQzZszQkSNH9MADD+itt97Sn//859aqFWi/qqokt9vznJ4bAGhUSOFm27ZtWrFihVatWiWr1aqpU6fqN7/5jfr16+dbZ/z48brssstarVCgXfP22khSUpJ5dQBABAgp3Fx88cW6+uqr9cwzz2jy5MmKi4urt85FF12km2++ucUFAtDZ620SEyWr1dxaACDMhRRu9u/fr969eze6TnJyslasWBFSUQDq4HobAAhaSBcUjx07VsePH683/+TJk+rTp0+LiwJQBwP4AUDQQgo3Bw8eDPiZUQ6HQ4cPH25xUQDqYAA/AAhas05Lvf76677n//73v5WWlub72uVy6e2339Z5553XasUBOIOeGwAIWrPCzeTJkyVJFotF06ZN81sWFxen8847T7/+9a9brTgAZ9BzAwBBa1a4cZ8ZZyMnJ0cfffSRMjIyzklRAOqg5wYAghbSNTcHDhwIKtgMGjRIRUVFoRwCQG303ABA0Fr08QtNOXjwoKqrq8/lIYD2gZ4bAAjaOQ03AFoJPTcAEDTCDRAJ6LkBgKARboBIwAjFABA0wg0QCbw9N5yWAoAmEW6ASMA1NwAQtBaHm6qqqgaXPfvss8rMzGzpIQBwzQ0ABC2kcON2u/WLX/xCPXr0UEpKivbv3y9JevDBB7V8+XLferfeequS+WUMtBw9NwAQtJDCzcKFC/XHP/5RTzzxhOLj433zBw0apOeff77VigNwBj03ABC0kMLNypUrtWzZMt12222yWq2++YMHD9ann37aasUBOIOeGwAIWkjh5vDhw8rNza033+12MyIxcC7QcwMAQQsp3AwYMEAbNmyoN/8vf/mLhg4d2uKiANRBzw0ABK1Znwru9fDDD2vq1Kk6fPiw3G63XnvtNX322WdauXKl/vGPf7R2jUD75nRK3h5Rem4AoEkh9dxMmjRJq1ev1tq1a2WxWPTQQw9pz549+vvf/66rr766tWsE2jdvr41EuAGAIITUcyNJ11xzja655prWrAVAIN7rbeLipFp3JwIAAgup52b69Ol6++23ZRhGa9cDoC6utwGAZgkp3Bw/flwTJ05Uz549dd9996mgoKC16wLgxZ1SANAsIYWb119/XSUlJXr44Ye1detWjRgxQhdddJEef/xxHTx4sJVLBNo5em4AoFlC/mypjh076gc/+IHWrVunL7/8UtOnT9f//u//Bhz/BkAL0HMDAM3S4g/OrK6u1pYtW/Thhx/q4MGDfFAm0NrouQGAZgk53Lz77ru66667lJmZqWnTpqlDhw76+9//rqKiotasDwA9NwDQLCHdCt6zZ08dP35c11xzjZ599llNmjRJCQkJrV0bAImeGwBoppDCzUMPPaSbbrpJnTp1au16ANRFzw0ANEtI4eYHP/iB7/mhQ4dksVjUo0ePVisKQC303ABAs4R0zY3b7daCBQuUlpam3r17q1evXurYsaN+8YtfyO12t3aNQPtGzw0ANEtIPTcPPPCAli9frsWLF2vUqFEyDEObNm3SI488oqqqKj322GOtXSfQftFzAwDNElK4efHFF/X888/rO9/5jm/ekCFD1KNHD/3oRz8i3ACtiZ4bAGiWkE5Lff311+rXr1+9+f369dPXX3/d4qIA1ELPDQA0S0jhZsiQIVqyZEm9+UuWLNGQIUNaXBSAWui5AYBmCem01BNPPKGJEyfqrbfeUl5eniwWi95//30VFhbqX//6V2vXCLRv9NwAQLOE1HNz+eWX67PPPtMNN9ygkydP6uuvv9YNN9ygzz//XGPGjGntGoH2jZ4bAGiWkHpuJCk9PV3f+c53dOmll/pu/96yZYsk+V1oDKCF6LkBgGYJKdy88cYbuv3223X8+HEZhuG3zGKxyOVytUpxAETPDQA0U0inpWbNmqWbbrpJR44ckdvt9ns0N9gsXbpUOTk5SkhI0PDhw7Vhw4agttu0aZNiY2P1jW98I4RXAEQQem4AoFlCCjelpaWaO3euMjMzW3Tw1atXa86cOXrggQdUUFCgMWPGaMKECSosLGx0u7KyMt1+++268sorW3R8IOy5XFJVlec5PTcAEJSQws13v/tdrVu3rsUHf/LJJzVjxgzdeeed6t+/v5566illZ2frmWeeaXS7u+++W7feeqvy8vJaXAMQ1ry9NhI9NwAQpJCuuVmyZIluuukmbdiwQYMGDVJcXJzf8tmzZze5D6fTqa1bt+r+++/3mz9+/Hi9//77DW63YsUKffHFF3rppZe0cOHCJo/jcDjkcDh8X9vt9ia3AcKG93qbmBjJZjO3FgCIECGFmz//+c/697//rcTERK1bt04Wi8W3zGKxBBVujh07JpfLVe/UVmZmpkpKSgJus3fvXt1///3asGGDYmODK33RokV69NFHg1oXCDu1r7ep9XMGAGhYSKel/t//+39asGCBysrKdPDgQR04cMD32L9/f7P2ZanzC9swjHrzJMnlcunWW2/Vo48+qgsuuCDo/c+fP19lZWW+R1FRUbPqA0zFnVIA0Gwh9dw4nU5NmTJFMTEhZSNJUkZGhqxWa71emtLS0oAXKpeXl2vLli0qKCjQrFmzJElut1uGYSg2NlZvvvmmxo0bV287m80mG935iFTcKQUAzRZSOpk2bZpWr17dogPHx8dr+PDhys/P95ufn5+vkSNH1ls/NTVVO3bs0Pbt232PmTNn6sILL9T27dt1ySWXtKgeICzRcwMAzRZSz43L5dITTzyhf//73xo8eHC9C4qffPLJoPYzd+5cTZ06VSNGjFBeXp6WLVumwsJCzZw5U5LnlNLhw4e1cuVKxcTEaODAgX7bd+3aVQkJCfXmA1GDnhsAaLaQws2OHTs0dOhQSdLOnTv9lgW6XqYhU6ZM0fHjx7VgwQIVFxdr4MCBWrt2rXr37i1JKi4ubnLMGyCq0XMDAM1mMep+fkKUs9vtSktLU1lZmVJTU80uB2jc0qXSPfdIN94ovfKK2dUAgGma8/c79CuCAZx79NwAQLMRboBwxjU3ANBshBsgnNFzAwDNRrgBwhk9NwDQbIQbIJzRcwMAzUa4AcKZt+eGcAMAQSPcAOHM23PDaSkACBrhBghn9NwAQLMRboBwVl7umXboYG4dABBBCDdAOCPcAECzEW6AcEa4AYBmI9wA4YxwAwDNRrgBwpXDIVVXe54TbgAgaIQbIFx5e20kbgUHgGYg3ADhyhtuEhOl2FhzawGACEK4AcIV19sAQEgIN0C4sts9U8INADQL4QYIV/TcAEBICDdAuCLcAEBICDdAuCLcAEBICDdAuCLcAEBICDdAuPKGm9RUc+sAgAhDuAHCFT03ABASwg0Qrgg3ABASwg0Qrgg3ABASwg0Qrgg3ABASwg0Qrgg3ABASwg0Qrgg3ABASwg0Qrgg3ABASwg0Qrgg3ABASwg0QrvhUcAAICeEGCEdut3TqlOc54QYAmoVwA4Sjioqzzwk3ANAshBsgHHmvt4mJkZKSzK0FACIM4QYIR95wk5IiWSzm1gIAEYZwA4Qj7pQCgJARboBwRLgBgJARboBwVFbmmXbsaGoZABCJCDdAODp50jMl3ABAsxFugHBEuAGAkBFugHDkPS2VlmZuHQAQgQg3QDii5wYAQka4AcIR4QYAQka4AcIRp6UAIGSEGyAc0XMDACEj3ADhiHADACEj3ADhiNNSABAywg0Qjui5AYCQEW6AcGMYfPwCALQA4QYINxUVksvlec5pKQBoNsINEG68p6RiY6WkJFNLAYBIRLgBwk3t620sFjMrAYCIRLgBwg13SgFAixBugHDDnVIA0CKEGyDcEG4AoEUIN0C44bQUALSI6eFm6dKlysnJUUJCgoYPH64NGzY0uO5rr72mq6++Wl26dFFqaqry8vL073//uw2rBdoAPTcA0CKmhpvVq1drzpw5euCBB1RQUKAxY8ZowoQJKiwsDLj++vXrdfXVV2vt2rXaunWrxo4dq0mTJqmgoKCNKwfOIcINALSIxTAMw6yDX3LJJRo2bJieeeYZ37z+/ftr8uTJWrRoUVD7GDBggKZMmaKHHnooqPXtdrvS0tJUVlam1NTUkOoGzqm775aWLZMWLJAefNDsagAgLDTn77dpPTdOp1Nbt27V+PHj/eaPHz9e77//flD7cLvdKi8vV+fOnRtcx+FwyG63+z2AsObtueGaGwAIiWnh5tixY3K5XMrMzPSbn5mZqZKSkqD28etf/1oVFRX63ve+1+A6ixYtUlpamu+RnZ3dorqBc+7ECc+U01IAEBLTLyi21BmB1TCMevMCWbVqlR555BGtXr1aXbt2bXC9+fPnq6yszPcoKipqcc3AOXX8uGeakWFuHQAQoWLNOnBGRoasVmu9XprS0tJ6vTl1rV69WjNmzNBf/vIXXXXVVY2ua7PZZLPZWlwv0GaOHfNMCTcAEBLTem7i4+M1fPhw5efn+83Pz8/XyJEjG9xu1apVuuOOO/TnP/9ZEydOPNdlAm2PcAMALWJaz40kzZ07V1OnTtWIESOUl5enZcuWqbCwUDNnzpTkOaV0+PBhrVy5UpIn2Nx+++16+umndemll/p6fRITE5XGxZeIBpWVnodEuAGAEJkabqZMmaLjx49rwYIFKi4u1sCBA7V27Vr17t1bklRcXOw35s2zzz6rmpoa3XPPPbrnnnt886dNm6Y//vGPbV0+0Pq819vExUkdOphbCwBEKFPHuTED49wgrBUUSMOGSd26ScXFZlcDAGEjIsa5ARAA19sAQIsRboBwQrgBgBYj3ADhhDFuAKDFCDdAOKHnBgBajHADhBPCDQC0GOEGCCeEGwBoMcINEE4INwDQYoQbIJwQbgCgxQg3QDgh3ABAixFugHBhGIQbAGgFhBsgXFRUSA6H5znhBgBCRrgBwoW318Zmk5KSzK0FACIY4QYIF6WlnmlGhmSxmFsLAEQwwg0QLryfAp6VZW4dABDhCDdAuCgp8UwJNwDQIoQbIFzQcwMArYJwA4QLb89Nt27m1gEAEY5wA4QLem4AoFUQboBwQbgBgFZBuAHCBaelAKBVEG6AcOBySUeOeJ736GFuLQAQ4Qg3QDg4etQTcKxWTksBQAsRboBwUFTkmXbv7gk4AICQEW6AcHDokGfas6e5dQBAFCDcAOHA23OTnW1uHQAQBQg3QDjw9twQbgCgxQg3QDgoLPRMOS0FAC1GuAHCwf79nmmfPubWAQBRgHADhIMDBzzTnBxz6wCAKEC4Acx28qT09dee54QbAGgxwg1gNm+vTdeuUkqKubUAQBQg3ABm815vQ68NALQKwg1gtr17PdPcXHPrAIAoQbgBzPbpp55pv37m1gEAUYJwA5iNcAMArYpwA5jJMKTPPvM8J9wAQKsg3ABmOnrUcyt4TAzX3ABAKyHcAGb65BPPtG9fKSHB3FoAIEoQbgAzbd/umQ4ZYmoZABBNCDeAmT7+2DMl3ABAqyHcAGai5wYAWh3hBjBLWZm0Z4/n+YgR5tYCAFGEcAOY5cMPPbeC5+RImZlmVwMAUYNwA5hl82bPNC/P3DoAIMoQbgCzrFvnmY4aZWoZABBtCDeAGSorpfff9zy/6ipzawGAKEO4Acywfr3kdErZ2Z4B/AAArYZwA5jhb3/zTCdMkCwWc2sBgChDuAHamssl/fWvnufXX29qKQAQjQg3QFt7+22ppETq1EkaN87sagAg6hBugLb2/POe6W23SfHx5tYCAFGIcAO0pQMHpFdf9Ty/805zawGAKEW4AdrSwoWS2y2NH8/nSQHAOUK4AdrKf/4jrVjhef7oo+bWAgBRjHADtIWyMmnqVM9nSd12m3TppWZXBABRi3ADnGsnTkjXXit9/rnUo4f029+aXREARLVYswtYunSpfvWrX6m4uFgDBgzQU089pTFjxjS4/nvvvae5c+dq165d6t69u37+859r5syZbVhxYGWVTh075ZS9qlqpiXHKSI5XVY1bJyudkiRDUvnpGiXbrEq2xapjYpzSkuJVVunU1xVOVVa7VOV0qXNyvBwut8pP1yglIVYxFs8Yb/ExMTIkVVa7VOlwKTXR861zG4YSY62yxFhU4ahRpdOlDgmxio2J0clKp5JtsUqOt6rGMFTpPLttvDVGFQ6n0hJtOuV0yX66WmmJcUqOt6rstENWq+fYCbGe47oN6XTdGqtqlBxvVYotVlU1LtlP1yjZFitrjGSLtarS6VKFo1rpyTbFSLJYLKoxDJ12ulTpdCktKVYJsVZVVnuOn5oQp5R4qypqXDp1ukadkuPlrHHrlKNGKbZYySJZ5GkP73YxkuJjY3z1VTo8r98WF6Nql1uGpKRYqyqqXSqr9LzGlHirqg1DVdVunaryfE8S46ySPPuPjbHIcBtSjEWnnC6VV3m2i7fG6OsKp5ITYpUcZ1WF06VTVdVK72CTs8bTHh0SYhVnjdHxUw6lJMSp887t6nzv3Yr77FO5UtNUuPxPqnbGyiixn2kvz7FjYyw6dsohW5xVCXFWxcdYVFHjkuH2vHcqHGf3fbLSqcT4WFnOFGyzxqjGcCvWEqOvK51KjPN8T07XuGSv9GwXHxujE2eWJcZZPe8rWXTitFMpCWffrycqnb73aVK8VZ2S4pWWFO97j391yqEatyHD8NTkeY9aFBtjUXry2XUD/Vyk2GKVEBujiuoaT+GGVOmsUYcET9uerFVL3f14HTl5WmWnq3WqqloZKTY5XW5VOl1KTYxTii1WFY4alZ0++zPo/RkrLXfo5OlqpdisSomPldswVOF0qcLpUsfEOKUmxgXc1vsaTlZWq8JZ41u/awdbgzWeC952LDvtVJKt4TY/aq/SiQqn7FU1Sk2MVaekeGWmJrRZfbV//7Vl+zS3rnCot7VqCHY/zTleOLRPS5kablavXq05c+Zo6dKlGjVqlJ599llNmDBBu3fvVq9eveqtf+DAAX3729/WXXfdpZdeekmbNm3Sj370I3Xp0kU33nijCa/A48jJ05r36ifasPeYJCkp3qoX7rhYz6//Qrde2lsrNh7Qhn3HfeuPyk3XveP6qmdagg6XVem37+xVQeFJ/faWoXryrc+1qda64/p10f0T+qvYXqUl7+7zWzYmN0MzxuQoMS5GS97ZV+8Y00fl6O6XtmrJLcP0+3f3+i0f16+LHrp2gOav2aGNteaPzk3XwsmDNHvVNj0wsb9iLBa53IZ+9+6+BmscnZuuO0blaPaqAiXFW/XyDy7Vf6/ZoYLCk/r9rcNkGFXqnGJTadnZ15AUb9VvbxmqFZsO1NvXQ5MGqNxRU+84o3LTdefoPkqKt+q59Z9qat55Soq3+uqr2zazxuWqqtqllZsP6pZLemv2qgJJ0vJpI7T03frtde/YvrLGSLExUqfkBD2wZke9488YnSN7VY2e37hfBYUntfS2YXr6rzv927Znou6NLdaR3/1B/fZsksUw5OzSVQvvfVLjzuuv5f/YXe/Ys8bmKj3Fpluf+0AXduug2eP6qlNyvBb8c1e9GqaPytHs5f/R0F4dNX1UjlZ9+KV+/q3+euKtT3Xj8GxNXfUfDevV0fc9qXS6fNtNXeXZzvtaTzlcmvHiFi25dZh+/87egO/T3p2TJEkP/nWnbr6kV73vmXffi9bu0aPXDVT3jomS6v9ceL+/D147QL98Y4/e+fSrevu45bkPNaJ3Jy2+cbBvP15fHq/wva9+e8tQPfX23gbfh5VOl67u31UPXnuRHlizUxv2na1hTG6GfjT2fM14cYsqnS7fvOmjz9OsP3u2vaxvhhbfOFgxkg5+XanfveN/rDF9M/TLADWeC4HaMVCbFx6v0Pw679nRuel6/PpB6pWe3Kb1eduvLdqnuXUtnDxQC/6xW2/tKfWb35b1tlabBbuf5hwvXL+fzWUxDMMw6+CXXHKJhg0bpmeeecY3r3///po8ebIWLVpUb/158+bp9ddf1549e3zzZs6cqY8//libN28O6ph2u11paWkqKytTampqi19DWaVTs1YV+L0RZo3LVUHhCQ3t1UnbC0/4hQevUbnp+smQjvrfd/Zoy8GTmjayt3YdLtPWL0/4rTctr7e6drDp3U9LteXMstqD9V/cu5OuuCBD//Pm537bWWRoeO+O+u6wbL2yrUjbDvrv97/yemvP4TJtKzzpv53h2e7HV/VVQeFJWQxD6z7/SgWFJ3XbJb21u7hMBV/W2UaGhvXqqP5ZqerfrYNeKzisgi9P6NZLeqlrB5t6dkrUoa8rtX6vZz+SdOslvfTpkTIVFJXVO/6Px+Vqw75j2lZ4Uhb5vz3vHZerjZ9/pQuzUtU1xfOfxIa9X+njOvuRYWhodkeNzs1Q6SmHPispV79uKZKkT0vK9XFRmSx13vpDstM05vx0XdCtg17YeEAfH6q/zjey0zQqp5NefGuPbrowTSWHvtKhoq+UVX5M2WVH1ftEsS4q3a84t8u3zYFvXa8nrr5T5w88Xx8XnvALEF6jctN17aAsdU1N0IwXt2hMbromDMrSf6/ZGXDdob06ack7+3zPtxee0PRROXph04F6y5a8sy/gdtcOypIhKTM1QS/UCSx+dQ3uLhnS4bLTKig80eB6Q3t10idFJ/W7W4ZKUr2fC6/Ruen6Rq26Ar2uy/pm6He3DPX9t3jk5Gn97JWPtWnfcd/PV2N1LHlnX9DreY3JTdeQWvMu65uhH43NrRdsvOrWeC4E+v1S9zV8UnRSi28c7GufukbnpuvX3/vGOenBaay+tmifUOpq6P3XVvW2VpsFu5/mHC9cv59ezfn7bVrPjdPp1NatW3X//ff7zR8/frze935ach2bN2/W+PHj/eZdc801Wr58uaqrqxUXF1dvG4fDIYfD4fvabre3QvVnHTvlrPdGGJrdUUve2afvj8qp9wPktWnfcS199TE9/cY/PDP+0MABzsy/rok6vtPIspGBZj7XxA4flHqeeXqtd97zTWxzhu9S2RfOzhsiaWLtlV5Qw1ZIExpZ9u06sxpctwV+0cTy8U0sP5TaVYnXT9Lx/5quoh65+teLW7T8zPsikE37juv7o3LUNdUmSdqw77juGJXT6Lq1ny95Z5/mTegXcFlj20lS11RbwD+KgdZrqv4l7+zTsVOeU7GBfkFK0sZ9xzU9wGurfaz1e4/p2Cnn2V+6p6t9NQ4Noh2bs55X3TZfv/eYfvatCxtsm7o1nguBfr941W7z2u1T18Z9x3WiwnlOwk1j9bVF+zSksboaev+1Vb2t1WbB7qc5xwvX72coTAs3x44dk8vlUmZmpt/8zMxMlZSUBNympKQk4Po1NTU6duyYsrKy6m2zaNEiPXoOb7u1V1XXm+eocftNG1JtjdXpWM8fs/hYi5w1how6n6EYb42RLJZ6+zJqfdhiQmyMTgc4liGLkuKtvq732h/QmBhv1WmnS4G67QyLRSm2WLnPLKw4s33ymWsa6h7fcyx5rr+QxdcmKQmesBljschtGLI7zvZmpCbEyl5V498NdUaHxHjZT59t19rHSkuMU9npar8fsJOVThkBdmRYLOqU5KnhRGW157nFoq8rau/bf5v05HjFxMToq3KH33781kmx6UtnjLp1T9eOMrcq4hP1VXInFaVlqqhjpnZmnq9DHbtp1V2emOc4c91VU+8HR41bp6pcfl83tm7d595tAy0LZrtgjhXMeuVV1QHfV8Hss/b88lo/W7XfD8G0Y3PWa2xeU21THuDnvzUF+v1Sm7fe2u0TeD81rVaT/34bP+65bp+GBNtudbVFva3VZsHupznHC9fvZyhMv6DYUvePpGHUm9fU+oHme82fP19z5871fW2325WdnR1qufWkJtTvLbLFxvhNG1L87ApN+t0mSZ7rQGa8uKXeOsunjZCkgMtqr9PQ8r/fO8p3jGC3kaR//XiMjpw87XfsprZZPm2Euqba/F6T5PmPv9Tu8Nu2sX0Fs8y779r1NbS+d51g2zKrY6K+/fSGRtfx7q+xfaUkeC5SrnQG936wxcb4tmlq/drLvM+92wZaFsx2wRwrmPU6BPiZCHaftefX3k9qYlzAdRrbR7DrNTavqbYJ5rW2RKDfL7V5663dPoH3c25+1TdV37lun4YE2251tUW9rdVmwe6nOccL1+9nKEy7FTwjI0NWq7VeL01paWm93hmvbt26BVw/NjZW6enpAbex2WxKTU31e7SmjJR4XdY3w29eQdFJjcpNV0HRSY3JDVzXqNx0VThqfMu929RVUHRSpfaqgMskz4WQR+1VDR6j1O5ocL+jG9jn6Nx0JcbF6Ki9yu/YDdXoPZanVodvvwVFJ3XUXqUKR02919DYvkrtVRqTmxFw2VF7lcb4jlXVRNukq9Re5ff9aOo1lNqrZJHRYNuMyU33tbfn+xu4Tm/b137tTa9fpVK7w6/2htYtKDrp93x0re913WUNbVdqrzrzPQ78HvGtV+5QabkjqO//ZX0zlJESH/Dnwmt0nboC1efdj1daYpzf+6qpOrzrNfR9rNs2knzvK6/L+maowuFq8Fh1azwXGmvH2m1eu33qGp2brk7J56bOxupri/ZpSCjvv7aqt7XaLNj9NOd44fr9DIVp4SY+Pl7Dhw9Xfn6+3/z8/HyNHBnwKhHl5eXVW//NN9/UiBEjAl5v0xbSkuK1+MbBfm+IFzYe0L3j+urTI3ZNH51T7w/a2bulEjVrXF+Nyk3XCxsPaPqonHq/SHcfKdPw8zpr1tjcesu8d0ud3yU54DGmj8rRvFc/0b1j+9ZbvvtImRZOHlTvF+Lo3HQtvH6QZq8q0PldkpXbNUX3jm28xtFnjvXCxgOa9+oneuQ7AzT6zPpZaYmyWqRv9vF/Dd59BTr+iJzOmjGm/nFG5aYr60ybfXrEru4dE/3qq9s2s8b1VfeOidpzpMxX3wsbD2jW2FyN6RvgezK2r3K7pqjKWROwbUblpmv66BxlpSX6Xt+MMTkB9+Vte89r99wNtftIWYPrzxrbVyNyOmveq594vh7XV8PP6xywDbyvxft8z5EyPTRpgF7ZWuRbVvt7Emg772vNSkv0vEfG9Q3cJuP6auwFXXTFBV30abE94Pffu+/Piu365Y2DlXbm9vG6Pxfe7+9DkwZo95GygPt4YeMBXXbmTqTapx67d0zUY9cP8rV7U+9DSfqs2K7Hrx9U73WNyc3QrLF9fet5500ffXZbbw3ndU7SveMCvL8C1HguNNSOddu8e8dEPX594J/nx68fdM5uB2+ovkDfw7bUWF2PXz9InxXb681vq3pbq82C3U9zjheu389QmHq31OrVqzV16lT94Q9/UF5enpYtW6bnnntOu3btUu/evTV//nwdPnxYK1eulOS5FXzgwIG6++67ddddd2nz5s2aOXOmVq1aFfSt4K19t5SXd1yA8qpqdUiIU0ZKgHFuzowLkxwfq45JTYxzU+UZ2yXGIs9YJnXGuemQ6BnnJNA4NykJsYo7M85Nki1WKUGMc+OtO6XOODfe7tuGxrlJOjPOjaM549yceQ11x7npkBCnDg2Mc5Nsi/VdMhRTe5wbi+e6pNrj3KQkxCrBO86NISXFeca5qX2M2uPcJNmsSmpinJvUhDjZYj3jyCTbao1z46hWekr9cW6+rnAo2eY5lkWSS1KN25CjxiWrxXMPmP2059iJcVbFnRnnJv7MODSBxrlJSfB83wKNc1PtdisuJvA4NykJsbLFerazndm/9cw4NydPO5VsO/t+9Y5zk2SzKrmBcW5cbkNu7zg3tlhZYyyyNjHOTXlVtZJrjXNjkUWGId+4TPHWGJXVqqWpcW4qHNXqnGxTtcut006X572b4LkmzPt99u7HO85N2elqJcVb1cF2dpybSqdLabXGuam7rfc1eMe58a5v3jg3ntfQUJv7jXOTEKtOyW07zk3t33/h8IewobrCod7WqiHY/TTneOHQPoE05++3qeFG8gzi98QTT6i4uFgDBw7Ub37zG1122WWSpDvuuEMHDx7UunXrfOu/9957+slPfuIbxG/evHnNGsTvXIUbAABw7kRUuGlrhBsAACJPc/5+89lSAAAgqhBuAABAVCHcAACAqEK4AQAAUYVwAwAAogrhBgAARBXCDQAAiCqEGwAAEFUINwAAIKrEml1AW/MOyGy325tYEwAAhAvv3+1gPlih3YWb8vJySVJ2drbJlQAAgOYqLy9XWlpao+u0u8+WcrvdOnLkiDp06CCL92OmTWK325Wdna2ioiI+56oRtFPTaKOm0UZNo42aRhsF51y0k2EYKi8vV/fu3RUT0/hVNe2u5yYmJkY9e/Y0uww/qamp/JAEgXZqGm3UNNqoabRR02ij4LR2OzXVY+PFBcUAACCqEG4AAEBUIdyYyGaz6eGHH5bNZjO7lLBGOzWNNmoabdQ02qhptFFwzG6ndndBMQAAiG703AAAgKhCuAEAAFGFcAMAAKIK4QYAAEQVwo1JHnvsMY0cOVJJSUnq2LFjwHUKCws1adIkJScnKyMjQ7Nnz5bT6WzbQk22dOlS5eTkKCEhQcOHD9eGDRvMLsk069ev16RJk9S9e3dZLBb99a9/9VtuGIYeeeQRde/eXYmJibriiiu0a9cuc4o1yaJFi3TxxRerQ4cO6tq1qyZPnqzPPvvMb5323k7PPPOMBg8e7BtcLS8vT//61798y9t7+wSyaNEiWSwWzZkzxzePdpIeeeQRWSwWv0e3bt18y81sI8KNSZxOp2666Sb98Ic/DLjc5XJp4sSJqqio0MaNG/Xyyy/r1Vdf1X333dfGlZpn9erVmjNnjh544AEVFBRozJgxmjBhggoLC80uzRQVFRUaMmSIlixZEnD5E088oSeffFJLlizRRx99pG7duunqq6/2fZ5ae/Dee+/pnnvu0QcffKD8/HzV1NRo/Pjxqqio8K3T3tupZ8+eWrx4sbZs2aItW7Zo3Lhxuu6663x/dNp7+9T10UcfadmyZRo8eLDffNrJY8CAASouLvY9duzY4VtmahsZMNWKFSuMtLS0evPXrl1rxMTEGIcPH/bNW7VqlWGz2YyysrI2rNA83/zmN42ZM2f6zevXr59x//33m1RR+JBkrFmzxve12+02unXrZixevNg3r6qqykhLSzP+8Ic/mFBheCgtLTUkGe+9955hGLRTQzp16mQ8//zztE8d5eXlRt++fY38/Hzj8ssvN3784x8bhsH7yOvhhx82hgwZEnCZ2W1Ez02Y2rx5swYOHKju3bv75l1zzTVyOBzaunWriZW1DafTqa1bt2r8+PF+88ePH6/333/fpKrC14EDB1RSUuLXXjabTZdffnm7bq+ysjJJUufOnSXRTnW5XC69/PLLqqioUF5eHu1Txz333KOJEyfqqquu8ptPO521d+9ede/eXTk5Obr55pu1f/9+Sea3Ubv74MxIUVJSoszMTL95nTp1Unx8vEpKSkyqqu0cO3ZMLperXhtkZma2i9ffXN42CdReX375pRklmc4wDM2dO1ejR4/WwIEDJdFOXjt27FBeXp6qqqqUkpKiNWvW6KKLLvL90Wnv7SNJL7/8srZt26aPPvqo3jLeRx6XXHKJVq5cqQsuuEBHjx7VwoULNXLkSO3atcv0NqLnphUFuriq7mPLli1B789isdSbZxhGwPnRqu5rbW+vv7lor7NmzZqlTz75RKtWraq3rL2304UXXqjt27frgw8+0A9/+ENNmzZNu3fv9i1v7+1TVFSkH//4x3rppZeUkJDQ4HrtvZ0mTJigG2+8UYMGDdJVV12lf/7zn5KkF1980beOWW1Ez00rmjVrlm6++eZG1znvvPOC2le3bt304Ycf+s07ceKEqqur6yXhaJSRkSGr1Vqvl6a0tLRdvP7m8t6hUFJSoqysLN/89tpe9957r15//XWtX79ePXv29M2nnTzi4+OVm5srSRoxYoQ++ugjPf3005o3b54k2mfr1q0qLS3V8OHDffNcLpfWr1+vJUuW+O7Aa+/tVFdycrIGDRqkvXv3avLkyZLMayN6blpRRkaG+vXr1+ijsf8CasvLy9POnTtVXFzsm/fmm2/KZrP5/cBFq/j4eA0fPlz5+fl+8/Pz8zVy5EiTqgpfOTk56tatm197OZ1Ovffee+2qvQzD0KxZs/Taa6/pnXfeUU5Ojt9y2ikwwzDkcDhonzOuvPJK7dixQ9u3b/c9RowYodtuu03bt29Xnz59aKcAHA6H9uzZo6ysLPPfS+f8kmUE9OWXXxoFBQXGo48+aqSkpBgFBQVGQUGBUV5ebhiGYdTU1BgDBw40rrzySmPbtm3GW2+9ZfTs2dOYNWuWyZW3nZdfftmIi4szli9fbuzevduYM2eOkZycbBw8eNDs0kxRXl7ue59IMp588kmjoKDA+PLLLw3DMIzFixcbaWlpxmuvvWbs2LHDuOWWW4ysrCzDbrebXHnb+eEPf2ikpaUZ69atM4qLi32PyspK3zrtvZ3mz59vrF+/3jhw4IDxySefGP/93/9txMTEGG+++aZhGLRPQ2rfLWUYtJNhGMZ9991nrFu3zti/f7/xwQcfGNdee63RoUMH3+9oM9uIcGOSadOmGZLqPd59913fOl9++aUxceJEIzEx0ejcubMxa9Yso6qqyryiTfD73//e6N27txEfH28MGzbMd0tve/Tuu+8GfM9MmzbNMAzPrZcPP/yw0a1bN8NmsxmXXXaZsWPHDnOLbmOB2keSsWLFCt867b2dvv/97/t+prp06WJceeWVvmBjGLRPQ+qGG9rJMKZMmWJkZWUZcXFxRvfu3Y0bbrjB2LVrl2+5mW1kMQzDOPf9QwAAAG2Da24AAEBUIdwAAICoQrgBAABRhXADAACiCuEGAABEFcINAACIKoQbAAAQVQg3AAAgqhBuAABAVCHcAACAqEK4AQAAUYVwAyAsHDx4UBaLpd7jiiuuaHS748eP65ZbblHPnj2VlJSkQYMGadWqVX7ruN1u/fKXv1Rubq5sNpt69eqlxx57zLf80KFDuvnmm9W5c2clJydrxIgR+vDDD8/FywTQBmLNLgAAJCk7O1vFxcW+r0tKSnTVVVfpsssua3S7qqoqDR8+XPPmzVNqaqr++c9/aurUqerTp48uueQSSdL8+fP13HPP6Te/+Y1Gjx6t4uJiffrpp5KkU6dO6fLLL1ePHj30+uuvq1u3btq2bZvcbve5e7EAzik+FRxA2KmqqtIVV1yhLl266G9/+5tiYprXyTxx4kT1799f//M//6Py8nJ16dJFS5Ys0Z133llv3WXLlumnP/2pDh48qM6dO7fWSwBgInpuAISdGTNmqLy8XPn5+U0GG5fLpcWLF2v16tU6fPiwHA6HHA6HkpOTJUl79uyRw+HQlVdeGXD77du3a+jQoQQbIIoQbgCElYULF+qNN97Qf/7zH3Xo0KHJ9X/961/rN7/5jZ566ikNGjRIycnJmjNnjpxOpyQpMTGx0e2bWg4g8nBBMYCw8eqrr2rBggX6v//7P51//vlBbbNhwwZdd911+q//+i8NGTJEffr00d69e33L+/btq8TERL399tsBtx88eLC2b9+ur7/+ulVeAwDzEW4AhIWdO3fq9ttv17x58zRgwACVlJSopKSkydCRm5ur/Px8vf/++9qzZ4/uvvtulZSU+JYnJCRo3rx5+vnPf66VK1fqiy++0AcffKDly5dLkm655RZ169ZNkydP1qZNm7R//369+uqr2rx58zl9vQDOHcINgLCwZcsWVVZWauHChcrKyvI9brjhhka3e/DBBzVs2DBdc801uuKKK3xBpe469913nx566CH1799fU6ZMUWlpqSQpPj5eb775prp27apvf/vbGjRokBYvXiyr1XquXiqAc4y7pQAAQFSh5wYAAEQVwg2AsDZhwgSlpKQEfDz++ONmlwcgDHFaCkBYO3z4sE6fPh1wWefOnRmfBkA9hBsAABBVOC0FAACiCuEGAABEFcINAACIKoQbAAAQVQg3AAAgqhBuAABAVCHcAACAqPL/AYOjKnFTECM5AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.scatterplot(data=movement, x='z_acc', y='move_type');\n", "plt.plot(np.arange(-10,50,0.1), sigmoid(np.arange(-10,50,0.1), 9, 2), 'r');" ] }, { "cell_type": "markdown", "id": "aa9ae5f8-24e2-45e6-971c-4dba5e51b917", "metadata": {}, "source": [ "Now we have a continuous result: for example at the acceleration 9 the estimation is 0.5. This number actually offers a **probability** that a point belongs to the category ```1```: we are relatively sure that points on the far right belong to category ```1``` and those on the far left not (and thus belong to category ```0```) and for the points in the middle we are unsure.\n", "\n", "The advantage of this function is that now if we slightly modify ```w``` or ```d```, the error will change **smoothly** and we will be able to estimate slopes for gradient descent!\n", "\n", "In fact measuring the error simply as the sum of errors $\\texttt{sigmoid}(x_i, d, w) - y_i$ is still not optimal (the slope is not zero but still very flat) and usually one uses another **metric** called the **cross entropy loss**." ] }, { "cell_type": "markdown", "id": "8274900f-215f-4c3e-bab0-54b9b56b3ed9", "metadata": {}, "source": [ "## Logistic regression in scikit-learn\n", "\n", "Now that we understand why we can't use simple linear regression, let's have a look at how to do logistic regression in scikit-learn. Again we create the model and fit it with our data:" ] }, { "cell_type": "code", "execution_count": 16, "id": "cc68f7a0-5c25-4fee-a3b9-2ecf7228bd31", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
LogisticRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "LogisticRegression()" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "log_model = linear_model.LogisticRegression()\n", "log_model.fit(X=movement[['z_acc']], y=movement['move_type'])" ] }, { "cell_type": "markdown", "id": "2d0b8620-8666-4165-bc6d-be123ab13482", "metadata": {}, "source": [ "Now we can use our trained model for predictions. In this case we can both output the probabilities (the actual sigmoid curve) or directly the category:" ] }, { "cell_type": "code", "execution_count": 17, "id": "0fa10602-2231-49b1-bb29-e87d5da07fa5", "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/gw18g940/mambaforge/envs/DAVPy2023/lib/python3.10/site-packages/sklearn/base.py:465: UserWarning: X does not have valid feature names, but LogisticRegression was fitted with feature names\n", " warnings.warn(\n", "/Users/gw18g940/mambaforge/envs/DAVPy2023/lib/python3.10/site-packages/sklearn/base.py:465: UserWarning: X does not have valid feature names, but LogisticRegression was fitted with feature names\n", " warnings.warn(\n" ] } ], "source": [ "pred_prob = log_model.predict_proba(np.arange(-10,50,0.1)[:, np.newaxis])\n", "pred = log_model.predict(np.arange(-10,50,0.1)[:, np.newaxis])" ] }, { "cell_type": "code", "execution_count": 18, "id": "8660e468-89be-4b72-97fc-5ca43cfde667", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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bgJ9qRlSufPcnPv7ryr8ISwsrqoQr7tiKOl5SnO9qlA+BSnN329LkxswJ/F74YUXiI+Pp02bNkyfPp0ePXoAcNddd3HgwAFWrFjh2n/lypX885//dE3iN3HixFJN4ldRyY2IiIhUnGqV3FQ2JTciIiLVT2n+flvW50ZERESkIii5EREREY+i5EZEREQ8ipIbERER8ShKbkRERMSjKLkRERERj6LkRkRERDyKkhsRERHxKEpuRERExKP4Wh1AZXNOyJycnFzMniIiIlJVOP9ul+TGCl6X3KSkpAAQFRVlcSQiIiJSWikpKYSHhxe5j9fdWyonJ4ejR49So0YNbM7bTFskOTmZqKgoDh06pPtcFUHlVDyVUfFURsVTGRVPZVQyFVFOhmGQkpJCw4YN8fEpuleN19Xc+Pj40LhxY6vDyCUsLEw/JCWgciqeyqh4KqPiqYyKpzIqGXeXU3E1Nk7qUCwiIiIeRcmNiIiIeBQlNxYKCAjgySefJCAgwOpQqjSVU/FURsVTGRVPZVQ8lVHJWF1OXtehWERERDybam5ERETEoyi5EREREY+i5EZEREQ8ipIbERER8ShKbizy3HPP0aVLF4KDg4mIiChwn7i4OPr3709ISAh16tRh3LhxZGZmVm6gFps1axbR0dEEBgbSsWNHVq9ebXVIllm1ahX9+/enYcOG2Gw2vvjii1zbDcPgqaeeomHDhgQFBdGzZ0927NhhTbAWmTp1Kpdccgk1atSgXr16DBgwgN27d+fax9vLafbs2bRr1841uVrnzp355ptvXNu9vXwKMnXqVGw2G+PHj3etUznBU089hc1my/Vo0KCBa7uVZaTkxiKZmZnceuut3HfffQVudzgc9OvXj9TUVNasWcNHH33EZ599xoMPPljJkVpn0aJFjB8/nscee4ytW7fSvXt3+vbtS1xcnNWhWSI1NZX27dszc+bMAre/8MILvPLKK8ycOZNNmzbRoEEDrrnmGtf91LzBypUruf/++9mwYQPLli0jOzub3r17k5qa6trH28upcePGTJs2jc2bN7N582Z69erFDTfc4Pqj4+3lk9emTZt46623aNeuXa71KidT69atiY+Pdz22b9/u2mZpGRliqXnz5hnh4eH51i9dutTw8fExjhw54lq3cOFCIyAgwEhKSqrECK1z6aWXGqNGjcq1rmXLlsYjjzxiUURVB2AsXrzY9TonJ8do0KCBMW3aNNe69PR0Izw83PjPf/5jQYRVQ2JiogEYK1euNAxD5VSYmjVrGnPmzFH55JGSkmI0a9bMWLZsmXHFFVcYDzzwgGEY+h45Pfnkk0b79u0L3GZ1Ganmpopav349bdq0oWHDhq51ffr0ISMjg9jYWAsjqxyZmZnExsbSu3fvXOt79+7NunXrLIqq6tq/fz8JCQm5yisgIIArrrjCq8srKSkJgFq1agEqp7wcDgcfffQRqampdO7cWeWTx/3330+/fv24+uqrc61XOZ21Z88eGjZsSHR0NLfffjv79u0DrC8jr7txZnWRkJBA/fr1c62rWbMm/v7+JCQkWBRV5Tl+/DgOhyNfGdSvX98r3n9pOcukoPI6ePCgFSFZzjAMJkyYQLdu3WjTpg2gcnLavn07nTt3Jj09ndDQUBYvXsyFF17o+qPj7eUD8NFHH7FlyxY2bdqUb5u+R6bLLruMBQsW0Lx5c44dO8bkyZPp0qULO3bssLyMVHPjRgV1rsr72Lx5c4nPZ7PZ8q0zDKPA9Z4q73v1tvdfWiqvs8aMGcMvv/zCwoUL823z9nJq0aIF27ZtY8OGDdx3330MHTqUnTt3urZ7e/kcOnSIBx54gPfff5/AwMBC9/P2curbty8333wzbdu25eqrr+brr78GYP78+a59rCoj1dy40ZgxY7j99tuL3Kdp06YlOleDBg3YuHFjrnV///03WVlZ+TJhT1SnTh3sdnu+WprExESveP+l5RyhkJCQQGRkpGu9t5bX2LFjWbJkCatWraJx48au9Sonk7+/PzExMQB06tSJTZs28eqrrzJx4kRA5RMbG0tiYiIdO3Z0rXM4HKxatYqZM2e6RuB5eznlFRISQtu2bdmzZw8DBgwArCsj1dy4UZ06dWjZsmWRj6L+CzhX586d+fXXX4mPj3et+/777wkICMj1A+ep/P396dixI8uWLcu1ftmyZXTp0sWiqKqu6OhoGjRokKu8MjMzWblypVeVl2EYjBkzhs8//5zly5cTHR2da7vKqWCGYZCRkaHyOeOqq65i+/btbNu2zfXo1KkTd955J9u2beP8889XORUgIyODXbt2ERkZaf13qcK7LEuBDh48aGzdutV4+umnjdDQUGPr1q3G1q1bjZSUFMMwDCM7O9to06aNcdVVVxlbtmwxfvjhB6Nx48bGmDFjLI688nz00UeGn5+fMXfuXGPnzp3G+PHjjZCQEOPAgQNWh2aJlJQU1/cEMF555RVj69atxsGDBw3DMIxp06YZ4eHhxueff25s377duOOOO4zIyEgjOTnZ4sgrz3333WeEh4cbK1asMOLj412PtLQ01z7eXk6TJk0yVq1aZezfv9/45ZdfjEcffdTw8fExvv/+e8MwVD6FOXe0lGGonAzDMB588EFjxYoVxr59+4wNGzYY119/vVGjRg3X72gry0jJjUWGDh1qAPkeP/30k2ufgwcPGv369TOCgoKMWrVqGWPGjDHS09OtC9oCb7zxhtGkSRPD39/fuPjii11Der3RTz/9VOB3ZujQoYZhmEMvn3zySaNBgwZGQECA0aNHD2P79u3WBl3JCiofwJg3b55rH28vp3vuucf1M1W3bl3jqquuciU2hqHyKUze5EblZBgDBw40IiMjDT8/P6Nhw4bGTTfdZOzYscO13coyshmGYVR8/ZCIiIhI5VCfGxEREfEoSm5ERETEoyi5EREREY+i5EZEREQ8ipIbERER8ShKbkRERMSjKLkRERERj6LkRkRERDyKkhsRERHxKEpuRERExKMouRERERGPouRGRKqEAwcOYLPZ8j169uxZ5HEnTpzgjjvuoHHjxgQHB9O2bVsWLlyYa5+cnByef/55YmJiCAgI4LzzzuO5555zbT98+DC33347tWrVIiQkhE6dOrFx48aKeJsiUgl8rQ5ARAQgKiqK+Ph41+uEhASuvvpqevToUeRx6enpdOzYkYkTJxIWFsbXX3/N4MGDOf/887nssssAmDRpEm+//TbTp0+nW7duxMfH89tvvwFw6tQprrjiCho1asSSJUto0KABW7ZsIScnp+LerIhUKN0VXESqnPT0dHr27EndunX58ssv8fEpXSVzv379aNWqFS+99BIpKSnUrVuXmTNnMnz48Hz7vvXWWzz00EMcOHCAWrVquestiIiFVHMjIlXOsGHDSElJYdmyZcUmNg6Hg2nTprFo0SKOHDlCRkYGGRkZhISEALBr1y4yMjK46qqrCjx+27ZtdOjQQYmNiAdRciMiVcrkyZP59ttv+fnnn6lRo0ax+7/88stMnz6dGTNm0LZtW0JCQhg/fjyZmZkABAUFFXl8cdtFpPpRh2IRqTI+++wznnnmGT7++GMuuOCCEh2zevVqbrjhBv7v//6P9u3bc/7557Nnzx7X9mbNmhEUFMSPP/5Y4PHt2rVj27Zt/PXXX255DyJiPSU3IlIl/PrrrwwZMoSJEyfSunVrEhISSEhIKDbpiImJYdmyZaxbt45du3Zx7733kpCQ4NoeGBjIxIkTefjhh1mwYAF//PEHGzZsYO7cuQDccccdNGjQgAEDBrB27Vr27dvHZ599xvr16yv0/YpIxVFyIyJVwubNm0lLS2Py5MlERka6HjfddFORxz3++ONcfPHF9OnTh549e7oSlbz7PPjggzzxxBO0atWKgQMHkpiYCIC/vz/ff/899erV47rrrqNt27ZMmzYNu91eUW9VRCqYRkuJiIiIR1HNjYiIiHgUJTciUqX17duX0NDQAh9TpkyxOjwRqYLULCUiVdqRI0c4ffp0gdtq1aql+WlEJB8lNyIiIuJR1CwlIiIiHkXJjYiIiHgUJTciIiLiUZTciIiIiEdRciMiIiIeRcmNiIiIeBQlNyIiIuJR/h8/NZlaxZD3ngAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = sns.scatterplot(data=movement, x='z_acc', y='move_type');\n", "ax.plot(np.arange(-10,50,0.1), pred_prob[:,1], 'r', label='probab.')\n", "ax.plot(np.arange(-10,50,0.1), pred, 'g', label='pred. cat.')\n", "ax.legend();" ] }, { "cell_type": "markdown", "id": "a2d37a88-0a8f-4822-8a1a-d073ade91eac", "metadata": {}, "source": [ "## Estimating the error\n", "\n", "For the optimization, we use here by default the cross-entropy loss. This is useful because it provides us a smooth function that is practical for gradient descent. However the actual value that we get is difficult to understand intuitively. To estimate how good our model is, we instead e.g. want to count how many elements were classified properly.\n", "\n", "For example we can subtract the actual from the predicted values:" ] }, { "cell_type": "code", "execution_count": 19, "id": "d65972ba-febe-4e7b-9e0a-886f711cae2f", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0 1\n", "1 1\n", "2 1\n", "3 1\n", "4 1\n", " ..\n", "996 0\n", "997 0\n", "998 0\n", "999 0\n", "1000 0\n", "Name: move_type, Length: 1001, dtype: int64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predict_data = log_model.predict(movement[['z_acc']])\n", "\n", "movement['move_type'] - predict_data" ] }, { "cell_type": "markdown", "id": "55a3c4f1-17c9-47c5-8e3a-6cf28e5f8bc9", "metadata": {}, "source": [ "Whenever we get 0 here, the prediction was accurate and whenever we get -1 or 1 we miss-classified. Let's first count bad predictions (we take the absolute values to count -1 as \"bad\"). We calculate as percentage of all data points:" ] }, { "cell_type": "code", "execution_count": 20, "id": "c4cae029-2075-419b-a919-22b8563537f4", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "13.986013986013987" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100* np.sum(np.abs(movement['move_type'] - log_model.predict(movement[['z_acc']]))) / len(movement)" ] }, { "cell_type": "markdown", "id": "e9d7ac2c-8ab9-459f-b972-e7813b0c9709", "metadata": {}, "source": [ "And correctly classified:" ] }, { "cell_type": "code", "execution_count": 21, "id": "0d7d458d-6025-4f9d-b4eb-158506f5eb5c", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "86.01398601398601" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100* np.sum((movement['move_type'] - log_model.predict(movement[['z_acc']])) == 0) / len(movement)" ] }, { "cell_type": "markdown", "id": "59fce08b-7eec-4791-a738-2941554391e6", "metadata": {}, "source": [ "So we have an accuracy of 86%. This seems quite good, but is it as good as it seems?" ] }, { "cell_type": "markdown", "id": "13c44609-231e-4308-b1b1-a66448575c1e", "metadata": {}, "source": [ "## Checking model quality\n", "\n", "Instead of calculating the success of our model for each category separately. In other words, how good is the model at predicting the two movements separately. If we only select data points that should be either \"running\" or \"rotation\" we can just count the correct instances:" ] }, { "cell_type": "code", "execution_count": 22, "id": "bf180608-1469-4221-a6a9-6a2d678e1a77", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "763" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(predict_data[movement['move_type'] == 0] == 0)" ] }, { "cell_type": "markdown", "id": "20aba2ce-a654-495a-9538-fe92e4697e91", "metadata": {}, "source": [ "or as a fraction:" ] }, { "cell_type": "code", "execution_count": 23, "id": "82d2853f-ce48-40c9-929e-13099cd0a985", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "95.375" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100 * np.sum(predict_data[movement['move_type'] == 0] == 0) / len(movement[movement['move_type'] == 0])" ] }, { "cell_type": "markdown", "id": "357c1b83-adb9-4a54-971d-4cdc2809e898", "metadata": {}, "source": [ "So here in 95% of cases, when the movement is \"running\", we predict it correctly. In contrast for \"rotation\" movement:" ] }, { "cell_type": "code", "execution_count": 24, "id": "87d20028-4392-401f-b354-cb338f88c071", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "98" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(predict_data[movement['move_type'] == 1] == 1)" ] }, { "cell_type": "code", "execution_count": 25, "id": "ce4c0b88-d8db-4996-91f9-73fc8d599f3f", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "103" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(predict_data[movement['move_type'] == 1] == 0)" ] }, { "cell_type": "code", "execution_count": 26, "id": "c39472ea-3ec4-434b-8d38-1969849306b7", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "48.756218905472636" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100 * np.sum(predict_data[movement['move_type'] == 1] == 1) / len(movement[movement['move_type'] == 1])" ] }, { "cell_type": "markdown", "id": "1e93a7dd-8a6e-479d-b58e-fa0f74e2a272", "metadata": {}, "source": [ "We have a 48% accuracy!\n", "\n", "We can compute these errors in one go with scikit-learn using a **confusion matrix**. Such a matrix will indicate us how many items were in-/correctly classified for each category. We just have to pass actual and predicted values to the function:" ] }, { "cell_type": "code", "execution_count": 27, "id": "b412bc59-4f90-4e38-b10d-50f9ecce8cb0", "metadata": { "tags": [] }, "outputs": [], "source": [ "from sklearn.metrics import confusion_matrix" ] }, { "cell_type": "code", "execution_count": 28, "id": "02936ed2-ffaf-46d3-97c5-a1174e34c814", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "array([[763, 37],\n", " [103, 98]])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "confusion_matrix(movement['move_type'], predict_data)" ] }, { "cell_type": "markdown", "id": "252243c8-d855-47eb-8d80-208d056e6195", "metadata": {}, "source": [ "We see here again the numbers that we obtained before: 763 and 98 represent the correctly classified items for each category. 103 and 37 represent badly classified ones. Each of these four elements usually has a name. If we consider \"classify as running\" as positive outcome and \"classify as rotation\" as negative outcome, then classifying an actual \"running\" as \"running\" is a **True Positive (TP)**, classifying an actual \"running\" as \"rotation\" is a **False Negative** etc. You can see all combinations in the figure below:" ] }, { "cell_type": "code", "execution_count": 29, "id": "5ede4059-31db-42db-9d95-a2d97de7adeb", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4QAAAGQCAYAAAD2lq6fAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABqrElEQVR4nO3deXhMZ/sH8O9k3yQkQTaCqARtIkgtpYk1hJJaSihBtdbSUktfRaJeSomlVFtUKGkVtcfSkqDU1rSovfZYE1vEkvX+/eE38xozicg22/dzXXO1znnOOfeZeTL33Gd7FCIiICIiIiIiIpNjpusAiIiIiIiISDdYEBIREREREZkoFoREREREREQmigUhERERERGRiWJBSEREREREZKJYEBIREREREZkoFoREREREREQmigUhERERERGRiWJBSEREREREZKJYEBIREREREZkoFoREREREREQmigUhERERERGRiWJBSEREREREZKJYENILXbx4EQqFArGxsappUVFRUCgUL72uuLg4zJ49u/iCe0aVKlXQp0+fPOevWrUKCoUCX331ldb5H3zwAaytrXH06NESiY9KnrH0VSWFQgGFQoEvvvhCY15sbCwUCgUOHz5cAhESmQZj+c5gfjN+xtJXlZjf9AsLQiqU/v37448//njp5UryS+hFunbtih49emDs2LH4999/1eZt374dCxcuRHR0NPz9/XUSH5UMQ+yrz/viiy9w584dXYdBZBIM8TuD+c00GWJffR7zm35gQWjkHj9+XCLr9fLyQsOGDUtk3SVp3rx5KFu2LPr06YPc3FwAQFpaGvr3749GjRph1KhROo7QdLGvateyZUs8fPgQ//3vf3UdCpFe4XeGOuY3/cW+qh3zm/5gQajnlJcD/PXXX+jUqRMcHR3h5OSEd999FykpKWptq1Spgvbt2+OXX35BYGAgbGxsEB0dDQC4ceMGBgwYAC8vL1hZWaFq1aqIjo5Gdna22jquXbuGd955B2XKlIGTkxO6deuGGzdu5BnX8+Li4tCoUSM4ODjAwcEBderUweLFiwEAISEh2Lx5My5duqS6VODZdWRmZmLy5Mnw8/ODtbU1ypcvj759+2rsZ1ZWFkaPHg03NzfY2dmhSZMmOHjwYIHez3LlymHx4sXYu3cvZs2aBQD4+OOPcfv2bSxduhTm5uZIS0vDJ598gqpVq8LKygqenp746KOP8PDhQ7V1rVq1Cg0aNICTkxPs7OxQrVo19OvXr0BxGCP21eLtq0q+vr547733MH/+fFy6dOmF7Tds2IBGjRrBzs4OZcqUQatWrQp1BJmopPE7g/nNULCvMr8ZPSG9NnHiRAEg3t7eMmrUKNm2bZvExMSIvb29BAYGSmZmpqqtt7e3uLu7S7Vq1eT777+XhIQEOXjwoFy/fl0qVaok3t7e8u2338pvv/0mn3/+uVhbW0ufPn1Uyz969Ehq1qwpTk5O8tVXX8m2bdtk2LBhUrlyZQEgS5Ys0YjrWePHjxcA0qlTJ1m1apVs375dYmJiZPz48SIicvz4cXnjjTfEzc1N/vjjD9VLRCQnJ0fatGkj9vb2Eh0dLb/++qssWrRIPD09pVatWvLo0SPVdiIjI0WhUMioUaNU2/D09BRHR0eJjIws0Ps6YMAAsbGxkZiYGAEg8+bNExGRhw8fSp06dcTV1VViYmLkt99+kzlz5oiTk5M0b95ccnNzRURk3759olAopHv37hIfHy87d+6UJUuWSK9evQr+4RoZ9tXi76sAZMiQIXL9+nWxs7NT619LliwRAHLo0CHVtBUrVggAad26taxbt05Wrlwp9erVEysrK9mzZ0/BPkiiUsLvDOY3Q8G+yvxm7FgQ6jnlH/vHH3+sNl35h7F8+XLVNG9vbzE3N5fTp0+rtR0wYIA4ODjIpUuX1KbPmDFDAMjx48dFRGTBggUCQNavX6/W7v3333/hl9D58+fF3Nxcevbsme/+tGvXTry9vTWm//jjjwJA1qxZozb90KFDAkC+/vprERE5efJkvu9HQRPmgwcPpFq1agJAWrZsqUqEU6dOFTMzM7UvIRGR1atXCwCJj48Xkf+9d/fu3SvQ9kwB+2rx91VlwhQRGTdunJiZmcmRI0dERDNh5uTkiIeHh7z22muSk5OjWseDBw+kQoUK0rhx4xduj6g08TuD+c1QsK8yvxk7XjJqIHr27Kn273feeQcWFhZISEhQm+7v748aNWqoTdu0aROaNWsGDw8PZGdnq15t27YFAOzatQsAkJCQgDJlyqBDhw5qy/fo0eOF8f3666/IycnBkCFDXnrflDGWLVsWb731llqMderUgZubGxITE1UxAnm/HwXl4OCA0aNHAwCio6NVl0ts2rQJr776KurUqaMWR2hoKBQKhSqOoKAg1XZ//vlnXL16tVD7bYzYVxNVMQJF76tKo0ePhrOzM8aMGaN1/unTp3Ht2jX06tULZmb/+2p3cHBA586dsX//fjx69Oilt0tU0vidkaiKEWB+02fsq4mqGAHmN2PCgtBAuLm5qf3bwsICLi4uuH37ttp0d3d3jWVv3ryJjRs3wtLSUu1Vu3ZtAEBqaioA4Pbt26hYseILt62N8tpyLy+vgu2Qlhjv3bsHKysrjThv3LihFqO2mJTvx8uwtrYGAFhZWanFcfToUY0YypQpAxFRxfHmm29i3bp1yM7ORu/eveHl5YVXX30VP/74Y6H235iwrxZ/XwUAR0dHfPbZZ9i6davGj49nt6ftffXw8EBubi7u3r370tslKmn8zmB+MxTsq8xvxurly3jSiRs3bsDT01P17+zsbNy+fVvjD0/bzcWurq7w9/fP8ylOHh4eAAAXFxetNwRru5H5eeXLlwcAJCcno1KlSi9sry1GFxcXbN26Vev8MmXKqGJUxqTt/SgqV1dX2Nra4vvvv89zvlLHjh3RsWNHZGRkYP/+/Zg6dSp69OiBKlWqoFGjRkWOxVCxr5ZcXx00aBDmzJmDMWPGYNCgQWrzlNu7fv26xnLXrl2DmZkZypUrV6jtEpUkfmcwvxkK9lXmN2PFgtBArFixAvXq1VP9++eff0Z2djZCQkJeuGz79u0RHx8PHx+ffP9gmjVrhp9//hkbNmxQu1QhLi7uhdto3bo1zM3NsWDBgnyThbW1tdbHL7dv3x4//fQTcnJy0KBBgzyXV+5vXu9HUbVv3x5TpkyBi4sLqlatWqBlrK2tERwcjLJly2Lbtm3466+/TDphsq8+VRJ91crKCpMnT0bPnj3VfrwBT5/W5unpibi4OHzyySeqHyQPHz7EmjVrVE9mI9I3/M54ivlN/7GvPsX8ZnxYEBqIX375BRYWFmjVqhWOHz+O8ePHIyAgAO+8884Ll500aRJ+/fVXNG7cGMOGDYOvry+ePHmCixcvIj4+Ht988w28vLzQu3dvzJo1C71798Z///tfvPLKK4iPj8e2bdteuI0qVargP//5Dz7//HM8fvwYERERcHJywokTJ5Camqp65PJrr72GX375BQsWLEC9evVgZmaG+vXro3v37lixYgXCwsIwfPhwvP7667C0tERycjISEhLQsWNHvP3226hZsybeffddzJ49G5aWlmjZsiX++ecfzJgxA46OjkV+nz/66COsWbMGb775Jj7++GP4+/sjNzcXly9fxvbt2zFy5Eg0aNAAEyZMQHJyMlq0aAEvLy/cu3cPc+bMgaWlJYKDg4schyFjXy3ZvhoREYEZM2Zgy5YtatPNzMwwffp09OzZE+3bt8eAAQOQkZGBL7/8Evfu3cMXX3xR6G0SlSR+ZzC/GQr2VeY3o6Xrp9pQ/pRPkPrzzz/lrbfeEgcHBylTpoxERETIzZs31dp6e3tLu3bttK4nJSVFhg0bJlWrVhVLS0txdnaWevXqybhx4yQ9PV3VLjk5WTp37qzaTufOnWXfvn0FetSxiMiyZcskKChIbGxsxMHBQQIDA9WWu3PnjnTp0kXKli0rCoVCbR1ZWVkyY8YMCQgIUC3v5+cnAwYMkLNnz6raZWRkyMiRI6VChQpiY2MjDRs2lD/++EO8vb0L/BQ2Ee2PNRYRSU9Pl88++0x8fX3FyspKnJyc5LXXXpOPP/5Ybty4ISIimzZtkrZt24qnp6dYWVlJhQoVJCwszKQffcy+Wvx9Fc88he1Z27dvFwBa+++6deukQYMGYmNjI/b29tKiRQvZu3fvC7dFVNr4ncH8ZijYV5nfjJ1CRKT0yk96WVFRUYiOjkZKSorGKXQifcK+SkQvg98ZZCjYV8nY8SmjREREREREJooFIRERERERkYniJaNEREREREQmimcIiYiIiIiITBQLQiIiIiIiIhPFgpCIiIiIiMhEsSAkIiIiIiIyUSwIiYiIiIiITBQLQiIiIiIiIhPFgpCIiIiIiMhEsSAkIiIiIiIyUSwIiYiIiIiITBQLQiIiIiIiIhPFgpCIiIiIiMhEWeg6AEOQm5uLa9euoUyZMlAoFLoOh4jI4IgIHjx4AA8PD5iZ8VikvmB+IyIqGmPIbywIC+DatWuoVKmSrsMgIjJ4V65cgZeXl67DoP/H/EZEVDwMOb+xICyAMmXKAADOnDkDZ2dnHUdDpCkrKwsJCQlo1qwZLC0tdR0OkYY7d+6gRo0aqu9T0g/Mb6TvmN9I3xlDfmNBWADKy2icnZ3h4uKi42iINGVlZcHOzg4uLi5MmKTXeFmifmF+I33H/EaGwpDzm2Fe6EpERERERERFxoKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRBlMQXj06FHs3r1b9e/09HQMHjwYDRs2xIQJEyAiOoyOiIio8JjjiIhIVwymIBwxYgQ2bdqk+ve4ceOwcOFCZGZmYurUqZg3b54OoyMiIio85jgiItIVgykI//nnHzRu3BgAICJYsWIFoqOjkZSUhDFjxuD777/XcYRERESFwxxHRES6YjAF4b179+Dq6goAOHLkCO7evYt33nkHANCiRQucP39el+EREREVGnMcERHpisEUhC4uLrhy5QoAICEhARUrVkT16tUBAJmZmby/goiIDBZzHBER6YqFrgMoqKZNmyIqKgqpqamYNWsW2rVrp5p39uxZVKpUSYfRERERFR5zHBER6YrBnCGcOnUqFAoFhg8fDmtra0yYMEE1b9WqVWjYsKEOoyMiIio85jgiItIVgzlDWLVqVZw6dQp37tyBs7Oz2rx58+bBzc1NR5EREREVDXOcbigUipdq7+3tjYsXL5ZMMETPeFHfDA4ORmJi4kuv9+LFi6hatWqhlyfjZDAFodLziRIAXnvtNR1EQkREVLyY40pXZGSkxrTff/8d586dQ0BAAOrUqaM2T/ngH6LSoq2PAoCfn18pR0LGzKAKwlOnTiE6OhqJiYm4ffs29u/fj7p16yI6OhpvvvkmmjVrpusQiYiICoU5rvTFxsZqTOvTpw/OnTuH8PBwREVFlXpMRM/S1keJipvB3EP4999/IygoCLt27UJISAhycnJU89LT0/HNN9/oMDoiIqLCY44jIiJdMZiCcOzYsfD398e///6LH374Qe0R3K+//joOHTqkw+iIiIgKjzlO/yUmJkKhUKBPnz64ceMG+vfvDy8vL1hYWGD27NkAgJCQECgUCq33GV68eBEKhQIhISFa179x40aEhobCxcUFNjY2qFGjBsaPH4/09PSS2ykyeHv27MHQoUPh7++PcuXKwdbWFn5+fhg7dizu3bv3Uuvatm0bQkND4eXlBWtra3h4eKBJkyaIjo7W2p591ngYTEG4d+9ejB49GnZ2dho32lasWBE3btzQUWRERERFwxxnOFJSUhAUFITNmzejUaNGaNu2Lezs7Iq0zpEjR6JDhw7YvXs3Xn31VbRr1w6ZmZmYPHkyQkJC8PDhw2KKnozNqFGjsGjRIlhZWaF58+Zo0aIF0tLSMG3aNDRp0qTAxdk333yDNm3aYNeuXahZsyY6d+6M2rVr4+LFi1ovnWafNS4Gcw+hiMDKykrrvLt378La2rqUIyIiIioezHGGIz4+Hm+//Tbi4uJgY2NT5PX9/PPPiImJQWBgIH755RdUqVIFAJCVlYWhQ4fiu+++Q1RUFL788ssib4uMz4QJE9CoUSOUK1dONS0jIwPDhg3Dd999h5iYGLVhbPLyxRdfwNHREUeOHFH1QeDpd9PzTyNlnzU+BnOG0N/fH2vXrtU6b+vWrahXr14pR0RERFQ8mOMMh7W1Nb766qtiKQYBYMqUKQCAH3/8Ue2HuKWlJebMmQM3NzcsWrQIubm5xbI9MiwKhULrS3k5aFhYmFoxCDzto7Nnz4aFhQXWr19foO3cunULVatWVeuDyu0//0Ar9lnjYzBnCIcPH44ePXrA3t4evXr1AgBcvnwZO3fuxPfff4/Vq1frOEIiIqLCYY4zHHXr1oWnp2exrOvWrVs4cuQIatasCV9fX435NjY2qF+/PjZt2oSzZ89qbUPGLa9hJ569ouDq1avYuHEjTp06hbS0NFUhZmVlhbNnzxZoO/Xq1cPvv/+OsWPH4v3334ePj4/WduyzxkmvC8Jx48YhOjoaFhYW6NatG86dO4eoqCjMnTsXANC5c2dYWFggOjoab731lo6jJSIiKjjmOMNUuXLlYlvXpUuXAAAnT5584UDkqamp/HFtgl407ERMTAw+/fRTZGZmFmk78+fPR3h4OKZNm4Zp06bBw8MDTZs2RZcuXdCpUyeYmT29qJB91jjpdUE4bdo0xMfH44cffsCrr76K//znP+jduze2bduGmzdvwtXVFaGhofD29tZ1qERERC+FOc4wFfZSUW2XzymHF3F3d0fr1q3zXd7FxaVQ2yXjtX//fowcORJOTk747rvvEBISAjc3N9U9xx4eHrh+/XqB1uXv748TJ05g69atiI+Px65du7By5UqsXLkSTZo0wY4dO2BlZcU+a6T0uiBMTExE3759Ub9+fURHR2P06NHw8vLCe++9p+vQiIiIioQ5zvgoL+PT9mTHK1euaEzz8vICALi5uXEAcnppyvuOJ0+erHFp6ePHj1/66cQ2NjYIDw9HeHg4AODEiROIiIjA77//jsWLF2PQoEHss0ZKrx8q06RJExw9ehQffPAB/vOf/6BJkyY4d+6crsMiIiIqMuY44+Pu7g4AOHPmjMa87du3a0zz8vKCr68vjh49igsXLpR4fGRc7t69CwCoVKmSxrxVq1apjWdaGLVq1cKQIUMAAMeOHQPAPmus9LogBABbW1vMnTsXCQkJuHnzJgICAjBw4EAMGzZM7TV8+HBdh0pERPRSmOOMS3BwMABg5syZePTokWr6b7/9phq8/nmfffYZcnJy0LlzZ/zzzz8a88+dO4fvv/++ROIlw1ajRg0AwOLFi5GVlaWafuLECYwZM6bA63n06BHmzp2rMZB9bm6u6kDGs/fOss8aH72+ZPRZb7zxBjp16oQZM2bgu+++05ivUCgwZ84cHURGRERUNMxxxiEiIgLTp0/Hvn37ULNmTQQFBeHKlSs4fPgwRowYgRkzZmgs8+677+LYsWOYPn066tSpg8DAQFStWhVpaWm4dOkSTp06hYCAAPTr108He0T6rG/fvpg5cyY2btwIX19fBAUF4c6dO9i1axfCw8Nx8OBB1UNg8pOZmYnhw4dj1KhRqFu3LqpUqYLMzEwcPnwYly9fRrVq1TBgwABVe/ZZ46P3ZwgB4Pjx42jQoAFmzZqFMWPG4MmTJ8jNzVV7KW9yJSIiMiTMccbD1tYWO3bsQEREBB48eID4+Hjk5uZi5cqVqkvvtJk2bRp27NiBDh06IDk5GevWrcNff/0FOzs7jBo1imdbSCsXFxccOnQIPXr0QGZmJjZs2ICrV69i0qRJ+PHHHwu8HgcHB8yfPx/t27dHSkoKNmzYgJ07d6JcuXL4/PPP8eeff2qMdcg+a1wUUtQLjEuQiGDatGmIjo6Gl5cXli5disaNG5d6HGlpaXByckJqaiqfmER6KSsrC/Hx8QgLC4OlpaWuwyHScPv2bbi6uuL+/ftwdHTUdTh6QR9yHPMb6TvmN9J3xpDf9PqS0UaNGuHgwYMYNGgQvvzyS9jZ2ek6JCIiomLBHEdERPpArwvCq1evYtu2bWjVqpWuQyEiIipWzHFERKQP9Log/Oeff+Dk5KTrMIiIiIodcxwREekDvX6oDBMlEREZK+Y4IiLSB3pdEBIREREREVHJYUFIRERERERkolgQ0ktJTEyEQqF44WvSpEkay2ZkZGDGjBmoX78+HB0d4eDgAF9fX7z33nu4evWqWtujR49i6NChaNiwITw8PGBtbQ0nJyc0atQI8+bNQ3Z2dmntMhmZmJgYdOrUCa+88gqcnJxgbW0Nb29vREZG4vjx4xrtC9LfmzdvroM9ISKl2NhYjb9LKysreHl5ISIiAklJSaUaj0KhQJUqVUptOdIfz/bFPn365NmuSpUqUCgUuHHjRukFV4IuXrwIhUKBkJAQXYdChaDXD5Uh/ePm5obIyEit83JycrB8+XIAQNOmTdXm3bp1Cy1btsSxY8fg5uaGli1bAgD+/fdffP/99+jbty88PT1V7Xfv3o358+fD29sbtWrVQvny5ZGSkoK9e/di//79WLt2LbZu3coxieilTZkyBQ8fPoS/vz9ee+01AE8HBl+2bBl++uknrFu3Dm3btlW1z6u/A8DmzZuRmpqq0d+JSDd8fHzQpEkTAEB6ejoOHz6Mn376CWvWrMHq1avRoUMHncWWmJiIZs2aITIyErGxsTqLg0rP8uXLMW7cOLzyyiu6DqXIYmNj0bdvX0ycOBFRUVG6DoeKGQtCeil+fn55JrItW7Zg+fLlqFSpEoKDg1XTc3Nz0bFjRxw7dgzjxo1DVFQULCz+1/XOnz+vMZBnWFgYwsLCUK1aNbXpN2/eRMuWLbFz504sXrwYAwcOLL6dI5Owfv161KtXDzY2NmrTFyxYgMGDB6N///64fPkyzM3NASDP/n7v3j389NNPAIB33323RGMmooJp0qSJ2t9sVlYWBg8ejEWLFmHgwIFo06YNrKysSjyOkydPFuqAZWGXI/1ja2uLx48f4/PPP8eyZct0HU6J8/T0xMmTJzmeqoHS64KwatWqUCgUBWqrUChw7ty5Eo6I8qM8O9izZ0+Ymf3vauTY2Fjs378fnTt3xuTJkzWWe77oy2saAFSsWBFjx47Fu+++i507d7IgpJf2xhtvaJ0+aNAgxMTE4N9//8Xp06dRq1atfNezatUqZGRkoGHDhkZx9JdKH3NcybO0tMTs2bPx008/4fr16zh48KDqDGJJ8vPzK9XlSP907twZ27ZtQ1xcHD777DPUqFFD1yGVKEtLS/ZfA6bX9xAGBwcX+PXmm2/qOlyT9vDhQ6xfvx6A5tmSb7/9FgAwcuTIYtmW8sxNaRzlJdPyMn1LeQCkV69eJRoTGS/muNJhb2+v+jF+5coV1fTbt29j1KhReOWVV2BjYwNnZ2e0adMG27dv17qeK1euYMiQIfD19YWdnR2cnZ1Ru3ZtDBgwAKdPn1Zr+/y9gH369EGzZs0AAEuXLlW71/HZy++eX27NmjVQKBTo3r17nvs3ePBgKBQKLFy4UG16eno6Jk2ahNdeew12dnZwdHREcHAw1q1bl9/bRcXE3t4eo0ePRk5OjtbnKuQnJSUFn3zyCXx9fWFjY4Ny5cqhbdu22L17t9b2IoIFCxbg1VdfhY2NDby8vPDRRx/hwYMHCAkJgUKhwMWLF9WW2bx5M/r164eaNWvC0dER9vb2CAgIwJQpU5CRkaHWNiQkBH379gUAREdHq/Vf5Rl5bfcQzpw5EwqFAmPHjs1zX8PCwqBQKPDrr78W6T2gIhJ6ofv37wsASU1N1XUoemvZsmUCQAIDA9Wmp6WliZmZmZQpU0ZycnJk3759MnbsWPnggw9k8uTJcuzYsZfazp07d6R+/foCQJYvX16cu2DQMjMzZd26dZKZmanrUAzW0qVLBYDUqFFDcnJy8m176dIlUSgUYmlpye+FAkpNTRUAcv/+fV2HQs8wlvy2ZMkSASCRkZFa57/yyisCQNasWSMiIsnJyVKtWjUBIJUrV5Zu3bpJ8+bNxdzcXABITEyM2vJXrlwRV1dXASD+/v7yzjvvSIcOHSQgIEAUCoUsWbJErT0A8fb2Vv174cKFEhoaKgDEx8dHIiMjVa+1a9fmudyTJ0/EyclJbG1t5cGDBxr7lZWVJa6urmJlZSV37txRTb9x44bUqlVLAIinp6d06NBBWrZsKfb29gJApk6dWrA3Vg8YWn5T9sUBAwbIw4cPpWLFimJmZiYnT55Ua+ft7S0A5Pr162rTT548KZ6enqq+8vbbb8ubb74pVlZWYmZmJitWrNDY5rBhwwSAWFtbS1hYmHTu3FmcnZ0lKChIGjVqJADkwoULastUrFhRHBwcpEGDBtK1a1cJDQ2VcuXKCQBp3ry5ZGdnq9pOnTpV3njjDQEgAQEBav13z549IiJy4cIFASDBwcGq5a5evSpmZmZSuXJlyc3N1Yg7JSVFLCwsxM3NTW17hXkPdMkY8hsLwgIwloRZklq3bq01ie7fv19VKA4ZMkQAqL0UCoWMGjUqz/WeOXNGIiMjpVevXtK6dWtxcHBQfdFq+3IxVYaWMPXB9OnTJTIyUrp06SK1a9cWAOLh4SGHDx9+4bJTpkwRANKhQ4dSiNQ4GEPCNEbGkt/yKwiPHz+uKvTOnj0rIiLt27cXANKrVy+17809e/aInZ2dmJuby5EjR1TTJ06cKABk5syZGuu/ePGi/Pvvv2rTni/sREQSEhLyLVrzWq5fv34CQJYtW6bRfvPmzQJAwsPD1aa3bdtWAMjo0aPV9u/cuXPi4+OjsX/6zNDy27MFoYjIzJkzBYBERESotdNWEGZnZ8urr74qAGTOnDlqv3OSkpLExcVF7O3t5ebNm6rpe/bsEQDi6uoqJ06cUE2/c+eO1KtXT/V76/mCcO3atZKenq42LS0tTfW3sXTpUq37NXHiRK37ra0gFBFp3ry5AJDdu3drLDN//nwBIB999FGR3gNdM4b8ZnAF4b179+TgwYOya9cujVdJMZaEWVKuX78u5ubmYm5urnGka8uWLQJALCwsBIB88skncuHCBUlJSZGFCxeKnZ2dAJAFCxZoXbfyi+7Z19ChQw36j64kGFrC1ActWrRQ61eVKlWSxMTEAi2rPPK+atWqEo7SeBhDwiwNpZ3jjCW/aSsI09PT5bfffhNfX18BIC1bthSRp0URAHF0dJS7d+9qrGvEiBFqP+hFRAYNGiQA5K+//ipQPMVZEO7YsUMASGhoqEb7nj17anwX/fXXXwJAGjdurPXA6bp16wSAfPjhhwXaF10ztPz2fEH46NEjcXNzEzMzMzl+/LiqnbaCcO3atVqLR6XZs2drHJhQ9gFtZ3137tyZZ0GYl7NnzwoA6dSpk9b9etmCcPHixRp/T0rKs46HDh1STSvMe6BrxpDf9PqhMs/Kzs7GwIEDsWzZMuTk5Ghtk9d0KllxcXHIyclBmzZt4ObmpjZP+ZlkZ2cjIiICX375pWpe//79kZGRgaFDh+K///2v1gfENGnSBCKCnJwcXL58GWvXrkV0dDS2bduG7du3c7wmKrTffvsNwNOnhR47dgyTJk1CSEgIJk+ejHHjxuW5XFJSEk6cOIGyZcvirbfeKq1wycgxxxWPpUuXYunSpRrT69evjx9++AEA8PvvvwN4eu9S2bJlNdr26tULMTEx2LNnj2pavXr1AABDhgzB5MmT0bRpU7WnZZekkJAQeHp64rfffsOtW7dQoUIFAMCjR4+wfv16ODo6on379qr2ynuxOnbsqPWhRcqH6hw6dKgUoidbW1uMGTMGH3/8MSZNmqR6OrU2ys8uPDxc63xtn92+ffsAAF27dtVo36xZM7i4uOD27dta13f27FnEx8fj33//xcOHD5GbmwsRUc0rDp07d8aQIUOwevVqfPXVV6qn6F6+fBn79u1DjRo1UL9+fVX7wrwHVHR6/VCZZ82aNQsbN27E999/DxHBvHnz8O2336J+/fp45ZVXsGXLFl2HaLLye7hGmTJlVP/fr18/jfl9+/aFQqFAcnIy/v333zy3YW5ujqpVq2LEiBGIjY3F2bNn8eGHHxZD9GTqypYti6ZNmyI+Ph716tXD+PHj8000yv7etWtXWFtbl1aYZOSY44qHj48PIiMjERkZif79+2PcuHHYunUrDhw4oDpgee3aNQDI84CicrqyHfD0oTDvvPMO9u3bh+bNm8PJyQnBwcH44osvcOvWrRLdJzMzM3Tv3h05OTlYuXKlavqGDRuQnp6Ozp07qw2jo3x4yJgxY9Qe/qF8ubq6AgBSU1NLNG76n4EDB8Ld3R2rVq3C8ePH82yn/Oy6deum9bNTFk7PfnbXrl2DQqGAl5eX1nVWrlxZY5qIYOTIkfD19cVHH32EefPmYcmSJVi6dKlqiIwHDx4UdnfVODk5oV27drh9+za2bt2qmh4XFwcRQc+ePdXaF+Y9oKIzmDOEP/zwA8aNG4eIiAj07t0bDRo0QN26ddG/f3+EhoYiISEBrVu31nWYJufkyZP466+/4ODgoPVozrMJ19vbW2O+nZ0dypcvj1u3buHWrVuoXr36C7cZHh4OBwcHbNmyBZmZmXzaKBULS0tLdOvWDX/++Sc2btyIoKAgjTY5OTkce5BKBHNc8Xh+HML85DXkh3L6s/PNzc2xcuVKjB07FuvXr0dCQgL279+P3bt3Y+rUqdi2bRsaNmxY5Pjz0rNnT8ycORNxcXGqg6FxcXGqec9Snklu2rRpnkM4AVAVhlTybGxsMHbsWAwfPhzR0dH4+eeftbZTfnZt27ZVnQnW5mWGd1Ce8XvWypUrERMTAy8vL8yePRuNGjVC+fLlYWlpiczMTFhbW2tdrrB69uyJNWvWIC4uTnVljbL/9ujRQ61tSbwH9GIGUxCeP38eAQEBqvHtnjx5opo3cOBADB8+HFOnTtVVeCZLeQlOp06dtA5GWrlyZdXlCnfu3NGYn5ubi3v37gEAHBwcCrRNhUIBZ2dnXL58GXfv3kXFihULvwNEz1D+QEpJSdE6f8eOHbh+/Tq8vb3RtGnT0gyNjBxzXOnx8PAAAFy4cEHrfOUZCnd3d415gYGBCAwMRFRUFNLS0hAdHY2YmBgMHz4cBw4cKLGYAwMDUbNmTezfvx/nz59HuXLlsG3bNri7u6uGs1BSninq0qULhg0bVmIx0cv54IMPMG3aNKxevRrHjh3T2kb52Q0cOBAdOnQo0Hrd3d1x8eJFJCcnw8fHR2N+cnKyxrS1a9cCABYsWKB2uTHw9LuouLVr1w5ly5ZVndW+dOkSjh07hgYNGmicCCjMe0BFZzCXjNrb2yMzM1NVDFy6dEk1z9bWNs/ro6nkiIjqCE9+Y7EpjwYlJCRozNu3bx8yMzNha2tb4KM958+fx5UrV+Do6MgjnFSsdu3aBQBakyrwv8tF33333QIPKE5UEMxxpUd5D9LmzZtVBySfpfw7f9FBH0dHR0yZMgUKhSLPH/jPUl7Nkp2d/ZIRP6U8ExgXF4dVq1YhMzMTERERqoMISi1btgQAjjeoZ2xsbPDpp59CRBAdHa21TWE+u8aNGwMAVq9erTEvMTFR66WVd+/eBQBUqlRJY15eZy+L0n+trKzQpUsXPHr0COvWrcOKFSsAaJ7dBth/dcVgCkI/Pz/V0bzGjRsjJiYGycnJuHXrFqZPnw5fX18dR2h69uzZg0uXLsHDwwPNmzfPs92oUaNgbm6OL7/8En/99Zdq+q1btzB8+HAAT+8vfPbSz+nTp2s9SnX69Gn06NEDIoLevXurBhInKog9e/Zg5cqVGgktKysLX331FX744QfY2tqiW7duGss+evRIdVSVl4tScWOOKz3VqlVDu3bt8ODBAwwfPhxZWVmqeX/88QcWLFgAc3NzDB48WDX9hx9+wD///KOxrq1bt0JEtN6n9TzlmcnnB7EvKOWldStWrMjzclEAaNiwIVq0aIGEhAR8/PHHSE9PV5ufm5uL7du3qx6uQ6Xn/fffh5eXF3755RfcvHlTY36XLl3g5+eH2NhYTJs2Ta1vAkBmZiZ++eUXtQMQH3zwAYCng8A/27fu3buH0aNHa42jRo0aAIDvvvtO7dLQPXv2qD3871lF7b/KvrpixQr89NNPMDc315prC/MeUDHQybNNC2H+/PkycuRIEXk6DomDg4OYmZmJmZmZWFtby+bNm0ts28byWO7i9v777wuAfMcRVJo7d65q0NSQkBBp3769agDUunXrSlpamlp7b29vMTMzk8DAQOnatat06dJFgoKCxMzMTADIm2++qXWQXlNlaI/l1hXlY7NdXV0lNDRUevToIa1btxZ3d3cBIDY2NrJy5Uqty65YsUIASFBQUClHbRyM4bHcJUlXOc5Y8tuLBqZ/XnJyslStWlU1zEP37t2lRYsWqvEKn3+kfceOHVWDZIeHh0tERIQ0atRIFAqFmJubqwa8V1Ku93n+/v6q75E+ffrIe++9J+vXr3/hckqNGzdWDSPg5+eXZ7sbN26otuXs7CzNmzeXbt26SZMmTaR8+fICQGbNmlWg90rXDC2/PT/sxPOUY+8pX9oGpq9cubIAEHd3dwkNDZWuXbtKw4YNpWzZsgJA1q5dq7aMcpxnGxsbadeunXTp0kVcXFykXr160rBhQwEgV69eVbU/ffq02NvbCwCpVauWdO/eXZo2bSoKhUI++eQTrf3w8ePHUqFCBdXQEn379pX33ntP9u7dKyJ5DzuhlJubK15eXqr9btOmTZ7vYWHeA10yhvxmMAXh8y5fvixz586Vr776Sk6dOlWi2zKWhFmcnjx5oiroCjq47bZt26RVq1bi5OQk1tbWUqtWLYmOjpaHDx9qtF2+fLn06NFDatSoIY6OjmJpaSkVK1aU0NBQiY2NlZycnOLeJYNmaAlTV86fPy//+c9/5I033hB3d3extLQUe3t7qV27tnz44YeqQau1UQ70PGfOnFKM2HgYQ8IsTaWV44wlv71sQSjytE+OHDlSfHx8xMrKSsqWLSutW7eWbdu2abTdtWuXDBkyROrUqSMuLi5iY2MjPj4+0qNHD0lKStJon1dhd/bsWQkPDxcXFxfVAc5nx3V7UUH4bDExadKkfPfv0aNHEhMTIw0aNJAyZcqItbW1VKlSRVq3bi3z58+XlJSUfJfXF4aW315UEGZkZEilSpXyLAhFng4qHxUVJQEBAWJvby92dnbi4+MjHTp0kCVLlmgcEM/NzZWvvvpKatasKVZWVuLh4SFDhgyR+/fvS/Xq1UWhUMijR4/Uljlx4oS89dZbUqFCBbGzs5PAwED57rvvRCTvfnjo0CHV7ziFQiEAZMmSJSLy4oJQRGTUqFGq/V62bFk+7+LLvwe6ZAz5TSFSjI8RMlJpaWlwcnJCamoqXFxcdB0OkYasrCzEx8cjLCxMNcYPkT65ffs2XF1dcf/+fTg6Ouo6HPp/zG+k75jfCu/q1auoUqUKqlevjpMnT+o6HKNlDPnNYO4hJCIiIiIidadOncLjx4/VpqWkpKBv377Izs7WGNqB6HkGM+yEmZnZC5/qpxy7hIiIyJAwxxFRYc2ePRtxcXEIDAyEu7s7bt68iaSkJKSlpaFu3br45JNPdB0i6TmDKQgnTJigkSxTUlKwfft25OTkoHfv3jqKjIiIqGiY44iosDp16oRr164hKSkJBw4cgLm5OXx8fNC5c2eMHDkStra2ug6R9JzBFIRRUVFap2dmZiI0NBQVKlQo3YCIiIiKCXMcERVW69at0bp1a12HQQbM4O8htLKywocffoiYmBhdh0JERFSsmOOIiKikGXxBCAC2tra4fv26rsMgIiIqdsxxRERUkgy+IExJScGXX34JX19fXYdCRERUrJjjdCs7Oxu+vr5o1KgRACAxMREKheKlXn369AEAxMbGasyzsrKCl5cXIiIikJSUpLbtx48fw93dHe3atSvt3SYD8Xz/VCpIP332MvVn24eEhOS5vZCQECgUCuzfv181TUQQGBgIf39/5ObmFvcuUikxmHsIq1atqnHDfUZGBm7dugUzMzNs2LBBR5EREREVDXOcfvr2229x5swZbNmyBQDg5uaGyMhIjXarV6/Gw4cPERoaCjc3N7V5TZo0Ufu3j4+Palp6ejoOHz6Mn376CWvWrMHq1avRoUMHAE/PDI8ePRojRozAzp070bx585LYRTJgz/fP51WsWBFt2rTROq9OnTpap+/atQsJCQlo1qxZgWJQKBSYMGECOnXqhNjYWPTr169Ay5F+MZiCMDg4WCNZ2tjYoEqVKujWrRuqVKmim8CIiIiKiDlO/2RkZGDSpEmoU6eO6ke1n58fYmNjNdomJibi4cOHGDt2bL5nWICnBeKz68jKysLgwYOxaNEiDBw4EG3atIGVlRUAYODAgZg0aRI+/fRTHDhwoLh2jYyAtv75vLz6a15sbW3x+PFjTJw4scAFIQCEh4fDz88PEyZMQO/evWFhYTDlBf0/g/nEXqZDExERGRLmOP2zevVq3Lp1C2PHji3R7VhaWmL27Nn46aefcP36dRw8eFB1BtHW1hadO3fG4sWLkZSUhLp165ZoLGQ4SqJ/Nm3aFNeuXcOePXuwY8cOtGjRokDLKRQK9OzZE+PHj8eGDRvQqVOnYouJSofB3EPYr18/XLhwQeu8S5cu8RQ1EREZLOY4/bNo0SIoFApERESU+Lbs7e1Ro0YNAMCVK1fU5vXo0QMAsHDhwhKPgwxHSfRPhUKBiRMnAoDqvwXFfmrYDKYgjI2NRUpKitZ5qampWLp0aSlHREREVDyY4/TLgwcPsGfPHvj5+WncE1iS2wQAa2trtemNGzeGpaUl4uPjSyUO0n8l2T87d+4Mf39/7N27F7/++muBl6tWrRoqVaqEnTt34smTJ8UaE5U8gykI83Pnzh2NL1AiIiJjwBxX+vbu3YucnBwEBQWVyvZOnDiB8+fPAwD8/f3V5tnY2MDf3x+XL1/GpUuXSiUe0m8l2T+Lcpbw9ddfR2ZmJu93NUB6fQ/h7t27kZiYqPr3okWLsHXrVrU2jx8/xvr161GrVq1Sjo6IiKjwmOP019GjRwGgxIf7ePjwIfbv348hQ4YgJycHLVu2RPXq1TXa+fn54c8//8SRI0fg7e1dojGR/ito/9y1a5fGw6oAICAgAH///Xeey7399tsICAjAH3/8gW3btiE0NLRAcfn5+QEAjhw5guDg4AItQ/pBrwvChIQEREdHA3h6xGLRokVa23l7e2P+/PmlGRoREVGRMMfpr1u3bgEAypUrV+zrXrp0qdZLgOvXr48ffvhB6zLOzs4AkOdlxWRaCto/8xp2onLlyvkupxyn8O2338bEiRMLXBCynxouvS4IR48ejaFDh0JEUKFCBWzduhX16tVTa2NtbQ0HBwcdRUhERFQ4zHH66/79+wCAMmXKFPu6nx2H0NLSEhUrVkTTpk3RqlUrmJlpv5PH0dFRLS4ybQXtny877MSzwsPDERgYiAMHDmDLli1o27btC5dhPzVcel0Q2trawtbWFgBw4cIFeHh4wNLSUsdRERERFR1znP5ycnICAKSlpRX7up8fh7AglD+wlXGRaSvJ/vmsqKgodOzYERMnTixQQch+argM5qEyGRkZ2Ldvn9Z5u3btwtmzZ0s5IiIiouLBHKdfKlSoAODpA330wd27dwEA5cuX13EkpA9Kq3926NAB9erVw6FDh7B58+YXtmc/NVwGUxCOGDEC69ev1zpv48aNGDlyZClHREREVDyY4/RLQEAAAODUqVM6juSpkydPAgDq1Kmj20BIL5Rm/4yKilL7b37YTw2XwRSEhw4dwptvvql1XnBwMA4dOlTKERERERUP5jj90rhxY5ibm+PgwYO6DgVPnjzBsWPHULly5Rc+DIRMQ2n2z/bt2yMoKAiHDx9+4fYOHjwIKysrvP766yUeFxUvgykI79+/n+eN9ba2tqrT1ERERIaGOU6/lClTBk2bNsXZs2eRnJys01j27t2LrKwshIWF6TQO0h+l3T+VZwcfP36cZ5tz584hOTkZzZs3h42NTYnHRMXLYApCT0/PPI9MHDx4EO7u7qUcERERUfFgjtM/77//PgDgxx9/1GkccXFxAP4XDxFQuv0zLCwMDRo0yLcN+6lhU4iI6DqIghg5ciQWLlyI9evXo1mzZqrpiYmJ6NixI9577z3ExMSUyLbT0tLg5OSE1NRUuLi4lMg2iIoiKysL8fHxCAsL41MKSS/dvn0brq6uuH//vurR5PQ/uspxzG95y8jIgLe3NypUqKAaCLy0PX78GB4eHqhRowYOHDigkxh0jflNO33on0oigpo1ayI9PR0XL16EhYVeD2JQ7IwhvxnMGcIJEyagcuXKaNmyJWrWrIlWrVqhZs2aaNGiBSpXrlygm12JiIj0EXOc/rG2tsaECRNw7NgxxMfH6ySGb775Bvfu3cOUKVN0sn3SX/rQP5XWrVuH06dPY9KkSSZXDBoLgzlDCADp6emYNWsWtm7dipSUFJQvXx5t27bFRx99VKID9/IIKuk7HkElfWcMR1BLmi5yHPNb/rKzs1G7dm2UK1cO+/fvL9VtP378GNWqVUNgYKDOf/DrEvNb3nTZP5VEBHXr1kV2djaOHDkCMzODOddUbIwhvxlUQagrTJik75gwSd8ZQ8I0RsxvpO+Y30jfGUN+M70ynoiIiIiIiAAABnWh79mzZ/Htt9/i5MmTGo++VSgU2LFjh44iIyIiKhrmOCIi0gWDKQj/+ecfNGzYEJ6envj333/h7++P1NRUXL16FZUqVYKPj4+uQyQiIioU5jgiItIVg7lk9D//+Q9CQ0Nx/PhxiAgWL16MK1euYOPGjXjy5AkmT56s6xCJiIgKhTmOiIh0xWAKwqSkJERGRqqeXpSbmwsAaNeuHT755BN8+umnugyPiIio0JjjiIhIVwymILx79y6cnZ1hZmYGS0tL3L17VzWvfv36SEpK0mF0REREhcccR0REumIwBaGnpydSU1MBANWrV8fu3btV844ePVqi4xASERGVJOY4IiLSFYN5qEyTJk2wb98+hIeHo2fPnpg4cSKuX78OKysrxMbG4t1339V1iERERIXCHEdERLpiMAXhuHHjcO3aNQDAmDFjcOPGDaxYsQIKhQLvvPMOZsyYoeMIiYiICoc5joiIdMVgCkIfHx/VY7fNzc0xd+5czJ07V8dRERERFR1zHBER6YrB3ENIRERERERExYsFIRERERERkYliQUhERERERGSiWBASERERERGZKBaEREREREREJooFIRERERERkYliQUhERERERGSiWBASERERERGZKBaEREREREREJooFIRERERERkYliQUhERERERGSiWBASERERERGZKBaEREREREREJooFIRERERERkYliQUhERERERGSiWBASERERERGZKBaEREREREREJooFIRERERERkYliQUhERERERGSiWBASERERERGZKBaEREREREREJooFIRERERERkYliQUhERERERGSiWBASERERERGZKBaEREREREREJooFIRERERERkYliQUhERERERGSiWBASERERERGZKBaEREREREREJooFIRERERERkYliQUhERERERGSiWBASERERERGZKBaEREREREREJooFIRERERERkYliQUhERERERGSiWBASERERERGZKBaEREREREREJooFIRERERERkYliQUhERERERGSiWBASERERERGZKAtdB2BIsrKykJWVpeswiDQo+yX7J+kr9k39xvxG+or5jfSdMfRNFoQvISEhAXZ2droOgyhPv/76q65DINLq0aNHug6B8sH8RvqO+Y30lTHkNxaEL6FZs2ZwcXHRdRhEGrKy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zG+adN03n/f48WN4eHigRo0aOHDggK7DKXXGkN8M5gwhERERUWmxtrbGhAkTcOzYMcTHx5f69tetW4fTp09j0qRJJlsMkna67pvP++abb3Dv3j1MmTJF16FQIRnUGcKzZ8/i22+/xcmTJ/H48WO1eQqFAjt27CiR7fIIKuk7HkElfWcMR1BLmi5yHPNb/rKzs1G7dm2UK1cO+/fvL7Xtigjq1q2L7OxsHDlyBGZmpnv8nvlNO131zec9fvwY1apVQ2BgoF4Up7pgDPnNYA45/fPPP2jYsCE8PT3x77//wt/fH6mpqbh69SoqVaoEHx8fXYdIRERUKMxx+snCwgKnT58u9e0qFAr89ddfpb5dMhy66pvPs7W1xfXr13UdBhWRwRxy+s9//oPQ0FAcP34cIoLFixfjypUr2LhxI548eYLJkyfrOkQiIqJCYY4jIiJdMZiCMCkpCZGRkarLJnJzcwEA7dq1wyeffIJPP/1Ul+EREREVGnMcERHpisEUhHfv3oWzszPMzMxgaWmJu3fvqubVr18fSUlJOoyOiIio8JjjiIhIVwymIPT09ERqaioAoHr16ti9e7dq3tGjR+Hg4KCr0IiIiIqEOY6IiHTFYB4q06RJE+zbtw/h4eHo2bMnJk6ciOvXr8PKygqxsbF49913dR0iERFRoTDHERGRrhhMQThu3Dhcu3YNADBmzBjcuHEDK1asgEKhwDvvvIMZM2boOEIiIqLCYY4jIiJdMZiC0MfHR/XYbXNzc8ydOxdz587VcVRERERFxxxHRES6YjD3EBIREREREVHxYkFIRERERERkolgQEhERERERmSgWhERERERERCaKBSEREREREZGJYkFIRERERERkolgQEhERERERmSgWhERERERERCaKBSEREREREZGJYkFIRERERERkolgQEhERERERmSgWhERERERERCaKBSEREREREZGJYkFIRERERERkolgQEhERERERmSgWhERERERERCaKBSEREREREZGJYkFIRERERERkolgQEhERERERmSgWhERERERERCaKBSEREREREZGJYkFIRERERERkolgQEhERERERmSgWhERERERERCaKBSEREREREZGJYkFIRERERERkolgQEhERERERmSgWhERERERERCaKBSEREREREZGJYkFIRERERERkolgQEhERERERmSgWhERERERERCaKBSEREREREZGJYkFIRERERERkolgQEhERERERmSgWhERERERERCaKBSEREREREZGJYkFIRERERERkolgQEhERERERmSgWhERERERERCaKBSEREREREZGJYkFIRERERERkolgQEhERERERmSgLXQdgCEQEAHDnzh0dR0KkXVZWFh49eoTbt2/D0tJS1+EQaVB+fyq/T0k/ML+RvmN+I31nDPmNBWEBPHjwAABQo0YNHUdCRGTYHjx4ACcnJ12HQf+P+Y2IqHgYcn5TiCGXs6UkNzcX165dQ5kyZaBQKHQdDhGRwRERPHjwAB4eHjAz490K+oL5jYioaIwhv7EgJCIiIiIiMlGGWcYSERERERFRkbEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRLEgJCIiIiIiMlEsCImIiIiIiEwUC0IiIiIiIiITxYKQiIiIiIjIRP0fLo/fLi85qhAAAAAASUVORK5CYII=", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import display, Image\n", "display(Image('../illustrations/confusion.png'))" ] }, { "cell_type": "markdown", "id": "5ea04f0c-82a1-466b-a57b-9fa62eae8f35", "metadata": {}, "source": [ "The accuracy that we have measured before consist now in fact of summing up the diagonal and dividing by the total number of data points: $\\texttt{accuracy} = \\frac{TP + TN}{TP+TN+FP+FN}$. We will see in a later section that we can come up with better metrics mixing these variables. In the meantime, let's try to improve our model." ] }, { "cell_type": "markdown", "id": "19da7055-adca-4339-84bd-5920ec76e10e", "metadata": {}, "source": [ "## Imbalance\n", "\n", "Why is our model only good with one type of movement? The reason is that we have a strong imbalance between the two categories:" ] }, { "cell_type": "code", "execution_count": 30, "id": "1a84859e-c267-4cbd-b2f5-5b8b5a14c3fe", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "'Number of \"running\": 800'" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f'Number of \"running\": {len(movement[movement[\"move_type\"]==0])}'" ] }, { "cell_type": "code", "execution_count": 31, "id": "f4418c94-f376-4da5-8ab5-e894f0c0fdf3", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "'Number of \"rotation\": 201'" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f'Number of \"rotation\": {len(movement[movement[\"move_type\"]==1])}'" ] }, { "cell_type": "markdown", "id": "4a020b85-b418-441f-9747-0cce0acb4d2b", "metadata": {}, "source": [ "Let's imagine what would happen if we had even less examples of \"rotation\", e.g. just 2. Then if the model is really dumb and **always** predicts \"running, it would be correct in 99% of cases, without any effort! In such a case, we have to tell the ML model \"be careful and be very attentive to these rare cases when learning!\". The way to do this is to give different **weights** to categories when computing the loss. \n", "\n", "A common solution is to give weights inversely proportional to the number of occurrences e.g. 1/217 and 1/63. For the logistic regression we have to pass a list of per-sample weights. We can do this by adding a column to the dataset:" ] }, { "cell_type": "code", "execution_count": 32, "id": "a469c7c9-6274-4549-a1a2-9e93ee35a1ba", "metadata": { "tags": [] }, "outputs": [], "source": [ "weights = 1/movement['move_type'].value_counts()" ] }, { "cell_type": "code", "execution_count": 33, "id": "afa9fd2b-fbc2-4628-9f84-53fb0778aad7", "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/mk/632_7fgs4v374qc935pvf9v00000gn/T/ipykernel_93173/10943871.py:2: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas. Value '0.00125' has dtype incompatible with int64, please explicitly cast to a compatible dtype first.\n", " movement.loc[movement['move_type']==0, 'weight'] = weights[0]\n" ] } ], "source": [ "movement['weight'] = 1\n", "movement.loc[movement['move_type']==0, 'weight'] = weights[0]\n", "movement.loc[movement['move_type']==1, 'weight'] = weights[1]" ] }, { "cell_type": "markdown", "id": "983e8de8-79a7-4adf-96b6-a0a08c957923", "metadata": {}, "source": [ "Let's try to use this during the fit:" ] }, { "cell_type": "code", "execution_count": 34, "id": "274e09e9-580c-40df-814c-c7be983cec04", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
LogisticRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "LogisticRegression()" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "log_model = linear_model.LogisticRegression()\n", "log_model.fit(X=movement[['z_acc']], y=movement['move_type'], sample_weight=movement['weight'])" ] }, { "cell_type": "code", "execution_count": 35, "id": "556352d7-0420-436b-9a08-dc9c955e59a5", "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/gw18g940/mambaforge/envs/DAVPy2023/lib/python3.10/site-packages/sklearn/base.py:465: UserWarning: X does not have valid feature names, but LogisticRegression was fitted with feature names\n", " warnings.warn(\n", "/Users/gw18g940/mambaforge/envs/DAVPy2023/lib/python3.10/site-packages/sklearn/base.py:465: UserWarning: X does not have valid feature names, but LogisticRegression was fitted with feature names\n", " warnings.warn(\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABa60lEQVR4nO3deVwU9f8H8NeysMsNCoqoqCheeQseiHjlkZplp6ZfrzQzQzM7zA4rNTX7eWSmXZ4dSmWWlaWYFyqaIJZXniiIIInBIscuuzu/P8ZdWVhgWXYZWF7Px2PdYeYzM+/97LK8nc8xMkEQBBARERE5CCepAyAiIiKyJSY3RERE5FCY3BAREZFDYXJDREREDoXJDRERETkUJjdERETkUJjcEBERkUNxljqAqqbX63Hjxg14eXlBJpNJHQ4RERFZQBAE5OTkoGHDhnByKvvaTK1Lbm7cuIGgoCCpwyAiIiIrpKSkoHHjxmWWqXXJjZeXFwCxcry9vSWOhoiIiCyhUqkQFBRk/DtellqX3Biaory9vZncEBER1TCWdClhh2IiIiJyKExuiIiIyKEwuSEiIiKHUuv63FhKp9OhsLBQ6jCoElxcXCCXy6UOg4iIqhiTm2IEQUB6ejqysrKkDoVswNfXFw0aNOCcRkREtQiTm2IMiU39+vXh7u7OP4o1lCAIyMvLQ0ZGBgAgMDBQ4oiIiKiqMLkpQqfTGRMbPz8/qcOhSnJzcwMAZGRkoH79+myiIiKqJdihuAhDHxt3d3eJIyFbMbyX7D9FRFR7MLkxg01RjoPvJRFR7cPkhoiIiByKpH1uDh48iA8++AAJCQlIS0vD9u3bMXLkyDL3OXDgAGbPno0zZ86gYcOGePXVVzFt2rSqCZhIItl5GmTkqJFTUIg67gpodHqo8rXwUMrh6iyHkxMAAVDr9JDJAGcnJ+QX6qAp1MHfUwmdXoAMgJOTDHc0OtwpKIS/p1I8ToEWvu7OcJfLodELKNDqIHeSwdVZDq1egEarg4ezHLi7ryq/EN5uLvBQyAEI0OuBzFwN3BRyuLnI4eoiR6Cvm8Q1RkS1maRXbnJzc9GpUyesXr3aovJJSUkYNmwYIiMjkZiYiNdffx0zZ87Etm3b7Bxp7dWsWTOsXLmyUsfYuHEjfH19bRJPbXQjKx9R3yTi4Y8P43ZeId786TSGrIzFE5/GYdiqQ3hrx2mkZ6vx7x01bmarkXlHg7d+Oo0J6/+El5sL0rLz8V9eAQSZDK9tP4XH1h5BdoHWeJznvkoAIENKVj4W/HoW/6o0kDvJkJqVjw92/QOFsxN0d/cd+mEsRn12FEM/jMXr209BowP+y9dAVaDF45/E4c2fTuNqZi6SM3OlrjYiqsUkvXIzdOhQDB061OLyn3zyCZo0aWL8Y9u2bVvEx8fj//7v//DYY4/ZKUoi+8hR5+B2/u0yy6jyNZj30xkcv/YfJvRqitUHjiD+WhZQpCvRgcsZyNWmYUCb+giq645N+64i/loWlj7WATvP/g0BQNcmdfDu9+cRfy2rxHFmP9ABv539G3v/yUC7Rj7IVF9H4pk87PsnA0+GBSE1JwXLdp8vcd79lzPw8g9pmNArGMm3c/FINwU2HTlnjKVnc38EeLvaoeaoSgnCvYe44t5y0WfjcrH1MFem6DqUsr2U/YqWL/psK7Y+nnhQGx/ODjHa+JhyZwUat+5m02NWRI0aCh4XF4fBgwebrBsyZAjWrVuHwsJCuLi4lNhHrVZDrVYbf1apVHaPsybQaDRQKBRSh1FrXb59GR3WdkC+Nt+yHVyBRSfuLReXehP46aZp+bG/WnacouV+ugngRJGfix6jtPNuNy1jjOWA+ZdCRI4vMNcJN5bqJDt/jUpu0tPTERAQYLIuICAAWq0Wt27dMjtR2+LFi/Huu+9af1JBAPLyrN+/MtzdAQtH+/Tr1w/t27cHAHz11VeQy+V47rnnsGDBAshkMjRr1gxTpkzBpUuXjH2bNm3ahG3btmHevHm4dOkSAgMDMWPGDLz00ksmx87JycGYMWOwY8cOeHt7Y+7cuZgxY4Zx+/Lly7FhwwZcuXIFdevWxYgRI7B06VJ4enqaHOfHH3/Eq6++iuTkZERGRmL9+vUICgqqZCXVTGf+PYN8bT5kkEHprCy1nCAAGq0eAOAid0KhTl9qWRe5EyADCg3lnZ2M/2GUyUo/jqFcoU5vPIbxZ2cnyHBvX7PnLXIew3Fd5E6QySz++NYcwt1/DFcQDFcYjFcUSnsmql1c9dKOV6pRyQ1QcmivcPdSWmlDfufOnYvZs2cbf1apVBX7g5qXBxT7I11l7twBPDwsLr5p0yZMnjwZx44dQ3x8PKZOnYqmTZvimWeeAQB88MEHeOutt/Dmm28CABISEvDkk0/inXfewahRo3DkyBFMnz4dfn5+mDhxovG4H3zwAV5//XW888472LVrF1588UW0adMGgwYNAgA4OTlh1apVaNasGZKSkjB9+nS8+uqrWLNmjfEYeXl5eO+997Bp0yYoFApMnz4do0ePxuHDh21QUTWP4XPbs3FPHJl8pNRylzPu4P7l4iWQdRPCMHlTfKll100IQ31vJUZ8JNbpzzMikKESr1o29HXD0A9jzR7HUG7ypnjjMQw//zwjAs5OTsZ9zSl6HsNx100IQ0NfN7QN9C63LqqNwkLgyhXg6lUgObnk4/p1QKOx/vhOTuJ/WNzcxOeiy8WfXV0BpRJwcREfCoXly87OgFwuns/JqfxlS8o6OcEkWy36XN66ym4v+kxkoRqV3DRo0ADp6ekm6zIyMuDs7FzqjMJKpRJKZen/M3YkQUFBWLFiBWQyGVq3bo1Tp05hxYoVxuRmwIABePnll43lx44di/vvvx9vvfUWAKBVq1Y4e/YsPvjgA5PkJiIiAq+99pqxzOHDh7FixQpjcjNr1ixj2eDgYCxYsADPPfecSXJTWFiI1atXo0ePHgDERKxt27b4888/0b17d7vUhyPw91SgT0t/HLx4C4kpWYgI8cPhS5klykWE+CFDVQAPpdxYJkOlRoaqAAKAYH8P9A7xw6FLmSWOYygXEeKHxJQs9L57LPGYapN9i+sd4odctQ43VQW4kV1gEku1TWwKCoC//wbOnAHOnwf++Ud8XL4MaLXl7+/pCdSvLz7q1bv3XKcO4OMD+PqKz8UfHh78I01URWpUchMeHo6ff/7ZZN3u3bsRFhZmtr+NTbi7i1dQpFDBmZJ79uxpcgUrPDwcy5Ytg04ntnuGhYWZlD937hwefvhhk3URERFYuXIldDqd8XYF4eHhJmXCw8NNRlDt27cPixYtwtmzZ6FSqaDValFQUIDc3Fx43L3y5OzsbHL+Nm3awNfXF+fOnauVyY2Asq84Gvi4K7DksY6Ys+1vrD+UhFVPdQEAkwQnIsQPM/q3hNwJyNfoEdU/BAAwZ9vf2Dq1J27napCdV4CFIzvgzR9PlTjOnG1/Y8vUngj298RnsZfRvWlddG9eF838PbA57ipeGdLauG/RBKd3iB/eeag9cgo0CPRxw8JfzyEixA9R/Vuika8rGlaH4eBaLXDyJHD8OBAfDyQkiElNaUmMhwcQHAw0bQo0aWL6aNxYTGQ4gzlRtSdpcnPnzh1cunTJ+HNSUhJOnjyJunXrokmTJpg7dy5SU1OxefNmAMC0adOwevVqzJ49G8888wzi4uKwbt06bNmyxX5BymQVahqqzjyKvQ5BEEpt5iuPYb9r165h2LBhmDZtGhYsWIC6devi0KFDmDx5colbHpj7Q84ZhMvX0NcNq5/qgowcNe4UFGLhw+2N89O4K8R5buR3q7FAp4eTDFjwcHvkF+qQU1CIQG9XcZ4bQcDiRzrgjkaHXHUhFjzcHoV3jyNAQJCvK94afh8KtDro9AIa+brhlSFtoNHp4CGXGffNKSiEl+u9eW7quCmg1wPfTQuHm4s4141k89xotWICs38/cOAAcOgQkJNTsly9ekDHjkDbtkDr1kCbNuKjUSNeXSFyAJImN/Hx8ejfv7/xZ0PfmAkTJmDjxo1IS0tDcnKycXtwcDB27tyJF198ER9//DEaNmyIVatWcRj4XUePHi3xc8uWLUu9YeR9992HQ4cOmaw7cuQIWrVqZbKPueO2adMGgPgearVaLFu2DE5OYgeyb7/9tsS5tFot4uPjjVdpzp8/j6ysLONxahtjXzFY9ofUx10BH/fqO7qtWT0JT65SAbt2ATt2ADt3AreLDa+vUwfo0QMIDQXCwsTnxo2ZxBA5MEmTm379+pV5pWDjxo0l1vXt2xcnTpwoWZiQkpKC2bNn49lnn8WJEyfw0UcfYdmyZaWWf+mll9CtWzcsWLAAo0aNQlxcHFavXm3SVwYADh8+jKVLl2LkyJGIiYnBd999h19/FccIt2jRAlqtFh999BFGjBiBw4cP45NPPilxLhcXF8yYMQOrVq2Ci4sLoqKi0LNnT2Oy8+eff2L8+PH4448/0KhRIxvWCjmk3Fxg+3bg66+BP/4QOwMb1KkD9O0L9OsnPjp0EDvEElGtUaP63FDZxo8fj/z8fHTv3h1yuRwzZszA1KlTSy3ftWtXfPvtt5g3bx4WLFiAwMBAzJ8/36QzMSAmQQkJCXj33Xfh5eWFZcuWYciQIQCAzp07Y/ny5Xj//fcxd+5c9OnTB4sXL8b48eNNjuHu7o45c+ZgzJgxuH79Onr37o3169cbt+fl5eH8+fO15u7dlva5oSIEATh4EPjiCzGxyS0yC3KrVsBDDwEjRgC9eokjhoio1pIJlnaycBAqlQo+Pj7Izs6Gt7fpaI6CggIkJSUhODgYrq41a2bVfv36oXPnzpW+VYKjqa7v6baz2/D4d4+jd5PeiJ1U+jBrgjgdw9dfAx99BJw6dW99ixbA//4HPPWU2G+GiBxaWX+/i+N/b4gkZGmfm1opOxv48ENg5Urgv//Ede7uYkIzaZLYj4ZXvojIDCY3RBJgs1QZsrKAVauAFSvEZQBo3hx4/nkxqalTR8roiKgGYHLjIPbv3y91CESVo9UCn34KzJt3b8TTffeJPz/+uDhjLhGRBZjcEEmgokPBHd7evcDMmeIEe4A4/8zbbzOpISKrMLkhIulkZQEvvQQYRs75+QHz5wNTp3LEExFZjd8eRBJgnxsAv/wiJjFpaWLH4OeeAxYuZJ8aIqo0JjdEVLXUauDVV8VOw4A4jPuLL4DevaWNi4gcBpMbIgnU2j43ly4Bo0YBhlnGX3wRWLQIqEZzEBFRzcc5yckqzZo144SBlWBolqpV9uwBunUTExs/P7FZavlyJjZEZHNMbqjGkMlk+PHHH6UOw6ZqTZ+bNWuABx4QOxCHhwMnTwLDh0sdFRE5KCY3tZhGo5E6hFqr1jRL6fVi09PzzwM6HTBunDjsu3FjqSMjIgfG5MZB9OvXD1FRUYiKioKvry/8/Pzw5ptvmtx1vVmzZli4cCEmTpwIHx8fPPPMMwCAI0eOoE+fPnBzc0NQUBBmzpyJ3CI3JczIyMCIESPg5uaG4OBgfP3111bFeObMGQwfPhze3t7w8vJCZGQkLl++DAA4fvw4Bg0aBH9/f/j4+JS4+3uzZs0AAI888ghkMpnxZ6rGtFpg8mTx9gkAsGQJsGkTm6GIyO6Y3JRDEATkanIleVT0nqabNm2Cs7Mzjh07hlWrVmHFihX44osvTMp88MEHaN++PRISEvDWW2/h1KlTGDJkCB599FH8/fffiI6OxqFDhxAVFWXcZ+LEibh69Sr27t2L77//HmvWrEFGRkaFYktNTUWfPn3g6uqKvXv3IiEhAU8//TS0Wi0AICcnBxMmTEBsbCyOHj2Kli1bYtiwYcjJyQEgJj8AsGHDBqSlpRl/rqkcfii4Wg2MHg1s3ChOwvfll8CcObwXFBFVCY6WKkdeYR48F3tKcu47c+/AQ+FhcfmgoCCsWLECMpkMrVu3xqlTp7BixQrjFRoAGDBgAF5++WXjz+PHj8eYMWMwa9YsAEDLli2xatUq9O3bF2vXrkVycjJ+++03HD16FD169AAArFu3Dm3btq3Qa/n444/h4+ODrVu3wsXFBQDQqlUrk7iK+vTTT1GnTh0cOHAADz74IOrVqwcA8PX1RYMGDSp0bqpihYXizMK//AIoFMC33wIPPyx1VERUi/DKjQPp2bOnyZWA8PBwXLx4ETqdzrguLCzMZJ+EhARs3LgRnp6exseQIUOg1+uRlJSEc+fOwdnZ2WS/Nm3awNfXt0KxnTx5EpGRkcbEpriMjAxMmzYNrVq1go+PD3x8fHDnzh0kJydX6Dw1hcP2uTH0q/nlF7H56ddfmdgQUZXjlZtyuLu4487cO5Kd29Y8PEyvBOn1ejz77LOYOXNmibJNmjTB+fPnAVS++cTNza3M7RMnTsS///6LlStXomnTplAqlQgPD3fYTs8OORRcEIBnnwWiowEXF2D7dmDgQKmjIqJaiMlNOWQyWYWahqR09OjREj+3bNkS8jJuPNi1a1ecOXMGISEhZre3bdsWWq0W8fHx6N69OwDg/PnzyMrKqlBsHTt2xKZNm1BYWGj26k1sbCzWrFmDYcOGAQBSUlJw69YtkzIuLi4mV6EcgUP1uXn9dWDdOsDJCfjmG3HoNxGRBNgs5UBSUlIwe/ZsnD9/Hlu2bMFHH32EF154ocx95syZg7i4ODz//PM4efIkLl68iB07dmDGjBkAgNatW+OBBx7AM888g2PHjiEhIQFTpkwpcSVm/PjxmDt3bqnniYqKgkqlwujRoxEfH4+LFy/iyy+/NF4ZCgkJwZdffolz587h2LFjGDt2bIlzNGvWDH/88QfS09Px33//AQD+/PNPtGnTBqmpqRWuLylVtLN4tbdxozgaChBvpfD445KGQ0S1G5MbBzJ+/Hjk5+eje/fueP755zFjxgxMnTq1zH06duyIAwcO4OLFi4iMjESXLl3w1ltvITAw0Fhmw4YNCAoKQt++ffHoo49i6tSpqF+/vslxkpOTkZaWVup5/Pz8sHfvXty5cwd9+/ZFaGgoPv/8c+NVnPXr1+O///5Dly5dMG7cOMycObPEOZYtW4aYmBgEBQWhS5cuAIC8vDycP38ehYWFFaqr6sIh+twcPCjeABMA3nwTmDRJ2niIqNaTCQ73X8iyqVQq+Pj4IDs7G97e3ibbCgoKkJSUhODgYLjWsLk4+vXrh86dO/OWCMVU1/d081+bMeHHCXgg5AH8NvY3qcOx3pUrQPfuQGYm8MQTwNatYrMUEZGNlfX3uzh+CxGRdQoKgMceExObbt3EpikmNkRUDfCbiEgCDjEU/MUXxXtE+fuLI6PcbT+6j4jIGhwt5SD2798vdQhUm2zdCnzyiTjj8NdfA40aSR0REZERr9wQSaBG337h4kXAMOv1668DgwdLGw8RUTFMbsyoZX2sHVp1fS+ra1zl0umACROAO3eAvn2Bd96ROiIiohKY3BRhGJacl5cncSRkK4b3srTbPkitxvW5WbYMiIsDvL3Fm2E6s2WbiKoffjMVIZfL4evra7zjtbu7e81sNiAIgoC8vDxkZGTA19e3zFmapVAjb79w5gzw1lvi8sqVQFCQpOEQEZWGyU0xhjtOGxIcqtmq+13Ea0zyXFgoNkdpNMCwYcDEiVJHRERUKiY3xchkMgQGBqJ+/fo1dtZbErm4uFS7KzYGNW4o+MqVQEICUKcO8Pnn4igpIqJqislNKeRyebX9w0hUpVJS7nUcXrYMaNhQ0nCIiMrDDsVEEqhRQ8FffBHIywMiIsSmKSKiao7JDRGV7vffgW3bALkcWLOGt1cgohqB31REEqgRfW4KCoCoKHF55kygY0dp4yEishCTGyIJ1Iih4KtWAZcvi31sOFkfEdUgTG6IJFRt+9xkZgKLFonLixaJk/YREdUQTG6IJFDtb7+wcCGQnQ106gT8739SR0NEVCFMbogkVC373Fy5Anz8sbi8dKnYmZiIqAZhckMkgWo9FPyNN8QZiQcP5h2/iahGYnJDRPecOAFs3SrOQPz++1JHQ0RkFSY3RBKotkPB331XfB4zBujcWdJQiIisxeSGiESJicCOHeJEfYa7fxMR1UBMbogkUC373Biu2oweDbRuLW0sRESVwOSGSALVbij4yZPATz+JfW3efFPqaIiIKoXJDZGEqk2fm/nzxefRo4G2baWNhYiokpjcEEmgWt1+4fRpYPt28aoN+9oQkQNgckMkoWrR52bZMvH50Ud51YaIHAKTGyIJVJuh4DduAF9/LS6/8oq0sRAR2QiTG6La7KOPxNmIe/cGevSQOhoiIptgckMkgWoxFDwnB/jkE3H55Zeli4OIyMaY3BDVVuvXA1lZQMuWwIgRUkdDRGQzTG6IJCB5nxutFlixQlx+6SVxVmIiIgfBbzQiCUg+FPyXX4Br1wA/P2D8eGljISKyMSY3RBKSrM/NmjXi85QpgJubNDEQEdkJkxsiCUh6+4ULF4CYGHHSvmnTpIuDiMhOmNwQSUiSPjdr14rPw4cDzZpV/fmJiOxM8uRmzZo1CA4OhqurK0JDQxEbG1tm+a+//hqdOnWCu7s7AgMDMWnSJGRmZlZRtES2IdlQ8NxcYMMGcXn69Ko9NxFRFZE0uYmOjsasWbPwxhtvIDExEZGRkRg6dCiSk5PNlj906BDGjx+PyZMn48yZM/juu+9w/PhxTJkypYojJ6qhtm4FsrOB5s2BIUOkjoaIyC4kTW6WL1+OyZMnY8qUKWjbti1WrlyJoKAgrDVcNi/m6NGjaNasGWbOnIng4GD07t0bzz77LOLj40s9h1qthkqlMnkQSU2SoeCCcK8j8XPPcfg3ETksyb7dNBoNEhISMHjwYJP1gwcPxpEjR8zu06tXL1y/fh07d+6EIAi4efMmvv/+ewwfPrzU8yxevBg+Pj7GR1BQkE1fB5E1JBkKnpgInDgBKJXApElVf34ioioiWXJz69Yt6HQ6BAQEmKwPCAhAenq62X169eqFr7/+GqNGjYJCoUCDBg3g6+uLjz76qNTzzJ07F9nZ2cZHSkqKTV8HUWVUaZ+b9evF50cfFee3ISJyUJJfly7+5S4IQqlf+GfPnsXMmTMxb948JCQk4Pfff0dSUhKmlTGcValUwtvb2+RBJLUqHwpeUHDv7t+8akNEDs5ZqhP7+/tDLpeXuEqTkZFR4mqOweLFixEREYFXXnkFANCxY0d4eHggMjISCxcuRGBgoN3jJrKlKutz8+OP4n2kmjQBBgyomnMSEUlEsis3CoUCoaGhiImJMVkfExODXr16md0nLy8PTsU6QcrlcgAST4pGVEFV3ufG0CQ1cSJw93eGiMhRSdosNXv2bHzxxRdYv349zp07hxdffBHJycnGZqa5c+difJH73owYMQI//PAD1q5diytXruDw4cOYOXMmunfvjoYNG0r1MoisViV9bq5dA/bsEZcnTrT/+YiIJCZZsxQAjBo1CpmZmZg/fz7S0tLQvn177Ny5E02bNgUApKWlmcx5M3HiROTk5GD16tV46aWX4OvriwEDBuD999+X6iUQWaVKh4Jv2iQOAx8wAAgOtv/5iIgkJmlyAwDTp0/H9FJmSt24cWOJdTNmzMCMGTPsHBWRgxAEwPB79PTTkoZCRFRVJB8tRVQbGW+/YO8rN0eOAElJgJcX8Mgj9j0XEVE1weSGSAJV1gHeMPz70UcBd/eqOScRkcSY3BBJyK4digsLgW+/FZfHjLHfeYiIqhkmN0QSqJKh4Lt2AZmZQEAA57YholqFyQ2RhOza5+abb8Tn0aMBZ8nHDhARVRkmN0QSsHufmzt3gJ9+EpfHjrXvuYiIqhkmN0QSslufmx9/BPLygJAQICzMPucgIqqmmNwQScDufW4Mo6TGjgWq8s7jRETVAJMbIgnZpc9NZiZguGcbR0kRUS3E5IZIAsbbL9jjqsqOHYBOB3TsCLRqZfvjExFVc0xuiCRg12ap778Xnx9/3H7nICKqxpjcEEnI5s1SWVn3mqSeeMK2xyYiqiGY3BBJwG5DwX/+WZyZuF07oE0b+5yDiKiaY3JDJCGb97lhkxQREZMbIinYpc+NSiXecgFgckNEtRqTGyIJ2bTPza+/Amo10Lq12CxFRFRLMbkhkoBd+tx89534/PjjnLiPiGo1JjdEErJZn5s7d4DffhOXOUqKiGo5JjdEEjD0ubFZs9TOnUBBgXgvqY4dbXNMIqIaiskNkQRs3iy1fbv4/NhjbJIiolqPyQ2RhGzSLKXR3GuSGjmy8scjIqrhmNwQScCmQ8FjY4HsbKB+faB7d9sdl4iohmJyQyQhm/S52bFDfB4xAnDirzQREb8JiSRgsz43gnAvuXnoIdsck4iohmNyQyShSve5OX0auHoVcHUFBg60SUxERDUdkxsiCdisz43hqs2gQYC7u22OSURUwzG5IZJQpfvcsEmKiKgEJjdEEjD0ualUs9SNG8Cff4rLDz5og6iIiBwDkxsiCdikWeqXX8TnHj2ABg0qfzwiIgfB5IZIQpVqlmKTFBGRWUxuiCRQ6aHgubnAnj3iMpMbIiITTG6IJGR1n5s//gDUaqBZM6BdO5vGRERU0zG5IZJApfvcGO4lNWwYb5RJRFQMkxsiCVnV50YQ7iU3Q4faNiAiIgfA5IZIApXqc3P+PHDtGqBQAP372y4oIiIHweSGSAKGZimr+twYrtr06QN4eNgwKiIix8DkhkhCVjVLsUmKiKhMTG6IJGB1s1RuLnDggLjM5IaIyCwmN0QSqnCz1L59gEYDNG0KtGljn6CIiGo4JjdEErB6KHjRJikOASciMovJDZGEKtTnhkPAiYgswuSGSAJW9bm5cAFIShKHgA8YYPugiIgcBJMbIglVqM+N4apNZCTg6WmfgIiIHACTGyIJWNXnhk1SREQWYXJDJAFDs5TFfW7y8jgEnIjIQkxuiCRkcbPUvn3iXcCbNAHatrVvUERENRyTGyIJVLhZatcu8ZlDwImIysXkhkhCFjdL7dkjPg8ebL9giIgcBJMbIglUaCh4Whpw7px4xaZfP7vFRETkKJjcEEnIoj43e/eKz126AHXr2jcgIiIHwOSGSAIV6nNjSG44cR8RkUWY3BBJqNw+N4IA/PGHuHz//fYPiIjIATC5IZKAxX1urlwBrl0DnJ3FmYmJiKhcTG6IJGBoliq3z42hSapnT8DDw85RERE5BiY3RBIqt1mKTVJERBXG5IZIAhY1S+n1967cMLkhIrKY5MnNmjVrEBwcDFdXV4SGhiI2NrbM8mq1Gm+88QaaNm0KpVKJFi1aYP369VUULZFtldksdeYM8O+/gLs70KNH1QVFRFTDOUt58ujoaMyaNQtr1qxBREQEPv30UwwdOhRnz55FkyZNzO7z5JNP4ubNm1i3bh1CQkKQkZEBrVZbxZETVY5FQ8ENTVKRkYBCYd+AiIgcSKWSG41Gg6SkJLRo0QLOzhU/1PLlyzF58mRMmTIFALBy5Urs2rULa9euxeLFi0uU//3333HgwAFcuXIFde9OZtasWbMyz6FWq6FWq40/q1SqCsdJZC9l9rnh/DZERFaxqlkqLy8PkydPhru7O9q1a4fk5GQAwMyZM7FkyRKLjqHRaJCQkIDBxe6VM3jwYBw5csTsPjt27EBYWBiWLl2KRo0aoVWrVnj55ZeRn59f6nkWL14MHx8f4yMoKMjCV0lkP+X2udFqgQMHxGX2tyEiqhCrkpu5c+fir7/+wv79++Hq6mpcP3DgQERHR1t0jFu3bkGn0yEgIMBkfUBAANLT083uc+XKFRw6dAinT5/G9u3bsXLlSnz//fd4/vnny4w1Ozvb+EhJSbEoPqKqUGqfm/h4QKUC6tQBOneu0piIiGo6q5qlfvzxR0RHR6Nnz54mX8733XcfLl++XKFjFf9yFwSh1C98vV4PmUyGr7/+Gj4+PgDEpq3HH38cH3/8Mdzc3Erso1QqoVQqKxQTkb2V2+fG0CTVrx8gl9s9HiIiR2LVlZt///0X9evXL7E+NzfXshsBAvD394dcLi9xlSYjI6PE1RyDwMBANGrUyJjYAEDbtm0hCAKuX79egVdAJC1Ds1SpfW44vw0RkdWsSm66deuGX3/91fizIaH5/PPPER4ebtExFAoFQkNDERMTY7I+JiYGvXr1MrtPREQEbty4gTt37hjXXbhwAU5OTmjcuHFFXwaR5Mz+ZyA/Hzh8WFxmckNEVGFWNUstXrwYDzzwAM6ePQutVosPP/wQZ86cQVxcHA4YOkFaYPbs2Rg3bhzCwsIQHh6Ozz77DMnJyZg2bRoAsb9MamoqNm/eDAAYM2YMFixYgEmTJuHdd9/FrVu38Morr+Dpp5822yRFVF2V2SwVFweo1UBgINC6ddUFRUTkIKy6ctOrVy8cPnwYeXl5aNGiBXbv3o2AgADExcUhNDTU4uOMGjUKK1euxPz589G5c2ccPHgQO3fuRNOmTQEAaWlpxpFYAODp6YmYmBhkZWUhLCwMY8eOxYgRI7Bq1SprXgaR5Mw2SxVtkrKwmZeIiO6xep6bDh06YNOmTZUOYPr06Zg+fbrZbRs3biyxrk2bNiWasohqmjKHgvOWC0RElWJ1cqPT6bB9+3acO3cOMpkMbdu2xcMPP2zVZH5EtVWJPjcqFXD8uLjMyfuIiKxiVSZy+vRpPPzww0hPT0fru30CLly4gHr16mHHjh3o0KGDTYMkcjSl9rk5cADQ6YCQEKCUW5AQEVHZrOpzM2XKFLRr1w7Xr1/HiRMncOLECaSkpKBjx46YOnWqrWMkclgl+tzwlgtERJVm1ZWbv/76C/Hx8ahTp45xXZ06dfDee++hW7duNguOyFGVeuWG89sQEVWaVVduWrdujZs3b5ZYn5GRgZCQkEoHReTojJP4Fe1zk5EBnDolLvfvL0FURESOwarkZtGiRZg5cya+//57XL9+HdevX8f333+PWbNm4f3334dKpTI+iKh0Js1S+/aJzx07AvXqSRMQEZEDsKpZ6sEHHwQAPPnkk8b/eRr+JzpixAjjzzKZDDqdzhZxEjkUs81SbJIiIrIJq5KbvXv3WnwPKSIqncnvEee3ISKyCauSm379+tk4DKLapcQkfteuAZcvi3cAj4yUJigiIgdhVZ+b4OBgzJ8/3+TWCERUccY+N4Ymqe7dAW9v6QIiInIAViU3s2fPxk8//YTmzZtj0KBB2Lp1K9Rqta1jI3JYJfrccH4bIiKbsSq5mTFjBhISEpCQkID77rsPM2fORGBgIKKionDixAlbx0jkcEyGggsCOxMTEdmQVcmNQadOnfDhhx8iNTUVb7/9Nr744gt069YNnTp1wvr168u+OSARic6dA9LTAVdXIDxc6miIiGq8St3lsrCwENu3b8eGDRsQExODnj17YvLkybhx4wbeeOMN7NmzB998842tYiVyGIZmKRlk95qkIiLEBIeIiCrFquTmxIkT2LBhA7Zs2QK5XI5x48ZhxYoVaNOmjbHM4MGD0adPH5sFSuSIZDIZm6SIiGzMquSmW7duGDRoENauXYuRI0fCxcWlRJn77rsPo0ePrnSARI7I2GSr1wP794vLTG6IiGzCquTmypUraNq0aZllPDw8sGHDBquCIqotZKmpQFaWOPy7a1epwyEicghWdSju378/MjMzS6zPyspC8+bNKx0UkaMzDgW/cEF87tcPcK5UFzgiIrrLquTm6tWrZu8ZpVarkZqaWumgiGoL2YWL4gLntyEispkK/Vdxx44dxuVdu3bBx8fH+LNOp8Mff/yBZs2a2Sw4Ikdl7HNz5Yr4zP42REQ2U6HkZuTIkQDEER4TJkww2ebi4oJmzZph2bJlNguOyFEZh4JrCoH69YF27SSOiIjIcVQoudHr9QDEe0sdP34c/v7+dgmKqFYZMAAoendwIiKqFKv63CQlJVmU2HTo0AEpKSnWnILIoRlvvwCwSYqIyMYqdfuF8ly9ehWFhYX2PAVRzaTVAgBkApjcEBHZmF2TGyIyT/j3X3HBry4QHCxtMEREDobJDZEUMjIAALLWrSUOhIjI8TC5IZKA8K+Y3KB1m7ILEhFRhTG5IapqmZniLRcAyFrxyg0Rka0xuSGqavv2GW6+IN5TioiIbKrSyU1BQUGp2z799FMEBARU9hREjmXvXgh3p7WRcX4bIiKbsyq50ev1WLBgARo1agRPT09cuTuF/FtvvYV169YZy40ZMwYeHh62iZTIUfzxh9QREBE5NKuSm4ULF2Ljxo1YunQpFAqFcX2HDh3wxRdf2Cw4Iodz/Tpw4cK9KzfglRsiIluzKrnZvHkzPvvsM4wdOxZyudy4vmPHjvjnn39sFhyRw9m7V3z29QXAZikiInuwKrlJTU1FSEhIifV6vZ4zEhOV5W6TlFCvnsSBEBE5LquSm3bt2iE2NrbE+u+++w5dunSpdFBEDkkQ7l25uZvcsFmKiMj2KnRXcIO3334b48aNQ2pqKvR6PX744QecP38emzdvxi+//GLrGIkcw8WLYp8bhQJC3TrAbakDIiJyTFZduRkxYgSio6Oxc+dOyGQyzJs3D+fOncPPP/+MQYMG2TpGIsdgGCXVqxdwt68a+9wQEdmeVVduAGDIkCEYMmSILWMhcmyGJqkBAyAIx6WNhYjIgVl15WbSpEn4448/IAhC+YWJCNDrgX37xOX774dwd45i9rkhIrI9q5KbzMxMDB8+HI0bN8ZLL72ExMREW8dF5Fj++ku8p5SnJ9Ctm9TREBE5NKuSmx07diA9PR1vv/02EhISEBYWhvvuuw+LFi3C1atXbRwikQMwNEn16QO4uBiverLPDRGR7Vl9bylfX19MnToV+/fvx7Vr1zBp0iR8+eWXZue/Iar1DJ2J77/fZDWbpYiIbK/SN84sLCxEfHw8jh07hqtXr/JGmUTFFRYCBw+Ky3eTGwHsr0ZEZC9WJzf79u3DM888g4CAAEyYMAFeXl74+eefkZKSYsv4iGq+P/8EcnMBf3+gQweTTWyWIiKyPauGgjdu3BiZmZkYMmQIPv30U4wYMQKurq62jo3IMRiapPr3B5zE/09wpCERkf1YldzMmzcPTzzxBOrUqWPreIgcT5H5bQw4FJyIyH6sSm6mTp1qXL5+/TpkMhkaNWpks6CIHEZeHhAXJy4X60xMRET2YVWfG71ej/nz58PHxwdNmzZFkyZN4OvriwULFkCv19s6RqKa69AhQKMBgoKAIiMJORSciMh+rLpy88Ybb2DdunVYsmQJIiIiIAgCDh8+jHfeeQcFBQV47733bB0nUc20Z4/4PHAgwESGiKhKWJXcbNq0CV988QUeeugh47pOnTqhUaNGmD59OpMbIoNS5rdhnxsiIvuxqlnq9u3baNOmTYn1bdq0we3btysdFJFDuHULMNyapJT+NmyWIiKyPauSm06dOmH16tUl1q9evRqdOnWqdFBEDmHfPkAQgPbtgQYNTDZxKDgRkf1Y1Sy1dOlSDB8+HHv27EF4eDhkMhmOHDmC5ORk/Pbbb7aOkahmKqVJqig2SxER2Z5VV2769u2L8+fP49FHH0VWVhZu376NRx99FBcuXEBkZKStYySqmYp2Ji6Gt18gIrIfq67cAICfnx8eeugh9OzZ0zj8Oz4+HgBMOhoT1UpJScDly4BcDvTtW2Izh4ITEdmPVcnN77//jvHjxyMzM7NE3wGZTAadTmeT4IhqLEOTVM+egJeXtLEQEdUyVjVLRUVF4YknnsCNGzeg1+tNHhVNbNasWYPg4GC4uroiNDQUsbGxFu13+PBhODs7o3Pnzla8AiI7K6e/DYeCExHZj1XJTUZGBmbPno2AgIBKnTw6OhqzZs3CG2+8gcTERERGRmLo0KFITk4uc7/s7GyMHz8e93M6e6qO9Pp7yY2Z/jZERGRfViU3jz/+OPbv31/pky9fvhyTJ0/GlClT0LZtW6xcuRJBQUFYu3Ztmfs9++yzGDNmDMLDwysdA5HNnToF/Psv4OEB9Ohhtgj73BAR2Y9VfW5Wr16NJ554ArGxsejQoQNcXFxMts+cObPcY2g0GiQkJOC1114zWT948GAcOXKk1P02bNiAy5cv46uvvsLChQvLPY9arYZarTb+rFKpyt2HqFIMV2369AEUijKLslmKiMj2rEpuvvnmG+zatQtubm7Yv3+/yf8+ZTKZRcnNrVu3oNPpSjRtBQQEID093ew+Fy9exGuvvYbY2Fg4O1sW+uLFi/Huu+9aVJbIJsoYAm7AoeBERPZjVbPUm2++ifnz5yM7OxtXr15FUlKS8XHlypUKHav4ZXlBEMxeqtfpdBgzZgzeffddtGrVyuLjz507F9nZ2cZHSkpKheIjqhCNBjhwQFy2oL8Nm6WIiGzPqis3Go0Go0aNgpOTVbkRAMDf3x9yubzEVZqMjAyzHZVzcnIQHx+PxMREREVFAQD0ej0EQYCzszN2796NAQMGlNhPqVRCqVRaHSdRhRw9CuTlAfXqibddKAVvv0BEZD9WZScTJkxAdHR0pU6sUCgQGhqKmJgYk/UxMTHo1atXifLe3t44deoUTp48aXxMmzYNrVu3xsmTJ9GjlI6bRFWq6BDwMpJ/DgUnIrIfq67c6HQ6LF26FLt27ULHjh1LdChevny5RceZPXs2xo0bh7CwMISHh+Ozzz5DcnIypk2bBkBsUkpNTcXmzZvh5OSE9sX+J1y/fn24urqWWE8kGQv62xARkX1ZldycOnUKXbp0AQCcPn3aZFtF+hCMGjUKmZmZmD9/PtLS0tC+fXvs3LkTTZs2BQCkpaWVO+cNUbWhUgHHjonL5SQ3HApORGQ/MqGWNf6rVCr4+PggOzsb3t7eUodDjuTnn4GHHgJatAAuXSqzaJ8NfRCbHIvvnvgOj9/3eBUFSERUc1Xk77f1PYKJyNTvv4vPgweXW5R9boiI7IfJDZGt7NolPj/wgMW7sFmKiMj2mNwQ2cKlS8Dly4CzM9C/f7nFa1lrMBFRlWJyQ2QLhqs2ERGAl5fFu7FZiojI9pjcENlCBZukePsFIiL7YXJDVFkaDbB3r7g8ZIhFu3AoOBGR/TC5Iaqsw4eB3FwgIADo1EnqaIiIaj0mN0SVZWiSGjy4zFsuFMWh4ERE9sPkhqiyDMmNhU1SRERkX0xuiCojPR04eRKQySyavM+AfW6IiOyHyQ1RZezeLT537QrUq1fh3dksRURke0xuiCrDyiYpDgUnIrIfJjdE1tLr7125qcAtF4pisxQRke0xuSGy1okTwK1b4ozEPXtWaFfefoGIyH6Y3BBZy3AX8IEDAReXCu3KoeBERPbD5IbIWr/9Jj5zCDgRUbXC5IbIGrduAXFx4vLw4RXenUPBiYjsh8kNkTV++w0QBKBzZ6BxY6mjISKiIpjcEFnj11/FZyuu2gDsc0NEZE9MbogqqrDwXmfiBx+s1KHYLEVEZHtMbogq6vBhIDtbnJG4WzerDsGh4ERE9sPkhqiifvlFfB42DJDLrToEm6WIiOyHyQ1RRRmSm0o2SRERkX0wuSGqiIsXgfPnAWfnCt0FvDgOBScish8mN0QVYRgl1bcv4O0tbSxERGQWkxuiirBRkxT73BAR2Q+TGyJLqVTAgQPiMvvbEBFVW0xuiCy1axeg1QKtWgEhIZU6FPvcEBHZD5MbIktt3y4+P/ywzQ7JZikiIttjckNkCbX6Xn+bRx+t9OEMfW6IiMj2mNwQWWLvXiAnBwgMBLp3r/Th2CxFRGQ/TG6ILPHDD+LzyJGAE39tiIiqM35LE5VHpwN++klctkGTFMCh4ERE9sTkhqg8R44A//4L1KkjTt5HRETVGpMbovIYmqRGjABcXGxySPa5ISKyHyY3RGURhHtDwB95RNpYiIjIIkxuiMpy8iRw7Rrg7l6pG2UWxz43RET2w+SGqCyGJqkHHhATHBtjsxQRke0xuSEqi6FJykajpAwMfW6IiMj2mNwQlebsWeDMGbET8fDhNj00m6WIiOyHyQ1RaaKjxechQwBfX0lDISIiyzG5ITJHEICtW8Xl0aPtcHgOBScishcmN0Tm/PUXcOEC4OoKPPSQ1NEQEVEFMLkhMsdw1Wb4cMDLy+aHZ58bIiL7YXJDVJwg3OtvM2qUtLEQEVGFMbkhKu7PP4GrVwEPD5uPkjJgnxsiIvthckNUnKFJ6qGH7DJxX1FsliIisj0mN0RF6XTAt9+Ky3YYJWVg6HNDRES2x+SGqKi9e4EbN4A6dcT5beyEzVJERPbD5IaoqM2bxefRowGlUtpYiIjIKkxuiAxycu7dKHP8eLueikPBiYjsh8kNkcEPPwB5eUCrVkCPHlJHQ0REVmJyQ2RgaJIaPx6wc18Y9rkhIrIfJjdEAJCcDOzbJy7/73/SxkJERJXC5IYIAL7+WpyZuF8/oGlTu5+OfW6IiOyHyQ2RIACbNonLdu5IXBybpYiIbE/y5GbNmjUIDg6Gq6srQkNDERsbW2rZH374AYMGDUK9evXg7e2N8PBw7Nq1qwqjJYcUGwucPy/ebuHxx6vklIY+N0REZHuSJjfR0dGYNWsW3njjDSQmJiIyMhJDhw5FcnKy2fIHDx7EoEGDsHPnTiQkJKB///4YMWIEEhMTqzhyciiffSY+jxljlzuAm8NmKSIi+5EJEv4XskePHujatSvWrl1rXNe2bVuMHDkSixcvtugY7dq1w6hRozBv3jyLyqtUKvj4+CA7Oxve3t5WxU0OJDMTaNQIUKuB48eBsLAqOW3QiiBcV11H/DPxCG0YWiXnJCKqySry91uyKzcajQYJCQkYPHiwyfrBgwfjyJEjFh1Dr9cjJycHdevWLbWMWq2GSqUyeRAZffmlmNh06QKEVl2SwaHgRET2I1lyc+vWLeh0OgQEBJisDwgIQHp6ukXHWLZsGXJzc/Hkk0+WWmbx4sXw8fExPoKCgioVNzkQQbjXJDV1qt3ntiEioqoheYfi4v9zFQTBov/NbtmyBe+88w6io6NRv379UsvNnTsX2dnZxkdKSkqlYyYHceQIcO4c4O4u9repQuxzQ0RkP85Sndjf3x9yubzEVZqMjIwSV3OKi46OxuTJk/Hdd99h4MCBZZZVKpVQ8gaIZM6nn4rPTz0FsP8VEZHDkOzKjUKhQGhoKGJiYkzWx8TEoFevXqXut2XLFkycOBHffPMNhg8fbu8wyVHdvAlER4vLU6dW+enZ54aIyH4ku3IDALNnz8a4ceMQFhaG8PBwfPbZZ0hOTsa0adMAiE1Kqamp2Hz3nj9btmzB+PHj8eGHH6Jnz57Gqz5ubm7w8fGR7HVQDfTpp4BGI94gs3v3Kj89m6WIiOxH0uRm1KhRyMzMxPz585GWlob27dtj586daHp3+vu0tDSTOW8+/fRTaLVaPP/883j++eeN6ydMmICNGzdWdfhUU2k0gGH6gRdekDYWIiKyOUnnuZEC57khfPUVMG4c0LAhcPUq4OJS5SE0+L8GuJl7E39N+wsdAzpW+fmJiGqaGjHPDZEkBAH48ENx+bnnJElsiIjIvpjcUO0SFwfExwNKJfDss5KFwT43RET2w+SGapeVK8XnMWOAevUkDYWIiOyDyQ3VHhcuAN9/Ly7PmiVpKBwKTkRkP0xuqPZYulTsczN8ONCRnXiJiBwVkxuqHa5fB+7Ol4S5c6WNBexzQ0RkT0xuqHZYvhwoLAT69AEiIqSOhs1SRER2xOSGHF9m5r27f1eDqzZERGRfTG7I8a1aBeTmAl26AEOGSB0NADZLERHZE5MbcmyZmcCKFeLy3LkAm4GIiBwekxtybO+/D+TkAJ07A489JnU0RuxzQ0RkP0xuyHHduAGsXi0uL1wIOPHjTkRUG/DbnhzXe+8B+flAeDgwbJjU0ZhgnxsiIvthckOOKSkJ+PxzcXnRIva1ISKqRZjckGN6801xXpuBA4F+/aSOpgT2uSEish8mN+R44uKAb74Rr9YsWSJ1NGaxWYqIyH6Y3JBj0euBF14QlydOBEJDJQ2HiIiqHpMbcixffgkcPw54eop9baopNksREdkPkxtyHHfu3Lu9wptvAg0aSBsPERFJgskNOY7584G0NKB5c2DWLKmjKRP73BAR2Q+TG3IMJ06Id/4GgJUrAaVS0nCIiEg6TG6o5tNqgSlTAJ0OePJJYMQIqSMqF/vcEBHZD5MbqvlWrgQSEwFfX+DDD6WOhoiIJMbkhmq2K1eAefPE5WXLakwnYva5ISKyHyY3VHNptcC4ceL9o/r3ByZNkjoii7FZiojIfpjcUM21aBFw5Ajg7Q2sX8/7RxEREQAmN1RTxcWJQ78BYO1aoFkzScOpKDZLERHZD5MbqnlUKuB//xNHR40dC4wZI3VERERUjTC5oZpFrxfvGXXlCtC0KfDxx1JHZBX2uSEish8mN1SzLFkCbN8OKBRAdDTg4yN1REREVM0wuaGa47ffxHtGAeIVmx49pI2nEtjnhojIfpjcUM1w4YLYt0YQgGefFWckJiIiMoPJDVV/6enAkCFAVhbQs6dDzELMPjdERPbD5Iaqt5wcYNgw4OpVICQE+Oknh7gpJpuliIjsh8kNVV9qNfD44+J9o+rVA37/HahfX+qoiIiommNyQ9WTWg088QSwezfg7g78+ivQooXUUdkMm6WIiOyHyQ1VP4bE5uefAVdXsSmqWzepoyIiohqCyQ1VL/n5ponNzz8DAwdKHZXNsc8NEZH9OEsdAJHR7dvAQw8Bhw87dGJDRET2xeSGqoerV4GhQ4F//gF8fcWmqD59pI7KbtjnhojIftgsRdKLjRXnr/nnH6BxY+DQIYdObIB7zVJERGR7TG5IOoIgTsg3YABw8ybQsSMQFwe0ayd1ZFWGfW6IiGyPyQ1JIytLvJ3CrFmAVgs89RRw5Ih45aYWYbMUEZHtMbmhqrdvn3iVZutWwNkZWLkS+PprwMND6siIiMgBMLmhqpOTI16pGTAASEkRb6cQGwu88AJQi65gGDoTA2yWIiKyByY3ZH+CAHz/PdCmzb2bXj77rHhbhZ49pY2NiIgcDoeCk32dOAHMmQPs2SP+3KIFsGYNMHiwtHFJqOhIKfa5ISKyPV65Ifu4eFHsMBwaKiY2CgXw9tvA6dO1OrEhIiL745Ubsq0TJ4D33xebofR6cd3YscCCBUBwsLSxVRPsc0NEZF9MbqjytFrgt9+A1avFu3gbDBsGLFwIdOkiXWzVECfwIyKyLyY3ZL3kZGD9emDdOuD6dXGdkxMwejTw6qtAp07SxlcDsM8NEZHtMbmhirlxQ2xyio4WJ90z8PMDJk4Epk8HmjeXLLyagM1SRET2xeSGyqbXA/HxwO+/i01Px46JQ7sBcW6afv2AqVOBRx4BlEpJQyUiIgKY3FBxOp04ounQIfGxZw9w65ZpmfBwYNQo4PHHgUaNpImzBuNQcCIi+2JyU5vp9cClS8DJk+IjIQE4ehRQqUzLeXsDAwcCQ4cCDzxQ6+7/RERENQuTm9ogP19MYi5eBC5cEJ/PnQP+/hvIzS1Z3stLvDoTESE2O4WHAy4uVR62o2KfGyIi+5I8uVmzZg0++OADpKWloV27dli5ciUiIyNLLX/gwAHMnj0bZ86cQcOGDfHqq69i2rRpVRixedl5Gty6o4GqoBDebi7w91CgQKtHVp4GACAAyMnXwkMph4fSGb5uLvBxVyA7T4PbuRrkFepQoNGhrocCap0eOflaeLo6w0kmdm1RODlBAJBXqEOeWgdvN/GtE3LvwCM7C87/3oT2WgqE69fh+W8aXNLSILueAuWNVLikpZYat97VFeq27aBq3Q5Cp05Az3DcCg6BXKGEkwxwdXaCkK2GXlAjv3iMBVp4KOTwVDqjQKuDKl8LD6Uz5E6A0lmOPI0OuepC+Hko4QSxCUYrCMjX6JCn0cHH3RmuznLkFeqgyi+Et6sLPBVy5Gp1uJOvRR0PBTRaPe6otfBUOgMyQAaxPgz7OQFQODtBLwD5d+vGy9UZShcnFOr0EAC4O8uRW6hDdl4hfNzEcxQKAgoK9bhTIL4nbi5yAOLxnZ1kEPQC4CTDHY0OOQXifgq5E27nauDh6gwPFzlyNTrcKSiEn5cSGq1YH16uznCROyHzjhqeri7wUsghA6ADoNULUBfqoBM0xvr/Jz0b9T3kcHaS4dYdNZQucri6yKFwkiFXq4OgFz87uep7x87K08BN4SymRTJAKXeCVtDDWeaE23kauLmI70m+VgdVnrifwtkJ/93d5uYiFz9XkOG/fA08Xe99Xv/L0xg/p+4KOeq4K+DjrjB+xv+9o4ZWL0AQxJjEz6gMzk4y+HncK2vu98JT6QxXZyfkFmrFwAUgT6OFl6tYt1lFYil+HIMbWfnIzi/EnYJC+HsqodHpkafRwdvNBZ5KZ+SqtcjOv/c7aPgdy8hRIyu/EJ5KOTwVztALAnI1OuRqdPB1c4G3m4vZfQ2vISuvELkarbF8fS9lqTHag6Ees/M1cFeWXuc3VQX4L1cDVYEW3m7OqOOuQIC3a5XFV/T7ryrrp6JxVYd4bRWDpcepyPmqQ/1UlqTJTXR0NGbNmoU1a9YgIiICn376KYYOHYqzZ8+iSZMmJconJSVh2LBheOaZZ/DVV1/h8OHDmD59OurVq4fHHntMglcgupGVjznb/kbsRbFvirtCjvUTu+GLg5cxpmdTbDiUhNhLmcbyESF+mDGgJRr7uOJGRjbW//4XrlxJx/wBTfFl3AVcSUqHlzoPHpp8dK4jx6BGbtDcykTSuavQZtxC3XwVPPNU8FeroNSoLYox190LF30CkVSnIZLqNoJ7+zYYMW4o5p7Kx8GkbLFQFtD7kgwL27tj5pYTeGN4WzjJZNDpBXy07xISk7Ow6qkuWL7nAg4XeT29Q/wwMSIYM7ckwl0hx9apPfH69lNITM7Cx2O6QhAKUNdTiYzsAqzedwmHL2XCXSHHqqe6YMPhpBLHmjeiHXLU2hLniQjxw5TezeGukOPzg/9gXHgzuCvkxviKlo0M8UfUgBAUFOqwOe4qnurRFDO3JAIA1k0Iw5p9l0q+J/1bQu4EODsBdTxc8cb2UyXOP7l3MFQFWnxx6AoSk7OwZmxXfPjj6RLHmhQRjOe+PoG1Y7uIr12lxuexVzA+vBk+O3jOWPaJT44hMiQIUf1D4OepxJjPj6J1Ay/MHNASdTwUmP/rmRIxTIoIxsx1f6JLE19MigjGlmPX8OoDbbF0zz94LDQI47b8ia5NfI3vSZ5GZ9xv3BZxP8NrvaPWYfKmeKwe0xUf771o9nPatK47AOCtH09jdI8mJd4zw7EX7zyHdx9uj4a+bgBK/l4Y3t+3HmyH938/h73//FviGE99fgxhTetgyWMdjccxuJaZa/xcrXqqC1b+cbHUz2GeRodBbevjrQfvwxvbTyP20r0YIkP8Mb1/C0zeFI88jc64blLvZoj6Rty3T0t/LHmsI5wAXL2dh4/2mp4rsqU/3jcToz2Yq0dzdZ6cmYu5xT6zvUP8sOiRDmji51Gl8Rnqryrqp6JxLRzZHvN/OYs95zJM1ldlvLaqM0uPU5HzVdf3s6JkQtFr5FWsR48e6Nq1K9auXWtc17ZtW4wcORKLFy8uUX7OnDnYsWMHzp2798dh2rRp+OuvvxAXF2fROVUqFXx8fJCdnQ1vb+9Kv4bsPA2itiSafBCiBoQgMfk/dGlSByeT/8OhIl82BhEhfnh72+tQxu2rdAw6ZxdkuHohw7Mu/vWoY3z2Cm6M0J7tsDVDhoP/6kzuvD2hV1OcSc1G/LWsEscLa+qLlwe3RkLyf5AB2PtPBuKvZZW7T7tGPmgX6I1v41OM5et7KdGkrjuSb+dh393jlHf+V4e0wr5/MnDczLZX7m5r18gHAV7i6Ky9RY5bVLemvujfpj5u5qhxJjUb7Rr5AECZr2FAm/q4r6E3Vu+9VOox+7Wpjw92XcCEXk1xNjXbbJxhTX3xZFgQ3BRy42tv18gHZ1Oz8ee1DNxwFa82BuV/Cye4IyLEDw92CER9b1dM3hSPyBA/DO0QiNe3ny5x7IgQP3RpUger914yLp9M/g+TIoKx/nBSiW2r914yu9+DHQIhAAjwdsX6YglL0XM92LEhIACp2flITP6v1HJdmtTB3ylZ+OgpcdLG4r8XBr1D/NC5SFzmXleflv746Kkuxv8t3sjKxyvf/4XDlzKNv19lxbF67yWLyxlEhvihU5F1fVr6Y3r/kBKJjUHxGO3B3PdL8dfwd0oWljzW0Vg/xfUO8cOyJzvb5QpOWfFVRf1YE1dpn7+qitdWdWbpcSpyvur6fhpU5O+3ZFduNBoNEhIS8Nprr5msHzx4MI4UnT+liLi4OAwudl+iIUOGYN26dSgsLISLmX4harUaavW9qxuq4p1lK+nWHU2JD0KXIF+s3nsJT0cEl/gFMjh8KRMvtz6Pn21yU+xCALfvPoq5cve5WMK96MTdBTPfd6k3gZ++LLbS1YJ9bpZSvthxyjv/CwdK3zbr7jaTc5UR049FyhWPz1x5S8r8eBOW1cevpuuMxzZT/vClTDwdEYz63mLCFnspExMjzN+uwlC26PLqvZcwZ2gbs9vK2g8A6nsrzf5RNFeurM+zIY5bd8RmN3NfkABw6FImJpl5bUXPdfDiLdy6o7n3pZtfaIzR8PtVXryWljMoXucHL97CKw+0LrVuisdoD+a+XwyK1nnR+inu0KVM/JersUtyU1Z8VVE/pSkrrtI+f1UVr63qzNLjVOR81fX9tIZkyc2tW7eg0+kQEBBgsj4gIADp6elm90lPTzdbXqvV4tatWwgMDCyxz+LFi/Huu+/aLvBiVAWFJdaptXqT59IUtOsKWeq/AGRwkYt9RIpzkYv3NjW3rWiZ0ra7ODuh0EwcZe0DiP1YDNf0DOXK28dF7gTIYDyfIXbIAAimr6HMmC3YZjw2yq8bQxlL61ImAzRlvHdFYyjzWM53YxRgtryrvjNkRbJOtVaPOwU6k59LU3SbYdmwr7ltluxnybksKZdTUFjuDSZKO2bR9TlFfrdU+YVmy5R1DEvLlbWuvLrJMfP7b0vmvl+KMsRbtH7MH0drs5hMj1v2ee1dP6WxtN6Kq4p4bVVnlh6nIuerru+nNSTvUFx8ng9BEMqc+8NceXPrDebOnYvZs2cbf1apVAgKCrI23BK8XUteLVLe/aNmeC7NsmFfYsRHhwGI/UAmb4ovUWbdhDAAMLutaJnStv88I8J4Dkv3AYDfXojEjax8k3OXt8+6CWGo7600eU2A+D/+DJXaZN+yjmXJNsOxi8ZXWnlDGUvrMtDXDcM+jC2zjOF4ZR3r5xkRAGB87eWVVzo7wdNVbvJzWWWLLxv2NbfNkv0sOZcl5bzM/E5Yesyi64sex9vNxWyZso5habmy1pVXN5a81sow9/1SlCHeovVj/jj2+aovLz57109pLK234qoiXlvVmaXHqcj5quv7aQ3LvrXswN/fH3K5vMRVmoyMjBJXZwwaNGhgtryzszP8/PzM7qNUKuHt7W3ysCV/TwX6tPQ3WZeYkoWIED8kpmQhMsR8XBEhfshVa43bDfsUl5iShQxVgdltgNgR8qaqoNRzZKjUpR63dynH7B3iBzcXJ9xUFZicu7QYDecSY1Ubj5uYkoWbqgLkqrUlXkNZx8pQFSAyxN/stpuqAkQaz1VQTt34IUNVYPJ+lPcaMlQFkEEotW4iQ/yM9S2+v+bjNNR90ddefvkCZKjUJrGXVjYxJctkuXeR97r4ttL2y1AV3H2PzX9GjOVy1MjIUVv0/vdp6Q9/T4XZ3wuD3sXiMhef4TgGPm4uJp+r8uIwlCvtfSxeNwCMnyuDPi39kavWlXqu4jHaQ1n1WLTOi9ZPcb1D/FDHwz5xlhVfVdRPaaz5/FVVvLaqM0uPU5HzVdf30xqSJTcKhQKhoaGIiYkxWR8TE4NevXqZ3Sc8PLxE+d27dyMsLMxsf5uq4OOuwJLHOpp8INYfSsKMAS3xzw0VJvUOLvEH7d5oKTdEDWiJiBA/rD+UhEkRwSW+SM/eyEZos7qI6h9SYltkiD8mRwajRT0Ps+eYFBGMOdv+xoz+LUtsP3sjGwtHdijxhdg7xA8LH+mAmVsS0aKeB0Lqe2JG/7Jj7H33XOsPJWHOtr/xzkPt0Ptu+UAfN8hlQPfmpq/BcCxz5w8LrovJkSXPExHih8C7dfbPDRUa+rqZxFe8bqIGtERDXzecu5FtjG/9oSRE9Q9BZEsz70n/lgip74kCjdZs3USE+GFS72AE+rgZX9/kyGCzxzLUvfja/RDVPwRnb2SXWj6qf0uEBdfFnG1/iz8PaInQZnXN1oHhtRiWz93IxrwR7fB9QopxW9H3xNx+htca6OMmfkYGtDRfJwNaon+reujXqh7+SVOZff8Nxz6fpsL7j3WEz93h48V/Lwzv77wR7XD2Rnapr6vP3ZFIRdv2G/q64b1HOhjrvbzPIQCcT1Nh0SMdSryuyBB/RPVvaSxnWDep9719DTE0q+uOGQPMfL7MxGgPpdVj8Tpv6OuGRY+Y/31e9EgHuw0HLy0+c+9hVSorrkWPdMD5NFWJ9VUVr63qzNLjVOR81fX9tIako6Wio6Mxbtw4fPLJJwgPD8dnn32Gzz//HGfOnEHTpk0xd+5cpKamYvPmzQDEoeDt27fHs88+i2eeeQZxcXGYNm0atmzZYvFQcFuPljIwzAuQU1AIL1cX+Huamefm7rwwHgpn+LqXM89NgTi3i5MM4lwmxea58XIT5znRCwLcnOWQOcmQq9YiT6ODp6szXJzE+VDclc7wVMihFQTkae7NkaOQOyFXrYGPm9I4l4vX3XlmsvPVkMvFcxsu3xrmkSkeo/vdeW7UFZnn5u5rKD7PjdfdeWHMzXPjoXQ2DvZyKjrPjQxQyE3nufF0dYarYZ4bAXB3Eee5KXqOovPcuCvlcC9nnhtvVxconcV5ZDyURea5URfCz7PkPDe3c9XwUJqZ50arg1wmgwBAlS+e281FDpe789wo7s5DY26eG09X8X0zN89NoV4PFyfz89x4ujpD6Szup7x7fPndeW6y8jXwUN77vBrmuXFXyuFRyjw3Or0AvWGeG6Uz5E4yyMuZ5yanoBAeRea5kUEGQQDyNOK8RAq5E7KLxFLePDe56kLU9VCiUKdHvkYnfnZdxXluDO+z4TiGeW6y8wvhrpDDS3lvnps8jQ4+Rea5Kb6v4TUY5rkxlJdunhvxNZRW5ybz3Lg6o45H1c5zU/T7rzr8ISwtruoQr61isPQ4FTlfdagfcyry91vS5AYQJ/FbunQp0tLS0L59e6xYsQJ9+vQBAEycOBFXr17F/v37jeUPHDiAF1980TiJ35w5cyo0iZ+9khsiIiKynxqV3FQ1JjdEREQ1T0X+fkvW54aIiIjIHpjcEBERkUNhckNEREQOhckNERERORQmN0RERORQmNwQERGRQ2FyQ0RERA6FyQ0RERE5FCY3RERE5FCcpQ6gqhkmZFapVOWUJCIiourC8Hfbkhsr1LrkJicnBwAQFBQkcSRERERUUTk5OfDx8SmzTK27t5Rer8eNGzfg5eUFmeE20xJRqVQICgpCSkoK73NVBtZT+VhH5WMdlY91VD7WkWXsUU+CICAnJwcNGzaEk1PZvWpq3ZUbJycnNG7cWOowTHh7e/OXxAKsp/KxjsrHOiof66h8rCPL2LqeyrtiY8AOxURERORQmNwQERGRQ2FyIyGlUom3334bSqVS6lCqNdZT+VhH5WMdlY91VD7WkWWkrqda16GYiIiIHBuv3BAREZFDYXJDREREDoXJDRERETkUJjdERETkUJjcSOS9995Dr1694O7uDl9fX7NlkpOTMWLECHh4eMDf3x8zZ86ERqOp2kAltmbNGgQHB8PV1RWhoaGIjY2VOiTJHDx4ECNGjEDDhg0hk8nw448/mmwXBAHvvPMOGjZsCDc3N/Tr1w9nzpyRJliJLF68GN26dYOXlxfq16+PkSNH4vz58yZlans9rV27Fh07djROrhYeHo7ffvvNuL221485ixcvhkwmw6xZs4zrWE/AO++8A5lMZvJo0KCBcbuUdcTkRiIajQZPPPEEnnvuObPbdTodhg8fjtzcXBw6dAhbt27Ftm3b8NJLL1VxpNKJjo7GrFmz8MYbbyAxMRGRkZEYOnQokpOTpQ5NErm5uejUqRNWr15tdvvSpUuxfPlyrF69GsePH0eDBg0waNAg4/3UaoMDBw7g+eefx9GjRxETEwOtVovBgwcjNzfXWKa211Pjxo2xZMkSxMfHIz4+HgMGDMDDDz9s/KNT2+unuOPHj+Ozzz5Dx44dTdaznkTt2rVDWlqa8XHq1CnjNknrSCBJbdiwQfDx8SmxfufOnYKTk5OQmppqXLdlyxZBqVQK2dnZVRihdLp37y5MmzbNZF2bNm2E1157TaKIqg8Awvbt240/6/V6oUGDBsKSJUuM6woKCgQfHx/hk08+kSDC6iEjI0MAIBw4cEAQBNZTaerUqSN88cUXrJ9icnJyhJYtWwoxMTFC3759hRdeeEEQBH6ODN5++22hU6dOZrdJXUe8clNNxcXFoX379mjYsKFx3ZAhQ6BWq5GQkCBhZFVDo9EgISEBgwcPNlk/ePBgHDlyRKKoqq+kpCSkp6eb1JdSqUTfvn1rdX1lZ2cDAOrWrQuA9VScTqfD1q1bkZubi/DwcNZPMc8//zyGDx+OgQMHmqxnPd1z8eJFNGzYEMHBwRg9ejSuXLkCQPo6qnU3zqwp0tPTERAQYLKuTp06UCgUSE9PlyiqqnPr1i3odLoSdRAQEFArXn9FGerEXH1du3ZNipAkJwgCZs+ejd69e6N9+/YAWE8Gp06dQnh4OAoKCuDp6Ynt27fjvvvuM/7Rqe31AwBbt27FiRMncPz48RLb+DkS9ejRA5s3b0arVq1w8+ZNLFy4EL169cKZM2ckryNeubEhc52rij/i4+MtPp5MJiuxThAEs+sdVfHXWttef0Wxvu6JiorC33//jS1btpTYVtvrqXXr1jh58iSOHj2K5557DhMmTMDZs2eN22t7/aSkpOCFF17AV199BVdX11LL1fZ6Gjp0KB577DF06NABAwcOxK+//goA2LRpk7GMVHXEKzc2FBUVhdGjR5dZplmzZhYdq0GDBjh27JjJuv/++w+FhYUlMmFH5O/vD7lcXuIqTUZGRq14/RVlGKGQnp6OwMBA4/raWl8zZszAjh07cPDgQTRu3Ni4nvUkUigUCAkJAQCEhYXh+PHj+PDDDzFnzhwArJ+EhARkZGQgNDTUuE6n0+HgwYNYvXq1cQReba+n4jw8PNChQwdcvHgRI0eOBCBdHfHKjQ35+/ujTZs2ZT7K+l9AUeHh4Th9+jTS0tKM63bv3g2lUmnyC+eoFAoFQkNDERMTY7I+JiYGvXr1kiiq6is4OBgNGjQwqS+NRoMDBw7UqvoSBAFRUVH44YcfsHfvXgQHB5tsZz2ZJwgC1Go16+eu+++/H6dOncLJkyeNj7CwMIwdOxYnT55E8+bNWU9mqNVqnDt3DoGBgdJ/luzeZZnMunbtmpCYmCi8++67gqenp5CYmCgkJiYKOTk5giAIglarFdq3by/cf//9wokTJ4Q9e/YIjRs3FqKioiSOvOps3bpVcHFxEdatWyecPXtWmDVrluDh4SFcvXpV6tAkkZOTY/ycABCWL18uJCYmCteuXRMEQRCWLFki+Pj4CD/88INw6tQp4amnnhICAwMFlUolceRV57nnnhN8fHyE/fv3C2lpacZHXl6esUxtr6e5c+cKBw8eFJKSkoS///5beP311wUnJydh9+7dgiCwfkpTdLSUILCeBEEQXnrpJWH//v3ClStXhKNHjwoPPvig4OXlZfyOlrKOmNxIZMKECQKAEo99+/YZy1y7dk0YPny44ObmJtStW1eIiooSCgoKpAtaAh9//LHQtGlTQaFQCF27djUO6a2N9u3bZ/YzM2HCBEEQxKGXb7/9ttCgQQNBqVQKffr0EU6dOiVt0FXMXP0AEDZs2GAsU9vr6emnnzb+TtWrV0+4//77jYmNILB+SlM8uWE9CcKoUaOEwMBAwcXFRWjYsKHw6KOPCmfOnDFul7KOZIIgCPa/PkRERERUNdjnhoiIiBwKkxsiIiJyKExuiIiIyKEwuSEiIiKHwuSGiIiIHAqTGyIiInIoTG6IiIjIoTC5ISIiIofC5IaIiIgcCpMbIiIicihMboiIiMihMLkhomrh6tWrkMlkJR79+vUrc7/MzEw89dRTaNy4Mdzd3dGhQwds2bLFpIxer8f777+PkJAQKJVKNGnSBO+9955x+/Xr1zF69GjUrVsXHh4eCAsLw7Fjx+zxMomoCjhLHQAREQAEBQUhLS3N+HN6ejoGDhyIPn36lLlfQUEBQkNDMWfOHHh7e+PXX3/FuHHj0Lx5c/To0QMAMHfuXHz++edYsWIFevfujbS0NPzzzz8AgDt37qBv375o1KgRduzYgQYNGuDEiRPQ6/X2e7FEZFe8KzgRVTsFBQXo168f6tWrh59++glOThW7yDx8+HC0bdsW//d//4ecnBzUq1cPq1evxpQpU0qU/eyzz/Dyyy/j6tWrqFu3rq1eAhFJiFduiKjamTx5MnJychATE1NuYqPT6bBkyRJER0cjNTUVarUaarUaHh4eAIBz585BrVbj/vvvN7v/yZMn0aVLFyY2RA6EyQ0RVSsLFy7E77//jj///BNeXl7lll+2bBlWrFiBlStXokOHDvDw8MCsWbOg0WgAAG5ubmXuX952Iqp52KGYiKqNbdu2Yf78+fj222/RokULi/aJjY3Fww8/jP/973/o1KkTmjdvjosXLxq3t2zZEm5ubvjjjz/M7t+xY0ecPHkSt2/ftslrICLpMbkhomrh9OnTGD9+PObMmYN27dohPT0d6enp5SYdISEhiImJwZEjR3Du3Dk8++yzSE9PN253dXXFnDlz8Oqrr2Lz5s24fPkyjh49inXr1gEAnnrqKTRo0AAjR47E4cOHceXKFWzbtg1xcXF2fb1EZD9MboioWoiPj0deXh4WLlyIwMBA4+PRRx8tc7+33noLXbt2xZAhQ9CvXz9jolK8zEsvvYR58+ahbdu2GDVqFDIyMgAACoUCu3fvRv369TFs2DB06NABS5YsgVwut9dLJSI742gpIiIicii8ckNEREQOhckNEVVrQ4cOhaenp9nHokWLpA6PiKohNksRUbWWmpqK/Px8s9vq1q3L+WmIqAQmN0RERORQ2CxFREREDoXJDRERETkUJjdERETkUJjcEBERkUNhckNEREQOhckNERERORQmN0RERORQ/h/uYSbSl7U0wQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pred_prob = log_model.predict_proba(np.arange(-10,50,0.1)[:, np.newaxis])\n", "pred = log_model.predict(np.arange(-10,50,0.1)[:, np.newaxis])\n", "\n", "ax = sns.scatterplot(data=movement, x='z_acc', y='move_type');\n", "ax.plot(np.arange(-10,50,0.1), pred_prob[:,1], 'r', label='probab.')\n", "ax.plot(np.arange(-10,50,0.1), pred, 'g', label='pred. cat.')\n", "ax.legend();" ] }, { "cell_type": "code", "execution_count": 36, "id": "9afafe0c-8c48-4f43-81e5-dd49082aae27", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "array([[690, 110],\n", " [ 0, 201]])" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predict_data = log_model.predict(movement[['z_acc']])\n", "\n", "confusion_matrix(movement['move_type'], predict_data)" ] }, { "cell_type": "code", "execution_count": 37, "id": "eaaa1d82-059f-4fab-81db-2851d2bf47e3", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True negative rate\n" ] }, { "data": { "text/plain": [ "100.0" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print('True negative rate')\n", "100 * np.sum(predict_data[movement['move_type'] == 1] == 1) / len(movement[movement['move_type'] == 1])" ] }, { "cell_type": "code", "execution_count": 38, "id": "99009dc6-bc64-47d0-97e0-8840756d68b3", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True positive rate\n" ] }, { "data": { "text/plain": [ "86.25" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print('True positive rate')\n", "100 * np.sum(predict_data[movement['move_type'] == 0] == 0) / len(movement[movement['move_type'] == 0])" ] }, { "cell_type": "markdown", "id": "e1ca943c-fafa-451e-b974-1fa92fa2daab", "metadata": {}, "source": [ "We see that we managed to massively improve the number of negatives that we predict correctly, at a minor cost for the prediction of true positives!\n", "\n", "Such weights are used very often in almost any method, including e.g. Deep Learning. For example you could imagine trying to detect tiny objects in a large image. In such a case you would need to give a large weight to pixels corresponding to the tiny objects." ] }, { "cell_type": "markdown", "id": "7e10e2a2-6050-4a9b-b3aa-f6eb59963f4f", "metadata": {}, "source": [ "## Other metrics\n", "\n", "We have seen before that we could define the True/False Positive/Negative quantities. We also saw that we could use these variables to define quality metrics such as the $\\texttt{accuracy} = \\frac{TP + TN}{TP+TN+FP+FN}$.\n", "\n", "We can however define other variables that are commonly used in machine learning. Two of the most important ones are **precision** and **recall**. The precision, as the name says, indicates how precise our model is: it tells us the fraction of positives which are actually true positives and not false positives and is defined as $\\texttt{precision} = \\frac{TP}{TP+FP}$. The recall tells us if we are missing a lot of positives because we miss some as false negatives and is defined as $\\texttt{recall} = \\frac{TP}{TP+FN}$. Ideally we would like to have high precision, i.e. as few FPs as possible. But this doesn't say anything about the number of TP that we have: we could have very few TP and FP and still have high precision. So we need to also look at recall and have a recall as high as possible too, i.e. as few FN as possible.\n", "\n", "Let's consider a simple example where we classify pictures of cats and dogs and end up with the following results:" ] }, { "cell_type": "code", "execution_count": 39, "id": "9533db5c-9571-46a6-8014-d4d53bc07766", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(Image('../illustrations/confusion_cats.png'))" ] }, { "cell_type": "markdown", "id": "ac9fc6f9-a5d9-4fe9-a183-96958bdfee2b", "metadata": {}, "source": [ "We have here the same precision on the left and the right $\\texttt{precision} = \\frac{5}{5+1} = 0.83$. So we have few actual dog pictures that we classify as cats. But what about the recall? On the left, we have $\\texttt{recall} = \\frac{5}{5+10} = 0.33$. This is bad, we are missing a lot of cat pictures. So those we predict as cats are usually cats, but we miss many of them! On the right, we have a much better result with $\\texttt{recall} = \\frac{5}{5+1} = 0.83$.\n", "\n", "One can define many other such variables. One important one, summarizes precision and recall and is called **F-score**: $F = 2 * \\frac{\\texttt{precision}\\; x \\;\\texttt{recall}}{\\texttt{precision}\\; + \\;\\texttt{recall}}$. In our examples above we get $F=0.47$ on the left and $F=0.83$ on the right.\n", "\n", "Depending on the problem, one might prefer maximizing one or the other metric. For example if we think of a covid-test, we would obviously like to try maximizing both precision and recall, but if there are technical trade-offs, we would prefer to detect infectious people all the time (good recall) at the cost of precision (some people will get a positive test even though they are not infectious)." ] }, { "cell_type": "markdown", "id": "940f1c3d-40e2-4f36-8025-eea160778882", "metadata": {}, "source": [ "## Metrics in scikit-learn\n", "\n", "Of course we get access to all these metrics via scikit-learn. There are specific functions like ```precision_socre``` but we can also get a summary of all values with either ```precision_recall_fscore_support``` or ```classification_report```." ] }, { "cell_type": "code", "execution_count": 40, "id": "e49f6caf-106a-4dce-9ab4-ac915df9789d", "metadata": { "tags": [] }, "outputs": [], "source": [ "from sklearn.metrics import f1_score, precision_score, recall_score, precision_recall_fscore_support, classification_report\n" ] }, { "cell_type": "markdown", "id": "bce8db41-1cd6-416f-9974-8893956ceae8", "metadata": {}, "source": [ "First we redo our classification, once with and once without weights:" ] }, { "cell_type": "code", "execution_count": 41, "id": "975d4b42-dc87-464d-a44d-507ff04a67c8", "metadata": { "tags": [] }, "outputs": [], "source": [ "log_model_noweight = linear_model.LogisticRegression()\n", "log_model_noweight.fit(X=movement[['z_acc']], y=movement['move_type'])\n", "\n", "log_model_weight = linear_model.LogisticRegression()\n", "log_model_weight.fit(X=movement[['z_acc']], y=movement['move_type'], sample_weight=movement['move_type']);\n", "\n", "predict_data_noweigth = log_model_noweight.predict(movement[['z_acc']])\n", "predict_data_weigth = log_model_weight.predict(movement[['z_acc']])" ] }, { "cell_type": "markdown", "id": "1094ef01-015f-4406-8728-13f31f65d211", "metadata": {}, "source": [ "Now we compute can look at the reports:" ] }, { "cell_type": "code", "execution_count": 42, "id": "ab5ac6c6-bcf3-473d-a888-343bb62da20a", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 0.00 0.00 0.00 800\n", " 1 0.20 1.00 0.33 201\n", "\n", " accuracy 0.20 1001\n", " macro avg 0.10 0.50 0.17 1001\n", "weighted avg 0.04 0.20 0.07 1001\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/gw18g940/mambaforge/envs/DAVPy2023/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1471: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/gw18g940/mambaforge/envs/DAVPy2023/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1471: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/gw18g940/mambaforge/envs/DAVPy2023/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1471: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] } ], "source": [ "print(classification_report(movement['move_type'], predict_data_weigth))" ] }, { "cell_type": "code", "execution_count": 43, "id": "4dd819bf-d8d4-475e-86a3-09ef1c48c4a2", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 0.88 0.95 0.92 800\n", " 1 0.73 0.49 0.58 201\n", "\n", " accuracy 0.86 1001\n", " macro avg 0.80 0.72 0.75 1001\n", "weighted avg 0.85 0.86 0.85 1001\n", "\n" ] } ], "source": [ "print(classification_report(movement['move_type'], predict_data_noweigth))" ] }, { "cell_type": "markdown", "id": "ec63fa9d-96a7-4a60-951e-2d2c795494f4", "metadata": {}, "source": [ "We see that we get scores for both categories. Again, depending on wehter the outcome is binary (sick, not sick) or not (cats, dogs) we might have interest in having scores for all categories. In the latter case, we can then also look at the average scores like the ```f1-score```. We see in the example above that the macro average F1-score improves when we use weights." ] }, { "cell_type": "markdown", "id": "8731aa46-4b86-4d60-a64c-df1b3fb55a74", "metadata": {}, "source": [ "## Exercise" ] }, { "cell_type": "markdown", "id": "8f35991a-e27c-4e58-8dbd-45adeb93e3b9", "metadata": {}, "source": [ "1. Import the housing.csv dataset. The ```good_bad``` feature is an \"artifical\" binary feature indicating if the house is nice or not.\n", "\n", "2. Use logistic regression to predict the ```good_bad``` feature with ```sqft_living```\n", "\n", "3. Find the accuracy of your model.\n", "\n", "4. Print a report of the scores of the classification" ] }, { "cell_type": "code", "execution_count": null, "id": "34c71c76-1724-4f88-842e-798f0a2bbb09", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.13" }, "vscode": { "interpreter": { "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" } } }, "nbformat": 4, "nbformat_minor": 5 }