├── .gitignore ├── Instance based VS Model based learning.ipynb └── README.md /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yassermessahli/Instance-based-vs-Model-based-Learning/849b9f4cd02a7d5ea62f4c86069b3082411b5cb9/.gitignore -------------------------------------------------------------------------------- /Instance based VS Model based learning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "9973ce1d", 6 | "metadata": {}, 7 | "source": [ 8 | "# Instance-based vs Model-based Learning\n", 9 | "### 1. Introduction\n", 10 | "Welcome🧠! in this lecture we will discuss two types of machine learning, which are **instance-based** and **model-based** learning. we will talk about both **Regression** and **Classification** using the two types of learning, giving the definition, the principle, and practical example of each to illustrate them. I hope you enjoy the lecture. If you find this lecture valuable, please consider sharing it with your mates so they can also benefit. Let's begin!💡" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "id": "a8c81be7", 16 | "metadata": {}, 17 | "source": [ 18 | "### 2. Definitions\n", 19 | "\n", 20 | "#### 2.1 Model-Based Learning\n", 21 | "Model-based learning involves creating a mathematical model that can predict outcomes based on input data. The model is trained on a large dataset and then used to make predictions on new data. The model can be thought of as a set of rules that the machine uses to make predictions.\n", 22 | "\n", 23 | "#### 2.2 Instance-Based Learning\n", 24 | "Instance-based learning involves using the entire dataset to make predictions. The machine learns by storing all instances of data and then using these instances to make predictions on new data. The machine compares the new data to the instances it has seen before and uses the closest match to make a prediction.\n", 25 | "\n", 26 | "**🔖Source:** [Model-Based vs Instance-Based Learning: Understanding the Differences with Examples - medium](https://medium.com/@pp1222001/model-based-vs-instance-based-learning-understanding-the-differences-with-examples-1545c9c3a056#:~:text=Model-based%20learning%20is%20typically%20faster%20and%20more%20accurate,is%20slower%20and%20can%20make%20less%20accurate%20predictions.)" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "id": "376eb0d4", 32 | "metadata": {}, 33 | "source": [ 34 | "### 3. Regression\n", 35 | "#### 3.1 Instance-based regression\n", 36 | "- **Definition:** as we talked previously, in instance-based learning we use the training instances itselves for the prediction. More our instance is similar to a given training instance, more its label value is close to that instance label value.\n", 37 | "**i.e** : our_instance ~ given_instance So our_label ~ given_label\n", 38 | "\n", 39 | "- **Principle:** chosing the most similar training instances to the new instance, and use its labels to predict the new label such as the new value will be the average value of the labels values.\n", 40 | "\n", 41 | "- **Example of implementation:** we will implement a regression decision function to predict values using training instances" 42 | ] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "id": "9a6024ea", 47 | "metadata": {}, 48 | "source": [ 49 | "- Import dataset" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 127, 55 | "id": "69469c6b", 56 | "metadata": {}, 57 | "outputs": [], 58 | "source": [ 59 | "import warnings\n", 60 | "from sklearn.datasets import make_regression\n", 61 | "warnings.filterwarnings('ignore')\n", 62 | "\n", 63 | "data = make_regression(n_features=1, noise=15, bias=20)" 64 | ] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "id": "31d87ca4", 69 | "metadata": {}, 70 | "source": [ 71 | "- Visualisation of the dataset" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 128, 77 | "id": "b4beec95", 78 | "metadata": {}, 79 | "outputs": [ 80 | { 81 | "data": { 82 | "image/png": "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DNxpeuaZZ3TVVVeN6rlLlizRM888M+RjPvvZz2r9+vWjev3RvF8tt956q/793/+9KTUAAADkHYE7YUMF7n379g353FtuuUWHH374kI/5m7/5Gy1atGi05Y34/WohcAMAABxE4E7Y8uXL9fDDD2vu3Lm66KKLdOutt+qNb3yjyuWyZs6cKUk666yzNH/+fM2aNUurV6/uf+60adO0Y8cObdmyRSeeeKI+8pGPaNasWWpvb9cLL7wgSfrABz6gb37zm/2Pv+SSS/T6179es2fP1gMPPCBJ6unp0dve9jbNmjVLH/7wh3XCCSdox44dL6m1nvdbsWKFZs6cqTlz5mjp0qXasmWLrr76an3xi1/U3Llzdfvtt+s73/mOTj31VM2bN0+LFi3SE088IUm69NJL9cEPflBvfvOb9epXv1orVqzof++vfe1rmjNnjk4++WS9//3v76/7Pe95jxYsWKAFCxbo5z//uSTppz/9qebOnau5c+dq3rx5eu6555r6nQEAADTE3Qv7b/78+T7Qfffd95Jjw/r2t907OqLLBm3evNlnzZrVf/snP/mJt7W1+SOPPNJ/bOfOne7u3tvb67NmzfIdO3a4u/sJJ5zgPT09vnnzZh8zZoz/6le/cnf3c845x7/+9a+7u/t5553n69at63/8ihUr3N191apV/qEPfcjd3Ts6Ovzyyy93d/fvfe97Lsl7enpeUms973fMMcf47t273d396aefdnf3Sy65xL/whS/0v85TTz3lBw4ccHf3a6+91i+88ML+x73hDW/w3bt3e09Pjx9xxBG+d+9ev+eee3zGjBn9NfV9HsuWLfPbb7/d3d0fffRRf93rXufu7u985zv9Zz/7mbu7P/fcc/7iiy++5GcZ1fcOAADypYmZbaQkdfsgmbTlxgKOWKUiLVsm9fZKa9ZIa9dK5XJT3+KUU045ZGTdihUrdPPNN0uStm7dqoceekhTpkw55DnTp0/X3LlzJUnz58/Xli1bar722Wef3f+Yb33rW5Kkn/3sZ/2vv3jxYk2ePHnYGgd7vzlz5uh973ufzjrrLJ111lk1n7tt2za9973v1WOPPaa9e/ce8rO+4x3v0IQJEzRhwgS94hWv0BNPPKEf//jHOuecc3TkkUdKko444ghJ0vr163Xffff1P/fZZ5/V888/r4ULF+rCCy/U+973Pp199tmaOnXq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\n", 83 | "text/plain": [ 84 | "
" 85 | ] 86 | }, 87 | "metadata": { 88 | "needs_background": "light" 89 | }, 90 | "output_type": "display_data" 91 | } 92 | ], 93 | "source": [ 94 | "import matplotlib.pyplot as plt\n", 95 | "%matplotlib inline\n", 96 | "\n", 97 | "fig = plt.figure(figsize=(12, 6))\n", 98 | "ax1 = fig.add_subplot(111)\n", 99 | "ax1.scatter(x=data[0], y=data[1], s=10, c='red', label='training instances')\n", 100 | "\n", 101 | "plt.xlabel('X')\n", 102 | "plt.ylabel('y')\n", 103 | "plt.legend(loc='best')\n", 104 | "plt.title('data visualisation')\n", 105 | "fig.show()" 106 | ] 107 | }, 108 | { 109 | "cell_type": "markdown", 110 | "id": "18e93eb0", 111 | "metadata": {}, 112 | "source": [ 113 | "- we have to chose the most similar training instances to predict the label of our new instance (those instances called predictors) for that we need a similarity measure. we will chose the simple euclidiean_distance implemented below" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 129, 119 | "id": "c4bb0b8d", 120 | "metadata": {}, 121 | "outputs": [], 122 | "source": [ 123 | "from math import sqrt\n", 124 | "def euclidean_distance(x,y):\n", 125 | " return np.sqrt(np.sum((np.array(x) - np.array(y)) ** 2))" 126 | ] 127 | }, 128 | { 129 | "cell_type": "markdown", 130 | "id": "c59bd535", 131 | "metadata": {}, 132 | "source": [ 133 | "- instance-based decision function implementation.\n", 134 | "\n", 135 | "I called the parameter alpha \"the generalisation rate\", is define how the function will generalise the data to predict the new value, by default is 2 (it refer to the number of predictors)" 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": 130, 141 | "id": "73810893", 142 | "metadata": {}, 143 | "outputs": [], 144 | "source": [ 145 | "import numpy as np\n", 146 | "\n", 147 | "def decision_function(X, y, new_x, alpha=2):\n", 148 | "# list of all similarties between training instances and new instance\n", 149 | " similarities = [euclidean_distance([x], [new_x]) for x in X]\n", 150 | " \n", 151 | "# predictors are the indexes of the most similar instances to our instance\n", 152 | " predictors = np.argsort(similarities)[:alpha]\n", 153 | " \n", 154 | " prediction = np.mean(y[predictors])\n", 155 | " return prediction, predictors" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "id": "ed03f0cc", 161 | "metadata": {}, 162 | "source": [ 163 | "- new instance prediction" 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": 131, 169 | "id": "6fb67c13", 170 | "metadata": {}, 171 | "outputs": [ 172 | { 173 | "data": { 174 | "text/plain": [ 175 | "(0.787602032321169, 57.86976055058832)" 176 | ] 177 | }, 178 | "execution_count": 131, 179 | "metadata": {}, 180 | "output_type": "execute_result" 181 | } 182 | ], 183 | "source": [ 184 | "import random as rnd\n", 185 | "new_instance = (rnd.random() * 4) - 2 # -2 < new_instance < 2\n", 186 | "y_pred, predictors = decision_function(data[0], data[1], new_instance, alpha=5) # number of predictors = 5\n", 187 | "(new_instance, y_pred)" 188 | ] 189 | }, 190 | { 191 | "cell_type": "markdown", 192 | "id": "58dae75c", 193 | "metadata": {}, 194 | "source": [ 195 | "- visualisation of the new instance and the predictors" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 132, 201 | "id": "b8657efb", 202 | "metadata": {}, 203 | "outputs": [ 204 | { 205 | "data": { 206 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtwAAAGDCAYAAAAYmcfWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA1EUlEQVR4nO3de3hU9bn//c8tKjxByiEeEVvSXVQOAQwBRYqo1RSFjkpLK9Xudtut+7GhWu2m0q3P9rDVn23dVShoxSq23RWVqk/TajWliqLotiFF5GTFggW1NISDIApC7t8fayYOIQk5zJq1Zub9uq5cM7PWmrXuzFytn3y51/dr7i4AAAAA4Tgo6gIAAACAfEbgBgAAAEJE4AYAAABCROAGAAAAQkTgBgAAAEJE4AYAAABCROAGgAwzswfM7OYY1PEfZvazkK/R+Lua2Vgzez2Ea4RyXgDIFgI3AETIzBaa2b+GcW53v9XdQzl3C9db5O4ndPY8ZuZm9plMnxcAokLgBgAAAEJE4AaATjKzk8ys1sy2m9nDkrql7ettZr8zszoz25J83i+57xZJYyXNMrMdZjYruX2Gma03s/fMbImZjW3huieb2d/NrEvatgvMbFny+Q1m9j/J593M7H/MrN7MtprZn8zsqOS+dWZ2Vto5Gt+XfD0/eZ1tZva8mQ1uoZ7TzWxD2utrzOzt5Ofyupl9Lrl9lJm9lKzjXTObZWaHJvc9n3z7q8nP5CvNnHdg8l8GtprZCjNLpO17wMxmm9kTyev+r5n9U+vfIACEi8ANAJ2QDIr/v6RfSuojab6kL6YdcpCkuZI+JemTkj6QNEuS3P1aSYskTXX3w9x9avI9f5I0PHm+ByXNN7NuasLd/1fS+5LOTNv81eR7mvq6pJ6SjpNULOn/TdbSFr+XNEDSkZJqJf3qQG8wsxMkTZU00t17SPq8pHXJ3XslXSXpcEmjJX1O0reSv9NpyWOGJT+Th5uc9xBJv5VUnazn25J+lbxeyoWSbpTUW9IaSbe08fcEgFAQuAGgc06RdIikO939I3f/tYLALEly93p3f9Tdd7r7dgXhb1xrJ3T3/0m+b4+7/7ekrpJa6mGeJ2mKJJlZD0nnJrc19ZGCoP0Zd9/r7kvc/b22/ILufr+7b3f3XZJukDTMzHoe4G17k3UPMrND3H2du7+ZPN8Sd385+futk3SPDvCZpDlF0mGSbnP33e7+jKTfKfkZJD3u7q+4+x4FfxwMb+O5ASAUBG4A6Jy+kt52d0/b9lbqiZkVmdk9ZvaWmb0n6XlJvdLbQJoys383s1XJFo6tCkamD2/h8AclTTKzrpImSap197eaOe6Xkp6W9JCZvWNmP0yOFrfKzLqY2W1m9may/nXJXS3VI0ly9zWSvqMgoP/DzB4ys77Jcx6fbK35e/Kctx7ofGn6Slrv7g1p296SdGza67+nPd+pIKADQGQI3ADQOe9KOtbMLG3bJ9Oef1fB6PTJ7v4JSamWidTx6UFdyX7t70n6sqTe7t5L0ra04/fh7isVBM5z1HI7iZKj7ze6+yBJp0qaKOmfk7vfl1SUdvjRac+/Kuk8SWcpCP79m9TfInd/0N0/q6CdxiX9ILnrbkmrJQ1Ifib/0ZbzJb0j6TgzS//v1yclvd3G9wNA1hG4AaBzXpK0R9IVZnaImU2SNCptfw8FvdJbzayPpOubvH+jpE83OX6PpDpJB5vZf0r6xAFqeFDSlQrC/PzmDjCzM8ysNDmy/p6CFpPUKPFSSRcm6y+X9KUm9eySVK8glN96gFpS1zvBzM5Mjrx/qOAzSF2vR7KGHWZ2oqTLm7y96WeS7n8VjFp/L1nv6ZK+IOmhttQFAFEgcANAJ7j7bgWtHN+QtFnSVyQ9lnbInZL+H0mbJL0s6akmp5gh6UvJGUxmKmj7eErSXxSMXH8oaf0BypinoAf6GXff1MIxR0v6tYKgu0rScwraTCTp/5P0T5K2KLjZMH2U/BfJOt6WtDL5O7RFV0m3Kfi9/67gBsfvJ/f9u4KR8+2S7pX0cJP33iDp58lZSL6cviP5eX9BwYj+Jkl3Sfpnd1/dxroAIOts37ZDAAAAAJnECDcAAAAQIgI3AAAAECICNwAAABAiAjcAAAAQIgI3AAAAEKKDoy4gTIcffrj3798/6jIAAACQ55YsWbLJ3Y9obl9eB+7+/furpqYm6jIAAACQ58zsrZb20VICAAAAhIjADQAAAISIwA0AAACEKK97uJvz0UcfacOGDfrwww+jLgVZ0q1bN/Xr10+HHHJI1KUAAIACVHCBe8OGDerRo4f69+8vM4u6HITM3VVfX68NGzaopKQk6nIAAEABKriWkg8//FDFxcWE7QJhZiouLuZfNAAAQGQKLnBLImwXGL5vAAAQpYIM3FHaunWr7rrrrg6999xzz9XWrVtbPeY///M/tWDBgg6dvyPXa87ChQu1ePHijNQAAACQ6wjcWdZa4N6zZ0+r733yySfVq1evVo+56aabdNZZZ3W0vHZfrzkEbgAAgI8RuLNs+vTpevPNNzV8+HBNmzZNCxcu1NixY5VIJDRo0CBJ0vnnn68RI0Zo8ODBmjNnTuN7+/fvr02bNmndunUaOHCgLr30Ug0ePFgVFRX64IMPJEnf+MY39Otf/7rx+Ouvv15lZWUqLS3V6tWrJUl1dXU6++yzNXjwYP3rv/6rPvWpT2nTpk371dqW682cOVODBg3S0KFDdeGFF2rdunX66U9/qjvuuEPDhw/XokWL9Nvf/lYnn3yyTjrpJJ111lnauHGjJOmGG27QJZdcotNPP12f/vSnNXPmzMZr/+IXv9DQoUM1bNgwfe1rX2us+4tf/KJGjhypkSNH6sUXX5QkPffccxo+fLiGDx+uk046Sdu3b8/odwYAANAp7p63PyNGjPCmVq5cud+2A/rNb9wrK4PHTlq7dq0PHjy48fWzzz7rRUVF/te//rVxW319vbu779y50wcPHuybNm1yd/dPfepTXldX52vXrvUuXbr4n//8Z3d3nzx5sv/yl790d/evf/3rPn/+/MbjZ86c6e7us2fP9m9+85vu7l5ZWem33nqru7v//ve/d0leV1e3X61tud4xxxzjH374obu7b9myxd3dr7/+ev/Rj37UeJ7Nmzd7Q0ODu7vfe++9fvXVVzceN3r0aP/www+9rq7O+/Tp47t37/bly5f7gAEDGmtKfR5TpkzxRYsWubv7W2+95SeeeKK7u0+cONFfeOEFd3ffvn27f/TRR/v9Lh363gEAQG7JYGZrL0k13kImLbhpAdutqkqaMkXauVOaO1eaN09KJDJ6iVGjRu0zZd3MmTP1+OOPS5LWr1+vN954Q8XFxfu8p6SkRMOHD5ckjRgxQuvWrWv23JMmTWo85rHHHpMkvfDCC43nHz9+vHr37n3AGlu63tChQ3XRRRfp/PPP1/nnn9/sezds2KCvfOUrevfdd7V79+59ftcJEyaoa9eu6tq1q4488kht3LhRzzzzjCZPnqzDDz9cktSnTx9J0oIFC7Ry5crG97733nvasWOHxowZo6uvvloXXXSRJk2apH79+h3w9wEAAHkmC5mto2gpOZDq6uCLk4LH6uqMX6J79+6NzxcuXKgFCxbopZde0quvvqqTTjqp2Sntunbt2vi8S5cuLfZ/p45r7Zi2aOl6TzzxhCorK1VbW6uRI0c2e41vf/vbmjp1ql577TXdc889+/w+bf09JKmhoUEvv/yyli5dqqVLl+rtt9/WYYcdpunTp+tnP/uZPvjgA40ZM6axdQYAALRDVZU0dWrwmIuykNk6isB9IBUVUlFR8LyoKHjdCT169Gi1x3jbtm3q3bu3ioqKtHr1ar388sudul5zxowZo0ceeUSSVF1drS1btnToPA0NDVq/fr3OOOMM/eAHP9C2bdu0Y8eO/X7Hbdu26dhjj5Uk/fznPz/gec8880zNnz9f9fX1kqTNmzdLkioqKvSTn/yk8bilS5dKkt58802Vlpbqmmuu0ciRIwncAAC0V2p0ePbs4DEXQ3eGM1smEbgPJJEI/kmisjIj/zRRXFysMWPGaMiQIZo2bdp++8ePH689e/Zo4MCBmj59uk455ZROXa85119/vaqrqzVkyBDNnz9fRx99tHr06NHu8+zdu1cXX3yxSktLddJJJ+mKK65Qr1699IUvfEGPP/54402TN9xwgyZPnqwRI0Y0tom0ZvDgwbr22ms1btw4DRs2TFdffbWkoNWmpqZGQ4cO1aBBg/TTn/5UknTnnXdqyJAhGjp0qA455BCdc8457f5dAAAoaDEeHW6zDGe2TLKgxzs/lZeXe01NzT7bVq1apYEDB0ZUUTzs2rVLXbp00cEHH6yXXnpJl19+eeNocb7iewcAoBXp/c9FRbELrLnAzJa4e3lz+7hpsgD97W9/05e//GU1NDTo0EMP1b333ht1SQAAIEqp0eHq6qAVg7CdUQTuAjRgwAD9+c9/jroMAAAQJ4kEQTsk9HADAAAAISJwAwAAACEicAMAAAAhInADAAAAISJw57iFCxdq4sSJkqSqqirddtttLR67detW3XXXXdkqDQAAACJwt0nt4tNVu/j0rF5z79697X5PIpHQ9OnTW9zfkcDdmeXgAQAAQOCOxLp163TiiSfqoosu0sCBA/WlL31JO3fuVP/+/XXNNdeorKxM8+fPV3V1tUaPHq2ysjJNnjxZO3bskCQ99dRTOvHEE1VWVqbHHnus8bwPPPCApk6dKknauHGjLrjgAg0bNkzDhg3T4sWLNX36dL355psaPny4pk2bJnfXtGnTNGTIEJWWlurhhx+WFIyajx07VolEQoMGDdL777+vCRMmaNiwYRoyZEjjcQAAADiwSOfhNrP7JU2U9A93H5LcdoOkSyXVJQ/7D3d/Mrnv+5K+KWmvpCvc/emsF50hr7/+uu677z6NGTNGl1xySePIc3FxsWpra7Vp0yZNmjRJCxYsUPfu3fWDH/xAP/7xj/W9731Pl156qZ555hl95jOf0Ve+8pVmz3/FFVdo3Lhxevzxx7V3717t2LFDt912m5YvX964quSjjz6qpUuX6tVXX9WmTZs0cuRInXbaaZKk2tpaLV++XCUlJXr00UfVt29fPfHEE5Kkbdu2hf8BAQAA5ImoF755QNIsSb9osv0Od789fYOZDZJ0oaTBkvpKWmBmx7t7+3sv2iC9hWTr5uf221Z26sJOnf+4447TmDFjJEkXX3yxZs6cKUmNAfrll1/WypUrG4/ZvXu3Ro8erdWrV6ukpEQDBgxofO+cOXP2O/8zzzyjX/wi+Fi7dOminj17asuWLfsc88ILL2jKlCnq0qWLjjrqKI0bN05/+tOf9IlPfEKjRo1SSUmJJKm0tFTf/e53dc0112jixIkaO3Zsp353AACAQhJpS4m7Py9pcxsPP0/SQ+6+y93XSlojaVRoxYXMzJp93b17d0mSu+vss8/W0qVLtXTpUq1cuVL33Xdf1upL1SFJxx9/vGpra1VaWqrrrrtON910U9bqAAAAyHVx7eGeambLzOx+M+ud3HaspPVpx2xIbgtF2akLG3969RmnXn3G7bOts/72t7/ppZdekiQ9+OCD+uxnP7vP/lNOOUUvvvii1qxZI0l6//339Ze//EUnnnii1q1bpzfffFOSNG/evGbP/7nPfU533323pOAGzG3btqlHjx7avn174zFjx47Vww8/rL1796qurk7PP/+8Ro3a/2+Yd955R0VFRbr44os1bdo01dbWdvr3BwAAKBRxDNx3S/onScMlvSvpv9vzZjO7zMxqzKymrq7uwG+IyAknnKDZs2dr4MCB2rJliy6//PJ99h9xxBF64IEHNGXKFA0dOrSxnaRbt26aM2eOJkyYoLKyMh155JHNnn/GjBl69tlnVVpaqhEjRmjlypUqLi7WmDFjNGTIEE2bNk0XXHCBhg4dqmHDhunMM8/UD3/4Qx199NH7neu1117TqFGjNHz4cN1444267rrrQvlMAAAoSFVV0tSpwSPykrl7tAWY9Zf0u9RNky3tS94wKXf/P8l9T0u6wd1faunc5eXlXlNTs8+2VatWaeDAge2qMdW7nYmRbSmYpWTixIlavnx5Rs6HA+vI9w4AQOiqqqQpU6SdO6WiImnePCmRiLoqdICZLXH38ub2xW6E28yOSXt5gaRUKq2SdKGZdTWzEkkDJL2SjZoy1UYCAACwj+rqIGxLwWN1dbT1IBSRBm4zmyfpJUknmNkGM/umpB+a2WtmtkzSGZKukiR3XyHpEUkrJT0lqTKsGUrC1r9/f0a3AQCAVFERjGxLwWNFRbT1IBSRTgvo7lOa2dziVBzufoukW8KrCAAAIIsSiaCNpLo6CNu0k+SlqOfhBgAAKGyJBEE7z8WuhxsAAADIJwRuAAAAIEQE7hbs2CG1NGOie7A/jmpqanTFFVd06L133nmndqbulAYAAEBGELibsWOHNG6cdNVV+4du92D7uHHxDN3l5eWaOXNmh95L4AYAAMg8AnczuneXxo6VZszYN3SnwvaMGcH+7t3bf+5169Zp4MCBuvTSSzV48GBVVFTogw8+kCS9+eabGj9+vEaMGKGxY8dq9erV2rt3r0pKSuTu2rp1q7p06aLnn39eknTaaafpjTfe2Of8Cxcu1MSJEyVJN9xwgy655BKdfvrp+vSnP90YxN9//31NmDBBw4YN05AhQ/Twww9r5syZeuedd3TGGWfojDPOkCRdfvnlKi8v1+DBg3X99dc3XqN///66/vrrVVZWptLSUq1evVqStGPHDv3Lv/yLSktLNXToUD366KOSpOrqao0ePVplZWWaPHmydsTxLxUAAICQELibYSbdcYd05ZX7hu5U2L7yymC/WcfO/8Ybb6iyslIrVqxQr169GoPpZZddpp/85CdasmSJbr/9dn3rW99Sly5ddMIJJ2jlypV64YUXVFZWpkWLFmnXrl1av369BgwY0Oq1Vq9eraefflqvvPKKbrzxRn300Ud66qmn1LdvX7366qtavny5xo8fryuuuEJ9+/bVs88+q2effVaSdMstt6impkbLli3Tc889p2XLljWe9/DDD1dtba0uv/xy3X777ZKk//qv/1LPnj312muvadmyZTrzzDO1adMm3XzzzVqwYIFqa2tVXl6uH//4xx374AAAAHIQ0wK2IBW6pSBkz5gRPO9s2JakkpISDR8+XJI0YsQIrVu3Tjt27NDixYs1efLkxuN27dolSRo7dqyef/55rV27Vt///vd17733aty4cRo5cuQBrzVhwgR17dpVXbt21ZFHHqmNGzeqtLRU3/3ud3XNNddo4sSJGjt2bLPvfeSRRzRnzhzt2bNH7777rlauXKmhQ4dKkiZNmtRY/2OPPSZJWrBggR566KHG9/fu3Vu/+93vtHLlSo0ZM0aStHv3bo0ePbqdnxgAAEDuYoS7FemhO6WzYVuSunbt2vi8S5cu2rNnjxoaGtSrVy8tXbq08WfVqlWSgtaRRYsW6ZVXXtG5556rrVu3auHChS0G5QNd6/jjj1dtba1KS0t13XXX6aabbtrvfWvXrtXtt9+uP/7xj1q2bJkmTJigDz/8cL/zps7ZEnfX2Wef3fg7rVy5Uvfd1+LaRgAAAHmHwN2KVBtJuuZupMyET3ziEyopKdH8+fOT13a9+uqrkqRRo0Zp8eLFOuigg9StWzcNHz5c99xzj0477bQOXeudd95RUVGRLr74Yk2bNk21tbWSpB49emj79u2SpPfee0/du3dXz549tXHjRv3+978/4HnPPvtszZ49u/H1li1bdMopp+jFF1/UmjVrJAX943/5y186VDcAAEAuInC3oGnPdkPD/j3dmfarX/1K9913n4YNG6bBgwfrN7/5jaRgNPm4447TKaecIiloMdm+fbtKS0s7dJ3XXntNo0aN0vDhw3XjjTfquuuukxT0kI8fP15nnHGGhg0bppNOOkknnniivvrVrza2hLTmuuuu05YtWzRkyBANGzZMzz77rI444gg98MADmjJlioYOHarRo0c33mQJAABQCMzDSI4xUV5e7jU1NftsW7VqlQYOHNjq+1q6QTKTN04iu9ryvQMAgDRVVVJ1tVRRwdLzbWBmS9y9vLl93DTZjPfflxYt2j9Up/d0L1oUHHfYYdHVCQAAEIqqKmnKFGnnTmnuXGnePEJ3JxC4m3HYYdJzzwXzbDcdwU6FbsI2AADIW9XVQdiWgsfqagJ3J9DD3YLDDmu5XcSMsA0AAPJYRYVUVBQ8LyoKXqPDCnKE291lNF8XjHy+TwEAkAH0Ku8vkQjaSPhcMqLgAne3bt1UX1+v4uJiQncBcHfV19erW7duUZcCAIijfO5V7uwfEolE/nwWESu4wN2vXz9t2LBBdXV1UZeCLOnWrZv69esXdRkAgLbI9mhzvvYq5/MfEjmo4AL3IYccopKSkqjLAAAATUUREisqgmvt3Jlfvcr5+odEjuKmSQAAEA/NhcSwpXqVKyvzaxSYmx5jpeBGuAEAQExFNdqcj73K3PQYKwW30iQAAIgxZgxBjmKlSQAAkBvycbQZBY8ebgAAACBEBG4AAJB/qqqkqVODx1yRizWjTQjcAAAgv6SmF5w9O3jMhQCbizWjzQjcAAAgv0QxvWBn5WLNaDMCNwAAyC+5OAd1LtaMNmOWEgAAkF9ycQ7qXKwZbcY83AAAAEAntTYPNy0lAAAAQIgI3AAAAECICNwAAABAiAjcAAAAQIgI3AAAAECICNwAAABAiAjcAAAgv1RVSVOnsjw6YoPADQAA8kNVlTRhgvTlL0uzZ0tTphC6EQsEbgAAkPuqqoKA/eST0q5dwbadO4OVG4GIEbgBAEDuq64OAna6oqJgmXQgYgRuAACQ+yoqgoAtSYceKp17rjRvnpRIRFsXIOngqAsAAADotEQiCNjV1UH4JmgjRgjcAAAgPyQSBG3EEi0lAAAAKUwpiBAQuAEAAKSPZzphSkFkGIEbAABA2nemE6YURAYRuAEAAKR9ZzphSkFkEDdNAgAASMx0gtBEOsJtZveb2T/MbHnatj5m9gczeyP52Du53cxsppmtMbNlZlYWXeUAACAvJRLSrFmEbWRU1C0lD0ga32TbdEl/dPcBkv6YfC1J50gakPy5TNLdWaoRAABEhVlDkAciDdzu/rykzU02nyfp58nnP5d0ftr2X3jgZUm9zOyYrBQKAACyj1lDkCeiHuFuzlHu/m7y+d8lHZV8fqyk9WnHbUhu24eZXWZmNWZWU1dXF26lAAAgPMwagjwRx8DdyN1dkrfzPXPcvdzdy4844oiQKgMAIE/FqYWDWUOQJ+I4S8lGMzvG3d9Ntoz8I7n9bUnHpR3XL7kNAABkQqqFY+dOae7cYMaOKG8eZNYQ5Ik4jnBXSfp68vnXJf0mbfs/J2crOUXStrTWEwAA0FmZbOHI1Eh51LOGxGnEHzkr6mkB50l6SdIJZrbBzL4p6TZJZ5vZG5LOSr6WpCcl/VXSGkn3SvpWBCUDAJC/MtXCkS83O+bL74HIRdpS4u5TWtj1uWaOdUmV4VYEAEABy1QLR3Mj5bnYDpIvvwciF8eWEgAAEJVMtHDky82O+fJ7IHJxvGkSAADksjBudqyqyv7Nk9y0iQyxoFMjP5WXl3tNTU3UZQAAgM5Inz2lqCj62VOAZpjZEncvb24fLSUAACDeWAAHOY7ADQAA4o1eauQ4ergBAMiA2sWnS5LKTl0YaR15iV5q5DgCNwAAiL9EgqCNnEXgBgAgE+rrpS2bpU1V0QbD9Nk8JEaFgRhglhIAADoo1Uai+nptteWSpF4rDpIGDZKKixuPy1qbSfpsHoceKplJu3YxsweQBcxSAgBAmLZs/vh5Q8O+r7MpfTaP3buDsC0xswcQMQI3AAAdVHbqwuCn193qteIg9XpNKru5SGW97g5GtevrpTVvBCPP2ZA+m8ehh0pduwbPmdkDiBQtJQAAZEDtb0uDke3efYJ2khbaTEJvL6GHG4hEay0l3DQJAEC6ji4hXly8T9+2tmyW+iSfp9pM0veHpelsHgRtIHIEbgAAUtJvOpw7t103Gu43cr2pSrUrLpAaGlR2c5E0727pVMIvUIjo4QYAICWTS4gnEkEbybF9mSEEKHAEbgAAUjK9hHhxsfSZAYRtoMDRUgIAQEqGlxBnmXcAEoEbAIB9sYQ4gAyjpQQAgEJTVSVNnZq9+cGBAkfgBgCgkKRmYpk9O3gkdAOhI3ADAFBIMjkTC4A2IXADAFBIMj0TC4AD4qZJAAAKSYZnYgFwYARuAAAKTdOZWDq6nD2ANqGlBACAQsZNlEDoCNwAABQybqIEQkfgBgCgkHETJRA6ergBAChk3EQJhI7ADQBAoWM5eyBUtJQAAAAAISJwAwAAACEicAMAUIiqqqSpU5kGEMgCAjcAAIWGubeBrCJwAwBQaJh7G8gqAjcAAIWGubeBrGJaQAAACg1zbwNZReAGACBkO3ZI3btLZvvvc5fef1867LAsF8Xc20DW0FICAECIduyQxo2TrroqCNfp3IPt48YFxwHITwRuAAA6oXbx6apdfHqL+7t3l8aOlWbM2Dd0p8L2jBnB/u7ds1MvgOyjpQQAgBCZSXfcETyfMSN4vOOOj8P2lVcGr5trNwGQHwjcAIB4q6qK98199fXSls3SpqoW62saulPBm7ANFAbzpg1leaS8vNxramqiLgMA0FGpBVp27gymr5s3Lxahu7GFpL5eW225JKnXioOkQYOk4mKVnbqw2fe5SwelNXM2NBC2gXxhZkvcvby5ffRwAwDiK+4LtGzZ/PHzhoZ9XzeR6tlO19yNlADyD4EbABBfMV2gpezUhcFPr7vVa8VB6vWaVHZzkcp63d3s6Hb6DZJXXhlk8yuv3P9GSgD5iR5uAEB8xX2BlkRCskHByPa8u5utr2nYTvVsN3cjJe0lQH4icAMA4i3uC7QUFwc/pzZf4/vvS4sW7X+DZHroXrQoosVvAGQFN00CABCyWK40CSCjcvKmSTNbZ2avmdlSM6tJbutjZn8wszeSj72jrhMAkGeqqqSpU4PHDDnssJbbRcwI20C+i23gTjrD3Yen/bUwXdIf3X2ApD8mXwMAkBmpaQhnzw4eMxi6ARSuuAfups6T9PPk859LOj+6UgAAkQlhFFpS/KchBJCT4hy4XVK1mS0xs8uS245y93eTz/8u6aimbzKzy8ysxsxq6urqslUrACBbwhyFTp+GsGtXae1aRrkBdFqcA/dn3b1M0jmSKs3stPSdHtztud8dn+4+x93L3b38iCOOyFKpAICsCXMUOjUN4bnnBnczPvkkrSUAOi22gdvd304+/kPS45JGSdpoZsdIUvLxH9FVCACIRKYWw2mpLSWRkEpKpN27g9e0lgDopFgGbjPrbmY9Us8lVUhaLqlK0teTh31d0m+iqRAAYi6sHuc4XDs1Cl1ZGTx2ZI7upm0p1167b80xXeESQG6K5TzcZvZpBaPaUrA4z4PufouZFUt6RNInJb0l6cvuvrml8zAPN4CClAqTO3cGYbGjoTTXrt0eU6cGYTulSxdp7959a66qiu8KlwBiJ+fm4Xb3v7r7sOTPYHe/Jbm93t0/5+4D3P2s1sI2ABSssGfaaG0EO1dm+UgfwT744CBsS/vWnEhIs2YRtgF0WiwDNwCgE8JshzjQDCG50oqR3pbyve/lRs0ActbBURcAAMiwVJgMox2iuRHs9POHee1MSyQ+ru/kk2NXc+3i0yVJZacujLQOAJ1H4AaAfJQeJjOpokKaO/fjHu3mRoMzce1M9k+35VxhfV4AIAI3AKA90kewe/bct985U9JvvJw7t3M3XmbyXNlWXy9t2SxtqsqdmgE0i8ANAGifVPgLK8geqG0lqnNlQaqNRPX12mrLpT5S7YoLJBskFRfTXgLkKG6aBIB8k405uMOcjSSTN17myk2cTW1Jm4SroWHf1wByTizn4c4U5uEGUHCyNQ922NfJdg933FRVqXbVBVJDg8pujvF85gAatTYPN4EbAPJJ0wVdKiuDuaTDkItBNofU/rZU2rJZZb3u5vMFckBrgZsebgDIJ22ZRaQzmoZsgmB4iouDn1P5jIFcxwg3AOSbsEaec2XZdgCIACPcAFBIwhp5zrEZPwAgLpilBADQNrk640dLsjGbCwCoDYHbzL5tZr2zUQwAIMZSi95UVu7bTpKLwTXVHjN7dvCYS7UDyDltaSk5StKfzKxW0v2SnvZ8bvwGALSsabtKrq7k2NI84sy6AiAEBxzhdvfrJA2QdJ+kb0h6w8xuNbN/Crk2AMgN2RzhjdtocpgL4LRHez+Xpu0xPXsy4g0gNG3q4U6OaP89+bNHUm9JvzazH4ZYGwDEXzZbE+LYBhGHvu6OfC5N22O2bYvHHw4A8lJberivNLMlkn4o6UVJpe5+uaQRkr4Ycn0AEG/ZHOGNy2hyupb6urOpo59LIhEsCpRIxOMPBwB5qy0j3H0kTXL3z7v7fHf/SJLcvUHSxFCrA4C4y2ZQi2soTA+uUcjE5xKHPxwA5C0WvgGAzsrmEufZuFYuLtmeizUDyCutLXxD4AYAfIzVJAGgQ1oL3Cx8AwD4WBz7xAEgxxG4AQAfi2ufOADksLYsfAMAKBSpmwfph26T2sWnS5LKTl0YaR0A4o3ADQDYV9PVJAEAnUJLCQDku7itTplP6uulNW/w2QJoFSPcAJDP0mcdmTuXWUcyINVGovp6bbXlUh+pdsUFkg2SiotpLwGwH0a4ASAXdHSU+kCzjjD63XFbNn/8vKFh39cAkIYRbgCIu86MUldUBO9JzaudPusIo98d0jiCvakqGNluaFDZzUXSvLulU/n8AOyPEW4AiLvOzI3d2pLlzLndOYmENGiQdGxf/lgB0CoCNwDEXWfnxk4kpFmz9g+EzLndecXF0mcGELYBtIql3QEgF1RVhTM3dljnBYAC09rS7gRuAAAAoJNaC9y0lAAAAAAhInADQKG49lqptDR4jArTEAIoQEwLCABhiVN/9LXXSrfeGjxfvjx4vOWW7NbANIQAChQj3AAQhlS4nD07eIx6RLfp9aOoh2kIARQoAjcAhCFu4bLpSHIUI8tMQwigQNFSAgBhaG2Fxyik2keqqoKwne12EunjRXji0mYDAFnCtIAAEJY49XADAELV2rSAjHADQKY0DdipHwBAQaOHGwAyIW43SQIAYoPADQCdkZpX+p574nWTZGcwVzYAZBQtJQDQXqnWkZ49pTvvDAJ2167SoYdKu3fH4ybJjmKubADIOAI3ALRHeiDt0kXauzfYvmuXdO65UklJbt8k2dx0hrn6uwBATNBSAgDtkR5I9+6VDk6OWxQVSf/2b9KsWa0H1Li3azBXNgBkHCPcANAeTefX/s53pG3b2jaqnQvtGsyVDQAZR+AGgLZK9W63J2Sny5V2DaYzBICMyrnAbWbjJc2Q1EXSz9z9tohLAlAI0keni4o6Njodt9UnAQBZkVM93GbWRdJsSedIGiRpipkNirYqAAWhudHp9kq1a1RWxrOdBAAQipwK3JJGSVrj7n91992SHpJ0XsQ1ASgEmbqZMJE48I2VAIC8kmstJcdKWp/2eoOkk9MPMLPLJF0mSZ/85CezVxmA/MbNhACADsq1wH1A7j5H0hxJKi8v94jLAZBPuJkQANABudZS8rak49Je90tuAwAAAGIp1wL3nyQNMLMSMztU0oWSYrp6BAAAAJBjLSXuvsfMpkp6WsG0gPe7+4qIywIAAABalFOBW5Lc/UlJT0ZdBwAAANAWudZSAiAMVVXS1KnBI7KDzxwACgaBGyh0qRUUZ88OHgmA4eMzB4CCQuAGCl0mVlCMu7iNJhfCZw4AaETgBgrdgVZQjFtYba84jia39Jnn+mcNAGhWzt00CSDDWltBMRVWd+6U5s4Njsu1hV+aG02O+ndo7jPPh88aANAsRrgBBMFu1qz9A14+tD4caAQ/Kk0/83z4rAEAzSJwA2hZXMNqe6RGkysr4z1qnA+fNQCgWebuUdcQmvLycq+pqYm6DCC3VVU1326SqeOzLc71xbk2AECrzGyJu5c3u4/ADSBj0vuQi4riN6Ic9/oAADmrtcBNSwmAzIl7H3Lc6wMA5CUCN4DMiXsfctzrAwDkJaYFBJA5rU0xGAdxrw8AkJfo4QYyIRs3u3FDHQAAsUUPNxCmbKxkGMfVEgEAQJsQuIHOysaNeNzsl5+yvZQ7S8cDQCQI3EBnZeNGPG72yz/Z/lcL/pUEACJD4AY6KxsrGebKaolou2z/qwX/SgIAkWGWEiATEonwQ3A2roHsqaiQ5s79eBGesP/VItvXAwA0InADYAaUKGR7ikKmRASAyDAtIFDoWO6cPzgAAJ3GtIBAvuvM7BOF3tvLzYQAgJARuIFc19nAWOgzoBT6HxwAgNARuIFc19nA2NkZUHJ9budC/4MDABA6eriBXBdlD3a+9H/Tww0A6KTWeriZpQSIUiaCXjZmn2ipzuZG13MxsDLlIgAgRARuICrpo8Nz53ZudDjMwNhSnVVV0tq10qGHSrt3044BAEALCNxAVHJldLilHvFUCO/aVTr3XOnf/i2e9QMAEDFumgSikis36zVXZ3oI37VLKikhbAMA0AJGuIGodLb3Ols3+rVUJ8uEAwDQJsxSAuSiOMwOwsweAAA0YpYSIN/Eof+bmT0AAGgTeriBXJQr/d8AAIDADeSkzq4OmS1hrEKZ6ytbAgAKDj3cAMIRRp95HHrXAQBoRms93IxwA/kkTqO/Lc3fHbdzAgAQMgI30BFxCrYpqdHf2bODx6hrC6PPnN51AEAOYpYSoL0yuSR7JsVh5pJ0nZ1nPFvnBAAgZARuoL3iFmxTKiritxhNGFMHMh0hACDH0FICtFdc2xpyZeYSAAAKDLOUAB3BKosAACANK00CmUZbAwAAaCNaSgAAAIAQEbgBAACAEBG4AQAAgBARuAEAAIAQEbgB5I44rvAJAMABELiBqBAe2yduS9cDANBGsQvcZnaDmb1tZkuTP+em7fu+ma0xs9fN7PNR1gl0StThMRfDfnMrfAIAkAPiOg/3He5+e/oGMxsk6UJJgyX1lbTAzI53971RFAh0SkvhMRuL6aTC/s6dwVLwubIqZRyXrgcAoA1iN8LdivMkPeTuu9x9raQ1kkZFXBPQMU2Xh+/ZM3sj3rk6UszS9QCAHBXXwD3VzJaZ2f1m1ju57VhJ69OO2ZDctg8zu8zMasyspq6uLhu1Au3XNDxu25a9ENw07OfSSHEiIc2aRdgGAOSUSFpKzGyBpKOb2XWtpLsl/ZckTz7+t6RL2npud58jaY4klZeXe6eLBcLSdHn4bLVLpMJ+NtpXAABANIHb3c9qy3Fmdq+k3yVfvi3puLTd/ZLbgHBUVWUvlGY7BDcN+wAAIDTmHq9BYDM7xt3fTT6/StLJ7n6hmQ2W9KCCvu2+kv4oaUBrN02Wl5d7TU1NNspGvkm/sbCoiJ5hAADQKjNb4u7lze2LYw/3D83sNTNbJukMSVdJkruvkPSIpJWSnpJUyQwlCE2u3lgIAABiJ3bTArr711rZd4ukW7JYDgoVU9ABAIAMiV3gBmKhUG8szGbfOgAABSJ2PdyZRA830A70rQMA0GG51sMNxF8uLo1+IPStAwAQClpKgPbK1aXRW5JqI+nZMxjZpm8dAICMInAD7dXcSHCuBu6mbSTf+U6w6iU93AAAZAwtJUB75fLS6E01/eNh2zaWTgcAIMMI3EB7pWYwqazM/XaSfPrjAQCAmGKWEqDQMRUgAACd1tosJfRwA4UukSBoAwAQIlpKAAAAgBARuAEAAIAQEbgBAACAEBG4AQAAgBARuAEAAIAQEbiBjqqqkqZODR4BAABaQOAGOiK1JPrs2cFjWKGbUA8AQM4jcAMd0XRJ9OrqzF8jW6EeAACEisANdEQ2lkTPRqgHAAChI3ADHZFISPPmSZWVwWMYKzVmI9QDAIDQmbtHXUNoysvLvaamJuoygI6rqgpGtisqWH4dAIAYM7Ml7l7e3L6Ds10MgHZIJAjaAADkOFpKAAAAgBARuAEAAIAQEbgBAACAEBG4AQAAgBARuAEAAIAQEbgRPyxnDgAA8giBG/HCcuYAACDPELgRLyxnDgAA8gyBG/HCcuYAACDPsNIk4iWRkObNYzlzAACQNwjciB+WMwcAAHmElhLkFmYwAQAAOYbAHQZCYTiYwQQAAOQgAnemEQrDwwwmAAAgBxG4M41QGB5mMAEAADmIwJ1phMLwpGYwqawMHsO+sZLWIAAAkAHm7lHXEJry8nKvqanJ/oWrqpjWLtelWoN27gz+cMpGwAcAADnLzJa4e3lz+5gWMAxMa5f7mmsN4jsFAAAdQEsJ0BxagwAAQIYwwg00hxUvAQBAhhC4gZbQGgQAADKAlhIAAAAgRARuAAAAIEQEbgAAACBEBG4AAAAgRARuAAAAIESRBG4zm2xmK8yswczKm+z7vpmtMbPXzezzadvHJ7etMbPp2a8aAAAAaL+oRriXS5ok6fn0jWY2SNKFkgZLGi/pLjPrYmZdJM2WdI6kQZKmJI9FW1RVSVOnBo8AAADIqkjm4Xb3VZJkZk13nSfpIXffJWmtma2RNCq5b427/zX5voeSx67MTsU5rKpKmjIlWJ587txgMRfmlgYAAMiauPVwHytpfdrrDcltLW3HgVRXB2FbCh6rq6OtBwAAoMCEFrjNbIGZLW/m57ywrpm87mVmVmNmNXV1dWFeKjdUVEhFRcHzoqLgNQAAALImtJYSdz+rA297W9Jxaa/7Jbeple1NrztH0hxJKi8v9w7UkF8SiaCNpLo6CNu0kwAAAGRVJD3craiS9KCZ/VhSX0kDJL0iySQNMLMSBUH7QklfjazKXJNIELQBAAAiEkngNrMLJP1E0hGSnjCzpe7+eXdfYWaPKLgZco+kSnffm3zPVElPS+oi6X53XxFF7QAAAEB7mHv+dl2Ul5d7TU1N1GUAAAAgz5nZEncvb25f3GYpAQAAAPIKgRsAAAAIEYEbAAAACBGBGwAAAAgRgRsAAAAIEYEbAAAACBGBGwAAAAgRgRsAAAAIEYEbAAAACFFerzRpZnWS3oq6jhxxuKRNUReBrOI7Lzx854WJ773w8J1H41PufkRzO/I6cKPtzKympeVIkZ/4zgsP33lh4nsvPHzn8UNLCQAAABAiAjcAAAAQIgI3UuZEXQCyju+88PCdFya+98LDdx4z9HADAAAAIWKEGwAAAAgRgRuNzOxHZrbazJaZ2eNm1ivqmhAuM5tsZivMrMHMuKM9j5nZeDN73czWmNn0qOtB+MzsfjP7h5ktj7oWhM/MjjOzZ81sZfL/16+MuiZ8jMCNdH+QNMTdh0r6i6TvR1wPwrdc0iRJz0ddCMJjZl0kzZZ0jqRBkqaY2aBoq0IWPCBpfNRFIGv2SPquuw+SdIqkSv53Hh8EbjRy92p335N8+bKkflHWg/C5+yp3fz3qOhC6UZLWuPtf3X23pIcknRdxTQiZuz8vaXPUdSA73P1dd69NPt8uaZWkY6OtCikEbrTkEkm/j7oIABlxrKT1aa83iP8QA3nLzPpLOknS/0ZcCpIOjroAZJeZLZB0dDO7rnX33ySPuVbBP039Kpu1IRxt+c4BAPnBzA6T9Kik77j7e1HXgwCBu8C4+1mt7Tezb0iaKOlzzpyReeFA3zkKwtuSjkt73S+5DUAeMbNDFITtX7n7Y1HXg4/RUoJGZjZe0vckJdx9Z9T1AMiYP0kaYGYlZnaopAslVUVcE4AMMjOTdJ+kVe7+46jrwb4I3Eg3S1IPSX8ws6Vm9tOoC0K4zOwCM9sgabSkJ8zs6ahrQuYlb4aeKulpBTdSPeLuK6KtCmEzs3mSXpJ0gpltMLNvRl0TQjVG0tcknZn8b/hSMzs36qIQYKVJAAAAIESMcAMAAAAhInADAAAAISJwAwAAACEicAMAAAAhInADAAAAISJwAwBkZseZ2Voz65N83Tv5un/EpQFAziNwAwDk7usl3S3ptuSm2yTNcfd1kRUFAHmCebgBAJIal4VeIul+SZdKGu7uH0VbFQDkvoOjLgAAEA/u/pGZTZP0lKQKwjYAZAYtJQCAdOdIelfSkKgLAYB8QeAGAEiSzGy4pLMlnSLpKjM7JtqKACA/ELgBADIzU3DT5Hfc/W+SfiTp9mirAoD8QOAGAEjBTZJ/c/c/JF/fJWmgmY2LsCYAyAvMUgIAAACEiBFuAAAAIEQEbgAAACBEBG4AAAAgRARuAAAAIEQEbgAAACBEBG4AAAAgRARuAAAAIEQEbgAAACBE/xc3N43kZjx1jgAAAABJRU5ErkJggg==\n", 207 | "text/plain": [ 208 | "
" 209 | ] 210 | }, 211 | "execution_count": 132, 212 | "metadata": {}, 213 | "output_type": "execute_result" 214 | } 215 | ], 216 | "source": [ 217 | "ax1.scatter(data[0][predictors], data[1][predictors], marker='+', c='#BDB300', s=70, label='predictors')\n", 218 | "ax1.scatter(x=new_instance, y=y_pred, marker='x', c='blue', s=70, label='new instance')\n", 219 | "ax1.legend()\n", 220 | "fig" 221 | ] 222 | }, 223 | { 224 | "cell_type": "markdown", 225 | "id": "cb6ffe03", 226 | "metadata": {}, 227 | "source": [ 228 | "#### 3.2 Model-based regression\n" 229 | ] 230 | }, 231 | { 232 | "cell_type": "markdown", 233 | "id": "29cb0ea6", 234 | "metadata": {}, 235 | "source": [ 236 | "- **Definition**: As we talked previousely, in model-base learning we create amodel (or function or formula) that generalise the rules to predict, then use it to make predictions without need of training instances for the prediction\n", 237 | "\n", 238 | "- **Principle**: chose a regression model, fitting it using training instances. then predict new labels using trained model only.\n", 239 | "\n", 240 | "- **Example of implementation**: A simple linear regression is an example of model-based regression" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": 133, 246 | "id": "b0ebcaf7", 247 | "metadata": {}, 248 | "outputs": [], 249 | "source": [ 250 | "from sklearn.linear_model import LinearRegression\n", 251 | "\n", 252 | "lr = LinearRegression()\n", 253 | "lr.fit(data[0], data[1])\n", 254 | "\n", 255 | "# model parameters (the model: y = w*X + b)\n", 256 | "w, b = lr.coef_, lr.intercept_\n", 257 | "\n", 258 | "y_pred = w * new_instance + b" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": 134, 264 | "id": "4694661b", 265 | "metadata": {}, 266 | "outputs": [ 267 | { 268 | "data": { 269 | "text/plain": [ 270 | "(0.787602032321169, array([65.68719033]))" 271 | ] 272 | }, 273 | "execution_count": 134, 274 | "metadata": {}, 275 | "output_type": "execute_result" 276 | } 277 | ], 278 | "source": [ 279 | "(new_instance, y_pred)" 280 | ] 281 | }, 282 | { 283 | "cell_type": "markdown", 284 | "id": "e38cdfd7", 285 | "metadata": {}, 286 | "source": [ 287 | "- visualisation of the model and the new instance" 288 | ] 289 | }, 290 | { 291 | "cell_type": "code", 292 | "execution_count": 135, 293 | "id": "7e3c0af0", 294 | "metadata": {}, 295 | "outputs": [ 296 | { 297 | "data": { 298 | "image/png": "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+N///sfYsWMZO3Ys48aNY9++fR36MxMRERFpF2ttt/0zYcIE+0Nr1qw5aNthvfOOtbNmeb+205YtW2xaWlrD848//tiGhYXZzZs3N2wrLi621lpbUVFh09LS7K5du6y11qakpNiioiK7ZcsW63K57PLly6211p5zzjn2hRdesNZae/HFF9s33nijYf+5c+daa62dN2+e/cUvfmGttXbWrFn27rvvttZa+8EHH1jAFhUVHVRrS66XkJBgq6qqrLXW7tmzx1pr7Zw5c+x9993XcJ7du3dbj8djrbX2iSeesNddd13DflOnTrVVVVW2qKjIxsTE2JqaGvvtt9/aIUOGNNS0//2YOXOm/fTTT6211ubk5Njhw4dba62dMWOG/eyzz6y11u7bt8/W1tYe/gfhsDb9PRQREZHmdWBmay1giT1EJu1x0wK2WnY2zJwJFRXwzDPwyiuQldWhl5g0adIBU8TNnTuXt956C4C8vDw2bNhAbGzsAccMGjSIsWPHAjBhwgS2bt3a5LnPOuushn3++c9/AvDZZ581nP+UU04hOjr6sDUe6nrp6emcf/75nHnmmZx55plNHpufn89Pf/pTtm/fTk1NzQHf6+mnn05ISAghISH069ePnTt38tFHH3HOOefQt29fAGJiYgBYsGABa9asaTh27969lJWVMW3aNK677jrOP/98zjrrLBITEw/7/YiIiMghZGfD/PmQmdnhmcenOiGztZVaSg5n/nzvDw68X+fP7/BLhIeHNzxeuHAhCxYs4Msvv2TlypWMGzeuySnkQkJCGh67XK5D9n/v36+5fVriUNd77733mDVrFsuWLWPixIlNXuOqq65i9uzZfPPNNzz22GMHfD8t/T4APB4PixYtYsWKFaxYsYKCggIiIiK46aabePLJJ6msrGTatGkNrTMiIiLSSvtD67x53q/Z2U5X1HKdkNnaSoH7cDIzISzM+zgszPu8HSIjI5vtMS4tLSU6OpqwsDDWrVvHokWL2nW9pkybNo3XX38dgPnz57Nnz542ncfj8ZCXl8dxxx3Hn/70J0pLSykrKzvoeywtLWXgwIEAPPfcc4c97/HHH88bb7xBcXExALt37wYgMzOThx9+uGG/FStWALBp0yZGjx7NjTfeyMSJExW4RURE2sqPQ+thdXBm60gK3IeTleX9lcSsWR3yq4nY2FimTZvGqFGjuOGGGw56/ZRTTqGuro4RI0Zw0003MWXKlHZdrylz5sxh/vz5jBo1ijfeeIP4+HgiIyNbfR63280FF1zA6NGjGTduHFdffTV9+vThxz/+MW+99VbDTZO3334755xzDhMmTGhoE2lOWloat956K8cccwxjxozhuuuuA7ytNkuWLCE9PZ2RI0fy6KOPAvDggw8yatQo0tPTCQoK4tRTT2319yIiIiL4dWg9lNra+oHDDs5sHcl4e7y7p4yMDLtkyZIDtq1du5YRI0Y4VJF/qK6uxuVyERgYyJdffsmvfvWrhtFi6Rz6eygiIn6ri/Rwl5Z+QU7OnZSVrWLKlE0EBIQc/iAfMsYstdZmNPWabprsgXJzczn33HPxeDwEBwfzxBNPOF2SiIiI+IusLL8N2tZaSko+JifnTkpKPiYoqC+Jiddhrcfp0pqlwN0DDRkyhOXLlztdhoiIiEirlJZ+zsqVJxAcnMARRzzAgAGX43KFH/5Ahylwi4iIiIhfstbDrl1vU1Ozk4EDf0VU1DRGjHiZvn1/gssV6nR5LabALSIiIiJ+xVo3hYWvkZNzFxUVa4iIGMeAAVdiTAD9+890urxWU+AWEREREb+xZ89HrF9/JZWVGwkLS2PEiJfp1+9cjOm6k+spcIuIiIiIo9zuKtzufQQHxxEUFIvLFUVa2j/p2/eMLh209+v634GPlJXBoWZMtNb7uj9asmQJV199dZuOffDBB6nYP9m9iIiIiI+53eXk5d3PV18NZuPGawGIiBjDhAlfExf3k24RtkGBu0llZXDMMXDttQeHbmu92485xj9Dd0ZGBnPnzm3TsQrcIiIi0hnq6krJybmbL79MYdOm6wkLG0lCwmUNrxtjHKyu4zkauI0xTxtjCo0x3zbadrsxpsAYs6L+z2mNXrvZGLPRGPOdMeZkX9UVHg7Tp8NDDx0YuveH7Yce8r4e3oZZaLZu3cqIESO4/PLLSUtLIzMzk8rKSsC7RPkpp5zChAkTmD59OuvWrcPtdjNo0KD6eSdLcLlcfPLJJwAcffTRbNiw4YDzL1y4kBkzZgBw++23c+mll3LssccyePDghiBeXl7O6aefzpgxYxg1ahSvvfYac+fOZdu2bRx33HEcd9xxAPzqV78iIyODtLQ05syZ03CN1NRU5syZw/jx4xk9enTDUuplZWX8/Oc/Z/To0aSnp/OPf/wD8C4fP3XqVMaPH88555xDmT9+UhEREZFOk5NzF1u23Erv3lMYN+4Lxo5dQHT0sU6X5TvWWsf+AEcD44FvG227HfhtE/uOBFYCIcAgYBPgau78EyZMsD+0Zs2ag7Y1xeOx9pprrAXv16aet8WWLVusy+Wyy5cvt9Zae84559gXXnjBWmvt8ccfb9evX2+ttXbRokX2uOOOs9Zae/LJJ9tvv/3WvvvuuzYjI8Peeeedtqqqyqamph50/o8//tiefvrp1lpr58yZY6dOnWqrqqpsUVGRjYmJsTU1NfbNN9+0l112WcMxJSUl1lprU1JSbFFRUcP24uJia621dXV19phjjrErV65s2G/u3LnWWmvnzZtnf/GLX1hrrf3d735nr7nmmobjd+/ebYuKiuz06dNtWVmZtdbae++9195xxx1te/O6kZb+PRQREekOqqq2240bb7C7d39c/3yb3bt3qaM1dTRgiT1EJnX0pklr7SfGmNQW7n4G8Kq1thrYYozZCEwCvvRFbcbAAw94Hz/0kPcPwDXXeLe35zcdgwYNYuzYsQBMmDCBrVu3UlZWxhdffME555zTsF91dTUA06dP55NPPmHLli3cfPPNPPHEExxzzDFMnDjxsNc6/fTTCQkJISQkhH79+rFz505Gjx7N9ddfz4033siMGTOYPn16k8e+/vrrPP7449TV1bF9+3bWrFlDeno6AGeddVZD/f/85z8BWLBgAa+++mrD8dHR0fzrX/9izZo1TJs2DYCamhqmTp3ayndMREREuqKqqjzy8u5j+/Yn8HhqCAyMITr6WEJCEggJSXC6vE7jrz3cs40xq+pbTqLrtw0E8hrtk1+/zWcah+792hu2AUJCQhoeu1wu6urq8Hg89OnThxUrVjT8Wbt2LeBtHfn0009ZvHgxp512GiUlJSxcuPCQQflw1xo6dCjLli1j9OjR3HbbbfzhD3846LgtW7bwl7/8hQ8//JBVq1Zx+umnU1VVddB595/zUKy1nHTSSQ3f05o1a3jqqacO/yaJiIhIl7Z58y189dURbNv2d/r1+xmTJq0jJeUmp8tyhD8G7r8DRwBjge3AX1tzsDHmCmPMEmPMkqKionYVsr9nu7GmbqTsCL1792bQoEG88cYb9de2rFy5EoBJkybxxRdfEBAQQGhoKGPHjuWxxx7j6KOPbtO1tm3bRlhYGBdccAE33HADy5YtAyAyMpJ9+/YBsHfvXsLDw4mKimLnzp188MEHhz3vSSedxLx58xqe79mzhylTpvD555+zceNGwNs/vn79+jbVLSIi0u1lZ8Ps2d6vXVBFxXd4PN6BuODgeBISLmfy5I0MH/4UYWFDHK7OOX4XuK21O621bmutB3gCb9sIQAGQ1GjXxPptPzz+cWtthrU2Iy4urh11fH+D5DXXgMfj/frDGyk70ksvvcRTTz3FmDFjSEtL45133gG8o8lJSUlMmTIF8LaY7Nu3j9GjR7fpOt988w2TJk1i7Nix3HHHHdx2220AXHHFFZxyyikcd9xxjBkzhnHjxjF8+HB+9rOfNbSENOe2225jz549jBo1ijFjxvDxxx8TFxfHs88+y8yZM0lPT2fq1KkNN1mKiIhII9nZMHMmzJvn/dqFQndZ2UpWrz6XxYtHUFj4MgCJiVczdOg8QkNTHK7Oecb6Ijm2pgBvD/e/rLWj6p8nWGu31z++FphsrT3PGJMGvIw3gA8APgSGWGvdhzp3RkaGXbJkyQHb1q5dy4gRI5qt6Ydhe38byaG2i7RWS/4eiohIDzN7tjds7zdrFjzyiHP1tMDevYvJybmT4uJ3cbl6M3DgbBITf0NwcNsHPbsqY8xSa21GU685etOkMeYV4FigrzEmH5gDHGuMGQtYYCtwJYC1drUx5nVgDVAHzGoubLdHeTl8+unBobpxT/enn3r3i4jwRQUiIiLS42RmwjPPQEUFhIV5n/sxay3r1l1KTc12UlP/yMCBswkK6uN0WX7J8RFuX2rrCDd4F7UJD296BNtahW1pH41wi4hIk7KzYf58b9jOynK6mgNYa9mz57/k589l5MiXCQzsTXn5GkJCkgkMVCjy2xFuf9ZcmDZGYVtERER8ICvLL4N2cfG75OTcyb59XxMSkkhFxXp6984gPHyk0+V1CQrcIiIiItKkurq9LF8+nfLyVYSGDmbo0CeIj7+IgIBgp0vrUhS4RURERKSBx1PLvn1LiIqaSmBgb6KijiIp6Qb69TuPgABFx7bQuyYiIiIieDzV7NjxHLm591Jdnc+UKVsICRnI0KF/d7q0Ls/v5uHuCSKaaAB/9NFHef75531+7dTUVEaPHk16ejrHHHMMOTk5Pr9me2VnZ3Pvvfc6XcZBUlNT2bVrV7v3ERERcZLbXUF+/lwWLTqC9euvJCgojrS0fxIcPMDp0roNjXD7iV/+8pc+Pb+1lv0z0nz88cf07duXOXPmcOedd/LEE090yLkDAnzz+S0rK4ssP7uBREREpLuoqdnBxo3XERX1I4YPf5bo6BMwWmikQ2mE20/cfvvt/OUvfwHg2GOP5cYbb2TSpEkMHTqUTz/9FAC3280NN9zAxIkTSU9P57HHHgOgrKyME044gfHjxzN69OiGFSq3bt3KsGHDuOiiixg1ahR5eXkHXHPq1KkUFHgX6ywqKuLss89m4sSJTJw4kc8//7xh+0knnURaWhqXXXYZKSkp7Nq1q8lz33fffQ21zZkzB/Au5X766aczZswYRo0axWuvvQbATTfdxMiRI0lPT+e3v/1tszU8++yzzJ49u+F7Ov7440lPT+eEE04gNzcXgEsuuYSrr76ao446isGDB/Pmm28e9B5v3bqV4cOHc8kllzB06FDOP/98FixYwLRp0xgyZAiLFy8GYPfu3Zx55pmkp6czZcoUVq1aBUBxcTGZmZkN70XjKTVffPHFhtU7r7zyStxun0wRLyIi0m61tXvYuvUPrF17IQC9eg1m0qS1jBu3kJiYExW2faDHj3AvX37sQdv69TuXgQN/jdtdwapVpx30enz8JSQkXEJNzS5Wr/6/A14bN25hh9RVV1fH4sWLef/997njjjtYsGABTz31FFFRUXz99ddUV1czbdo0MjMzSUpK4q233qJ3797s2rWLKVOmNIwIb9iwgeeee65hWfjG/v3vf3PmmWcCcM0113Dttdfyox/9iNzcXE4++WTWrl3LHXfcwfHHH8/NN9/Mv//9b5566qmG4xufe/78+WzYsIHFixdjrSUrK4tPPvmEoqIiBgwYwHvvvQdAaWkpxcXFvPXWW6xbtw5jDCUlJc3W0NhVV13FxRdfzMUXX8zTTz/N1Vdfzdtvvw3A9u3b+eyzz1i3bh1ZWVn83/8d+LMB2LhxI2+88QZPP/00EydO5OWXX+azzz4jOzubu+++m7fffps5c+Ywbtw43n77bT766CMuuugiVqxYwR133MGPfvQjfv/73/Pee+81vBdr167ltdde4/PPPycoKIhf//rXvPTSS1x00UXt+jsgIiLSkWpqisjPf4CCgkdwu/cRG3sGHk81AQEhhIUNcbq8bq3HB25/ddZZZwEwYcIEtm7dCsD8+fNZtWpVw+htaWkpGzZsIDExkVtuuYVPPvmEgIAACgoK2LlzJwApKSkHhe3jjjuO3bt3ExERwR//+EcAFixYwJo1axr22bt3L2VlZXz22We89dZbAJxyyilER0c37NP43PPnz2f+/PmMGzcO8I66b9iwgenTp3P99ddz4403MmPGDKZPn05dXR2hoaH84he/YMaMGcyYMaPZGhr78ssv+ec//wnAhRdeyO9+97uG184880wCAgIYOXJkw/f/Q4MGDWL06NEApKWlccIJ3l+bjR49uuF9/uyzz/jHP/4BwPHHH09xcTF79+7lk08+abj26aef3vBefPjhhyxdupSJEycCUFlZSb9+/Zq8voiIiBN2757Pt9/+BI+nkri4c0lJuYWIiHSny+oxenzgbm5E2uUKa/b14OC+HTai/UMhISH1Nbioq6sDvL3SDz/8MCeffPIB+z777LMUFRWxdOlSgoKCSE1NpaqqCoDw8PCDzv3xxx/Tp08fzj//fObMmcP999+Px+Nh0aJFhIaGtrjGxue21nLzzTdz5ZVXHrTfsmXLeP/997nttts44YQT+P3vf8/ixYv58MMPefPNN3nkkUf46KOP2lRDY/vfs/31HG6fgICAhucBAQEN73NrWWu5+OKLueeee9p0vIiIiC9UVm6lrq6YyMgJREZOpH//n5GYeD3h4cNbdyI/Xv2yq1APdxdy8skn8/e//53a2loA1q9fT3l5OaWlpfTr14+goCA+/vjjFs08EhgYyIMPPsjzzz/P7t27yczM5OGHH254fcWKFQBMmzaN119/HfCOYu/Zs+eQtT399NMNI9IFBQUUFhaybds2wsLCuOCCC7jhhhtYtmwZZWVllJaWctppp/HAAw+wcuVKgEPW0NhRRx3Fq6++CsBLL73E9OnTD/u9ttb06dN56aWXAFi4cCF9+/ald+/eHH300bz88ssAfPDBBw3vxQknnMCbb75JYWEh4O0B7wqzv4iISPdUUbGBdesuZfHiIaxfPwuAoKBohg17om1he+ZMmDfP+zU72wcVd389foTbCRUVFSQmJjY8v+6661p03GWXXcbWrVsZP3481lri4uJ4++23Of/88/nxj3/M6NGjycjIYPjwlv3HlJCQwMyZM5k3bx5z585l1qxZpKenU1dXx9FHH82jjz7KnDlzmDlzJi+88AJTp04lPj6eyMjIg1o9MjMzWbt2LVOnTgW8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\n", 299 | "text/plain": [ 300 | "
" 301 | ] 302 | }, 303 | "metadata": { 304 | "needs_background": "light" 305 | }, 306 | "output_type": "display_data" 307 | } 308 | ], 309 | "source": [ 310 | "x = np.linspace(-2.5, 2.5, num=100)\n", 311 | "y = w*x + b\n", 312 | "\n", 313 | "\n", 314 | "fig2 = plt.figure(figsize=(12, 6))\n", 315 | "ax2 = fig2.add_subplot(111)\n", 316 | "\n", 317 | "ax2.scatter(x=data[0], y=data[1], s=10, c='red', label='training instances')\n", 318 | "ax2.scatter(x=new_instance, y=y_pred, marker='x', c='blue', s=70, label='new instance')\n", 319 | "ax2.plot(x, y, 'y--', label='LinearRegresseion model')\n", 320 | "\n", 321 | "plt.xlabel('X')\n", 322 | "plt.ylabel('y')\n", 323 | "plt.legend(loc='best')\n", 324 | "plt.title('visualisation')\n", 325 | "fig2.show()" 326 | ] 327 | }, 328 | { 329 | "cell_type": "markdown", 330 | "id": "926e0e4b", 331 | "metadata": {}, 332 | "source": [ 333 | "### 4. Classification\n", 334 | "#### 4.1 Instance-based Classification\n", 335 | "- **Definition:** we defined it previously (see section 3.1)\n", 336 | "\n", 337 | "- **Principle:** we chose a number **n** of the most similar instances to the new instance (the number n is refered by the parameter alpha), then the class of the new instance is the majority class in those instances set (the most occured class)\n", 338 | "\n", 339 | "- **Example of implementation:** implement a classifier using the training instances directly without training" 340 | ] 341 | }, 342 | { 343 | "cell_type": "markdown", 344 | "id": "4c30ec80", 345 | "metadata": {}, 346 | "source": [ 347 | "- Import dataset " 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 72, 353 | "id": "c8f6f2a8", 354 | "metadata": {}, 355 | "outputs": [], 356 | "source": [ 357 | "from sklearn.datasets import make_moons\n", 358 | "data = make_moons(noise=0.3)\n", 359 | "X = data[0]\n", 360 | "y = data [1]" 361 | ] 362 | }, 363 | { 364 | "cell_type": "markdown", 365 | "id": "bebb19a1", 366 | "metadata": {}, 367 | "source": [ 368 | "- Visualisation of the dataset" 369 | ] 370 | }, 371 | { 372 | "cell_type": "code", 373 | "execution_count": 124, 374 | "id": "47ceca70", 375 | "metadata": {}, 376 | "outputs": [ 377 | { 378 | "data": { 379 | "image/png": "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zQYApEI1/s6ddNJJuuOOO3TuueequblZN99886D9d999t+bPn68FCxbohBNOOLj91ltv1Zw5c9TU1KQzzzxTzc3NevLJJ9XU1KR58+Zp69atuvbaazVhwgStWrVKF154oRobG3XFFVfopJNOGvN4B2JZdaBGcr05NU1rGra9p7enyNEAACRLtf7OXXfddbruuuuK7rvxxht14403Dtv+1a9+ddi222+/Xbfffvuw7YsWLdKiRYvGNcZizN1Df9IotbS0eHt7e9TDAAAASLzt27ersbEx6mHEQrHXwsw63L2l2PGUiwAAAAAhI2QDAAAAISNkAwAAACEjZAMAAAAhI2QDAAAAISNkAwAAIDFWrFihBx98MLTn+9jHPqZp06apqWl4+8HxIGQDAFBDuXxOS55awmqvQEwsXrxYzzzzTOjPS8gGgAQgmKVHW0db4cZqr0iZhgbJbPitoWF8z/vYY49p7ty5am5u1jXXXDNo35o1a3TqqaequblZl112mXp6CgvfrFu3Tk1NTWpubtY555wjSdq2bZtOO+00zZs3T3PnztWrr74qSTrnnHN0xBFHjG+QRRCyASABCGbRCPvkJpfP6a5Nd0mSVmxawUkTUmXv3tFtr8S2bdt0zz33aOPGjdqyZYsefvjhQfsvvfRSPf/889qyZYsaGxv16KOPSpJWrlypDRs2aMuWLVq/fr0kafXq1Vq6dKleeOEFtbe3a9asWWMfWAUI2QAQcwSz6IR9ctPW0aZ8X16SlO/Lc9IEjGDjxo26/PLLNWXKFEkaNuO8detWnX322ZozZ47Wrl2rbdu2SZIWLFigxYsXa82aNerr65MknXHGGbr33nt1//3364033tCkSZOqOnZCNgCUEYcyDYJZNMI+uel/vu58tySpO9/NSRMwTosXL9aqVav00ksv6c4779S+fYXfp9WrV+uee+7Rzp07dcopp2j37t26+uqrtX79ek2aNEmLFi3Sxo0bqzo2QjYAlBF1mQbBLDphn9y0dbSpJ98zaFtPvoeTJqCM8847T+vWrdPu3bslSW+//fag/Xv37tX06dOVz+e1du3ag9tff/11zZ8/XytXrtTUqVO1c+dO7dixQ8cdd5xuuukmXXLJJXrxxRerOnZCNgCUEIcyDYJZNKpxcpPrzalpWpNOnn7ywVvTtCb19PaM/GAgo0466STdcccdOvfc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\n", 380 | "text/plain": [ 381 | "
" 382 | ] 383 | }, 384 | "metadata": { 385 | "needs_background": "light" 386 | }, 387 | "output_type": "display_data" 388 | } 389 | ], 390 | "source": [ 391 | "fig3 = plt.figure(figsize=(12, 6))\n", 392 | "ax3 = fig3.add_subplot(111)\n", 393 | "\n", 394 | "ax3.scatter(X[y==0][:, 0], X[y==0][:, 1], marker='^', s=30, c='green', label='class0')\n", 395 | "ax3.scatter(X[y==1][:, 0], X[y==1][:, 1], marker='s', s=30, c='blue', label='class1')\n", 396 | "\n", 397 | "plt.title('visualisation of the data')\n", 398 | "plt.legend()\n", 399 | "plt.xlabel('X1')\n", 400 | "plt.ylabel('X2')\n", 401 | "plt.show()" 402 | ] 403 | }, 404 | { 405 | "cell_type": "markdown", 406 | "id": "70e9f42f", 407 | "metadata": {}, 408 | "source": [ 409 | "- Decision function implementation\n", 410 | "\n", 411 | "We will use the same similarity measure as before wich is ***euclidian distance()***. we will also use ***mode()*** function to select the majority class" 412 | ] 413 | }, 414 | { 415 | "cell_type": "code", 416 | "execution_count": 97, 417 | "id": "89fac3d7", 418 | "metadata": {}, 419 | "outputs": [], 420 | "source": [ 421 | "import statistics\n", 422 | "\n", 423 | "def instance_based_classifier(X, y, new_x, alpha): \n", 424 | " similarities = [euclidean_distance(x, new_x) for x in X]\n", 425 | " predictors = np.argsort(similarities)[:alpha]\n", 426 | " prediction = statistics.mode(y[predictors])\n", 427 | " return prediction, predictors" 428 | ] 429 | }, 430 | { 431 | "cell_type": "markdown", 432 | "id": "f4771b98", 433 | "metadata": {}, 434 | "source": [ 435 | "- New instance" 436 | ] 437 | }, 438 | { 439 | "cell_type": "code", 440 | "execution_count": 99, 441 | "id": "242c3cc5", 442 | "metadata": {}, 443 | "outputs": [ 444 | { 445 | "data": { 446 | "text/plain": [ 447 | "1" 448 | ] 449 | }, 450 | "execution_count": 99, 451 | "metadata": {}, 452 | "output_type": "execute_result" 453 | } 454 | ], 455 | "source": [ 456 | "new_instance = np.array([1.25, 0.25])\n", 457 | "y_pred, predictors = instance_based_classifier(X, y, new_instance, alpha=20)\n", 458 | "y_pred" 459 | ] 460 | }, 461 | { 462 | "cell_type": "code", 463 | "execution_count": 100, 464 | "id": "62c9dfda", 465 | "metadata": {}, 466 | "outputs": [ 467 | { 468 | "data": { 469 | "text/plain": [ 470 | "array([1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0],\n", 471 | " dtype=int64)" 472 | ] 473 | }, 474 | "execution_count": 100, 475 | "metadata": {}, 476 | "output_type": "execute_result" 477 | } 478 | ], 479 | "source": [ 480 | "y[predictors]" 481 | ] 482 | }, 483 | { 484 | "cell_type": "markdown", 485 | "id": "2b121887", 486 | "metadata": {}, 487 | "source": [ 488 | "- visualisation of the new instance and the predictors" 489 | ] 490 | }, 491 | { 492 | "cell_type": "code", 493 | "execution_count": 102, 494 | "id": "78fd22ea", 495 | "metadata": {}, 496 | "outputs": [ 497 | { 498 | "data": { 499 | "text/plain": [ 500 | "Text(0, 0.5, 'X2')" 501 | ] 502 | }, 503 | "execution_count": 102, 504 | "metadata": {}, 505 | "output_type": "execute_result" 506 | }, 507 | { 508 | "data": { 509 | "image/png": "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z/D/BI+rDp675UJNAOgVc667TxwBAAAA9AYj2QAAAECEEbIBAACACCNkAwAAABFGyAYAAAAijJANAAAARFh/lsSNSVlZWW7ChAlelwEAAIAEV1paesg5F3JF2oQL2RMmTFBJSYnXZQAAACDBmdn7Xe2jXQQAAACIMEI2AAAAEGGEbAAAACDCEq4nGwAAIBS/3699+/bp+PHjXpeCOJOWlqZx48bpU5/6VI8fQ8gGAABJYd++fUpPT9eECRNkZl6XgzjhnFNlZaX27duniRMn9vhxtIsAAICkcPz4cY0cOZKAjV4xM40cObLXn4AQsgEAQNIgYKMv+vK6IWQDAAB4ZPny5br33nsjdr4XXnhBp59+uk499VTdc889ETsveo+QDQAAkACampp0/fXX609/+pN27typJ598Ujt37vS6rKRFyAairM5fp2ufu1bHG7m6HQBiXaT/Zj/++OOaMmWK8vLy9NWvfrXdvocfflhnnXWW8vLy9PnPf17Hjh2TJD3zzDPKyclRXl6e5s6dK0nasWOHpk+frvz8fE2ZMkVvv/223njjDZ166qk65ZRTlJKSoi9/+cv6wx/+EJG60XuEbCDKikuLm28lxV6XAgDoRiT/Zu/YsUN333231q1bp7KyMv385z9vt/+SSy7Rm2++qbKyMmVnZ+uRRx6RJN11111avXq1ysrKtGrVKknSgw8+qJtvvllbt25VSUmJxo0bpw8//FDjx49vPV/LNniDkA1EUZ2/Tne+cqckafkryxnNBoAYFum/2evWrdOll16qrKwsSdKIESPa7S8vL9ecOXOUm5urJ554Qjt27JAkFRUVacmSJXr44YfV1NQkSZo1a5Z++MMf6sc//rHef/99DRkypF+1IfII2UAUFZcWy9/klyT5m/yMZgNADIv23+wlS5Zo5cqV2r59u+64447WKeMefPBB3X333dq7d6+mTZumyspKXX755Vq1apWGDBmiRYsWad26dTr55JO1d+/e1vPt27dPJ5988oDWjK4RsoEoaRkRqfXXSpJq/bWMZgNAjBqIv9nz58/XM888o8rKSknS4cOH2+2vrq7WSSedJL/fryeeeKJ1+7vvvqsZM2borrvu0qhRo7R371699957OuWUU3TTTTfpc5/7nLZt26azzjpLb7/9tv7617+qoaFBv/vd73TRRRf1uV70DyEbiJLi0mId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5LgoKikp0U033dSnx65YsULHjsXO637Pnj3Kyencptcf3/72t/Xqq69KklauXKlTTz1VZqZDhw61HvPcc8/pX//1XyPyfLSLAACApNCjdhHraqXHEBIoQ02YMEElJSXKyoqNWVQivXBPZWWlFi9erM2bN0uS3nrrLQ0fPlzz5s1r930751RQUKCNGzfq05/+dLtz0C4CAAAQg/bs2aPs7GxdddVVOvPMM/VP//RPqqurkyS9++67WrhwoaZNm6Y5c+aooqJCTU1NmjhxopxzOnr0qAYNGtQ6Ejt37ly9/fbb7c7/8ssv68ILL5QkLV++XFdeeaXmzZunU045Rffff78kqba2VosXL1ZeXp5ycnL01FNP6f7779dHH32kc889V+eee64k6brrrlNhYaHOPPNM3XHHHa3PMWHCBN1xxx0qKChQbm6uKioqJEk1NTX6xje+odzcXE2ZMkXPPvusJOnPf/6zZs2apYKCAl166aWqqanp9HN55513tGDBAuXl5amgoEDvvvtup5/bnDlzVFBQoIKCAm3atEmStH//fs2dO1f5+fnKycnR+vXr1dTUpCVLlignJ0e5ubn62c9+Jkl69tlntXDhwtZzTp06VRMmTOhUi5lp3rx5eu6553ryKw2LkA0AABAlb7/9tq6//nrt2LFDmZmZrWH06quv1gMPPKDS0lLde++9+ta3vqVBgwbp9NNP186dO7VhwwYVFBRo/fr1qq+v1969e3XaaaeFfa6KigqtXr1ab7zxhu688075/X698MILGjt2rMrKylReXq6FCxfqpptu0tixY/XSSy/ppZdekiT94Ac/UElJibZt26ZXXnlF27Ztaz1vVlaWtmzZouuuu0733nuvJOn73/++TjjhBG3fvl3btm3T/PnzdejQId1999168cUXtWXLFhUWFuq+++7rVOdXvvIVXX/99SorK9OmTZt00kkntds/evRorVmzRlu2bNFTTz3V2hLz29/+VhdccIG2bt2qsrIy5efna+vWrfrwww9VXl6u7du36xvf+IYkaePGjZo2bVqPfkeFhYVav359j44Nh5ANADGO1QiTC7/vxDZx4kTl5+dLkqZNm6Y9e/aopqZGmzZt0qWXXqr8/Hxdc8012r9/vyRpzpw5evXVV/Xqq69q2bJl2rBhg958802dddZZ3T7X4sWLlZqaqqysLI0ePVoH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\n", 510 | "text/plain": [ 511 | "
" 512 | ] 513 | }, 514 | "metadata": { 515 | "needs_background": "light" 516 | }, 517 | "output_type": "display_data" 518 | } 519 | ], 520 | "source": [ 521 | "fig4 = plt.figure(figsize=(12, 6))\n", 522 | "ax4 = fig4.add_subplot(111)\n", 523 | "\n", 524 | "ax4.scatter(X[y==0][:, 0], X[y==0][:, 1], marker='^', s=30, c='green', label='class0')\n", 525 | "ax4.scatter(X[y==1][:, 0], X[y==1][:, 1], marker='s', s=30, c='blue', label='class1')\n", 526 | "ax4.scatter(X[predictors][:, 0], X[predictors][:, 1], marker='o', c='#BDB300', s=70, label='predictors')\n", 527 | "\n", 528 | "class_shape = {\n", 529 | " 0: '^',\n", 530 | " 1: 's'\n", 531 | "}\n", 532 | "\n", 533 | "marker = class_shape[y_pred]\n", 534 | "ax4.scatter(new_instance[0], new_instance[1], marker=marker, c='red', s=100, label=f'new instance class({y_pred})')\n", 535 | "\n", 536 | "plt.title('visualisation of the data')\n", 537 | "plt.legend()\n", 538 | "plt.xlabel('X1')\n", 539 | "plt.ylabel('X2')" 540 | ] 541 | }, 542 | { 543 | "cell_type": "markdown", 544 | "id": "711d09bd", 545 | "metadata": {}, 546 | "source": [ 547 | "#### 4.2 Model-based Classification\n", 548 | "- **Definition:** we defined it previously (see section 3.2)\n", 549 | "\n", 550 | "- **Principle:** chose a classification model, fitting it using training instances. then predict new class using trained model only.\n", 551 | "\n", 552 | "- **Example of implementation:** Decision Tree classifier is an example of model-based classification" 553 | ] 554 | }, 555 | { 556 | "cell_type": "markdown", 557 | "id": "bf9ab6e2", 558 | "metadata": {}, 559 | "source": [ 560 | "- import, fit, and visualise the model" 561 | ] 562 | }, 563 | { 564 | "cell_type": "code", 565 | "execution_count": 104, 566 | "id": "4fd4dbd3", 567 | "metadata": {}, 568 | "outputs": [ 569 | { 570 | "data": { 571 | "text/plain": [ 572 | "[Text(0.5, 0.75, 'x[1] <= 0.016\\ngini = 0.5\\nsamples = 100\\nvalue = [50, 50]'),\n", 573 | " Text(0.25, 0.25, 'gini = 0.145\\nsamples = 38\\nvalue = [3, 35]'),\n", 574 | " Text(0.75, 0.25, 'gini = 0.367\\nsamples = 62\\nvalue = [47, 15]')]" 575 | ] 576 | }, 577 | "execution_count": 104, 578 | "metadata": {}, 579 | "output_type": "execute_result" 580 | }, 581 | { 582 | "data": { 583 | "image/png": "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\n", 584 | "text/plain": [ 585 | "
" 586 | ] 587 | }, 588 | "metadata": { 589 | "needs_background": "light" 590 | }, 591 | "output_type": "display_data" 592 | } 593 | ], 594 | "source": [ 595 | "from sklearn.tree import DecisionTreeClassifier, plot_tree\n", 596 | "\n", 597 | "dtc = DecisionTreeClassifier(max_depth=1)\n", 598 | "dtc.fit(X, y)\n", 599 | "\n", 600 | "plot_tree(dtc)" 601 | ] 602 | }, 603 | { 604 | "cell_type": "markdown", 605 | "id": "3f060b29", 606 | "metadata": {}, 607 | "source": [ 608 | "- new instance prediction" 609 | ] 610 | }, 611 | { 612 | "cell_type": "code", 613 | "execution_count": 112, 614 | "id": "e870cb2a", 615 | "metadata": {}, 616 | "outputs": [ 617 | { 618 | "data": { 619 | "text/plain": [ 620 | "(array([ 1. , -0.125]), 1)" 621 | ] 622 | }, 623 | "execution_count": 112, 624 | "metadata": {}, 625 | "output_type": "execute_result" 626 | } 627 | ], 628 | "source": [ 629 | "new_instance = np.array([1, -0.125])\n", 630 | "\n", 631 | "y_pred = dtc.predict([new_instance])\n", 632 | "(new_instance, y_pred[0])" 633 | ] 634 | }, 635 | { 636 | "cell_type": "markdown", 637 | "id": "7c1c943b", 638 | "metadata": {}, 639 | "source": [ 640 | "- visualisation of the data" 641 | ] 642 | }, 643 | { 644 | "cell_type": "code", 645 | "execution_count": 113, 646 | "id": "8bdc1cef", 647 | "metadata": {}, 648 | "outputs": [ 649 | { 650 | "data": { 651 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAAGDCAYAAAD+sAySAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA4Z0lEQVR4nO3de3xU9bX38e8yCAFNQAWUmwWOioGQRAggogh4o2hFrVqxXtBWRWtRtD7IKY8CXqo+HBuVnhKpx1bL8VotHKvSIhf1eCwmHkBuCiIWlIqgGEgGmYTf88dMYi4zubFn9lw+79drv5jZe8+elZkJWfs3a6+fOecEAAAAwDuH+B0AAAAAkGpIsgEAAACPkWQDAAAAHiPJBgAAADxGkg0AAAB4jCQbAAAA8BhJNoC0Z2avmdnVMX6OLWZ2Zvj2v5rZ72LwHDE5bjOe90Iz22pme83spGbsP8rMtsUolt5m5sysTSyODwDNxX9CANKec+77cX6++w/2GGY2StIfnXM9vTxuK82WdLNzbkGkjWbmJB3vnNsU37AaF+k1BACvMJINADhY35O01u8gACCRkGQDSHlmNtXMXqy37hEzezR8e5mZ/TR8+zgzW25m35jZTjN7Lry+QRlCvcf9i5ktMbNd4cfNN7NOUeKZYWZ/DN/ONLM/hh+328zeM7Ojw9uuMbP1ZrbHzDab2Q3h9YdJek1S93CJxl4z6177uOH9zjezteHjLjOznFrbtpjZL8xsdfhnfc7MMqPEe4iZTTezT81sh5k9ZWYdzaydme2VlCFplZl9HOGxb4ZvrgrH+aNa224PH2+7mV1Ta307M5ttZv8wsy/MbK6ZtY8SW0Z4351mtlnSufW2t/Q1HGpm/xN+zbab2RwzaxvpuQGgMSTZANLBs5LGmVmWFErMJF0q6T8j7HuPpL9KOkJST0mPNfM5TNKvJHWXlCOpl6QZzXjc1ZI6hvc/StIkSYHwth2SzpOULekaSb82s0HOuXJJ35f0uXPu8PDyeZ1gzE6Q9IykWyV1kfSqpP+qlzBeKmmspD6S8iRNjBLjxPAyWlJfSYdLmuOc+9Y5d3h4n3zn3L/Uf6BzbmSt7Yc7554L3z8m/HP3kPQTSb8xsyPC2x6QdIKkAknHhfe5K0ps1yn0Gp0kqVDSxfW2t/Q1rJI0RVJnScMlnSHppijPDQBRkWQDSHnOuU8lvS/pwvCqMZIqnHPvRtg9qFD5Q3fn3D7n3NvNfI5Nzrm/hRPPLyU9LOn0Zjw0qFByfZxzrso5V+qcKwsf8y/OuY9dyHKFkv/TmhOPpB9J+ks4pqBCddPtJZ1Sa59HnXOfO+e+kvRfCiW1kfxY0sPOuc3Oub2Spkm67CAvLgxKmuWcCzrnXpW0V1I/MzNJ10ua4pz7yjm3R9L9ki6LcpxLJRU557aGf45f1d7Y0tcw/Pq/65yrdM5tkVSs5r2PAFAHSTaAdPGfkiaEb1+uyKPYkvR/FBqVXhEutbi2OQc3s6PN7Fkz+8zMyiT9UaHR0KY8LWmRpGfN7HMze8jMDg0f8/tm9q6ZfWVmuyWNa+YxpdCI+qfVd5xzByRtVWhUuNo/a92uUGiEusljhW+3kXR0M2OJZJdzrjLC83eR1EFSabhkY7ek18Pro8W2tV5sNVr6GprZCWb2ipn9M/w+3t/Y/gAQDUk2gHTxgqRRZtZToRHtiEm2c+6fzrnrnHPdJd0g6d/N7DhJ5eFdOtTa/Zhat++X5CQNdM5lS7pCoWS9UeGR3JnOuf4KjTKfJ+kqM2sn6U8KjUAf7ZzrpFDJR/UxXROH/lyhEXlJUniEuJekz5qKqaljSTpWUqWkL1pxrKbsVKhcZoBzrlN46VirLKW+7Qr9XLVjkxSq7VbLX8PfStqgUDeUbEn/qma8jwBQH0k2gLQQLuFYJulJSZ8459ZH2s/MLgkn4pL0tUKJ2IHw4z+TdEX4YrtrJdWuQc5SqOThGzPrIemO5sRlZqPNbGC4TrxMoTKKA5LaSmon6UtJlWb2fUln13roF5KOMrOOUQ79vKRzzeyM8Mj47ZK+lfROc+Kq5xlJU8ysj5kdrtAJxXP1RqIb84VCtdxNCo+4z1OodrqrJJlZDzM7J8pDnpc02cx6hmu676y1rTWvYZZC78NeMztR0o3NiRsA6iPJBpBO/lPSmYpeKiJJQyT9Pdw1Y6GkW5xzm8PbrlMoed4laYDqJqwzJQ2S9I2kv0h6qZkxHSPpRYUSu/WSlkt6OlyLPFmhJPJrhUpcFlY/yDm3QaHkd3O4rKJ77YM65z5UaDT9MYVGh38g6QfOuf3NjKu2/1CorOVNSZ9I2ifp5y14/AxJfwjHeWkz9p8qaZOkd8MlG4sl9Yuy7zyFym1WKVR3X/O6t/I1/EV4vz3hY1dfqAkALWLONfWNIwAAAICWYCQbAAAA8BhJNgAAAOAxkmwAAADAYyTZAAAAgMdIsgEAAACPHcyUuAmpc+fOrnfv3n6HAQAAgBRXWlq60zkXcUbalEuye/furZKSEr/DAAAAQIozs0+jbaNcBAAAAPAYSTYAAADgMZJsAAAAwGMpV5MNAADgtWAwqG3btmnfvn1+hwIfZGZmqmfPnjr00EOb/RiSbAAAgCZs27ZNWVlZ6t27t8zM73AQR8457dq1S9u2bVOfPn2a/TjKRQAAAJqwb98+HXXUUSTYacjMdNRRR7X4WwySbAAAgGYgwU5frXnvSbIBAACS0IwZMzR79mzPjvf666+rX79+Ou644/TAAw94dtx0RZINAACQ5qqqqvSzn/1Mr732mtatW6dnnnlG69at8zuspEaSDcRIIBjQpFcmaV8lV6IDQDry+u/AU089pby8POXn5+vKK6+ss23evHkaMmSI8vPz9cMf/lAVFRWSpBdeeEG5ubnKz8/XyJEjJUlr167V0KFDVVBQoLy8PG3cuFErVqzQcccdp759+6pt27a67LLLtGDBAk/iTlck2UCMFJcWh5aSYr9DAQD4wMu/A2vXrtW9996rJUuWaNWqVXrkkUfqbL/ooov03nvvadWqVcrJydETTzwhSZo1a5YWLVqkVatWaeHChZKkuXPn6pZbbtHKlStVUlKinj176rPPPlOvXr1qjle9Dq1Hkg3EQCAY0MzlMyVJM5bPYDQbANKM138HlixZoksuuUSdO3eWJB155JF1tq9Zs0annXaaBg4cqPnz52vt2rWSpBEjRmjixImaN2+eqqqqJEnDhw/X/fffrwcffFCffvqp2rdvf1CxITKSbCAGikuLFawKSpKCVUFGswEgzcT778DEiRM1Z84cffDBB7r77rtr2s3NnTtX9957r7Zu3arBgwdr165duvzyy7Vw4UK1b99e48aN05IlS9SjRw9t3bq15njbtm1Tjx49YhpzqiPJBjxWPXpRHiyXJJUHyxnNBoA0Eou/A2PGjNELL7ygXbt2SZK++uqrOtv37Nmjbt26KRgMav78+TXrP/74Yw0bNkyzZs1Sly5dtHXrVm3evFl9+/bV5MmTNX78eK1evVpDhgzRxo0b9cknn2j//v169tlndf7557c6XpBkA54rLi1WRbCizrqKYAWj2QCQJmLxd2DAgAH65S9/qdNP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narS0lIdccQROvvss/XnP/9ZF1xwQaM/8/bt2/X2229rw4YNOv/883XxxRfr5Zdf1ocffqh169bpiy++UP/+/XXttddKkm6++WbdddddkqQrr7xSr7zyin7wgx9Ikvbv36/qWcK3bNmiv/zlL7rgggv07LPP6qKLLtKhhx7akrejAUayAQBxE23WTUazgYPz17/+VU899ZQKCgo0bNgw7dq1Sxs3btTixYt1zTXXqEOHDpKkI488ss7jOnbsqMzMTP3kJz/RSy+9VLNftW+++Ua7d+/W6aefLkm6+uqr9eabb9Zsv+iiiyRJgwcP1pYtWyLGNnToUPXt21cZGRmaMGGC3n77bb333nsaNWqUunTpojZt2ujHP/5xneNGc8EFF+iQQw5R//799cUXX0iS3nzzTU2YMEEZGRnq3r27xowZU7P/0qVLNWzYMA0cOFBLlizR2rVra7b96Ec/qrn905/+VE8++aQk6cknn9Q111zTZCxNYSQbABA3zLqJVNHYyHNGRodGt7dt27lVI9f1bd68WRkZGerataucc3rsscd0zjnn1Nln0aJFjR6jTZs2WrFihd544w29+OKLmjNnjpYsWdLsGNq1aycpdFFmZWVlxH3MrNH7je2/b1/dE/Dq55NUU/oRzb59+3TTTTeppKREvXr10owZM+oc77DDDqu5PWLECG3ZskXLli1TVVWVcnMbTlzWUoxkAwDipnrWzUHdBtUsuV1zmXUTaKEvv/xSkyZN0s033ywz0znnnKPf/va3NXXEH330kcrLy3XWWWfpySefVEVF6HesfrnI3r179c0332jcuHH69a9/rVWrVtXZ3rFjRx1xxBE19dZPP/10zah2c61YsUKffPKJDhw4oOeee06nnnqqhg4dquXLl2vnzp2qqqrSM888U3Pco48+WuvXr9eBAwf08ssvN3n8kSNH6rnnnlNVVZW2b9+upUuXSvouQe/cubP27t3bZMeRq666Spdffrkno9gSI9kA0lwgGNCURVNUNLZImW0y/Q4n5THrJtB6gUBABQUFCgaDatOmja688krddtttkkLlDlu2bNGgQYPknFOXLl305z//WWPHjtXKlStVWFiotm3baty4cbr//vtrjrlnzx6NHz9e+/btk3NODz/8cIPn/cMf/qBJkyapoqJCffv2rSmraK4hQ4bo5ptv1qZNmzR69GhdeOGFOuSQQ/TAAw9o9OjRcs7p3HPP1fjx4yVJDzzwgM477zx16dJFhYWF2rt3b6PHv/DCC7VkyRL1799fxx57rIYPHy5J6tSpk6677jrl5ubqmGOO0ZAhQxo9zo9//GNNnz5dEyZMaNHPF401NdSebAoLC111ETsANKXo3aJQkn1OEeUKAKJav369cnJy/A4DMfTiiy9qwYIFevrppyNuj/QZMLNS51xhpP0ZyQaQtuq3kruh8AZGswEgDf385z/Xa6+9pldffdWzY1KTDSBtRWolh+TD7JEADtZjjz2mTZs26YQTTvDsmCTZANISreRSR/XskZwkAUgkJNkA0lJjreSQPJg9EkCioiYbQFqqbiVXH63kkguzRwJIVHQXAQAkpUAwoO4Pd9fufbtr1nXK7KTtt2/nAlZ4ju4iaGl3EcpFAABJiZIfJJzsbMms6SU72+9IGygpKdHkyZNb9diioqKayW7wHcpFAABJiZIfJJw9e7zdL44KCwtVWBhxQLZJRUVFuuKKK9ShQwePo0pujGQDAJLStFOnqfT60gYLM0oiFW3ZskU5OTm67rrrNGDAAJ199tkKBAKSpI8//lhjx47V4MGDddppp2nDhg2qqqpSnz595JzT7t27lZGRoTfffFNSaBryjRs31jn+smXLdN5550mSZsyYoWuvvVajRo1S37599eijj0qSysvLde655yo/P1+5ubl67rnn9Oijj+rzzz/X6NGjNXr0aEnSjTfeqMLCQg0YMEB33313zXP07t1bd999twYNGqSBAwdqw4YNkkJTu19zzTUaOHCg8vLy9Kc//UmS9Ne//lXDhw/XoEGDdMkllzQ582OiIckGAABIAhs3btTPfvYzrV27Vp06dapJRq+//no99thjKi0t1ezZs3XTTTcpIyND/fr107p16/T2229r0KBBeuutt/Ttt99q69atOv744xt9rg0bNmjRokVasWKFZs6cqWAwqNdff13du3fXqlWrtGbNGo0dO1aTJ09W9+7dtXTpUi1dulSSdN9996mkpESrV6/W8uXLtXr16prjdu7cWe+//75uvPFGzZ49W5J0zz33qGPHjvrggw+0evVqjRkzRjt37tS9996rxYsX6/3331dhYWHEKd8TGeUiAAAASaBPnz4qKCiQJA0ePFhbtmzR3r179c477+iSSy6p2e/bb7+VJJ122ml6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\n", 652 | "text/plain": [ 653 | "
" 654 | ] 655 | }, 656 | "metadata": { 657 | "needs_background": "light" 658 | }, 659 | "output_type": "display_data" 660 | } 661 | ], 662 | "source": [ 663 | "fig5 = plt.figure(figsize=(12, 6))\n", 664 | "ax5 = fig5.add_subplot(111)\n", 665 | "\n", 666 | "ax5.scatter(X[y==0][:, 0], X[y==0][:, 1], marker='^', s=30, c='green', label='class0')\n", 667 | "ax5.scatter(X[y==1][:, 0], X[y==1][:, 1], marker='s', s=30, c='blue', label='class1')\n", 668 | "\n", 669 | "x = np.linspace(-2, 2.5, 100)\n", 670 | "ax5.plot(x, np.full(100, 0.016), 'y--', label='Decision boundary')\n", 671 | "\n", 672 | "class_shape = {\n", 673 | " 0: '^',\n", 674 | " 1: 's'\n", 675 | "}\n", 676 | "ax5.scatter(new_instance[0], new_instance[1], c='red', marker=class_shape[y_pred[0]], s=100, label='new instance')\n", 677 | "\n", 678 | "\n", 679 | "plt.title('visualisation of the data')\n", 680 | "plt.legend()\n", 681 | "plt.xlabel('X1')\n", 682 | "plt.ylabel('X2')\n", 683 | "plt.show()" 684 | ] 685 | }, 686 | { 687 | "cell_type": "markdown", 688 | "id": "730e57ca", 689 | "metadata": {}, 690 | "source": [ 691 | "# That's it\n", 692 | "That was the difference between the two techniques of machine learning. if you find this lecture usefull, share it with your mates 😊" 693 | ] 694 | } 695 | ], 696 | "metadata": { 697 | "kernelspec": { 698 | "display_name": "Python 3 (ipykernel)", 699 | "language": "python", 700 | "name": "python3" 701 | }, 702 | "language_info": { 703 | "codemirror_mode": { 704 | "name": "ipython", 705 | "version": 3 706 | }, 707 | "file_extension": ".py", 708 | "mimetype": "text/x-python", 709 | "name": "python", 710 | "nbconvert_exporter": "python", 711 | "pygments_lexer": "ipython3", 712 | "version": "3.10.6" 713 | } 714 | }, 715 | "nbformat": 4, 716 | "nbformat_minor": 5 717 | } 718 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Instance-based-vs-Model-based-Learning 2 | [***📢 See the notebook for more understanding with the code samples***] 3 | ### 1. Introduction 4 | Welcome🧠! in this lecture we will discuss two types of machine learning, which are **instance-based** and **model-based** learning. we will talk about both **Regression** and **Classification** using the two types of learning, giving the definition, the principle, and practical example of each to illustrate them. I hope you enjoy the lecture. If you find this lecture valuable, please consider sharing it with your mates so they can also benefit. Let's begin!💡 5 | 6 | ### 2. Definitions 7 | #### 2.1 Model-Based Learning 8 | Model-based learning involves creating a mathematical model that can predict outcomes based on input data. The model is trained on a large dataset and then used to make predictions on new data. The model can be thought of as a set of rules that the machine uses to make predictions. 9 | #### 2.2 Instance-Based Learning 10 | Instance-based learning involves using the entire dataset to make predictions. The machine learns by storing all instances of data and then using these instances to make predictions on new data. The machine compares the new data to the instances it has seen before and uses the closest match to make a prediction. 11 | 12 | **🔖Source:** [Model-Based vs Instance-Based Learning: Understanding the Differences with Examples - medium](https://medium.com/@pp1222001/model-based-vs-instance-based-learning-understanding-the-differences-with-examples-1545c9c3a056#:~:text=Model-based%20learning%20is%20typically%20faster%20and%20more%20accurate,is%20slower%20and%20can%20make%20less%20accurate%20predictions.) 13 | 14 | ### 3. Regression 15 | 16 | #### 3.1 Instance-based regression 17 | - **Definition:** as we talked previously, in instance-based learning we use the training instances itselves for the prediction. More our instance is similar to a given training instance, more its label value is close to that instance label value. 18 | **i.e** : our_instance ~ given_instance So our_label ~ given_label 19 | 20 | - **Principle:** chosing the most similar training instances to the new instance, and use its labels to predict the new label such as the new value will be the average value of the labels values. 21 | 22 | - **Example of implementation:** we will implement a regression decision function to predict values using training instances 23 | 24 | 25 | #### 3.2 Model-based regression 26 | - **Definition**: As we talked previousely, in model-base learning we create amodel (or function or formula) that generalise the rules to predict, then use it to make predictions without need of training instances for the prediction 27 | 28 | - **Principle**: chose a regression model, fitting it using training instances. then predict new labels using trained model only. 29 | 30 | - **Example of implementation**: A simple linear regression is an example of model-based regression 31 | 32 | 33 | 34 | ### 4. Classification 35 | #### 4.1 Instance-based Classification 36 | - **Definition:** we defined it previously (see section 3.1) 37 | 38 | - **Principle:** we chose a number **n** of the most similar instances to the new instance (the number n is refered by the parameter alpha), then the class of the new instance is the majority class in those instances set (the most occured class) 39 | 40 | - **Example of implementation:** implement a classifier using the training instances directly without training 41 | 42 | 43 | #### 4.2 Model-based Classification 44 | - **Definition:** we defined it previously (see section 3.2) 45 | 46 | - **Principle:** chose a classification model, fitting it using training instances. then predict new class using trained model only. 47 | 48 | - **Example of implementation:** Decision Tree classifier is an example of model-based classification 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | --------------------------------------------------------------------------------