{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"mount_file_id":"1RnAbGYAHFUFI0VUl--2-07I8xGBOVa7a","authorship_tag":"ABX9TyNE6K2FtH+Ev222gC5wmbYR"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","source":["from glob import glob\n","import pandas as pd\n","import matplotlib as mpl\n","from matplotlib import pyplot as plt\n","import random\n","import numpy as np\n","from tqdm.auto import tqdm"],"metadata":{"id":"3u1ECNO-Tef3"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Let's load a toy dataset just to start"],"metadata":{"id":"SkKp8qu0V1WC"}},{"cell_type":"code","source":["from sklearn.datasets import load_wine\n","\n","\n","wine_data = load_wine()\n","# Convert data to pandas dataframe\n","wine_df = pd.DataFrame(wine_data.data, columns=wine_data.feature_names)\n","\n","# Add the target label\n","wine_df[\"target\"] = wine_data.target\n","\n","# Take a preview\n","wine_df.head()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":226},"id":"XaVlHJTSSNkR","executionInfo":{"status":"ok","timestamp":1753257837900,"user_tz":-120,"elapsed":228,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"20b7cb68-1308-41d2-ee2c-036247e7dd20"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["   alcohol  malic_acid   ash  alcalinity_of_ash  magnesium  total_phenols  \\\n","0    14.23        1.71  2.43               15.6      127.0           2.80   \n","1    13.20        1.78  2.14               11.2      100.0           2.65   \n","2    13.16        2.36  2.67               18.6      101.0           2.80   \n","3    14.37        1.95  2.50               16.8      113.0           3.85   \n","4    13.24        2.59  2.87               21.0      118.0           2.80   \n","\n","   flavanoids  nonflavanoid_phenols  proanthocyanins  color_intensity   hue  \\\n","0        3.06                  0.28             2.29             5.64  1.04   \n","1        2.76                  0.26             1.28             4.38  1.05   \n","2        3.24                  0.30             2.81             5.68  1.03   \n","3        3.49                  0.24             2.18             7.80  0.86   \n","4        2.69                  0.39             1.82             4.32  1.04   \n","\n","   od280/od315_of_diluted_wines  proline  target  \n","0                          3.92   1065.0       0  \n","1                          3.40   1050.0       0  \n","2                          3.17   1185.0       0  \n","3                          3.45   1480.0       0  \n","4                          2.93    735.0       0  "],"text/html":["\n","  <div id=\"df-4170b547-ea12-446b-b74f-44496a58a414\" class=\"colab-df-container\">\n","    <div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>alcohol</th>\n","      <th>malic_acid</th>\n","      <th>ash</th>\n","      <th>alcalinity_of_ash</th>\n","      <th>magnesium</th>\n","      <th>total_phenols</th>\n","      <th>flavanoids</th>\n","      <th>nonflavanoid_phenols</th>\n","      <th>proanthocyanins</th>\n","      <th>color_intensity</th>\n","      <th>hue</th>\n","      <th>od280/od315_of_diluted_wines</th>\n","      <th>proline</th>\n","      <th>target</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>14.23</td>\n","      <td>1.71</td>\n","      <td>2.43</td>\n","      <td>15.6</td>\n","      <td>127.0</td>\n","      <td>2.80</td>\n","      <td>3.06</td>\n","      <td>0.28</td>\n","      <td>2.29</td>\n","      <td>5.64</td>\n","      <td>1.04</td>\n","      <td>3.92</td>\n","      <td>1065.0</td>\n","      <td>0</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>13.20</td>\n","      <td>1.78</td>\n","      <td>2.14</td>\n","      <td>11.2</td>\n","      <td>100.0</td>\n","      <td>2.65</td>\n","      <td>2.76</td>\n","      <td>0.26</td>\n","      <td>1.28</td>\n","      <td>4.38</td>\n","      <td>1.05</td>\n","      <td>3.40</td>\n","      <td>1050.0</td>\n","      <td>0</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>13.16</td>\n","      <td>2.36</td>\n","      <td>2.67</td>\n","      <td>18.6</td>\n","      <td>101.0</td>\n","      <td>2.80</td>\n","      <td>3.24</td>\n","      <td>0.30</td>\n","      <td>2.81</td>\n","      <td>5.68</td>\n","      <td>1.03</td>\n","      <td>3.17</td>\n","      <td>1185.0</td>\n","      <td>0</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>14.37</td>\n","      <td>1.95</td>\n","      <td>2.50</td>\n","      <td>16.8</td>\n","      <td>113.0</td>\n","      <td>3.85</td>\n","      <td>3.49</td>\n","      <td>0.24</td>\n","      <td>2.18</td>\n","      <td>7.80</td>\n","      <td>0.86</td>\n","      <td>3.45</td>\n","      <td>1480.0</td>\n","      <td>0</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>13.24</td>\n","      <td>2.59</td>\n","      <td>2.87</td>\n","      <td>21.0</td>\n","      <td>118.0</td>\n","      <td>2.80</td>\n","      <td>2.69</td>\n","      <td>0.39</td>\n","      <td>1.82</td>\n","      <td>4.32</td>\n","      <td>1.04</td>\n","      <td>2.93</td>\n","      <td>735.0</td>\n","      <td>0</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>\n","    <div class=\"colab-df-buttons\">\n","\n","  <div class=\"colab-df-container\">\n","    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-4170b547-ea12-446b-b74f-44496a58a414')\"\n","            title=\"Convert this dataframe to an interactive table.\"\n","            style=\"display:none;\">\n","\n","  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n","    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n","  </svg>\n","    </button>\n","\n","  <style>\n","    .colab-df-container {\n","      display:flex;\n","      gap: 12px;\n","    }\n","\n","    .colab-df-convert {\n","      background-color: #E8F0FE;\n","      border: none;\n","      border-radius: 50%;\n","      cursor: pointer;\n","      display: none;\n","      fill: #1967D2;\n","      height: 32px;\n","      padding: 0 0 0 0;\n","      width: 32px;\n","    }\n","\n","    .colab-df-convert:hover {\n","      background-color: #E2EBFA;\n","      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n","      fill: #174EA6;\n","    }\n","\n","    .colab-df-buttons div {\n","      margin-bottom: 4px;\n","    }\n","\n","    [theme=dark] .colab-df-convert {\n","      background-color: #3B4455;\n","      fill: #D2E3FC;\n","    }\n","\n","    [theme=dark] .colab-df-convert:hover {\n","      background-color: #434B5C;\n","      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n","      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n","      fill: #FFFFFF;\n","    }\n","  </style>\n","\n","    <script>\n","      const buttonEl =\n","        document.querySelector('#df-4170b547-ea12-446b-b74f-44496a58a414 button.colab-df-convert');\n","      buttonEl.style.display =\n","        google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n","      async function convertToInteractive(key) {\n","        const element = document.querySelector('#df-4170b547-ea12-446b-b74f-44496a58a414');\n","        const dataTable =\n","          await google.colab.kernel.invokeFunction('convertToInteractive',\n","                                                    [key], {});\n","        if (!dataTable) return;\n","\n","        const docLinkHtml = 'Like what you see? Visit the ' +\n","          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n","          + ' to learn more about interactive tables.';\n","        element.innerHTML = '';\n","        dataTable['output_type'] = 'display_data';\n","        await google.colab.output.renderOutput(dataTable, element);\n","        const docLink = document.createElement('div');\n","        docLink.innerHTML = docLinkHtml;\n","        element.appendChild(docLink);\n","      }\n","    </script>\n","  </div>\n","\n","\n","    <div id=\"df-9647310f-4ae4-4eba-a6c4-dad10e875cfd\">\n","      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-9647310f-4ae4-4eba-a6c4-dad10e875cfd')\"\n","                title=\"Suggest charts\"\n","                style=\"display:none;\">\n","\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n","     width=\"24px\">\n","    <g>\n","        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n","    </g>\n","</svg>\n","      </button>\n","\n","<style>\n","  .colab-df-quickchart {\n","      --bg-color: #E8F0FE;\n","      --fill-color: #1967D2;\n","      --hover-bg-color: #E2EBFA;\n","      --hover-fill-color: #174EA6;\n","      --disabled-fill-color: #AAA;\n","      --disabled-bg-color: #DDD;\n","  }\n","\n","  [theme=dark] .colab-df-quickchart {\n","      --bg-color: #3B4455;\n","      --fill-color: #D2E3FC;\n","      --hover-bg-color: #434B5C;\n","      --hover-fill-color: #FFFFFF;\n","      --disabled-bg-color: #3B4455;\n","      --disabled-fill-color: #666;\n","  }\n","\n","  .colab-df-quickchart {\n","    background-color: var(--bg-color);\n","    border: none;\n","    border-radius: 50%;\n","    cursor: pointer;\n","    display: none;\n","    fill: var(--fill-color);\n","    height: 32px;\n","    padding: 0;\n","    width: 32px;\n","  }\n","\n","  .colab-df-quickchart:hover {\n","    background-color: var(--hover-bg-color);\n","    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n","    fill: var(--button-hover-fill-color);\n","  }\n","\n","  .colab-df-quickchart-complete:disabled,\n","  .colab-df-quickchart-complete:disabled:hover {\n","    background-color: var(--disabled-bg-color);\n","    fill: var(--disabled-fill-color);\n","    box-shadow: none;\n","  }\n","\n","  .colab-df-spinner {\n","    border: 2px solid var(--fill-color);\n","    border-color: transparent;\n","    border-bottom-color: var(--fill-color);\n","    animation:\n","      spin 1s steps(1) infinite;\n","  }\n","\n","  @keyframes spin {\n","    0% {\n","      border-color: transparent;\n","      border-bottom-color: var(--fill-color);\n","      border-left-color: var(--fill-color);\n","    }\n","    20% {\n","      border-color: transparent;\n","      border-left-color: var(--fill-color);\n","      border-top-color: var(--fill-color);\n","    }\n","    30% {\n","      border-color: transparent;\n","      border-left-color: var(--fill-color);\n","      border-top-color: var(--fill-color);\n","      border-right-color: var(--fill-color);\n","    }\n","    40% {\n","      border-color: transparent;\n","      border-right-color: var(--fill-color);\n","      border-top-color: var(--fill-color);\n","    }\n","    60% {\n","      border-color: transparent;\n","      border-right-color: var(--fill-color);\n","    }\n","    80% {\n","      border-color: transparent;\n","      border-right-color: var(--fill-color);\n","      border-bottom-color: var(--fill-color);\n","    }\n","    90% {\n","      border-color: transparent;\n","      border-bottom-color: var(--fill-color);\n","    }\n","  }\n","</style>\n","\n","      <script>\n","        async function quickchart(key) {\n","          const quickchartButtonEl =\n","            document.querySelector('#' + key + ' button');\n","          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n","          quickchartButtonEl.classList.add('colab-df-spinner');\n","          try {\n","            const charts = await google.colab.kernel.invokeFunction(\n","                'suggestCharts', [key], {});\n","          } catch (error) {\n","            console.error('Error during call to suggestCharts:', error);\n","          }\n","          quickchartButtonEl.classList.remove('colab-df-spinner');\n","          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n","        }\n","        (() => {\n","          let quickchartButtonEl =\n","            document.querySelector('#df-9647310f-4ae4-4eba-a6c4-dad10e875cfd button');\n","          quickchartButtonEl.style.display =\n","            google.colab.kernel.accessAllowed ? 'block' : 'none';\n","        })();\n","      </script>\n","    </div>\n","\n","    </div>\n","  </div>\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"wine_df","summary":"{\n  \"name\": \"wine_df\",\n  \"rows\": 178,\n  \"fields\": [\n    {\n      \"column\": \"alcohol\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.8118265380058577,\n        \"min\": 11.03,\n        \"max\": 14.83,\n        \"num_unique_values\": 126,\n        \"samples\": [\n          11.62,\n          13.64,\n          13.69\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"malic_acid\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 1.1171460976144627,\n        \"min\": 0.74,\n        \"max\": 5.8,\n        \"num_unique_values\": 133,\n        \"samples\": [\n          1.21,\n          2.83,\n          1.8\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"ash\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.2743440090608148,\n        \"min\": 1.36,\n        \"max\": 3.23,\n        \"num_unique_values\": 79,\n        \"samples\": [\n          2.31,\n          2.43,\n          2.52\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"alcalinity_of_ash\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 3.3395637671735052,\n        \"min\": 10.6,\n        \"max\": 30.0,\n        \"num_unique_values\": 63,\n        \"samples\": [\n          25.5,\n          28.5,\n          15.6\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"magnesium\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 14.282483515295668,\n        \"min\": 70.0,\n        \"max\": 162.0,\n        \"num_unique_values\": 53,\n        \"samples\": [\n          126.0,\n          85.0,\n          162.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"total_phenols\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.6258510488339891,\n        \"min\": 0.98,\n        \"max\": 3.88,\n        \"num_unique_values\": 97,\n        \"samples\": [\n          1.68,\n          2.11,\n          1.35\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"flavanoids\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.9988586850169465,\n        \"min\": 0.34,\n        \"max\": 5.08,\n        \"num_unique_values\": 132,\n        \"samples\": [\n          3.18,\n          2.5,\n          3.17\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"nonflavanoid_phenols\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.12445334029667939,\n        \"min\": 0.13,\n        \"max\": 0.66,\n        \"num_unique_values\": 39,\n        \"samples\": [\n          0.58,\n          0.41,\n          0.39\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"proanthocyanins\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.5723588626747611,\n        \"min\": 0.41,\n        \"max\": 3.58,\n        \"num_unique_values\": 101,\n        \"samples\": [\n          0.75,\n          1.77,\n          1.42\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"color_intensity\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 2.318285871822413,\n        \"min\": 1.28,\n        \"max\": 13.0,\n        \"num_unique_values\": 132,\n        \"samples\": [\n          2.95,\n          3.3,\n          5.1\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"hue\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.22857156582982338,\n        \"min\": 0.48,\n        \"max\": 1.71,\n        \"num_unique_values\": 78,\n        \"samples\": [\n          1.22,\n          1.04,\n          1.45\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"od280/od315_of_diluted_wines\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.7099904287650505,\n        \"min\": 1.27,\n        \"max\": 4.0,\n        \"num_unique_values\": 122,\n        \"samples\": [\n          4.0,\n          1.82,\n          1.59\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"proline\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 314.9074742768489,\n        \"min\": 278.0,\n        \"max\": 1680.0,\n        \"num_unique_values\": 121,\n        \"samples\": [\n          1375.0,\n          1270.0,\n          735.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"target\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0,\n        \"min\": 0,\n        \"max\": 2,\n        \"num_unique_values\": 3,\n        \"samples\": [\n          0,\n          1,\n          2\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"}},"metadata":{},"execution_count":22}]},{"cell_type":"markdown","source":["## example: Data preprocessing"],"metadata":{"id":"GT1aoI5KVy2B"}},{"cell_type":"code","source":["# Split data into features and label\n","X = wine_df[wine_data.feature_names].copy()\n","y = wine_df[\"target\"].copy()\n","\n","fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n","X[\"alcohol\"].plot(kind=\"box\", ax=axs[0])\n","X[\"alcohol\"].plot(kind=\"hist\", ax=axs[1])\n","plt.show()\n","\n","\n","fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n","X[\"proline\"].plot(kind=\"box\", ax=axs[0], color=\"red\")\n","X[\"proline\"].plot(kind=\"hist\", ax=axs[1], color=\"red\")\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":570},"id":"Y1v4rV75S0qw","executionInfo":{"status":"ok","timestamp":1753258162909,"user_tz":-120,"elapsed":463,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"8492b9a5-7ad3-412f-e24a-651213d9386b"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 1000x300 with 2 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAz0AAAEXCAYAAACHwCoMAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKuJJREFUeJzt3XlwFHXC//HPQJIBckECIQkkhENArsCiIgVa4diQwMO9y7VySbkP++AZEIy7Kln1iYhy7BKhfApBaxdxeRZ4FAt4ALmUwyU4IOtuJBEIkAQQNCEBhpj07w9/zLMjSciQmXTSeb+qurSP6f5Ml8z44dvTbTMMwxAAAAAAWFQjswMAAAAAgC9RegAAAABYGqUHAAAAgKVRegAAAABYGqUHAAAAgKVRegAAAABYGqUHAAAAgKVRegAAAABYGqUHAAAAgKVRegAAAABYmselZ9++fRo5cqSio6Nls9m0efNmt/UzZsyQzWZzm5KSkryVFwAAAAA84nHpKSkpUXx8vDIyMirdJikpSfn5+a7p/fffr1FIAAAAALhbfp6+IDk5WcnJyVVuY7fbFRkZeVeBysvLlZeXp+DgYNlstrvaBwDg7hiGoatXryo6OlqNGnEF9C18NwGAObz1veRx6amOPXv2KCIiQi1atNDgwYP1yiuvKDw8vMJtnU6nnE6na/78+fPq1q2bL2IBAKrp7Nmzatu2rdkx6oy8vDzFxMSYHQMAGqyafi95vfQkJSVp3Lhxat++vXJycvT8888rOTlZBw8eVOPGjW/bPj09XWlpabctP3v2rEJCQrwdDwBQhaKiIsXExCg4ONjsKHXKrfPBdxMA1C5vfS/ZDMMw7vrFNps2bdqkMWPGVLrNN998o44dO2rnzp0aMmTIbet/OtJz640VFhbyxQIAtayoqEihoaF8Bv8E5wUAzOGtz1+fX7DdoUMHtWzZUtnZ2RWut9vtCgkJcZsAAAAAwFt8XnrOnTuny5cvKyoqyteHAgAAAIDbePybnuLiYrdRm1OnTsnhcCgsLExhYWFKS0vT+PHjFRkZqZycHM2fP1+dOnXSsGHDvBocAAAAAKrD49Jz5MgRDRo0yDWfkpIiSZo+fbpWrlyp48eP691339X333+v6OhoJSYm6uWXX5bdbvdeagAAAACoJo9LT0JCgqq698H27dtrFAgAAAAAvIknzwEAAACwNEoPAAAAAEvz+sNJAau4frNMOZeKPX7djdIynfvuutq2aKom/rc/kLcqHVsFqWmAZ68BAABA1Sg9QCVyLhXr3/74aa0ec8sTA9WjTWitHhMAGoK45z429finXxth6vGBho7SA1SiY6sgbXlioMevy75YrKc/cGjZxN7qFBHk8TEBAADgXZQeoBJNAxrXaNSlU0QQozYAAAB1ADcyAADUaytXrlSvXr0UEhKikJAQ9e/fX1u3bnWtv3HjhubMmaPw8HAFBQVp/PjxunDhgomJAQC1jdIDAKjX2rZtq9dee02ZmZk6cuSIBg8erNGjR+vvf/+7JOmZZ57RRx99pA0bNmjv3r3Ky8vTuHHjTE4NAKhNXN4GAKjXRo4c6Tb/6quvauXKlTp06JDatm2r1atXa926dRo8eLAkac2aNbr33nt16NAhPfjgg2ZEBgDUMkZ6AACWUVZWpvXr16ukpET9+/dXZmamSktLNXToUNc2Xbt2VWxsrA4ePFjpfpxOp4qKitwmAED9RekBANR7X375pYKCgmS32zV79mxt2rRJ3bp1U0FBgQICAtS8eXO37Vu3bq2CgoJK95eenq7Q0FDXFBMT4+N3AADwJUoPAKDe69KlixwOhw4fPqzf/OY3mj59ur766qu73l9qaqoKCwtd09mzZ72YFgBQ2/hNDwCg3gsICFCnTp0kSX379tXf/vY3LV++XBMnTtTNmzf1/fffu432XLhwQZGRkZXuz263y263+zo2AKCWMNIDALCc8vJyOZ1O9e3bV/7+/tq1a5drXVZWlnJzc9W/f38TEwIAahMjPQCAei01NVXJycmKjY3V1atXtW7dOu3Zs0fbt29XaGioZs2apZSUFIWFhSkkJERPPPGE+vfvz53bAKABofQAAOq1ixcvatq0acrPz1doaKh69eql7du36+c//7kkaenSpWrUqJHGjx8vp9OpYcOG6a233jI5NQCgNlF6AAD12urVq6tc36RJE2VkZCgjI6OWEgEA6hp+0wMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0vzMDgAAAADfinvuY1OPf/q1EaYeH2CkBwAAAICl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bm7gTXweeBfn07s4n97HOfUub55Pm2G1+5ICAAAAwL/gNz0AAAAALI3SAwAAAMDSKD0AAAAALI3SA1Tg9OnTstlscjgcdWp/cXFxWrZsmVcyAQAANBSUHgAAamDfvn0aOXKkoqOjZbPZtHnzZrf1GzduVGJiosLDw736lylWVtU5LS0t1YIFC9SzZ08FBgYqOjpa06ZNU15ennmB67g7/Te6cOFCde3aVYGBgWrRooWGDh2qw4cPmxO2HrjT+fxXs2fPls1m4y8s7+BO53TGjBmy2WxuU1JSkkfHoPQAAFADJSUlio+PV0ZGRqXrBw4cqEWLFtVysvqrqnN67do1HT16VC+88IKOHj2qjRs3KisrS6NGjTIhaf1wp/9GO3furBUrVujLL7/Up59+qri4OCUmJurSpUu1nLR+uNP5vGXTpk06dOiQoqOjaylZ/VWdc5qUlKT8/HzX9P7773t2EANooLZu3WoMGDDACA0NNcLCwowRI0YY2dnZhmEYxqlTpwxJxhdffOHa/sSJE8aIESOM4OBgIygoyBg4cKBr+7KyMiMtLc1o06aNERAQYMTHxxtbt251vfbW/v76178aCQkJRtOmTY1evXoZBw4ccMv03//930a3bt2MgIAAo127dsYbb7zhtr5du3bG0qVLfXNCANSYJGPTpk0VrqvocwV3VtU5veXzzz83JBlnzpypnVD1WHXOZ2FhoSHJ2LlzZ+2EqscqO5/nzp0z2rRpY5w4cYLvbg9VdE6nT59ujB49ukb7ZaQHDVZJSYlSUlJ05MgR7dq1S40aNdLYsWNVXl5+27bnz5/Xww8/LLvdrk8++USZmZl69NFH9cMPP0iSli9frjfffFNvvPGGjh8/rmHDhmnUqFE6efKk235++9vfat68eXI4HOrcubMmT57s2kdmZqYmTJigSZMm6csvv9TChQv1wgsvaO3atT4/FwBQnxUWFspms6l58+ZmR6n3bt68qbfffluhoaGKj483O069VF5erqlTp+rZZ59V9+7dzY5jGXv27FFERIS6dOmi3/zmN7p8+bJHr/fzUS6gzhs/frzb/DvvvKNWrVrpq6++UlBQkNu6jIwMhYaGav369fL395f04+UAt7zxxhtasGCBJk2aJElatGiRdu/erWXLlrkN1c6bN08jRoyQJKWlpal79+7Kzs5W165dtWTJEg0ZMkQvvPCCa/9fffWVFi9erBkzZnj9/QOAFdy4cUMLFizQ5MmTFRISYnacemvLli2aNGmSrl27pqioKO3YsUMtW7Y0O1a9tGjRIvn5+enJJ580O4plJCUlady4cWrfvr1ycnL0/PPPKzk5WQcPHlTjxo2rtQ9GetBgnTx5UpMnT1aHDh0UEhKiuLg4SVJubu5t2zocDj300EOuwvOvioqKlJeXpwEDBrgtHzBggP7xj3+4LevVq5fr36OioiRJFy9elCT94x//qHAfJ0+eVFlZmedvEAAsrrS0VBMmTJBhGFq5cqXZceq1QYMGyeFw6MCBA0pKStKECRNc30+ovszMTC1fvlxr166VzWYzO45lTJo0SaNGjVLPnj01ZswYbdmyRX/729+0Z8+eau+D0oMGa+TIkbpy5Yr+67/+S4cPH3bdqebmzZu3bdu0aVOvHPNfS9OtD8OKLqcDAFTtVuE5c+aMduzYwShPDQUGBqpTp0568MEHtXr1avn5+Wn16tVmx6p39u/fr4sXLyo2NlZ+fn7y8/PTmTNnNHfuXNdfrqLmOnTooJYtWyo7O7var6H0oEG6fPmysrKy9Lvf/U5DhgzRvffeq++++67S7Xv16qX9+/ertLT0tnUhISGKjo7WZ5995rb8s88+U7du3aqd6d57761wH507d6720C0ANAS3Cs/Jkye1c+dOhYeHmx3JcsrLy+V0Os2OUe9MnTpVx48fl8PhcE3R0dF69tlntX37drPjWca5c+d0+fJl11Uz1cFvetAgtWjRQuHh4Xr77bcVFRWl3NxcPffcc5Vu//jjj+uPf/yjJk2apNTUVIWGhurQoUN64IEH1KVLFz377LN66aWX1LFjR/Xu3Vtr1qyRw+HQn//852pnmjt3ru6//369/PLLmjhxog4ePKgVK1borbfe8sZbBuAjxcXFbn/beOrUKTkcDoWFhSk2NlZXrlxRbm6u6zkyWVlZkqTIyEhFRkaakrmuq+qcRkVF6Re/+IWOHj2qLVu2qKysTAUFBZKksLAwBQQEmBW7zqrqfIaHh+vVV1/VqFGjFBUVpW+//VYZGRk6f/68fvnLX5qYuu6605/5n5Zwf39/RUZGqkuXLrUdtd6o6pyGhYUpLS1N48ePV2RkpHJycjR//nx16tRJw4YNq/5BanTvN6Ae27Fjh3Hvvfcadrvd6NWrl7Fnzx7XbRIrurXssWPHjMTERKNZs2ZGcHCw8dBDDxk5OTmGYfx4y+qFCxcabdq0Mfz9/Su9ZfW/7u+7774zJBm7d+92Lbt1y2p/f38jNjbWWLx4sVtmbnsJ1D27d+82JN02TZ8+3TAMw1izZk2F61966SVTc9dlVZ3TW5+nFU3/+nmK/1PV+bx+/boxduxYIzo62ggICDCioqKMUaNGGZ9//rnZseusO/2Z/ym+u++sqnN67do1IzEx0WjVqpXh7+9vtGvXznjssceMgoICj45hMwzD8KCIAQAAAEC9wm96AAAAAFgapQcAAACApVF6AAAAAFgapQcAAACApVF6AAAAAFgapQcAAACApVF6AAAAAFgapQcAAACApVF6AAAAAFgapQcAAACApVF6AAAAAFgapQcAAACApf0/IJqalr3jMXwAAAAASUVORK5CYII=\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["<Figure size 1000x300 with 2 Axes>"],"image/png":"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uXPnmuuSjHfffdcwDMM4evSoIcn4+9//btx+++2Gn5+f0blzZ2Pr1q12+/j000+N3r17G76+vkaLFi2MMWPGGCUlJU77uwDgPk6fPm20adPGyMjIMG677TZj7NixhmEYRlFRkeHl5WWsWbPGHHvo0CFDkpGVlWUYhmH861//Mjw8PAyr1WqOWbx4sREQEGCUlZU5Je/EiRON3r17X7K/qqrKCAsLM2bNmmW2FRUVGT4+PsZbb71lGIZhHDx40JBk7Ny50xzzwQcfGBaLxfj++++dknvQoEHGH//4R7u2oUOHGomJiXU297mvN47M+MorrxhNmjSx+zcyceJEo127dg7PfDE7duwwJBnHjh2rE5l/Kfd3331n/PrXvza++OKLC94P1NXc9957rzF8+PBLblNXry0Xw50j4CqtXLlSnp6e2rFjh+bPn685c+bof/7nf8z+2bNnq0uXLtqzZ48mT56s7Oxs/eEPf9CwYcO0f/9+Pfvss5o8ebJWrFhRq+M+/fTTeuKJJ5STk6O2bdvqvvvuM289f/311+rfv78SEhK0b98+vf322/rss880evRoR546ADeVkpKiQYMGKS4uzq49OztbFRUVdu1RUVGKjIxUVlaWJCkrK0udOnVSaGioOSY+Pl42m00HDhxwSt733ntPPXr00O9//3uFhISoW7dueu2118z+o0ePymq12uUODAxUz5497XIHBQWpR48e5pi4uDh5eHho+/btTsn929/+Vps2bdLhw4clSXv37tVnn31mfky6ruY+l6MyZmVl6dZbb5W3t7c5Jj4+Xrm5uTp16pTTz6O4uFgWi0VBQUF1OnNVVZVGjBihCRMmqEOHDhf018XcVVVV+uc//6m2bdsqPj5eISEh6tmzp91H7+rqteViPK/ZkYB6KiIiQnPnzpXFYlG7du20f/9+zZ07VyNHjpQk9enTR+PHjzfHJyYmqm/fvpo8ebIkqW3btjp48KBmzZqlBx98sMbHfeKJJzRo0CBJ0tSpU9WhQwd99dVXioqKUlpamhITE83nCNq0aaMFCxbotttu0+LFi+1ucwO4vqxevVq7d+/Wzp07L+izWq3y9vY230BWCw0NldVqNcec++alur+6zxm++eYbLV68WKmpqfrLX/6inTt36rHHHpO3t7eSkpLM414s17m5Q0JC7Po9PT0VHBzstNxPPfWUbDab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\n"},"metadata":{}}]},{"cell_type":"code","source":["from sklearn.preprocessing import MinMaxScaler\n","\n","# Instantiate scaler and fit on features\n","scaler = MinMaxScaler()\n","scaler.fit(X)\n","\n","# Transform features\n","X_scaled = scaler.transform(X)\n","\n","X_scaled_0 = pd.Series(X_scaled[:,0], name=\"alcohol\")\n","X_scaled_12 = pd.Series(X_scaled[:,12], name=\"proline\")\n","\n","fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n","X_scaled_0.plot(kind=\"box\", ax=axs[0])\n","X_scaled_0.plot(kind=\"hist\", ax=axs[1])\n","plt.show()\n","\n","fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n","X_scaled_12.plot(kind=\"box\", ax=axs[0], color=\"red\")\n","X_scaled_12.plot(kind=\"hist\", ax=axs[1], color=\"red\")\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":565},"id":"Q0n8FX7sSjJY","executionInfo":{"status":"ok","timestamp":1753258223957,"user_tz":-120,"elapsed":641,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"8e8410a4-3614-473f-8f7c-8f821e73fbb4"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 1000x300 with 2 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAzoAAAESCAYAAAA10aDGAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMw5JREFUeJzt3X9YVHXe//EXv2bwB+AP5Jdi+DM1EwtXltSyJMlcN8v7XtNSYs2270KrzrolpZLZipUS7UZ6ratS1+Zidpv3bhqukdiWmCtK5m6iqISpoFYyigkI5/tH29w7icoAw8DwfFzXuep8zuec8/6Ml4wvzjmf42EYhiEAAAAAcCOeri4AAAAAAJoaQQcAAACA2yHoAAAAAHA7BB0AAAAAboegAwAAAMDtEHQAAAAAuB2CDgAAAAC34+3qAuqjtrZWJ0+elJ+fnzw8PFxdDgC0GYZh6Pz58woLC5OnJ78b+x7fSwDgOvX9bmoVQefkyZMKDw93dRkA0GYdP35cPXr0cHUZLQbfSwDgetf7bmoVQcfPz0/Sd4Px9/d3cTUA0HZYrVaFh4fbfg7jO3wvAYDr1Pe7qVUEne9vC/D39+cLBQBcgNuz7PG9BACud73vJm64BgAAAOB2CDoAAAAA3A5BBwAAAIDbIegAAAAAcDsOB50PP/xQEyZMUFhYmDw8PLRp06br7pObm6tbb71VZrNZffv2VWZmZgNKBQAAAID6cTjoVFRUKDIyUhkZGfXqf+zYMY0fP1533nmnCgoKNHv2bD366KPaunWrw8UCAAAAQH04PL30uHHjNG7cuHr3X7lypXr16qXly5dLkgYOHKiPPvpIL7/8suLi4hw9PQAAAABcl9Pfo5OXl6fY2Fi7tri4OM2ePfuq+1RWVqqystK2brVanVUe4JBvq2p05MwFh/a5VF2jL7/5Vj06t5Ovj5dD+/bp1lHtTI7tAwAAgGYIOqWlpQoODrZrCw4OltVq1bfffqt27dpdsU9qaqoWLVrk7NIAhx05c0E/+f1HzXa+d58YqcHdA5rtfADQlkTM2+zS8xcvHe/S8wPuzulBpyGSk5NlsVhs61arVeHh4S6sCPhOn24d9e4TIx3ap+j0Bc1eX6D0yUPVN6ijw+cDAACA45wedEJCQlRWVmbXVlZWJn9//zqv5kiS2WyW2Wx2dmmAw9qZvBp8haVvUEeuzgAAADQTp79HJyYmRjk5OXZt27ZtU0xMjLNPDQAAAKCNcjjoXLhwQQUFBSooKJD03fTRBQUFKikpkfTdbWfTp0+39X/88cd19OhRPfnkkzp48KBee+01vfXWW5ozZ07TjAAAgP+wYsUKDRkyRP7+/vL391dMTIzee+892/ZLly4pMTFRXbt2VceOHTVp0qQr7jwAALR+DgedPXv26JZbbtEtt9wiSbJYLLrlllu0cOFCSdKpU6dsoUeSevXqpc2bN2vbtm2KjIzU8uXL9cc//pGppQEATtGjRw8tXbpU+fn52rNnj+666y7dd999+uc//ylJmjNnjv76179qw4YN2rFjh06ePKkHHnjAxVUDAJqaw8/ojB49WoZhXHV7ZmZmnfvs27fP0VMBAOCwCRMm2K3/9re/1YoVK7Rr1y716NFDq1ev1rp163TXXXdJktauXauBAwdq165d+vGPf1znMXntAQC0Pk5/RgcAAFepqalRVlaWKioqFBMTo/z8fFVXV9u9323AgAHq2bOn8vLyrnqc1NRUBQQE2BZmAgWAlo+gAwBwO5999pk6duwos9msxx9/XO+8844GDRqk0tJSmUwmderUya5/cHCwSktLr3q85ORklZeX25bjx487eQQAgMZqke/RAQCgMW688UYVFBSovLxcb7/9tuLj47Vjx44GH4/XHgBA60PQAQC4HZPJpL59+0qSoqKi9I9//EOvvPKKJk+erKqqKp07d87uqk5ZWZlCQkJcVC0AwBm4dQ0A4PZqa2tVWVmpqKgo+fj42L3frbCwUCUlJbzfDQDcDFd0AABuJTk5WePGjVPPnj11/vx5rVu3Trm5udq6dasCAgI0Y8YMWSwWdenSRf7+/nriiScUExNz1RnXAACtE0EHAOBWTp8+renTp+vUqVMKCAjQkCFDtHXrVt19992SpJdfflmenp6aNGmSKisrFRcXp9dee83FVQMAmhpBBwDgVlavXn3N7b6+vsrIyFBGRkYzVQQAcAWe0QEAAADgdgg6AAAAANwOQQcAAACA2yHoAAAAAHA7BB0AAAAAboegAwAAAMDtEHQAAAAAuB2CDgAAAAC3Q9ABAAAA4HYIOgAAAADcDkEHAAAAgNsh6AAAAABwOwQdAAAAAG6HoAMAAADA7Xi7ugAAAAA0v4h5m116/uKl4116frg/rugAAAAAcDsEHQAAAABu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\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["<Figure size 1000x300 with 2 Axes>"],"image/png":"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fPXVV8ZDDz1ktG3b1igoKDAMwzAmTZpkPPnkk/b+n3zyieHl5WW88MILxsGDB42EhASjRYsWxoEDB9w1hDpxdvxLly41vL29jU2bNhmnTp2ybyUlJe4aQp04O/5fauqrrjk7/vz8fMPPz8+YPn26kZeXZ/z1r381OnXqZDz99NPuGkKdOfsaJCQkGH5+fsaf//xn49ixY8b7779vXHfddca9997rriHUWklJibF//35j//79hiQjKSnJ2L9/v/Htt98ahmEYTz75pDFp0iR7/2PHjhm+vr7GH/7wB+PgwYNGSkqK4enpaWzbtq3OtRB0gH8aNmyY8cgjjxjTpk0z/P39jXbt2hlPPfWUw/LSvww6hvGv5aVbtGhhdO/e3Xj++ecdnq9r0DEMw9i7d69xxx13GK1btzZatWpl9OvXz3jmmWfqa+gAXOB///d/je7duxve3t7GoEGDjD179tifGzZsmH2J+svefPNNo3fv3oa3t7dxww03GO+++24DV1y/nBn/NddcY0i6YktISGj4wuuJs//+/66pBx3DcH78u3fvNiIiIgyr1Wpce+21xjPPPGNcunSpgauuX868BhUVFcYf//hH47rrrjN8fHyMoKAg45FHHjF+/PHHhi+8jnbu3Fnt/+fL442JiTGGDRt2xT79+/c3vL29jWuvvdbhF8Z1YTEMk8+HATV06623qn///kpOTnZ3KQAAAKgjPqMDAAAAwHQIOgAAAABMh1vXAAAAAJgOMzoAAAAATIegAwAAAMB0CDoAAAAATIegAwAAAMB0CDoAAAAATIegAwAAAMB0CDoAAAAATIegAwAAAMB0/j/vBU+q1uI6sgAAAABJRU5ErkJggg==\n"},"metadata":{}}]},{"cell_type":"code","source":["from sklearn.preprocessing import StandardScaler\n","\n","# Instantiate scaler and fit on features\n","...\n","\n","# Transform features\n","...\n","\n","# Plot\n","..."],"metadata":{"id":"Yhtt9Rd4UZ1C"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["from sklearn.preprocessing import QuantileTransformer\n","\n","# Instantiate scaler and fit on features\n","...\n","\n","# Transform features\n","...\n","\n","# Plot\n","..."],"metadata":{"id":"ceVuEouPtc3K"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Train/test split\n","\n","There are several ways to split data into train and test sets, but scikit-learn has a built-in function to do this on our behalf called train_test_split().\n","\n","We’ll use this function to split our data such that 70% is used to train the model and 30% is used to evaluate the model's ability to generalize to unseen instances."],"metadata":{"id":"MX9hEqucVs1k"}},{"cell_type":"code","source":["from sklearn.model_selection import train_test_split\n","from sklearn.preprocessing import StandardScaler\n","\n","# Instantiate scaler and fit on features\n","scaler = StandardScaler()\n","scaler.fit(X)\n","# Transform features\n","X_scaled = scaler.transform(X)\n","\n","# Split data into train and test\n","X_train_scaled, X_test_scaled, y_train, y_test = train_test_split(\n","    X_scaled,\n","    y,\n","    train_size=.7,\n","    random_state=25\n",")\n","\n","# Check the splits are correct\n","print(f\"Train size: {round(len(X_train_scaled) / len(X) * 100)}% \\n\\\n","Test size: {round(len(X_test_scaled) / len(X) * 100)}%\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"AQiYjODbVnZa","executionInfo":{"status":"ok","timestamp":1753258407940,"user_tz":-120,"elapsed":411,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"173e816d-7ef5-4221-9428-be3b097a640b"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Train size: 70% \n","Test size: 30%\n"]}]},{"cell_type":"markdown","source":["## example: Model training"],"metadata":{"id":"gyWKNHKSWGyL"}},{"cell_type":"markdown","source":["Thanks to sklearn, building a machine learning model is extremely simple!\n","\n","sklearn has an incredibly wide array of models available and, in most of the cases, the code will work on all the models in the same way!"],"metadata":{"id":"5sfT7TgQWRzh"}},{"cell_type":"markdown","source":["## List of model types according to the documentation\n","(https://scikit-learn.org/stable/supervised_learning.html)\n","\n","1. Supervised learning\n","  1. Linear Models\n","  2. Linear and Quadratic Discriminant Analysis\n","  3. Kernel ridge regression\n","  4. Support Vector Machines\n","  5. Stochastic Gradient Descent\n","  6. Nearest Neighbors\n","  7. Gaussian Processes\n","  8. Cross decomposition\n","  9. Naive Bayes\n","  10. Decision Trees\n","  11. Ensembles: Gradient boosting, random forests, bagging, voting, stacking\n","  12. Multiclass and multioutput algorithms\n","  13. Feature selection\n","  14. Semi-supervised learning\n","  15. Isotonic regression\n","  16. Probability calibration\n","  17. Neural network models (supervised)\n","2. Unsupervised learning\n","  1. Gaussian mixture models\n","  2. Manifold learning\n","  3. Clustering\n","  4. Biclustering\n","  5. Decomposing signals in components (matrix factorization problems)\n","  6. Covariance estimation\n","  7. Novelty and Outlier Detection\n","  8. Density Estimation\n","  9. Neural network models (unsupervised)"],"metadata":{"id":"URfag_reYJ_-"}},{"cell_type":"markdown","source":["## But the individual models are even more!\n","\n","1. Supervised learning\n"," 1. Linear Models\n","    1. Ordinary Least Squares\n","    2. Ridge regression and classification\n","    3. Lasso\n","    4. Multi-task Lasso\n","    5. Elastic-Net\n","    6. Multi-task Elastic-Net\n","    7. Least Angle Regression\n","    8. LARS Lasso\n","    9. Orthogonal Matching Pursuit (OMP)\n","    10. Bayesian Regression\n","    11. Logistic regression\n","    12. Generalized Linear Models\n","    13. Stochastic Gradient Descent - SGD\n","    14. Perceptron\n","    15. Passive Aggressive Algorithms\n","    16. Robustness regression: outliers and modeling errors\n","    17. Quantile Regression\n","    18. Polynomial regression: extending linear models with basis functions\n","  2. Linear and Quadratic Discriminant Analysis\n","    1. ...\n","    2. ...\n","  3. ..."],"metadata":{"id":"1WRUYJscYPQw"}},{"cell_type":"markdown","source":["## Let's try and train/test a simple LogisticRegression model"],"metadata":{"id":"wfSEGS_SZ6IF"}},{"cell_type":"code","source":["print(\"X_train and y_train\")\n","display(X_train_scaled)\n","display(y_train.values)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":364},"id":"NzjhwH4MaetD","executionInfo":{"status":"ok","timestamp":1753259571414,"user_tz":-120,"elapsed":10,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"618a6f12-ac28-43e4-e15c-7789fb048855"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["X_train and y_train\n"]},{"output_type":"display_data","data":{"text/plain":["array([[-0.6801591 ,  0.62266555,  0.99967413, ..., -1.26113805,\n","        -1.2453302 ,  0.42387759],\n","       [-1.13720713, -0.23011443, -2.43634632, ...,  1.37126518,\n","         0.49197446, -0.11748635],\n","       [ 0.09805783,  1.40363249, -0.02382132, ..., -1.69987192,\n","        -1.81030733, -0.62700535],\n","       ...,\n","       [ 0.76510091,  2.34617879, -0.06037473, ..., -0.20817676,\n","        -0.7933485 , -0.62700535],\n","       [ 0.82686416, -0.97517485, -1.63217132, ...,  1.19577163,\n","        -0.21424694, -0.37224585],\n","       [-0.23546371, -0.02365191,  0.12239231, ..., -1.30501144,\n","        -1.76793404, -0.59516041]])"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["array([2, 1, 2, 0, 1, 0, 1, 0, 1, 2, 2, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1,\n","       1, 2, 0, 1, 0, 1, 0, 1, 0, 2, 2, 1, 0, 0, 1, 0, 2, 0, 1, 2, 0, 2,\n","       1, 0, 1, 1, 1, 0, 0, 2, 1, 1, 0, 2, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0,\n","       2, 0, 1, 1, 0, 2, 2, 1, 2, 0, 2, 2, 0, 2, 1, 0, 0, 0, 0, 0, 2, 1,\n","       1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 0, 0, 1, 2, 0, 0, 2, 0, 2, 0, 1, 2,\n","       1, 0, 1, 2, 1, 2, 2, 2, 2, 1, 1, 2, 1, 2])"]},"metadata":{}}]},{"cell_type":"code","source":["from sklearn.linear_model import LogisticRegression\n","\n","# Instatiating the model\n","logistic_regression = LogisticRegression()\n","display(logistic_regression)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":80},"id":"QDJvdqJ9aiPG","executionInfo":{"status":"ok","timestamp":1753259584284,"user_tz":-120,"elapsed":123,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"0f11d097-cd63-4c6b-8c44-716262bfbb00"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["LogisticRegression()"],"text/html":["<style>#sk-container-id-11 {\n","  /* Definition of color scheme common for light and dark mode */\n","  --sklearn-color-text: #000;\n","  --sklearn-color-text-muted: #666;\n","  --sklearn-color-line: gray;\n","  /* Definition of color scheme for unfitted estimators */\n","  --sklearn-color-unfitted-level-0: #fff5e6;\n","  --sklearn-color-unfitted-level-1: #f6e4d2;\n","  --sklearn-color-unfitted-level-2: #ffe0b3;\n","  --sklearn-color-unfitted-level-3: chocolate;\n","  /* Definition of color scheme for fitted estimators */\n","  --sklearn-color-fitted-level-0: #f0f8ff;\n","  --sklearn-color-fitted-level-1: #d4ebff;\n","  --sklearn-color-fitted-level-2: #b3dbfd;\n","  --sklearn-color-fitted-level-3: cornflowerblue;\n","\n","  /* Specific color for light theme */\n","  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n","  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n","  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n","  --sklearn-color-icon: #696969;\n","\n","  @media (prefers-color-scheme: dark) {\n","    /* Redefinition of color scheme for dark theme */\n","    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n","    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n","    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n","    --sklearn-color-icon: #878787;\n","  }\n","}\n","\n","#sk-container-id-11 {\n","  color: var(--sklearn-color-text);\n","}\n","\n","#sk-container-id-11 pre {\n","  padding: 0;\n","}\n","\n","#sk-container-id-11 input.sk-hidden--visually {\n","  border: 0;\n","  clip: rect(1px 1px 1px 1px);\n","  clip: rect(1px, 1px, 1px, 1px);\n","  height: 1px;\n","  margin: -1px;\n","  overflow: hidden;\n","  padding: 0;\n","  position: absolute;\n","  width: 1px;\n","}\n","\n","#sk-container-id-11 div.sk-dashed-wrapped {\n","  border: 1px dashed var(--sklearn-color-line);\n","  margin: 0 0.4em 0.5em 0.4em;\n","  box-sizing: border-box;\n","  padding-bottom: 0.4em;\n","  background-color: var(--sklearn-color-background);\n","}\n","\n","#sk-container-id-11 div.sk-container {\n","  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n","     but bootstrap.min.css set `[hidden] { display: none !important; }`\n","     so we also need the `!important` here to be able to override the\n","     default hidden behavior on the sphinx rendered scikit-learn.org.\n","     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n","  display: inline-block !important;\n","  position: relative;\n","}\n","\n","#sk-container-id-11 div.sk-text-repr-fallback {\n","  display: none;\n","}\n","\n","div.sk-parallel-item,\n","div.sk-serial,\n","div.sk-item {\n","  /* draw centered vertical line to link estimators */\n","  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n","  background-size: 2px 100%;\n","  background-repeat: no-repeat;\n","  background-position: center center;\n","}\n","\n","/* Parallel-specific style estimator block */\n","\n","#sk-container-id-11 div.sk-parallel-item::after {\n","  content: \"\";\n","  width: 100%;\n","  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n","  flex-grow: 1;\n","}\n","\n","#sk-container-id-11 div.sk-parallel {\n","  display: flex;\n","  align-items: stretch;\n","  justify-content: center;\n","  background-color: var(--sklearn-color-background);\n","  position: relative;\n","}\n","\n","#sk-container-id-11 div.sk-parallel-item {\n","  display: flex;\n","  flex-direction: column;\n","}\n","\n","#sk-container-id-11 div.sk-parallel-item:first-child::after {\n","  align-self: flex-end;\n","  width: 50%;\n","}\n","\n","#sk-container-id-11 div.sk-parallel-item:last-child::after {\n","  align-self: flex-start;\n","  width: 50%;\n","}\n","\n","#sk-container-id-11 div.sk-parallel-item:only-child::after {\n","  width: 0;\n","}\n","\n","/* Serial-specific style estimator block */\n","\n","#sk-container-id-11 div.sk-serial {\n","  display: flex;\n","  flex-direction: column;\n","  align-items: center;\n","  background-color: var(--sklearn-color-background);\n","  padding-right: 1em;\n","  padding-left: 1em;\n","}\n","\n","\n","/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n","clickable and can be expanded/collapsed.\n","- Pipeline and ColumnTransformer use this feature and define the default style\n","- Estimators will overwrite some part of the style using the `sk-estimator` class\n","*/\n","\n","/* Pipeline and ColumnTransformer style (default) */\n","\n","#sk-container-id-11 div.sk-toggleable {\n","  /* Default theme specific background. It is overwritten whether we have a\n","  specific estimator or a Pipeline/ColumnTransformer */\n","  background-color: var(--sklearn-color-background);\n","}\n","\n","/* Toggleable label */\n","#sk-container-id-11 label.sk-toggleable__label {\n","  cursor: pointer;\n","  display: flex;\n","  width: 100%;\n","  margin-bottom: 0;\n","  padding: 0.5em;\n","  box-sizing: border-box;\n","  text-align: center;\n","  align-items: start;\n","  justify-content: space-between;\n","  gap: 0.5em;\n","}\n","\n","#sk-container-id-11 label.sk-toggleable__label .caption {\n","  font-size: 0.6rem;\n","  font-weight: lighter;\n","  color: var(--sklearn-color-text-muted);\n","}\n","\n","#sk-container-id-11 label.sk-toggleable__label-arrow:before {\n","  /* Arrow on the left of the label */\n","  content: \"▸\";\n","  float: left;\n","  margin-right: 0.25em;\n","  color: var(--sklearn-color-icon);\n","}\n","\n","#sk-container-id-11 label.sk-toggleable__label-arrow:hover:before {\n","  color: var(--sklearn-color-text);\n","}\n","\n","/* Toggleable content - dropdown */\n","\n","#sk-container-id-11 div.sk-toggleable__content {\n","  max-height: 0;\n","  max-width: 0;\n","  overflow: hidden;\n","  text-align: left;\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-0);\n","}\n","\n","#sk-container-id-11 div.sk-toggleable__content.fitted {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-0);\n","}\n","\n","#sk-container-id-11 div.sk-toggleable__content pre {\n","  margin: 0.2em;\n","  border-radius: 0.25em;\n","  color: var(--sklearn-color-text);\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-0);\n","}\n","\n","#sk-container-id-11 div.sk-toggleable__content.fitted pre {\n","  /* unfitted */\n","  background-color: var(--sklearn-color-fitted-level-0);\n","}\n","\n","#sk-container-id-11 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n","  /* Expand drop-down */\n","  max-height: 200px;\n","  max-width: 100%;\n","  overflow: auto;\n","}\n","\n","#sk-container-id-11 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n","  content: \"▾\";\n","}\n","\n","/* Pipeline/ColumnTransformer-specific style */\n","\n","#sk-container-id-11 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n","  color: var(--sklearn-color-text);\n","  background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","#sk-container-id-11 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n","  background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","/* Estimator-specific style */\n","\n","/* Colorize estimator box */\n","#sk-container-id-11 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","#sk-container-id-11 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","#sk-container-id-11 div.sk-label label.sk-toggleable__label,\n","#sk-container-id-11 div.sk-label label {\n","  /* The background is the default theme color */\n","  color: var(--sklearn-color-text-on-default-background);\n","}\n","\n","/* On hover, darken the color of the background */\n","#sk-container-id-11 div.sk-label:hover label.sk-toggleable__label {\n","  color: var(--sklearn-color-text);\n","  background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","/* Label box, darken color on hover, fitted */\n","#sk-container-id-11 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n","  color: var(--sklearn-color-text);\n","  background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","/* Estimator label */\n","\n","#sk-container-id-11 div.sk-label label {\n","  font-family: monospace;\n","  font-weight: bold;\n","  display: inline-block;\n","  line-height: 1.2em;\n","}\n","\n","#sk-container-id-11 div.sk-label-container {\n","  text-align: center;\n","}\n","\n","/* Estimator-specific */\n","#sk-container-id-11 div.sk-estimator {\n","  font-family: monospace;\n","  border: 1px dotted var(--sklearn-color-border-box);\n","  border-radius: 0.25em;\n","  box-sizing: border-box;\n","  margin-bottom: 0.5em;\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-0);\n","}\n","\n","#sk-container-id-11 div.sk-estimator.fitted {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-0);\n","}\n","\n","/* on hover */\n","#sk-container-id-11 div.sk-estimator:hover {\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","#sk-container-id-11 div.sk-estimator.fitted:hover {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","/* Specification for estimator info (e.g. \"i\" and \"?\") */\n","\n","/* Common style for \"i\" and \"?\" */\n","\n",".sk-estimator-doc-link,\n","a:link.sk-estimator-doc-link,\n","a:visited.sk-estimator-doc-link {\n","  float: right;\n","  font-size: smaller;\n","  line-height: 1em;\n","  font-family: monospace;\n","  background-color: var(--sklearn-color-background);\n","  border-radius: 1em;\n","  height: 1em;\n","  width: 1em;\n","  text-decoration: none !important;\n","  margin-left: 0.5em;\n","  text-align: center;\n","  /* unfitted */\n","  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n","  color: var(--sklearn-color-unfitted-level-1);\n","}\n","\n",".sk-estimator-doc-link.fitted,\n","a:link.sk-estimator-doc-link.fitted,\n","a:visited.sk-estimator-doc-link.fitted {\n","  /* fitted */\n","  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n","  color: var(--sklearn-color-fitted-level-1);\n","}\n","\n","/* On hover */\n","div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",".sk-estimator-doc-link:hover,\n","div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",".sk-estimator-doc-link:hover {\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-3);\n","  color: var(--sklearn-color-background);\n","  text-decoration: none;\n","}\n","\n","div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",".sk-estimator-doc-link.fitted:hover,\n","div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",".sk-estimator-doc-link.fitted:hover {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-3);\n","  color: var(--sklearn-color-background);\n","  text-decoration: none;\n","}\n","\n","/* Span, style for the box shown on hovering the info icon */\n",".sk-estimator-doc-link span {\n","  display: none;\n","  z-index: 9999;\n","  position: relative;\n","  font-weight: normal;\n","  right: .2ex;\n","  padding: .5ex;\n","  margin: .5ex;\n","  width: min-content;\n","  min-width: 20ex;\n","  max-width: 50ex;\n","  color: var(--sklearn-color-text);\n","  box-shadow: 2pt 2pt 4pt #999;\n","  /* unfitted */\n","  background: var(--sklearn-color-unfitted-level-0);\n","  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n","}\n","\n",".sk-estimator-doc-link.fitted span {\n","  /* fitted */\n","  background: var(--sklearn-color-fitted-level-0);\n","  border: var(--sklearn-color-fitted-level-3);\n","}\n","\n",".sk-estimator-doc-link:hover span {\n","  display: block;\n","}\n","\n","/* \"?\"-specific style due to the `<a>` HTML tag */\n","\n","#sk-container-id-11 a.estimator_doc_link {\n","  float: right;\n","  font-size: 1rem;\n","  line-height: 1em;\n","  font-family: monospace;\n","  background-color: var(--sklearn-color-background);\n","  border-radius: 1rem;\n","  height: 1rem;\n","  width: 1rem;\n","  text-decoration: none;\n","  /* unfitted */\n","  color: var(--sklearn-color-unfitted-level-1);\n","  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n","}\n","\n","#sk-container-id-11 a.estimator_doc_link.fitted {\n","  /* fitted */\n","  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n","  color: var(--sklearn-color-fitted-level-1);\n","}\n","\n","/* On hover */\n","#sk-container-id-11 a.estimator_doc_link:hover {\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-3);\n","  color: var(--sklearn-color-background);\n","  text-decoration: none;\n","}\n","\n","#sk-container-id-11 a.estimator_doc_link.fitted:hover {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-3);\n","}\n","</style><div id=\"sk-container-id-11\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator  sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-11\" type=\"checkbox\" checked><label for=\"sk-estimator-id-11\" class=\"sk-toggleable__label  sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link \">i<span>Not fitted</span></span></div></label><div class=\"sk-toggleable__content \"><pre>LogisticRegression()</pre></div> </div></div></div></div>"]},"metadata":{}}]},{"cell_type":"code","source":["# Training the model\n","logistic_regression.fit(X_train_scaled, y_train)\n","display(logistic_regression)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":80},"id":"gpviJ99_akoy","executionInfo":{"status":"ok","timestamp":1753259595871,"user_tz":-120,"elapsed":345,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"c942cabd-b9b7-4309-bdb9-639f4abb7707"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["LogisticRegression()"],"text/html":["<style>#sk-container-id-12 {\n","  /* Definition of color scheme common for light and dark mode */\n","  --sklearn-color-text: #000;\n","  --sklearn-color-text-muted: #666;\n","  --sklearn-color-line: gray;\n","  /* Definition of color scheme for unfitted estimators */\n","  --sklearn-color-unfitted-level-0: #fff5e6;\n","  --sklearn-color-unfitted-level-1: #f6e4d2;\n","  --sklearn-color-unfitted-level-2: #ffe0b3;\n","  --sklearn-color-unfitted-level-3: chocolate;\n","  /* Definition of color scheme for fitted estimators */\n","  --sklearn-color-fitted-level-0: #f0f8ff;\n","  --sklearn-color-fitted-level-1: #d4ebff;\n","  --sklearn-color-fitted-level-2: #b3dbfd;\n","  --sklearn-color-fitted-level-3: cornflowerblue;\n","\n","  /* Specific color for light theme */\n","  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n","  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n","  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n","  --sklearn-color-icon: #696969;\n","\n","  @media (prefers-color-scheme: dark) {\n","    /* Redefinition of color scheme for dark theme */\n","    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n","    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n","    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n","    --sklearn-color-icon: #878787;\n","  }\n","}\n","\n","#sk-container-id-12 {\n","  color: var(--sklearn-color-text);\n","}\n","\n","#sk-container-id-12 pre {\n","  padding: 0;\n","}\n","\n","#sk-container-id-12 input.sk-hidden--visually {\n","  border: 0;\n","  clip: rect(1px 1px 1px 1px);\n","  clip: rect(1px, 1px, 1px, 1px);\n","  height: 1px;\n","  margin: -1px;\n","  overflow: hidden;\n","  padding: 0;\n","  position: absolute;\n","  width: 1px;\n","}\n","\n","#sk-container-id-12 div.sk-dashed-wrapped {\n","  border: 1px dashed var(--sklearn-color-line);\n","  margin: 0 0.4em 0.5em 0.4em;\n","  box-sizing: border-box;\n","  padding-bottom: 0.4em;\n","  background-color: var(--sklearn-color-background);\n","}\n","\n","#sk-container-id-12 div.sk-container {\n","  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n","     but bootstrap.min.css set `[hidden] { display: none !important; }`\n","     so we also need the `!important` here to be able to override the\n","     default hidden behavior on the sphinx rendered scikit-learn.org.\n","     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n","  display: inline-block !important;\n","  position: relative;\n","}\n","\n","#sk-container-id-12 div.sk-text-repr-fallback {\n","  display: none;\n","}\n","\n","div.sk-parallel-item,\n","div.sk-serial,\n","div.sk-item {\n","  /* draw centered vertical line to link estimators */\n","  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n","  background-size: 2px 100%;\n","  background-repeat: no-repeat;\n","  background-position: center center;\n","}\n","\n","/* Parallel-specific style estimator block */\n","\n","#sk-container-id-12 div.sk-parallel-item::after {\n","  content: \"\";\n","  width: 100%;\n","  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n","  flex-grow: 1;\n","}\n","\n","#sk-container-id-12 div.sk-parallel {\n","  display: flex;\n","  align-items: stretch;\n","  justify-content: center;\n","  background-color: var(--sklearn-color-background);\n","  position: relative;\n","}\n","\n","#sk-container-id-12 div.sk-parallel-item {\n","  display: flex;\n","  flex-direction: column;\n","}\n","\n","#sk-container-id-12 div.sk-parallel-item:first-child::after {\n","  align-self: flex-end;\n","  width: 50%;\n","}\n","\n","#sk-container-id-12 div.sk-parallel-item:last-child::after {\n","  align-self: flex-start;\n","  width: 50%;\n","}\n","\n","#sk-container-id-12 div.sk-parallel-item:only-child::after {\n","  width: 0;\n","}\n","\n","/* Serial-specific style estimator block */\n","\n","#sk-container-id-12 div.sk-serial {\n","  display: flex;\n","  flex-direction: column;\n","  align-items: center;\n","  background-color: var(--sklearn-color-background);\n","  padding-right: 1em;\n","  padding-left: 1em;\n","}\n","\n","\n","/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n","clickable and can be expanded/collapsed.\n","- Pipeline and ColumnTransformer use this feature and define the default style\n","- Estimators will overwrite some part of the style using the `sk-estimator` class\n","*/\n","\n","/* Pipeline and ColumnTransformer style (default) */\n","\n","#sk-container-id-12 div.sk-toggleable {\n","  /* Default theme specific background. It is overwritten whether we have a\n","  specific estimator or a Pipeline/ColumnTransformer */\n","  background-color: var(--sklearn-color-background);\n","}\n","\n","/* Toggleable label */\n","#sk-container-id-12 label.sk-toggleable__label {\n","  cursor: pointer;\n","  display: flex;\n","  width: 100%;\n","  margin-bottom: 0;\n","  padding: 0.5em;\n","  box-sizing: border-box;\n","  text-align: center;\n","  align-items: start;\n","  justify-content: space-between;\n","  gap: 0.5em;\n","}\n","\n","#sk-container-id-12 label.sk-toggleable__label .caption {\n","  font-size: 0.6rem;\n","  font-weight: lighter;\n","  color: var(--sklearn-color-text-muted);\n","}\n","\n","#sk-container-id-12 label.sk-toggleable__label-arrow:before {\n","  /* Arrow on the left of the label */\n","  content: \"▸\";\n","  float: left;\n","  margin-right: 0.25em;\n","  color: var(--sklearn-color-icon);\n","}\n","\n","#sk-container-id-12 label.sk-toggleable__label-arrow:hover:before {\n","  color: var(--sklearn-color-text);\n","}\n","\n","/* Toggleable content - dropdown */\n","\n","#sk-container-id-12 div.sk-toggleable__content {\n","  max-height: 0;\n","  max-width: 0;\n","  overflow: hidden;\n","  text-align: left;\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-0);\n","}\n","\n","#sk-container-id-12 div.sk-toggleable__content.fitted {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-0);\n","}\n","\n","#sk-container-id-12 div.sk-toggleable__content pre {\n","  margin: 0.2em;\n","  border-radius: 0.25em;\n","  color: var(--sklearn-color-text);\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-0);\n","}\n","\n","#sk-container-id-12 div.sk-toggleable__content.fitted pre {\n","  /* unfitted */\n","  background-color: var(--sklearn-color-fitted-level-0);\n","}\n","\n","#sk-container-id-12 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n","  /* Expand drop-down */\n","  max-height: 200px;\n","  max-width: 100%;\n","  overflow: auto;\n","}\n","\n","#sk-container-id-12 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n","  content: \"▾\";\n","}\n","\n","/* Pipeline/ColumnTransformer-specific style */\n","\n","#sk-container-id-12 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n","  color: var(--sklearn-color-text);\n","  background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","#sk-container-id-12 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n","  background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","/* Estimator-specific style */\n","\n","/* Colorize estimator box */\n","#sk-container-id-12 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","#sk-container-id-12 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","#sk-container-id-12 div.sk-label label.sk-toggleable__label,\n","#sk-container-id-12 div.sk-label label {\n","  /* The background is the default theme color */\n","  color: var(--sklearn-color-text-on-default-background);\n","}\n","\n","/* On hover, darken the color of the background */\n","#sk-container-id-12 div.sk-label:hover label.sk-toggleable__label {\n","  color: var(--sklearn-color-text);\n","  background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","/* Label box, darken color on hover, fitted */\n","#sk-container-id-12 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n","  color: var(--sklearn-color-text);\n","  background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","/* Estimator label */\n","\n","#sk-container-id-12 div.sk-label label {\n","  font-family: monospace;\n","  font-weight: bold;\n","  display: inline-block;\n","  line-height: 1.2em;\n","}\n","\n","#sk-container-id-12 div.sk-label-container {\n","  text-align: center;\n","}\n","\n","/* Estimator-specific */\n","#sk-container-id-12 div.sk-estimator {\n","  font-family: monospace;\n","  border: 1px dotted var(--sklearn-color-border-box);\n","  border-radius: 0.25em;\n","  box-sizing: border-box;\n","  margin-bottom: 0.5em;\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-0);\n","}\n","\n","#sk-container-id-12 div.sk-estimator.fitted {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-0);\n","}\n","\n","/* on hover */\n","#sk-container-id-12 div.sk-estimator:hover {\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","#sk-container-id-12 div.sk-estimator.fitted:hover {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","/* Specification for estimator info (e.g. \"i\" and \"?\") */\n","\n","/* Common style for \"i\" and \"?\" */\n","\n",".sk-estimator-doc-link,\n","a:link.sk-estimator-doc-link,\n","a:visited.sk-estimator-doc-link {\n","  float: right;\n","  font-size: smaller;\n","  line-height: 1em;\n","  font-family: monospace;\n","  background-color: var(--sklearn-color-background);\n","  border-radius: 1em;\n","  height: 1em;\n","  width: 1em;\n","  text-decoration: none !important;\n","  margin-left: 0.5em;\n","  text-align: center;\n","  /* unfitted */\n","  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n","  color: var(--sklearn-color-unfitted-level-1);\n","}\n","\n",".sk-estimator-doc-link.fitted,\n","a:link.sk-estimator-doc-link.fitted,\n","a:visited.sk-estimator-doc-link.fitted {\n","  /* fitted */\n","  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n","  color: var(--sklearn-color-fitted-level-1);\n","}\n","\n","/* On hover */\n","div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",".sk-estimator-doc-link:hover,\n","div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",".sk-estimator-doc-link:hover {\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-3);\n","  color: var(--sklearn-color-background);\n","  text-decoration: none;\n","}\n","\n","div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",".sk-estimator-doc-link.fitted:hover,\n","div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",".sk-estimator-doc-link.fitted:hover {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-3);\n","  color: var(--sklearn-color-background);\n","  text-decoration: none;\n","}\n","\n","/* Span, style for the box shown on hovering the info icon */\n",".sk-estimator-doc-link span {\n","  display: none;\n","  z-index: 9999;\n","  position: relative;\n","  font-weight: normal;\n","  right: .2ex;\n","  padding: .5ex;\n","  margin: .5ex;\n","  width: min-content;\n","  min-width: 20ex;\n","  max-width: 50ex;\n","  color: var(--sklearn-color-text);\n","  box-shadow: 2pt 2pt 4pt #999;\n","  /* unfitted */\n","  background: var(--sklearn-color-unfitted-level-0);\n","  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n","}\n","\n",".sk-estimator-doc-link.fitted span {\n","  /* fitted */\n","  background: var(--sklearn-color-fitted-level-0);\n","  border: var(--sklearn-color-fitted-level-3);\n","}\n","\n",".sk-estimator-doc-link:hover span {\n","  display: block;\n","}\n","\n","/* \"?\"-specific style due to the `<a>` HTML tag */\n","\n","#sk-container-id-12 a.estimator_doc_link {\n","  float: right;\n","  font-size: 1rem;\n","  line-height: 1em;\n","  font-family: monospace;\n","  background-color: var(--sklearn-color-background);\n","  border-radius: 1rem;\n","  height: 1rem;\n","  width: 1rem;\n","  text-decoration: none;\n","  /* unfitted */\n","  color: var(--sklearn-color-unfitted-level-1);\n","  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n","}\n","\n","#sk-container-id-12 a.estimator_doc_link.fitted {\n","  /* fitted */\n","  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n","  color: var(--sklearn-color-fitted-level-1);\n","}\n","\n","/* On hover */\n","#sk-container-id-12 a.estimator_doc_link:hover {\n","  /* unfitted */\n","  background-color: var(--sklearn-color-unfitted-level-3);\n","  color: var(--sklearn-color-background);\n","  text-decoration: none;\n","}\n","\n","#sk-container-id-12 a.estimator_doc_link.fitted:hover {\n","  /* fitted */\n","  background-color: var(--sklearn-color-fitted-level-3);\n","}\n","</style><div id=\"sk-container-id-12\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-12\" type=\"checkbox\" checked><label for=\"sk-estimator-id-12\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression()</pre></div> </div></div></div></div>"]},"metadata":{}}]},{"cell_type":"code","source":["# Making predictions with the model\n","log_reg_preds = logistic_regression.predict(X_test_scaled)\n","\n","print(\"y_test\")\n","display(y_test.values)\n","\n","print(\"\\nPredictions for y_test\")\n","display(log_reg_preds)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":173},"id":"yFVvOJlsWzHR","executionInfo":{"status":"ok","timestamp":1753259717168,"user_tz":-120,"elapsed":33,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"bcf817f7-4c9d-4641-92d8-fbef39f0f954"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["y_test\n"]},{"output_type":"display_data","data":{"text/plain":["array([1, 0, 0, 0, 1, 1, 0, 2, 1, 2, 1, 1, 0, 1, 1, 1, 2, 0, 1, 1, 2, 2,\n","       0, 0, 2, 0, 1, 0, 2, 1, 0, 1, 1, 1, 1, 1, 0, 2, 0, 0, 1, 1, 0, 1,\n","       1, 2, 1, 0, 2, 0, 2, 2, 1, 1])"]},"metadata":{}},{"output_type":"stream","name":"stdout","text":["\n","Predictions for y_test\n"]},{"output_type":"display_data","data":{"text/plain":["array([1, 0, 0, 0, 1, 1, 0, 2, 1, 2, 1, 1, 0, 1, 1, 1, 2, 0, 1, 1, 2, 2,\n","       0, 0, 2, 0, 1, 0, 2, 1, 0, 1, 1, 1, 1, 1, 0, 2, 0, 0, 1, 1, 0, 1,\n","       1, 2, 2, 0, 2, 0, 2, 2, 2, 1])"]},"metadata":{}}]},{"cell_type":"code","source":["# All in one cell!\n","\n","from sklearn.linear_model import LogisticRegression\n","\n","logistic_regression = LogisticRegression()                 # create the \"empty\" model\n","logistic_regression.fit(X_train_scaled, y_train)           # \"fit\": train the model on the training data\n","log_reg_preds = logistic_regression.predict(X_test_scaled) # \"predict\": test the model on the test data\n","\n","print(y_test.values)\n","print(log_reg_preds)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"GiEN_BZTbGrn","executionInfo":{"status":"ok","timestamp":1753259781573,"user_tz":-120,"elapsed":149,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"af3f2db0-a703-4984-dfc4-93f570c42cd4"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["[1 0 0 0 1 1 0 2 1 2 1 1 0 1 1 1 2 0 1 1 2 2 0 0 2 0 1 0 2 1 0 1 1 1 1 1 0\n"," 2 0 0 1 1 0 1 1 2 1 0 2 0 2 2 1 1]\n","[1 0 0 0 1 1 0 2 1 2 1 1 0 1 1 1 2 0 1 1 2 2 0 0 2 0 1 0 2 1 0 1 1 1 1 1 0\n"," 2 0 0 1 1 0 1 1 2 2 0 2 0 2 2 2 1]\n"]}]},{"cell_type":"markdown","source":["Try and do the same for two other models:\n","- Support vector machine / support vector classifier\\\n","  (`from sklearn.svm import SVC`)\n","- Decision tree\\\n","  (`from sklearn.tree import DecisionTreeClassifier`)\n","- ... one or more classifiers of your choice!\\\n","  https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html#sphx-glr-auto-examples-classification-plot-classifier-comparison-py"],"metadata":{"id":"OlWceYQ_bnjg"}},{"cell_type":"code","source":["print(\"---------------- SVC ------------------\")\n","\n","from sklearn.svm import SVC\n","\n","# --------- SVC --------------\n","# create the \"empty\" model\n","# \"fit\": train the model on the training data\n","# \"predict\": test the model on the test data\n","svm_preds = ...\n","# print the real y_test and the predictions of the model\n","\n","print(\"\\n=======================================\\n\")\n","print(\"------ DecisionTreeClassifier ---------\")\n","\n","from sklearn.tree import DecisionTreeClassifier\n","\n","# --------- DecisionTreeClassifier --------------\n","# create the \"empty\" model\n","# \"fit\": train the model on the training data\n","# \"predict\": test the model on the test data\n","tree_preds = ...\n","# print the real y_test and the predictions of the model\n","\n","print(\"\\n=======================================\\n\")\n","print(\"---- Your chosen classifier (1) -------\")\n","\n","from ... import ...\n","\n","# model\n","# fit\n","# predict\n","# print\n","\n","print(\"\\n=======================================\\n\")\n","print(\"---- Your chosen classifier (2) -------\")\n","\n","from ... import ...\n","\n","# model\n","# fit\n","# predict\n","# print"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"EzLzpRoUaBIp","executionInfo":{"status":"ok","timestamp":1753260072205,"user_tz":-120,"elapsed":38,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"093bb5d0-637a-4975-9503-066c3a731a88"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["---------------- SVC ------------------\n","\n","=======================================\n","\n","------ DecisionTreeClassifier ---------\n"]}]},{"cell_type":"markdown","source":["## example: Model evaluation\n","\n","Model evaluation is done to test how well the model generalizes to unseen instances. Scikit-learn provides an array of classification and regression metrics to evaluate a trained model's performance.\n","\n","For our use case, we are going to use classification_report() from the metrics module to build a text report showing the main classification metrics such as precision, recall, f1_score, accuracy, etc."],"metadata":{"id":"QQOT2VIAcqd5"}},{"cell_type":"code","source":["from sklearn.metrics import classification_report\n","\n","report = classification_report(y_test, log_reg_preds)\n","print(report)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"9AZgG9qTdwpg","executionInfo":{"status":"ok","timestamp":1753260465006,"user_tz":-120,"elapsed":29,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"e3a4df02-8e77-481a-b866-5e98728ae793"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["              precision    recall  f1-score   support\n","\n","           0       1.00      1.00      1.00        17\n","           1       1.00      0.92      0.96        25\n","           2       0.86      1.00      0.92        12\n","\n","    accuracy                           0.96        54\n","   macro avg       0.95      0.97      0.96        54\n","weighted avg       0.97      0.96      0.96        54\n","\n"]}]},{"cell_type":"code","source":["# Store model predictions in a dictionary\n","# this makes it easier to iterate through each model\n","# and print the results.\n","model_preds = {\n","    \"Logistic Regression\": log_reg_preds,\n","    \"Support Vector Machine\": svm_preds,\n","    \"Decision Tree\": tree_preds,\n","    # ADD YOUR OWN CLASSIFIERS HERE!\n","}\n","\n","for model, preds in model_preds.items():\n","    print(f\"{model} Results:\\n{classification_report(y_test, preds)}\", sep=\"\\n\\n\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"2jtNJad-cNRg","executionInfo":{"status":"ok","timestamp":1753260472307,"user_tz":-120,"elapsed":37,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"06c66e42-6361-4c42-cfb4-95b92d03c7e0"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Logistic Regression Results:\n","              precision    recall  f1-score   support\n","\n","           0       1.00      1.00      1.00        17\n","           1       1.00      0.92      0.96        25\n","           2       0.86      1.00      0.92        12\n","\n","    accuracy                           0.96        54\n","   macro avg       0.95      0.97      0.96        54\n","weighted avg       0.97      0.96      0.96        54\n","\n","Support Vector Machine Results:\n","              precision    recall  f1-score   support\n","\n","           0       1.00      1.00      1.00        17\n","           1       1.00      1.00      1.00        25\n","           2       1.00      1.00      1.00        12\n","\n","    accuracy                           1.00        54\n","   macro avg       1.00      1.00      1.00        54\n","weighted avg       1.00      1.00      1.00        54\n","\n","Decision Tree Results:\n","              precision    recall  f1-score   support\n","\n","           0       0.89      0.94      0.91        17\n","           1       0.96      0.88      0.92        25\n","           2       0.92      1.00      0.96        12\n","\n","    accuracy                           0.93        54\n","   macro avg       0.92      0.94      0.93        54\n","weighted avg       0.93      0.93      0.93        54\n","\n"]}]},{"cell_type":"markdown","source":["There are other functions to calculate *a single metric* instead of a bunch of them.\n","\n","A complete list (with explanations and examples) can be found in the user guide, divided according to the kind of model you are training\n","\n","- Classification metrics\\\n","  https://scikit-learn.org/stable/modules/model_evaluation.html#classification-metrics\n","- Multilabel ranking metrics\\\n","  https://scikit-learn.org/stable/modules/model_evaluation.html#multilabel-ranking-metrics\n","- Regression metrics\\\n","  https://scikit-learn.org/stable/modules/model_evaluation.html#regression-metrics\n","- Clustering metrics\\\n","  https://scikit-learn.org/stable/modules/model_evaluation.html#clustering-metrics\n","\n","\n"],"metadata":{"id":"5aWeNlCEeQ1D"}},{"cell_type":"code","source":["from sklearn.metrics import f1_score\n","\n","score = f1_score(y_test, log_reg_preds, average=\"weighted\")\n","print(score)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"z6P6KpKOfMkz","executionInfo":{"status":"ok","timestamp":1753260896426,"user_tz":-120,"elapsed":88,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"e7261588-aa01-4573-faff-7940ca6fc3c0"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["0.9636158594491927\n"]}]},{"cell_type":"code","source":["from sklearn.metrics import confusion_matrix\n","\n","confmat = confusion_matrix(y_test, log_reg_preds)\n","confmat"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"7RKlo_sHc811","executionInfo":{"status":"ok","timestamp":1753260331777,"user_tz":-120,"elapsed":78,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"5f455fa8-3a85-43e7-a62a-a089707650c1"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[17,  0,  0],\n","       [ 0, 23,  2],\n","       [ 0,  0, 12]])"]},"metadata":{},"execution_count":70}]},{"cell_type":"code","source":["from sklearn.metrics import ConfusionMatrixDisplay\n","\n","disp = ConfusionMatrixDisplay(\n","    confusion_matrix=confmat,\n",")\n","disp.plot()\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":449},"id":"O2G8TeLNdVkx","executionInfo":{"status":"ok","timestamp":1753260407179,"user_tz":-120,"elapsed":188,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"abef9f58-650d-4c9e-b3d3-f73c693acf57"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 2 Axes>"],"image/png":"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AIB9Reqs9Tol8pUrV9b5hNdff329gwEAAP6pUyIfMWJEnU7mcrnk8XisxAMAQPCEaXvcijolcsMwgh0HAABBFamtdUuz1isqKgIVBwAAwWUGYAtDfidyj8ej2bNnq1WrVmrSpIn27t0rSZo2bZpeeumlgAcIAADOze9E/vjjjysvL09PPvmkYmNjvfu7deumF198MaDBAQAQOK4AbOHH70S+ePFi/eEPf9Do0aMVHR3t3d+jRw99/vnnAQ0OAICAobVe6+uvv1aHDh3O2G8YhqqrqwMSFAAAqBu/E3nXrl21cePGM/b/5S9/0SWXXBKQoAAACLgIrcj9frLb9OnTlZ2dra+//lqGYeiNN95QQUGBFi9erNWrVwcjRgAArIvQ1c/8rsiHDx+uVatW6Z133lHjxo01ffp07dq1S6tWrdK1114bjBgBAMA51OtZ61dffbXWrl0b6FgAAAiaSF3GtN6Lpmzbtk27du2SVDtu3qtXr4AFBQBAwLH6Wa39+/dr1KhRev/999W0aVNJ0vHjx/Wzn/1MS5cuVevWrQMdIwAAOAe/x8hvv/12VVdXa9euXSopKVFJSYl27dolwzB0++23ByNGAACsOz3ZzcoWhvyuyPPz87V582Z16tTJu69Tp0569tlndfXVVwc0OAAAAsVl1m5Wjg9HfifyrKyssz74xePxKDMzMyBBAQAQcBE6Ru53a/2pp57SxIkTtW3bNu++bdu26d5779X//d//BTQ4AABwfnWqyFNSUuRy/TA2UF5ert69eysmpvbwmpoaxcTE6LbbbtOIESOCEigAAJZE6ANh6pTI586dG+QwAAAIsghtrdcpkWdnZwc7DgAAUA/1fiCMJFVUVKiqqspnX1JSkqWAAAAIigityP2e7FZeXq4JEyYoLS1NjRs3VkpKis8GAEBYitDVz/xO5A8++KDeffddLViwQG63Wy+++KJmzZqlzMxMLV68OBgxAgCAc/C7tb5q1SotXrxY/fv319ixY3X11VerQ4cOatu2rV599VWNHj06GHECAGBNhM5a97siLykpUfv27SXVjoeXlJRIkq666ipt2LAhsNEBABAgp5/sZmULR35X5O3bt1dRUZHatGmjzp0767XXXtMVV1yhVatWeRdRQfAMG3NUv7jrG6W2qNHez+L1/K9bqWBHQqjDggVLn03T+281VXGhW7Fxhrpe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D+p3v/udJCk3N1eLFy/WwoUL9emnn2rSpEm69dZblZ+fL6n2D46RI0dq2LBh2rFjh26//XY9/PDDfv9vkpiYqLy8PH322Wf63e9+pxdeeEFz5szx+UxhYaFee+01rVq1SmvWrNFHH32ku+++2/v+q6++qunTp+vxxx/Xrl279MQTT2jatGl65ZVX/I4HQD2YQATKzs42hw8fbpqmaRqGYa5du9Z0u93mlClTvO+np6eblZWV3mP++Mc/mp06dTINw/Duq6ysNOPj4823337bNE3TbNmypfnkk09636+urjZbt27tvZZpmma/fv3Me++91zRN0ywoKDAlmWvXrj1rnO+9954pyfz222+9+yoqKsyEhARz8+bNPp8dN26cOWrUKNM0TXPq1Klm165dfd5/6KGHzjjXj0kyly9ffs73n3rqKbNXr17e1zNmzDCjo6PN/fv3e/f97W9/M6OiosyDBw+apmmaF154oblkyRKf88yePdvs06ePaZqmWVRUZEoyP/roo3NeF0D9MUaOiLV69Wo1adJE1dXVMgxD//3f/62ZM2d63+/evbvPuPjHH3+swsJCJSYm+pynoqJCe/bs0YkTJ3Tw4EGf9d9jYmJ02WWXndFeP23Hjh2Kjo5Wv3796hx3YWGhTp06pWuvvdZnf1VVlS655BJJ0q5du85Yh75Pnz51vsZpy5Yt07x587Rnzx6VlZWppqZGSUlJPp9p06aNWrVq5XMdwzBUUFCgxMRE7dmzR+PGjdP48eO9n6mpqVFycrLf8QDwH4kcEWvAgAFasGCBYmNjlZmZqZgY3/+7N27c2Od1WVmZevXqpVdfffWMc7Vo0aJeMcTHx/t9TFlZmSTpr3/9q08ClWrH/QNly5YtGj16tGbNmqXBgwcrOTlZS5cu1dNPP+13rC+88MIZf1hER0cHLFYA50YiR8Rq3LixOnToUOfPX3rppVq2bJnS0tLOqEpPa9mypT744AP17dtXUm3luX37dl166aVn/Xz37t1lGIby8/M1cODAM94/3RHweDzefV27dpXb7da+ffvOWcl36dLFO3HvtK1bt/77H/JfbN68WW3bttUjjzzi3ffVV1+d8bl9+/bpwIEDyszM9F4nKipKnTp1Unp6ujIzM7V3716NHj3ar+sDCAwmuwHfGz16tJo3b67hw4dr48aNKioq0vr163XPPfdo//79kqR7771Xv/nNb7RixQp9/vnnuvvuu897D/gFF1yg7Oxs3XbbbVqxYoX3nK+99pokqW3btnK5XFq9erWOHDmisrIyJSYmasqUKZo0aZJeeeUV7dmzRx9++KGeffZZ7wSyO++8U7t379YDDzyggoICLVmyRHl5eX79vBdddJH27dunpUuXas+ePZo3b95ZJ+7FxcUpOztbH3/8sTZu3Kh77rlHN910kzIyMiRJs2bNUm5urubNm6cvvvhC//znP7Vo0SI988wzfsUDoH5I5MD3EhIStGHDBrVp00YjR45Uly5dNG7cOFVUVHgr9Pvvv1//8z//o+zsbPXp00eJiYm64YYbznveBQsW6Be/+IXuvvtude7cWePHj1d5ebkkqVWrVpo1a5Yefvhhpaena8KECZKk2bNna9q0acrNzVWXLl00ZMgQ/fWvf1W7du0k1Y5bv/7661qxYoV69OihhQsX6oknnvDr573++us1adIkTZgwQT179tTmzZs1bdq0Mz7XoUMHjRw5Utddd50GDRqkiy++2Of2sttvv10vvviiFi1apO7du6tfv37Ky8vzxgoguFzmuWbpAACAsEdFDgCAjZHIAQCwMRI5AAA2RiIHAMDGSOQAANgYiRwAABsjkQMAYGMkcgAAbIxEDgCAjZHIAQCwMRI5AAA29v8BRgUJqLjxyf0AAAAASUVORK5CYII=\n"},"metadata":{}}]},{"cell_type":"code","source":["# we can change the colomap (cmap) to have a monochromatic color\n","disp = ConfusionMatrixDisplay(\n","    confusion_matrix=confmat,\n",")\n","disp.plot(cmap = \"Blues\")\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":449},"id":"8CZWBDvwgL6o","executionInfo":{"status":"ok","timestamp":1753261091683,"user_tz":-120,"elapsed":411,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"b2ee113c-12de-4d8f-a2a9-e9c847f61831"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 2 Axes>"],"image/png":"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QsOHDw92KKgHR48eVWJiovLz89WnT59ghwMToCI3ibOPwxswYIB7XSAehwcguEpKSiRJCQkJQY4EZkEiN4mfexzeoUOHghQVAH9yOp2aOHGirrjiCnXp0iXY4cAkmKIVAEJEVlaWduzYoU2bNgU7FJgIidwk6utxeACCIzs7W6tXr9aGDRss/XhmeI/WuknU1+PwANQvl8ul7OxsrVixQuvWrVNaWlqwQ4LJUJGbSH08Dg+hobS0VLt373a/LioqUkFBgRISEtS6desgRgZ/y8rK0tKlS/X6668rNjbWPeYlPj5e0dHRQY4OZsDtZyYzf/58Pfzww+7H4c2bN0+9evUKdljws/Xr16t///411mdmZiovL6/+A0LAGIZxzvWLFy/WqFGj6jcYmBKJHAAAE+MaOQAAJkYiBwDAxEjkAACYGIkcAAATI5EDAGBiJHIAAEyMRA4AgImRyAEAMDESOeCjUaNGafjw4e7X/fr108SJE+s9jvXr18swDJ04ceK82xiGoZUrV9b6mLNmzVK3bt18imvv3r0yDEMFBQU+HQfAuZHIEZZGjRolwzBkGIYiIyPVvn17zZ49W6dPnw74uV977TXde++9tdq2NskXAH4OD01B2Bo8eLAWL16siooKvfXWW8rKylLDhg01ffr0GttWVlYqMjLSL+dNSEjwy3EAoDaoyBG27Ha7kpOT1aZNG912220aMGCA3njjDUn/bofff//9SklJUXp6uiSpuLhYN9xwg5o0aaKEhAQNGzZMe/fudR+zurpakydPVpMmTdSsWTPddddd+unjCn7aWq+oqNDUqVOVmpoqu92u9u3b65lnntHevXvdD0Zp2rSpDMNwPyTD6XQqNzdXaWlpio6OVkZGhl555RWP87z11lvq0KGDoqOj1b9/f484a2vq1Knq0KGDYmJi1K5dO82YMUNVVVU1tnvyySeVmpqqmJgY3XDDDSopKfF4/+mnn1anTp0UFRWljh076oknnvA6FgB1QyKHZURHR6uystL9eu3atSosLNSaNWu0evVqVVVVadCgQYqNjdXGjRv13nvvqXHjxho8eLB7v0ceeUR5eXl69tlntWnTJh0/flwrVqz42fP+4Q9/0EsvvaR58+Zp586devLJJ9W4cWOlpqbq1VdflSQVFhbq4MGDeuyxxyRJubm5WrJkiRYtWqTPP/9ckyZN0i233KL8/HxJZ/7gGDFihIYOHaqCggKNHTtW06ZN8/rfSWxsrPLy8vTFF1/oscce01NPPaVHH33UY5vdu3dr+fLlWrVqld5++219/PHHGj9+vPv9F198Uffcc4/uv/9+7dy5Uw888IBmzJih5557zut4ANSBCwhDmZmZrmHDhrlcLpfL6XS61qxZ47Lb7a4pU6a4309KSnJVVFS493n++edd6enpLqfT6V5XUVHhio6Odv3zn/90uVwuV4sWLVwPPfSQ+/2qqipXq1at3OdyuVyuvn37uu644w6Xy+VyFRYWuiS51qxZc8443333XZck1/fff+9eV15e7oqJiXFt3rzZY9sxY8a4brrpJpfL5XJNnz7d1blzZ4/3p06dWuNYPyXJtWLFivO+//DDD7u6d+/ufj1z5kxXRESEa//+/e51//jHP1w2m8118OBBl8vlcl144YWupUuXehzn3nvvdfXu3dvlcrlcRUVFLkmujz/++LznBVB3XCNH2Fq9erUaN26sqqoqOZ1O3XzzzZo1a5b7/a5du3pcF//kk0+0e/duxcbGehynvLxce/bsUUlJiQ4ePOjx/PcGDRro8ssvr9FeP6ugoEARERHq27dvrePevXu3Tp06pauvvtpjfWVlpS699FJJ0s6dO2s8h7537961PsdZy5Yt07x587Rnzx6Vlpbq9OnTiouL89imdevWatmypcd5nE6nCgsLFRsbqz179mjMmDEaN26ce5vTp08rPj7e63gAeI9EjrDVv39/LVy4UJGRkUpJSVGDBp7/uTdq1MjjdWlpqbp3764XX3yxxrGaN29epxiio6O93qe0tFSS9Oabb3okUOnMdX9/2bJli0aOHKmcnBwNGjRI8fHxevnll/XII494HetTTz1V4w+LiIgIv8UK4PxI5AhbjRo1Uvv27Wu9/WWXXaZly5YpMTGxRlV6VosWLfT++++rT58+ks5Untu3b9dll112zu27du0qp9Op/Px8DRgwoMb7ZzsC1dXV7nWdO3eW3W7Xvn37zlvJd+rUyT1w76ytW7f+8of8D5s3b1abNm305z//2b3um2++qbHdvn37dODAAaWkpLjPY7PZlJ6erqSkJKWkpOjrr7/WyJEjvTo/AP9gsBvwo5EjR+qCCy7QsGHDtHHjRhUVFWn9+vW6/fbbtX//fknSHXfcob/85S9auXKldu3apfHjx//sPeBt27ZVZmambr31Vq1cudJ9zOXLl0uS2rRpI8MwtHr1ah09elSlpaWKjY3VlClTNGnSJD333HPas2ePPvroIz3++OPuAWR/+tOf9NVXX+nOO+9UYWGhli5dqry8PK8+70UXXaR9+/bp5Zdf1p49ezRv3rxzDtyLiopSZmamPvnkE23cuFG33367brjhBiUnJ0uScnJylJubq3nz5unLL7/UZ599psWLF2vOnDlexQOgbkjkwI9iYmK0YcMGtW7dWiNGjFCnTp00ZswYlZeXuyv0//u//9P//M//KDMzU71791ZsbKyuvfbanz3uwoULdf3112v8+PHq2LGjxo0bp7KyMklSy5YtlZOTo2nTpikpKUnZ2dmSpHvvvVczZsxQbm6uOnXqpMGDB+vNN99UWlqapDPXrV999VWtXLlSGRkZWrRokR544AGvPu8111yjSZMmKTs7W926ddPmzZs1Y8aMGtu1b99eI0aM0O9+9zsNHDhQl1xyicftZWPHjtXTTz+txYsXq2vXrurbt6/y8vLcsQIILMN1vlE6AAAg5FGRAwBgYiRyAABMjEQOAICJkcgBADAxEjkAACZGIgcAwMRI5AAAmBiJHAAAEyORAwBgYiRyAABMjEQOAICJ/T8t4IsTRtB7qwAAAABJRU5ErkJggg==\n"},"metadata":{}}]},{"cell_type":"code","source":["# we can change the colomap (cmap) to have a diverging scale\n","disp = ConfusionMatrixDisplay(\n","    confusion_matrix=confmat,\n",")\n","disp.plot(cmap = \"bwr\")\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":449},"id":"Q2PjY8_CgVMt","executionInfo":{"status":"ok","timestamp":1753261125184,"user_tz":-120,"elapsed":421,"user":{"displayName":"Beatrice Portelli","userId":"14323252246116225690"}},"outputId":"73531203-4627-4e51-82e3-21e04f1d81b8"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 2 Axes>"],"image/png":"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\n"},"metadata":{}}]},{"cell_type":"markdown","source":["Try and compute the confusion matrix for some of the other models!"],"metadata":{"id":"Og6Ayuz6uufQ"}},{"cell_type":"code","source":[],"metadata":{"id":"hdRvOIJ2uzFz"},"execution_count":null,"outputs":[]}]}