{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "GRjDgHBpRYyx" }, "source": [ "# **Tutorial 3: Introducción a clasificación usando Python**\n", "\n", "**Objetivo:** El objetivo de este tutorial es relacionarse con las bibliotecas necesarias para entrenar clasificadores usando Python.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "L40UwWCYXsRo" }, "source": [ "## **Herramientas**" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: scikit-learn in c:\\users\\lucas\\python-envs\\nb-env\\lib\\site-packages (1.5.0)\n", "Requirement already satisfied: pandas in c:\\users\\lucas\\python-envs\\nb-env\\lib\\site-packages (2.2.0)\n", "Requirement already satisfied: numpy>=1.19.5 in c:\\users\\lucas\\python-envs\\nb-env\\lib\\site-packages (from scikit-learn) (1.26.4)\n", "Requirement already satisfied: scipy>=1.6.0 in c:\\users\\lucas\\python-envs\\nb-env\\lib\\site-packages (from scikit-learn) (1.12.0)\n", "Requirement already satisfied: joblib>=1.2.0 in c:\\users\\lucas\\python-envs\\nb-env\\lib\\site-packages (from scikit-learn) (1.3.2)\n", "Requirement already satisfied: threadpoolctl>=3.1.0 in c:\\users\\lucas\\python-envs\\nb-env\\lib\\site-packages (from scikit-learn) (3.2.0)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\lucas\\python-envs\\nb-env\\lib\\site-packages (from pandas) (2.8.2)\n", "Requirement already satisfied: pytz>=2020.1 in c:\\users\\lucas\\python-envs\\nb-env\\lib\\site-packages (from pandas) (2023.4)\n", "Requirement already satisfied: tzdata>=2022.7 in c:\\users\\lucas\\python-envs\\nb-env\\lib\\site-packages (from pandas) (2023.4)\n", "Requirement already satisfied: six>=1.5 in c:\\users\\lucas\\python-envs\\nb-env\\lib\\site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n", "[notice] A new release of pip is available: 24.0 -> 24.2\n", "[notice] To update, run: python.exe -m pip install --upgrade pip\n" ] } ], "source": [ "!pip install scikit-learn pandas" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-09-27T20:39:54.274835Z", "start_time": "2020-09-27T20:39:54.138860Z" }, "colab": { "base_uri": "https://localhost:8080/" }, "id": "IWMguWhnXsT3", "outputId": "7efd1650-d7fc-4120-a76e-4e9e4e75adb5" }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "from sklearn.dummy import DummyClassifier\n", "from sklearn.svm import SVC # Support Vector Machine classifier\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.naive_bayes import GaussianNB # Naive bayes\n", "from sklearn.neighbors import KNeighborsClassifier" ] }, { "cell_type": "markdown", "metadata": { "id": "Q6yZ15zdxrXZ" }, "source": [ "# **Clasificación usando Python**" ] }, { "cell_type": "markdown", "metadata": { "id": "2kPqGmpAXsRp" }, "source": [ "## **Scikit-learn**" ] }, { "cell_type": "markdown", "metadata": { "id": "EKA76ef1XsRp" }, "source": [ "Hay muchas bibliotecas para hacer análisis de datos. Para este tutorial vamos a usar **scikit-learn** (http://scikit-learn.org) que contiene muchos modelos de machine learning ya instalados." ] }, { "cell_type": "markdown", "metadata": { "id": "S5yMQ83MxrXZ" }, "source": [ "## **Ejemplo: Iris Dataset**" ] }, { "cell_type": "markdown", "metadata": { "id": "PTr_cPjXxrXZ" }, "source": [ "Vamos a ocupar el dataset **iris** disponible en sklearn, que contiene 150 **instancias** (filas) de 3 **clases** diferentes de flores. El método **load_iris** permite cargar el dataset." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "xF5ji6V_xrXa", "outputId": "9f33bfbb-c1f1-4fd2-c8cc-88a8c30a16f6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X:\n", " [[5.1 3.5 1.4 0.2]\n", " [4.9 3. 1.4 0.2]\n", " [4.7 3.2 1.3 0.2]\n", " [4.6 3.1 1.5 0.2]\n", " [5. 3.6 1.4 0.2]\n", " [5.4 3.9 1.7 0.4]\n", " [4.6 3.4 1.4 0.3]\n", " [5. 3.4 1.5 0.2]\n", " [4.4 2.9 1.4 0.2]\n", " [4.9 3.1 1.5 0.1]]\n", "y:\n", " [0 0 0 0 0 0 0 0 0 0]\n" ] } ], "source": [ "from sklearn.datasets import load_iris\n", "\n", "iris = load_iris()\n", "\n", "X = iris.data ## datos, caracteristicas o features de cada flor.\n", "y = iris.target ## clase para cada instancia anterior.\n", "\n", "print(\"X:\\n\", X[:10]) # muestra las primeras 10 filas que corresponden a las caracteristicas de 10 flores.\n", "print(\"y:\\n\", y[:10]) # muestra las primeras 10 clases para cada una de las instancias de X" ] }, { "cell_type": "markdown", "metadata": { "id": "WRDwoS1yxrXb" }, "source": [ "Para saber cuáles son las clases:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "id": "mQhnYp9LxrXc", "outputId": "ed7511c1-35b9-40a1-8ad4-6db1e052319a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2\n", " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", " 2 2]\n" ] } ], "source": [ "print(iris.target) # mostramos todas las clases de X" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['setosa', 'versicolor', 'virginica'], dtype='\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)species
05.13.51.40.2setosa
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
\n", "" ], "text/plain": [ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n", "0 5.1 3.5 1.4 0.2 \n", "1 4.9 3.0 1.4 0.2 \n", "2 4.7 3.2 1.3 0.2 \n", "3 4.6 3.1 1.5 0.2 \n", "4 5.0 3.6 1.4 0.2 \n", "\n", " species \n", "0 setosa \n", "1 setosa \n", "2 setosa \n", "3 setosa \n", "4 setosa " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Creamos un DataFrame para los datos de X\n", "iris_df = pd.DataFrame(X, columns=iris.feature_names)\n", "\n", "# Añadimos una columna con la especie de la flor\n", "iris_df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)\n", "\n", "iris_df.head()" ] }, { "cell_type": "markdown", "metadata": { "id": "zGdUX0QHbzdA" }, "source": [ "Hay 50 instancias de cada clase" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "cYfdlGVGbU_x", "outputId": "e855edfc-46bc-450f-92ed-c61905de14d9" }, "outputs": [ { "data": { "text/plain": [ "species\n", "setosa 50\n", "versicolor 50\n", "virginica 50\n", "Name: count, dtype: int64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iris_df['species'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Siempre es muy importante **ver la cantidad de instancias de cada clase**, para saber si el dataset está balanceado o no. Un dataset donde no se tuvo en cuenta el balanceo de clases **puede llevar a un modelo que no generaliza bien**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "De las clases de EDA recordemos que siempre es útil **entender un poco cómo se distribuyen los datos**. Para eso, vamos a graficar los datos en un scatter plot." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAHWCAYAAABACtmGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACnPElEQVR4nOzdd3wU1frH8c/Mbjqk0HvvIF0RLKB0BAULduzt6rX+9IrXhg2713YVu+JVFEUUFVBRkS4ivUiR3kt6353z+yMQCCk7gSSbhO/79dpXkpmTZ5/dnd2dZ+bMOZYxxiAiIiIiIiKFsoOdgIiIiIiISHmnwklERERERCQAFU4iIiIiIiIBqHASEREREREJQIWTiIiIiIhIACqcREREREREAlDhJCIiIiIiEoAKJxERERERkQBUOImIiIiIiASgwklEpBKxLItHH3002GmUmkcffRTLsti3b1+wU6mwPvjgAyzLYtOmTeXmfpo0acLVV1/tKm6TJk0YOnTo8SUnInIMVDiJiLi0fPlyLrzwQho3bkx4eDj169enf//+vPrqq8FOrVg2bdqEZVk8//zzwU6lUE899RSTJ08OdhrF5jgOH330ET169KBatWpUrVqVVq1aMWrUKObPnx/s9Fx79tlnsSyLxYsX51lujCEuLg7Lsti4cWOedRkZGYSFhXHZZZcd9/2vWrWKRx99tNSLOxGR4lDhJCLiwty5c+nevTtLly7lhhtu4LXXXuP666/Htm1efvnlYKdX6VTUwun222/nqquuom7dujz66KM888wzDB48mPnz5zNt2rRgp+fa6aefDsDs2bPzLF+5ciUJCQl4vV7mzJmTZ93ChQvJysrK/d8rr7yS9PR0GjduXOz7X7VqFWPGjFHhJCLlijfYCYiIVARPPvkkMTExLFy4kNjY2Dzr9uzZE5ykpFzZvXs3//3vf7nhhht466238qz7z3/+w969e4OUWfF1796d8PBwZs+ezT//+c/c5XPmzKF69ep0796d2bNnc8UVV+SuO1RkHSqcPB4PHo+nbBMXESlFOuMkIuLChg0baN++fb6iCaBWrVr5ln388cd069aNiIgIqlWrxiWXXMLWrVvztOnTpw8dOnRg0aJF9OrVi4iICJo2bcqbb76Zp11WVhYPP/ww3bp1IyYmhqioKM444wx++eWXEn2MR8vMzOSRRx6hRYsWhIWF0bBhQ+677z4yMzPztLMsi9tuu43JkyfToUMHwsLCaN++fYFnWH799dfcnfLmzZszbty43OuWjoyXmprKhx9+iGVZWJaV7/qXhIQErr76amJjY4mJieGaa64hLS2tyMdz2223UaVKlQLbXXrppdSpUwe/3w/AH3/8wcCBA6lRo0bu63LttdcWGX/jxo0YYzjttNPyrbMsK992kpCQwJ133knDhg0JCwujRYsWPPPMMziOk9vmyG6VL730Eo0bNyYiIoLevXuzYsWKPPGWLVvG1VdfTbNmzQgPD6dOnTpce+217N+/v8i8CxIaGsrJJ5+c76zSnDlz6NmzJ6eddlqB62JjY+nQoQNQ8DVOxhieeOIJGjRoQGRkJGeddRYrV67ME+eDDz7goosuAuCss87K3QZ+/fXXPO1mz57NKaecQnh4OM2aNeOjjz4q9uMUESkOFU4iIi40btyYRYsW5dtZLciTTz7JqFGjaNmyJS+++CJ33nknM2bM4MwzzyQhISFP2/j4eIYMGUK3bt149tlnadCgAbfccgvvvfdebpukpCTeeecd+vTpwzPPPMOjjz7K3r17GThwIEuWLCnhR5rDcRzOPfdcnn/+eYYNG8arr77K8OHDeemll7j44ovztZ89ezb/+Mc/uOSSS3j22WfJyMjgggsuyLPTvnjxYgYNGsT+/fsZM2YM1113HY899li+Lnnjx48nLCyMM844g/HjxzN+/HhuuummPG1GjhxJcnIyY8eOZeTIkXzwwQeMGTOmyMd08cUXk5qaynfffZdneVpaGlOmTOHCCy/E4/GwZ88eBgwYwKZNm7j//vt59dVXufzyywNeo3SoS9rEiRMDFnFpaWn07t2bjz/+mFGjRvHKK69w2mmnMXr0aO6+++587T/66CNeeeUVbr31VkaPHs2KFSs4++yz2b17d26bH3/8kb///ptrrrmGV199lUsuuYQJEyYwZMgQjDFF5lOQ008/ne3bt+cpfObMmUOvXr3o1atXbrc9yCmI5s6dS8+ePbHtwnctHn74YR566CE6derEc889R7NmzRgwYACpqam5bc4880xuv/12AB544IHcbaBt27a5bdavX8+FF15I//79eeGFF4iLi+Pqq6/OV4SJiJQoIyIiAf3www/G4/EYj8djevbsae677z4zffp0k5WVlafdpk2bjMfjMU8++WSe5cuXLzderzfP8t69exvAvPDCC7nLMjMzTefOnU2tWrVyY/t8PpOZmZknXnx8vKldu7a59tpr8ywHzCOPPFLkY9m4caMBzHPPPVdom/Hjxxvbts2sWbPyLH/zzTcNYObMmZPnPkNDQ8369etzly1dutQA5tVXX81dNmzYMBMZGWm2b9+eu2zdunXG6/Wao7+OoqKizFVXXZUvr0ceecQA+R73iBEjTPXq1Yt83I7jmPr165sLLrggz/LPP//cAOa3334zxhjz1VdfGcAsXLiwyHgFGTVqlAFMXFycGTFihHn++efN6tWr87V7/PHHTVRUlFm7dm2e5ffff7/xeDxmy5YtxpjDr1VERITZtm1bbrsFCxYYwNx11125y9LS0vLdz6effprnsRljzPvvv28As3HjxiIfy3fffWcAM378eGOMMTt37jSAmTlzpklOTjYej8d89913xhhjVqxYYYA82/fR97Nnzx4TGhpqzjnnHOM4Tm67Bx54wAB5Xu+JEycawPzyyy/58mrcuHG+x7Rnzx4TFhZm7rnnniIfk4jI8dAZJxERF/r378+8efM499xzWbp0Kc8++ywDBw6kfv36fPPNN7ntJk2ahOM4jBw5kn379uXe6tSpQ8uWLfN1r/N6vXnOpoSGhnLTTTexZ88eFi1aBORcKxIaGgrknAk6cOAAPp+P7t278+eff5bK4504cSJt27alTZs2eR7H2WefDZDvcfTr14/mzZvn/t2xY0eio6P5+++/AfD7/fz0008MHz6cevXq5bZr0aIFgwcPLnZ+N998c56/zzjjDPbv309SUlKh/2NZFhdddBHff/89KSkpucs/++wz6tevn3ttzqHumN9++y3Z2dnFyuv999/ntddeo2nTpnz11Vf83//9H23btqVv375s3749t93EiRM544wziIuLy/P89uvXD7/fz2+//ZYn7vDhw6lfv37u36eccgo9evTg+++/z10WERGR+3tGRgb79u3j1FNPBTim7aRXr17Ytp177dKcOXMICQnh5JNPpkqVKnTs2DG3u96hn4eew4L89NNPZGVl8c9//jNP18w777yz2Lm1a9eOM844I/fvmjVr0rp169ztTUSkNKhwEhFx6eSTT2bSpEnEx8fz+++/M3r0aJKTk7nwwgtZtWoVAOvWrcMYQ8uWLalZs2ae2+rVq/MNJFGvXj2ioqLyLGvVqhVAni5SH374IR07diQ8PJzq1atTs2ZNvvvuOxITE0vlsa5bt46VK1fmewyHcjv6cTRq1ChfjLi4OOLj43Pbp6en06JFi3ztCloWyNH3FxcXB5B7f4W5+OKLSU9Pzy12U1JS+P7777noootyd+Z79+7NBRdcwJgxY6hRowbnnXce77//fr5ruwpi2za33norixYtYt++fXz99dcMHjyYn3/+mUsuuSS33bp165g2bVq+57dfv35A/ue3ZcuW+e6rVatWebaRAwcOcMcdd1C7dm0iIiKoWbMmTZs2BTim7SQ2Npb27dvnKY66dOmSW6D16tUrz7rQ0FBOOeWUQuNt3ry5wMdSs2bN3NfPrUDbm4hIadCoeiIixXTowvmTTz6ZVq1acc011zBx4kQeeeQRHMfBsiymTp1a4IhiVapUKfb9ffzxx1x99dUMHz6ce++9l1q1auHxeBg7diwbNmwoiYeUj+M4nHTSSbz44osFrm/YsGGevwsbPc0cw7U1bhzr/Z166qk0adKEzz//nMsuu4wpU6aQnp6e57oty7L44osvmD9/PlOmTGH69Olce+21vPDCC8yfP9/1a1i9enXOPfdczj33XPr06cPMmTPZvHkzjRs3xnEc+vfvz3333Vfg/x4qUItj5MiRzJ07l3vvvZfOnTtTpUoVHMdh0KBBeQacKI7TTz+dN998k4SEhNzrmw7p1asX7733HtnZ2cyePZtu3boRHh5+TPdTXGW9vYmIgAonEZHj0r17dwB27twJQPPmzTHG0LRpU1c7vzt27CA1NTXPWae1a9cC0KRJEwC++OILmjVrxqRJk/J0cXrkkUdK6mHk07x5c5YuXUrfvn3z3OexqlWrFuHh4axfvz7fuoKWlcR9FmbkyJG8/PLLJCUl8dlnn9GkSZPcLm1HOvXUUzn11FN58skn+eSTT7j88suZMGEC119/fbHvs3v37sycOZOdO3fSuHFjmjdvTkpKSu4ZpkDWrVuXb9natWtzt5H4+HhmzJjBmDFjePjhh4v8v+I4/fTTeeONN/jpp59YvHgx9957b+66Xr16kZ6eznfffcfff//NBRdcUGSsQ4NnrFu3jmbNmuUu37t3b74zRaX5+ouIHCt11RMRceGXX34p8Gj2oWtMWrduDcD555+Px+NhzJgx+dobY/INDe3z+Rg3blzu31lZWYwbN46aNWvSrVs34PDR9SPjLViwgHnz5pXAIyvYyJEj2b59O2+//Xa+denp6XlGQXPD4/HQr18/Jk+ezI4dO3KXr1+/nqlTp+ZrHxUVlW8EwpJy8cUXk5mZyYcffsi0adMYOXJknvXx8fH5XrvOnTsDFNldb9euXbldNo+UlZXFjBkzsG07t1viyJEjmTdvHtOnT8/XPiEhAZ/Pl2fZ5MmT81wj9fvvv7NgwYLc68MK2kYgZ/6o43HomqUXX3yR7OzsPGecmjRpQt26dXn22WfztC1Mv379CAkJ4dVXX82TZ0E5HjqQUFrbgIjIsdAZJxERF/75z3+SlpbGiBEjaNOmDVlZWcydOzf3jMU111wD5JypeeKJJxg9ejSbNm1i+PDhVK1alY0bN/LVV19x44038n//93+5cevVq8czzzzDpk2baNWqFZ999hlLlizhrbfeIiQkBIChQ4cyadIkRowYwTnnnMPGjRt58803adeuXZ5BDoprxowZZGRk5Fs+fPhwrrzySj7//HNuvvlmfvnlF0477TT8fj9r1qzh888/Z/r06bln29x69NFH+eGHHzjttNO45ZZb8Pv9vPbaa3To0CHfsOrdunXjp59+4sUXX6RevXo0bdqUHj16HPNjPVLXrl1p0aIF//73v8nMzMw3vPqHH37If//7X0aMGEHz5s1JTk7m7bffJjo6miFDhhQad9u2bZxyyimcffbZ9O3blzp16rBnzx4+/fRTli5dyp133kmNGjUAuPfee/nmm28YOnQoV199Nd26dSM1NZXly5fzxRdfsGnTpty2kHMd2Omnn84tt9xCZmYm//nPf6hevXpuV7/o6GjOPPNMnn32WbKzs6lfvz4//PADGzduPK7nqlGjRjRs2JB58+bRpEmTPAN7QM5Zpy+//BLLsgqcv+pINWvW5P/+7/8YO3YsQ4cOZciQISxevJipU6fmeayQU6h6PB6eeeYZEhMTCQsL4+yzzy5wzjQRkTITnMH8REQqlqlTp5prr73WtGnTxlSpUsWEhoaaFi1amH/+859m9+7d+dp/+eWX5vTTTzdRUVEmKirKtGnTxtx6663mr7/+ym3Tu3dv0759e/PHH3+Ynj17mvDwcNO4cWPz2muv5YnlOI556qmnTOPGjU1YWJjp0qWL+fbbb81VV11lGjdunKctxRiOvLDboeGns7KyzDPPPGPat29vwsLCTFxcnOnWrZsZM2aMSUxMzHOft956a777ady4cb4hxWfMmGG6dOliQkNDTfPmzc0777xj7rnnHhMeHp6n3Zo1a8yZZ55pIiIi8gxVfWg48r179+Zp73aI7UP+/e9/G8C0aNEi37o///zTXHrppaZRo0YmLCzM1KpVywwdOtT88ccfRcZMSkoyL7/8shk4cKBp0KCBCQkJMVWrVjU9e/Y0b7/9dp4huI0xJjk52YwePdq0aNHChIaGmho1aphevXqZ559/Pnco+iOHjn/hhRdMw4YNTVhYmDnjjDPM0qVL88Tbtm2bGTFihImNjTUxMTHmoosuMjt27Mi3TRT3ubr00ksNYC677LJ861588UUDmLZt2+ZbV9D9+P1+M2bMGFO3bl0TERFh+vTpY1asWFHgtvL222+bZs2aGY/Hk2do8saNG5tzzjkn3/317t3b9O7d29VjEhE5FpYxupJSRCQY+vTpw759+1xNqluZDR8+nJUrVx739TiV0aZNm2jatCnPPfdcnjOVIiJS9nSNk4iIlJn09PQ8f69bt47vv/+ePn36BCchERERl3SNk4iIlJlmzZpx9dVX06xZMzZv3swbb7xBaGhoocNyi4iIlBcqnEREpMwMGjSITz/9lF27dhEWFkbPnj156qmnCpzgVUREpDzRNU4iIiIiIiIB6BonERERERGRAFQ4iYiIiIiIBFBurnF6+umnGT16NHfccUehM51/8MEHuZNMHhIWFlbgBI6FcRyHHTt2ULVqVSzLOp6URURERESkAjPGkJycTL169bDtos8plYvCaeHChYwbN46OHTsGbBsdHc1ff/2V+3dxi58dO3bQsGHDYucoIiIiIiKV09atW2nQoEGRbYJeOKWkpHD55Zfz9ttv88QTTwRsb1kWderUOeb7q1q1KpDz5ERHRx9zHBERERERqdiSkpJo2LBhbo1QlKAXTrfeeivnnHMO/fr1c1U4paSk0LhxYxzHoWvXrjz11FO0b9++0PaZmZlkZmbm/p2cnAzknLlS4SQiIiIiIm56sQV1cIgJEybw559/MnbsWFftW7duzXvvvcfXX3/Nxx9/jOM49OrVi23bthX6P2PHjiUmJib3pm56IiIiIiJSXEGbx2nr1q10796dH3/8Mffapj59+tC5c+dCB4c4WnZ2Nm3btuXSSy/l8ccfL7DN0WecDp2OS0xM1BknEREREZETWFJSEjExMa5qg6B11Vu0aBF79uyha9euucv8fj+//fYbr732GpmZmXg8niJjhISE0KVLF9avX19om7CwMMLCwkosbxEREREROfEErXDq27cvy5cvz7PsmmuuoU2bNvzrX/8KWDRBTqG1fPlyhgwZUlppioiIiIiIBK9wqlq1Kh06dMizLCoqiurVq+cuHzVqFPXr18+9Buqxxx7j1FNPpUWLFiQkJPDcc8+xefNmrr/++jLPX0REREREThxBH1WvKFu2bMkzEVV8fDw33HADu3btIi4ujm7dujF37lzatWsXxCxFRERERKSyC9rgEMFSnAvARERERESk8ipObRDU4chFREREREQqAhVOIiIiIiIiAZTra5xERKRgxhj+WrieXz6dQ3JCCnWb1mbg1X2o1ahmsFMTERGplFQ4iYhUMBlpmTxxyUss+HYRHq8HgwED48dM5KrHLubyf18Q7BRFREQqHXXVExGpYF684Q0Wfv8nAH6fH8fn4PgdjDF88NAEpr33c5AzFBERqXxUOImIVCA7/97NLxPm4DiFDIhqwcdPfIHjOGWbmIiISCWnwklEpAKZN+UPLMsqvIGB3Zv2snnl1rJLSkRE5ASgwklEpALJTMvCtosonA61S88qg2xEREROHCqcREQqkKYnNcLvK7obnjfEQ70WdcooIxERkRODCicRkQrk5EGdqV4vrtCzTrbXps8lpxFdrWoZZyYiIlK5qXASEalAPF4P//70LjyhXjzevB/htsemVsMa3PjcqCBlJyIiUnmpcBIRqWBOOqMtr80fy+kXnJpbPEXFRHLBnefw+u9PE1crJsgZioiIVD6WMaaQMW0rp6SkJGJiYkhMTCQ6OjrY6YiIHJfsrGzSUzKIionE4/EEOx0REZEKpTi1gbeMchIRkVIQEhpCSLWQYKchIiJS6amrnoiIiIiISAAqnERERERERAJQ4SQiIiIiIhKACicREREREZEAVDiJiIiIiIgEoMJJREREREQkABVOIiIiIiIiAahwEhERERERCUCFk4iIiIiISAAqnERERERERAJQ4SQiIiIiIhKACicREREREZEAVDiJiIiIiIgEoMJJREREREQkABVOIiIiIiIiAahwEhERERERCUCFk4iIiIiISADeYCcgIlKe7dmyl/nf/klmWiZNOjSka/+OeDyeYKclIiIi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woYlm4Cc4bR7DO3KTc+NokGresWKlZWRxYcPf8aUcT+QnpwBQHSNqlxw51Au/td5eDyekk5fRI5BfOp21m65n07RC2nhccAHOzdFs825nJOb3RH00T7LK8fJgoRbIGs2R86F5XjbQ7V3se1qwUtORCqVYxqOfMGCBbzyyiusXr0agLZt23L77bfnFlLlma5xkvJu5sR5PHnJS2CRZy4n22MTUTWcV+c9RcPW9V3F8mX7GD3oSZbNXIlz1LxQlgVnXXo694+/vdjDJotIyUpM20PizmHUiUjAax+x82/AtmBBwvn0bPN0EDMsnxzHgX0DwNlSSIsoqDUL265SpnmJSMWheZyKoMJJyrOsjCwurncjKQmpBa63PTYnD+rME1NGu4o3/YNfeP7a/xbZ5pkfHqJrv47FzlVESs681XfSPWYqHrvgr2THwN6Ir6kb27aMMyvfnNSPIPmJohuFn4cd+1zZJCQiFU6JDw6RlJSU5/eibiJy7OZ980ehRROA43f4/fvF7N8Z7yret+N+xLILP5vk8dp8/7YGdREJJsfx0yZqRqFFE4BjLDbtercMs6ogUj8I3CZjWqmnISInBlfXOMXFxbFz505q1apFbGxsgd16jDFYloXfrwtZRY7Vjg278Xht/D6n0DbGGHZv3kv1unGB463flae739H8Podt63YeU64iUjJSsxKICc0M2M7r7CiDbCoYZ7+LRoGfWxERN1wVTj///DPVqlXL/V3XQ4iUjipxUTj+wL1nq8RGuY6XtD+50PWWbRFdTX3/RYIpIqQq2Y5NiF3EARPAb+m9mo8VDiY9QCMNgCMiJcNV4dS7d282btxI06ZN6dOnTymnJHLiOn3EKbx++7v4fQUXT5Zl0bh9Axq2djeyXv8rezN+zOf5BoY4xDiGsy8/85jzFZHj5/WEsjixM51iFucZGOJIIbYhNvaCMs6sAggfCOkTim4T0qVschGRSs/12KbNmzenadOmXHvttXz88cds27atNPMSOSHF1Y5lxB3nQCEndQ2Ga5+8zPVZ36E39yemZjS2N/9b3eO1adi6Hmdd0ut4UhaRElCj5l34jU1BJ5z9jsXyhJa0qt2/7BMr76reB4QW0cCC6IfLKhsRqeRcF04///wzV111FX///Tc33HADjRs3pmXLltx0001MmDCB3bt3l2aeIieM65++nAvvGorttbEs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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 5))\n", "plt.title('Sepal Length vs Sepal Width')\n", "plt.scatter(iris_df['sepal length (cm)'], iris_df['sepal width (cm)'], c=iris.target, cmap='viridis')\n", "plt.xlabel('Sepal Length')\n", "plt.ylabel('Sepal Width')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAHWCAYAAABACtmGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACND0lEQVR4nOzdd5hU1f3H8feZ2d6X3pbemyCIAgqiKCKoWFFjwa5RE2PUxBIRQ8SuiTFq9GfD2MWGXRSVplJUpIkFKdLZ3mfu+f0xuwPL7pQdtu/n9Tz7sHPnO2e+M7Or97P33nOMtdYiIiIiIiIiAbnquwEREREREZGGTsFJREREREQkBAUnERERERGREBScREREREREQlBwEhERERERCUHBSUREREREJAQFJxERERERkRAUnEREREREREJQcBIREREREQlBwUlEpAkxxnDbbbfVdxu15rbbbsMYw65du+q7lUbh6aefxhjDhg0bGszzdO3alWnTpoU1bteuXZk8efKBNSciUkMUnEREIlS+s1j+FRcXR+/evbnqqqvYvn17tcd7/vnnefDBB2u+0f1s2LABYwz33ntvrT9XpO644w7eeOON+m6j2o488sgKPxMtWrTgkEMO4cknn8RxnGqNVVBQwG233cb8+fNrp9kyd999N8YYVqxYUWG7tZb09HSMMfzyyy8V7isqKiI2Npazzz77gJ9/9erV3HbbbbUe7kREDpSCk4jIAbr99tuZPXs2//73vxk1ahSPPPIII0eOpKCgoFrj1FVwagwaa3AC6NSpE7Nnz2b27Nn87W9/w+PxcNFFF3HTTTdVa5yCggJmzJhR68Hp8MMPB2DBggUVtq9atYqsrCyioqJYuHBhhfu+/vprSkpK/I8999xzKSwspEuXLtV+/tWrVzNjxgwFJxFp8BScREQO0MSJEznnnHO4+OKLefrpp7nmmmv45ZdfePPNN+u7NakHqampnHPOOZxzzjn86U9/YuHChXTq1Il///vflJaW1nd7lQwfPpy4uLhKwWnhwoW0bNmSo48+utJ95bfLg5Pb7SYuLg5jTN00LSJSDxScRERq2FFHHQVQ4fSm5557jmHDhhEfH0+LFi0488wz2bRpk//+I488knfeeYdff/3Vf5pX165dASgpKeHWW29l2LBhpKamkpiYyBFHHMGnn35aq6+juLiY6dOn07NnT2JjY8nIyOCGG26guLi4Qp0xhquuuoo33niDgQMHEhsby4ABA3j//fcrjTl//nz/jnqPHj147LHH/Nct7Ttefn4+zzzzjP+92P+amKysLKZNm0ZaWhqpqalccMEFIY/wXXXVVSQlJVVZd9ZZZ9GuXTu8Xi8AS5cuZcKECbRq1Yr4+Hi6devGhRdeGO5bV0FCQgKHHXYY+fn57Ny509//NddcQ0ZGBrGxsfTs2ZO77rrLfzrfhg0baN26NQAzZszwvw/l16999913TJs2je7duxMXF0e7du248MIL2b17d7X7i4mJ4ZBDDql0VGnhwoWMHDmS0aNHV3lfWloaAwcOBKq+xslay8yZM+nUqRMJCQmMGzeOVatWVRjn6aef5vTTTwdg3Lhx/te5/1G2BQsWMGLECOLi4ujevTvPPvtstV+niMiBiqrvBkREmpqffvoJgJYtWwLwj3/8g7/97W+cccYZXHzxxezcuZOHHnqIMWPGsGLFCtLS0rj55pvJzs5m8+bNPPDAAwAkJSUBkJOTwxNPPMFZZ53FJZdcQm5uLv/3f//HhAkT+OqrrxgyZEiNvwbHcTjxxBNZsGABl156Kf369WPlypU88MAD/PDDD5VOo1uwYAFz5szh97//PcnJyfzrX//i1FNPZePGjf73YcWKFRx33HG0b9+eGTNm4PV6uf322/0Bodzs2bO5+OKLGTFiBJdeeikAPXr0qFBzxhln0K1bN2bNmsXy5ct54oknaNOmDXfddVfA1zR16lQefvhh3nnnHf/OOvhOiXv77beZNm0abrebHTt2cOyxx9K6dWv++te/kpaWxoYNG5gzZ07E7+fPP/+M2+0mLS2NgoICxo4dy5YtW7jsssvo3LkzixYt4sYbb2Tr1q08+OCDtG7dmkceeYQrrriCk08+mVNOOQWAwYMHA/DRRx/x888/c8EFF9CuXTtWrVrFf//7X1atWsWSJUuqfeTn8MMP54svvmDDhg3+wL5w4UL/5zB9+nSysrJIS0vDWsuiRYsYOXIkLlfgv7/eeuutzJw5k+OPP57jjz+e5cuXc+yxx1JSUuKvGTNmDH/4wx/417/+xU033US/fv0A/P8C/Pjjj5x22mlcdNFFnH/++Tz55JNMmzaNYcOGMWDAgGq9ThGRA2JFRCQiTz31lAXsxx9/bHfu3Gk3bdpkX3zxRduyZUsbHx9vN2/ebDds2GDdbrf9xz/+UeGxK1eutFFRURW2T5o0yXbp0qXS83g8HltcXFxhW2Zmpm3btq298MILK2wH7PTp04P2/csvv1jA3nPPPQFrZs+ebV0ul/3iiy8qbH/00UctYBcuXFjhOWNiYuyPP/7o3/btt99awD700EP+bSeccIJNSEiwW7Zs8W9bv369jYqKsvv/7ygxMdGef/75lfqaPn26BSq97pNPPtm2bNky6Ot2HMd27NjRnnrqqRW2v/zyyxawn3/+ubXW2tdff90C9uuvvw46XlXGjh1r+/bta3fu3Gl37txp16xZY//whz9YwJ5wwgnWWmv//ve/28TERPvDDz9UeOxf//pX63a77caNG6211u7cuTPg51lQUFBp2wsvvFDhdVi792f0l19+Cdr3O++8YwE7e/Zsa621W7dutYD97LPPbG5urnW73fadd96x1lr7/fffW6DCz+7+z7Njxw4bExNjJ02aZB3H8dfddNNNFqjw2b7yyisWsJ9++mmlvrp06VLpNe3YscPGxsbaP//5z0Ffk4hITdOpeiIiB2j8+PG0bt2ajIwMzjzzTJKSknj99dfp2LEjc+bMwXEczjjjDHbt2uX/ateuHb169QrrdDu3201MTAzgOxK0Z88ePB4Pw4cPZ/ny5bXyml555RX69etH3759K/Rdfhri/n2PHz++wlGhwYMHk5KSws8//wyA1+vl448/ZsqUKXTo0MFf17NnTyZOnFjt/i6//PIKt4844gh2795NTk5OwMcYYzj99NN59913ycvL829/6aWX6Nixo/96nbS0NADmzp0b0TVJa9eupXXr1rRu3Zp+/frx0EMPMWnSJJ588knA994eccQRpKenV3hvx48fj9fr5fPPPw/5HPHx8f7vi4qK2LVrF4cddhhARD8To0aNwuVy+a9dWrhwIdHR0RxyyCEkJSUxePBg/+l65f+Wv19V+fjjjykpKeHqq6+ucPTrmmuuqXZv/fv354gjjvDfbt26NX369PH/bImI1BWdqicicoAefvhhevfuTVRUFG3btqVPnz7+U5jWr1+PtZZevXpV+djo6OiwnuOZZ57hvvvuY+3atRV25rt163bgL6AK69evZ82aNZVOoyu3Y8eOCrc7d+5cqSY9PZ3MzEx/fWFhIT179qxUV9W2UPZ/vvT0dAAyMzNJSUkJ+LipU6fy4IMP8tZbb3H22WeTl5fHu+++y2WXXebfwR87diynnnoqM2bM4IEHHuDII49kypQpnH322cTGxobsrWvXrjz++OP+Kep79epFmzZt/PevX7+e7777Luz3tip79uxhxowZvPjii5Xqs7OzQz5+f2lpaQwYMKBCOBo6dKg/oI0aNarCfTExMYwYMSLgeL/++itApZ/71q1b+z+rcIX62RIRqSsKTiIiB2jEiBEMHz68yvscx8EYw3vvvYfb7a50f/l1TME899xzTJs2jSlTpnD99dfTpk0b3G43s2bN8l9PVdMcx2HQoEHcf//9Vd6fkZFR4XZVrw18EwTUhkif77DDDqNr1668/PLLnH322bz99tsUFhYydepUf40xhldffZUlS5bw9ttv88EHH3DhhRdy3333sWTJkpCfWWJiIuPHjw94v+M4HHPMMdxwww1V3t+7d++g44PvGq9FixZx/fXXM2TIEJKSknAch+OOO67a60WVO/zww3n00UfJyspi4cKFjBo1yn/fqFGjePLJJyktLWXBggUMGzaMuLi4iJ6nuur6Z0tEJBAFJxGRWtSjRw+stXTr1i3kDnGgC/pfffVVunfvzpw5cyrUTJ8+vUZ73VePHj349ttvOfroo2tkiuk2bdoQFxfHjz/+WOm+qrbV5rTWZ5xxBv/85z/JycnhpZdeomvXrv7T3PZ12GGHcdhhh/GPf/yD559/nt/97ne8+OKLXHzxxQf0/D169CAvLy9ouILA70FmZibz5s1jxowZ3Hrrrf7t69evP6C+Dj/8cB555BE+/vhjVqxYwfXXX++/b9SoURQWFvLOO+/w888/c+qppwYdq3w9p/Xr19O9e3f/9p07d1Y6UqQpzEWksdA1TiIiteiUU07B7XYzY8aMSn8ht9ZWmD46MTGxytOsyv/ivu/jv/zySxYvXlxLXfvCxZYtW3j88ccr3VdYWEh+fn61xnO73YwfP5433niD3377zb/9xx9/5L333qtUn5iYSFZWVrX7DsfUqVMpLi7mmWee4f333+eMM86ocH9mZmalz6p85sL9p2KPxBlnnMHixYv54IMPKt2XlZWFx+MBfNOYl2/bV1U/D8ABL55cfs3S/fffT2lpaYUjTl27dqV9+/bcfffdFWoDGT9+PNHR0Tz00EMV+qyqx8TERKDy6xQRaWh0xElEpBb16NGDmTNncuONN7JhwwamTJlCcnIyv/zyC6+//jqXXnop1113HQDDhg3jpZde4tprr/VflH/CCScwefJk5syZw8knn8ykSZP45ZdfePTRR+nfv3+FSQ6qa968eRQVFVXaPmXKFM4991xefvllLr/8cj799FNGjx6N1+tl7dq1vPzyy3zwwQcBT08M5LbbbuPDDz9k9OjRXHHFFXi9Xv79738zcOBAvvnmmwq1w4YN4+OPP+b++++nQ4cOdOvWjUMPPTTi17qvgw8+mJ49e3LzzTdTXFxc4TQ98F1P9p///IeTTz6ZHj16kJuby+OPP05KSgrHH3/8AT//9ddfz1tvvcXkyZP902rn5+ezcuVKXn31VTZs2OBfP6p///689NJL9O7dmxYtWjBw4EAGDhzImDFjuPvuuyktLaVjx458+OGHFdYNi0Tnzp3JyMhg8eLFdO3atcIkHuA76vTaa69hjGH06NFBx2rdujXXXXcds2bNYvLkyRx//PGsWLGC9957j1atWlWoHTJkCG63m7vuuovs7GxiY2M56qijKlwXJiLSINTTbH4iIo1e+RTM4Uxb/dprr9nDDz/cJiYm2sTERNu3b1975ZVX2nXr1vlr8vLy7Nlnn23T0tIs4J+a3HEce8cdd9guXbrY2NhYO3ToUDt37lx7/vnnV5q+nGpMRx7oq3xK6pKSEnvXXXfZAQMG2NjYWJuenm6HDRtmZ8yYYbOzsys855VXXlnpebp06VJpSvF58+bZoUOH2piYGNujRw/7xBNP2D//+c82Li6uQt3atWvtmDFjbHx8fIXpq8unI9+5c2eF+nCn3S538803W8D27Nmz0n3Lly+3Z511lu3cubONjY21bdq0sZMnT7ZLly4NOe7YsWPtgAEDQtbl5ubaG2+80fbs2dPGxMTYVq1a2VGjRtl7773XlpSU+OsWLVpkhw0bZmNiYip8tps3b7Ynn3yyTUtLs6mpqfb000+3v/32W6XPv7rvy1lnnWUBe/bZZ1e67/7777eA7devX6X7qnoer9drZ8yYYdu3b2/j4+PtkUceab///vsqfy4ef/xx2717d+t2uytMTd6lSxc7adKkSs83duxYO3bs2LBek4hITTHW6upKERGpP1OmTGHVqlUHfI2OiIhIbdI1TiIiUmcKCwsr3F6/fj3vvvsuRx55ZP00JCIiEiYdcRIRkTrTvn17pk2bRvfu3fn111955JFHKC4uZsWKFQHXuhIREWkINDmEiIjUmeOOO44XXniBbdu2ERsby8iRI7njjjsUmkREpMHTEScREREREZEQdI2TiIiIiIhICApOIiIiIiIiITS7a5wcx+G3334jOTkZY0x9tyMiIiIiIvXEWktubi4dOnTA5Qp+TKnZBafffvuNjIyM+m5DREREREQaiE2bNtGpU6egNc0uOCUnJwO+NyclJaWeuxERERERkfqSk5NDRkaGPyME0+yCU/npeSkpKQpOIiIiIiIS1iU8mhxCREREREQkBAUnERERERGREBScREREREREQlBwEhERERERCUHBSUREREREJAQFJxERERERkRAUnEREREREREJQcBIREREREQlBwUlERERERCSEqPpuQEREREQaD+vsgcLXsZ71YOIxscdAzEiMMfXTj2cjtvB18P4GrnRM/ImY6P5B6n/CFr4B3h3gboWJm4KJ7lV3DUujVa9HnGbNmsUhhxxCcnIybdq0YcqUKaxbty7oY55++mmMMRW+4uLi6qhjERERkebLFszB7jgcm3s3FL4JBS9hM6dh95zhC1R12Yu1OLn3YncdA/mPQtFbUPAMdvcUnKw/YW3JfvUOTvbt2F0TIf8JX33+k9jdk3Cyb8ZaT532L41PvQanzz77jCuvvJIlS5bw0UcfUVpayrHHHkt+fn7Qx6WkpLB161b/16+//lpHHYuIiIg0T7Z4ITbnRsADWMBb9j1Q+j0283KstXXXUMGzkP/ffXop/wKK3sXmzKxYn/8fKHyu7MZ+9YWvYvMeqIOmpTGr11P13n///Qq3n376adq0acOyZcsYM2ZMwMcZY2jXrl1ttyciIiIiZWzeI4DBF1T254XSb6B0KcQcUvu92FJs/iPBKqDwFWzS1Rh3a6xTgM1/Inh9/rPYxMsxruSableaiAY1OUR2djYALVq0CFqXl5dHly5dyMjI4KSTTmLVqlUBa4uLi8nJyanwJSIiIiLhs04elH4FOEGqorBFH9VNQ6UrIeSpgV4o/qys/muwBSHqi6FkUU10J01UgwlOjuNwzTXXMHr0aAYOHBiwrk+fPjz55JO8+eabPPfccziOw6hRo9i8eXOV9bNmzSI1NdX/lZGRUVsvQURERKRpskU1W3egbGEYRWZvPw2tf2mUjK3Tk1EDu+KKK3jvvfdYsGABnTp1CvtxpaWl9OvXj7POOou///3vle4vLi6muLjYfzsnJ4eMjAyys7NJSUmpkd5FREREmjJrvdgdI8FmBakymORbMInn1n4/3m3YnWOp+rTBfTpq8RwmZgTW8zN213EhxzUt3wg6I580PTk5OaSmpoaVDRrEEaerrrqKuXPn8umnn1YrNAFER0czdOhQfvzxxyrvj42NJSUlpcKXiIiIiITPGDck/I7Au44GiIH4KXXTj7sdxB4FuANUuMDdFaJ911uZqO5l3weqd0PUIIUmCapeg5O1lquuuorXX3+dTz75hG7dulV7DK/Xy8qVK2nfvn0tdCgiIiIiACbpUogaSOXdRzdgMKl31enECiZlOrhaUjkMucHEYtLuq7C2lEm9A0xKgPpETNpdtdyxNHb1GpyuvPJKnnvuOZ5//nmSk5PZtm0b27Zto7Bw73mr5513HjfeeKP/9u23386HH37Izz//zPLlyznnnHP49ddfufjii+vjJYiIiIg0C8bEY1o8i0m6qiywABiIGe07JS7++Lrtx90O0/J135EwE1+2NQriJmNavo6JHlSxPqoLptXrEH8GEFu2NQbiT/HVR/Wsy/alEarXa5wCrTD91FNPMW3aNACOPPJIunbtytNPPw3An/70J+bMmcO2bdtIT09n2LBhzJw5k6FDh4b1nNU5j1FEREREKrPWAZsLJg5jYkM/oNb78YDNA5OAMTHVqE/EmOg66FAaqupkgwYzOURdUXASERERERFohJNDiIiIiIiINGQKTiIiIiIiIiEoOImIiIhUwdoSrC0OXdgEOI6D42ThOAX13YpIgxVV3w2IiIiINCS2+DNs3uNQ+pXvtrsHJvF8iD8DY5rW35wdpwCy/wzF8wGvb5tJh6QrcSWeV6+9iTQ0Teu3X0REROQA2PynsZmXQOnSvRu9P2NzbsVmX++bTa6JcJwC2HkkFM+jPDQBYDMhdyZO9t/qqzWRBknBSURERASwnp+xubPKbu0bkMomIC56G4rereu2ak/2dWCzAt9f+BJO6fo6a0ekoVNwEhEREQFswYsE3zVyYQuerat2al/xp6Fr/EFSRBScRERERAA8q6lwylolDpSuratuapXj5BD8tZbx/FzrvYg0FgpOIiIiIgDEAyZ4iYmpk05qX1x4ZUbziImUU3ASERERAUzc0fivZ6qSG+Im1FU7tcrligHTInRh7HG134xII6Hg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IiIiIiLSHNV7cHrppZe49tprmT59OsuXL+eggw5iwoQJ7Nixo8r6RYsWcdZZZ3HRRRexYsUKpkyZwpQpU/j+++/ruHMREREREWku6n0dp0MPPZRDDjmEf//73wA4jkNGRgZXX301f/3rXyvVT506lfz8fObOnevfdthhhzFkyBAeffTRkM/XmNdxEhERERGRmlOdbFCvR5xKSkpYtmwZ48eP929zuVyMHz+exYsXV/mYxYsXV6gHmDBhQsD64uJicnJyKnyJiIiIiIhUR70Gp127duH1emnbtm2F7W3btmXbtm1VPmbbtm3Vqp81axapqan+r4yMjJppXkREREREmo16v8aptt14441kZ2f7vzZt2lTfLYmIiIiISCMTVZ9P3qpVK9xuN9u3b6+wffv27bRr167Kx7Rr165a9bGxscTGxvpvl1/SpVP2RERERESat/JMEM60D/UanGJiYhg2bBjz5s1jypQpgG9yiHnz5nHVVVdV+ZiRI0cyb948rrnmGv+2jz76iJEjR4b1nLm5uQA6ZU9ERERERABfRkhNTQ1aU6/BCeDaa6/l/PPPZ/jw4YwYMYIHH3yQ/Px8LrjgAgDOO+88OnbsyKxZswD44x//yNixY7nvvvuYNGkSL774IkuXLuW///1vWM/XoUMHNm3aRHJyMsaYWntd4crJySEjI4NNmzZplr8mRp9t06XPtmnT59t06bNt2vT5Nl21+dlaa8nNzaVDhw4ha+s9OE2dOpWdO3dy6623sm3bNoYMGcL777/vnwBi48aNuFx7L8UaNWoUzz//PLfccgs33XQTvXr14o033mDgwIFhPZ/L5aJTp0618loOREpKin7Jmyh9tk2XPtumTZ9v06XPtmnT59t01dZnG+pIU7l6X8epudO6Uk2XPtumS59t06bPt+nSZ9u06fNtuhrKZ9vkZ9UTERERERE5UApO9Sw2Npbp06dXmPlPmgZ9tk2XPtumTZ9v06XPtmnT59t0NZTPVqfqiYiIiIiIhKAjTiIiIiIiIiEoOImIiIiIiISg4CQiIiIiIhKCgpOIiIiIiEgICk715PPPP+eEE06gQ4cOGGN444036rslqSGzZs3ikEMOITk5mTZt2jBlyhTWrVtX321JDXjkkUcYPHiwfwG+kSNH8t5779V3W1IL7rzzTowxXHPNNfXditSA2267DWNMha++ffvWd1tSQ7Zs2cI555xDy5YtiY+PZ9CgQSxdurS+25Ia0LVr10q/u8YYrrzyynrpR8GpnuTn53PQQQfx8MMP13crUsM+++wzrrzySpYsWcJHH31EaWkpxx57LPn5+fXdmhygTp06ceedd7Js2TKWLl3KUUcdxUknncSqVavquzWpQV9//TWPPfYYgwcPru9WpAYNGDCArVu3+r8WLFhQ3y1JDcjMzGT06NFER0fz3nvvsXr1au677z7S09PruzWpAV9//XWF39uPPvoIgNNPP71e+omql2cVJk6cyMSJE+u7DakF77//foXbTz/9NG3atGHZsmWMGTOmnrr6//buPybq+oHj+PMCD+SHOBkMKe/EEIocDoJIzRXDhkYua2pTChDb1KAsZWNkK1AgKk2qrTOs3TXLsXKhjGymTlxzuZACZS2iMjGj0fzBPJ1od5/vHy3WTQ3nHX38utdjY+Pzvvu87/X+i73u8/58kECYO3euz3FNTQ0Oh4ODBw9y1113mZRKAsntdpOfn8/mzZuprq42O44EUHBwMHFxcWbHkAB79dVXmTBhAk6nc2gsISHBxEQSSDExMT7HdXV13H777dx///2m5NEVJ5ERNjAwAMC4ceNMTiKB5PF4aGxs5Ny5c0ybNs3sOBIgJSUl5OXlMWvWLLOjSID19PQQHx/PpEmTyM/Pp7e31+xIEgDNzc1kZGSwYMECYmNjSUtLY/PmzWbHkhFw8eJFPvzwQ4qLi7FYLKZk0BUnkRHk9Xp57rnnmDFjBlOmTDE7jgTAkSNHmDZtGhcuXCAiIoKmpiZSUlLMjiUB0NjYyDfffENbW5vZUSTAsrKycLlcJCcn09fXR1VVFTNnzqSrq4vIyEiz44kffv75ZxwOB6tWreKFF16gra2NZ599FqvVSmFhodnxJIC2b9/OmTNnKCoqMi2DipPICCopKaGrq0t76W8iycnJdHR0MDAwwLZt2ygsLGT//v0qT//njh8/zsqVK9m9ezehoaFmx5EA++fW+NTUVLKysrDb7Xz88ccsXbrUxGTiL6/XS0ZGBrW1tQCkpaXR1dXFpk2bVJxuMu+//z5z5swhPj7etAzaqicyQkpLS2lpaWHfvn3cdtttZseRALFarSQmJnL33XfzyiuvMHXqVN58802zY4mf2tvb6e/vJz09neDgYIKDg9m/fz9vvfUWwcHBeDwesyNKAI0dO5akpCR+/PFHs6OIn8aPH3/ZF1d33nmntmLeZI4dO8aePXt46qmnTM2hK04iAWYYBs888wxNTU20trbqJtWbnNfrZXBw0OwY4qecnByOHDniM7ZkyRLuuOMOysvLCQoKMimZjAS3281PP/3Ek08+aXYU8dOMGTMu+5cfP/zwA3a73aREMhKcTiexsbHk5eWZmkPFySRut9vnm66jR4/S0dHBuHHjsNlsJiYTf5WUlLB161Z27NhBZGQkv//+OwBRUVGMHj3a5HTij4qKCubMmYPNZuPs2bNs3bqV1tZWdu3aZXY08VNkZORl9yGGh4cTHR2t+xNvAmVlZcydOxe73c5vv/3Gyy+/TFBQEIsWLTI7mvjp+eefZ/r06dTW1rJw4UK+/vprGhoaaGhoMDuaBIjX68XpdFJYWEhwsLnVRcXJJIcOHSI7O3voeNWqVQAUFhbicrlMSiWB4HA4AHjggQd8xp1Op6k3NIr/+vv7KSgooK+vj6ioKFJTU9m1axcPPvig2dFE5F/8+uuvLFq0iJMnTxITE8N9993HwYMHL3vUsfz/yczMpKmpiYqKCtauXUtCQgL19fXk5+ebHU0CZM+ePfT29lJcXGx2FCyGYRhmhxAREREREbmR6eEQIiIiIiIiw1BxEhERERERGYaKk4iIiIiIyDBUnERERERERIah4iQiIiIiIjIMFScREREREZFhqDiJiIiIiIgMQ8VJRERERERkGCpOIiJyU2htbcVisXDmzBmzo1yXiRMnUl9fb3YMERG5ChUnEREJqKKiIiwWCxaLBavVSmJiImvXruXPP/+8pvNdLhdjx44dkWw3QjkZyfWJiMjICTY7gIiI3Hxmz56N0+lkcHCQnTt3UlJSwqhRo6ioqDA7moiIyHXRFScREQm4kJAQ4uLisNvtrFixglmzZtHc3AzA4OAgZWVl3HrrrYSHh5OVlUVrayvw13a7JUuWMDAwMHTVqrKyEoAtW7aQkZFBZGQkcXFxLF68mP7+/oDm3rFjB+np6YSGhjJp0iSqqqp8rpRZLBbee+89Hn30UcLCwpg8efLQuv7W3NzM5MmTCQ0NJTs7mw8++GBoC+G/rQ/g/PnzFBcXExkZic1mo6GhIaDrExGR66fiJCIiI2706NFcvHgRgNLSUr766isaGxs5fPgwCxYsYPbs2fT09DB9+nTq6+sZM2YMfX199PX1UVZWBsClS5dYt24dnZ2dbN++nV9++YWioqKAZfzyyy8pKChg5cqVfPfdd7z77ru4XC5qamp83ldVVcXChQs5fPgwDz30EPn5+Zw6dQqAo0ePMn/+fObNm0dnZyfLli1jzZo1Q+f+2/oANmzYQEZGBt9++y1PP/00K1asoLu7O2BrFBERPxgiIiIBVFhYaDzyyCOGYRiG1+s1du/ebYSEhBhlZWXGsWPHjKCgIOPEiRM+5+Tk5BgVFRWGYRiG0+k0oqKihv2ctrY2AzDOnj1rGIZh7Nu3zwCM06dPX/Ucu91ubNy48Yqv5eTkGLW1tT5jW7ZsMcaPHz90DBgvvvji0LHb7TYA4/PPPzcMwzDKy8uNKVOm+MyxZs0an1xXW5/dbjeeeOKJoWOv12vExsYaDofjqusREZH/ju5xEhGRgGtpaSEiIoJLly7h9XpZvHgxlZWVtLa24vF4SEpK8nn/4OAg0dHR/zpne3s7lZWVdHZ2cvr0abxeLwC9vb2kpKT4nbmzs5MDBw74XGHyeDxcuHCB8+fPExYWBkBqaurQ6+Hh4YwZM2Zoy2B3dzeZmZk+895zzz3XnOGfc1ssFuLi4gK+HVFERK6PipOIiARcdnY2DocDq9VKfHw8wcF//blxu90EBQXR3t5OUFCQzzkRERFXne/cuXPk5uaSm5vLRx99RExMDL29veTm5g5tAfSX2+2mqqqKxx577LLXQkNDh34fNWqUz2sWi2WoxPlrJOcWERH/qDiJiEjAhYeHk5iYeNl4WloaHo+H/v5+Zs6cecVzrVYrHo/HZ+z777/n5MmT1NXVMWHCBAAOHToU0Mzp6el0d3dfMfe1Sk5OZufOnT5jbW1tPsdXWp+IiNz4VJxEROQ/k5SURH5+PgUFBWzYsIG0tDT++OMP9u7dS2pqKnl5eUycOBG3283evXuZOnUqYWFh2Gw2rFYrb7/9NsuXL6erq4t169ZdV4YTJ07Q0dHhM2a323nppZd4+OGHsdlszJ8/n1tuuYXOzk66urqorq6+prmXLVvGG2+8QXl5OUuXLqWjowOXywX8dfUIuOL6/t4GKCIiNy49VU9ERP5TTqeTgoICVq9eTXJyMvPmzaOtrQ2bzQb89eS55cuX8/jjjxMTE8Nrr71GTEwMLpeLTz75hJSUFOrq6li/fv11ff769etJS0vz+fnss8/Izc2lpaWFL774gszMTO699142btyI3W6/5rkTEhLYtm0bn376KampqTgcjqGn6oWEhFx1fSIicuOzGIZhmB1CRETkZlVTU8OmTZs4fvy42VFERMQP2qonIiISQO+88w6ZmZlER0dz4MABXn/9dUpLS82OJSIiflJxEhERCaCenh6qq6s5deoUNpuN1atXU1FRYXYsERHxk7bqiYiIiIiIDEMPhxARERERERmGipOIiIiIiMgwVJxERERERESGoeIkIiIiIiIyDBUnERERERGRYag4iYiIiIiIDEPFSUREREREZBgqTiIiIiIiIsP4H5jR1OZm2xaoAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 5))\n", "plt.title('Petal Length vs Petal Width')\n", "plt.scatter(iris_df['petal length (cm)'], iris_df['petal width (cm)'], c=iris.target, cmap='viridis')\n", "plt.xlabel('Petal Length')\n", "plt.ylabel('Petal Width')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Prefacio: División de datos en entrenamiento, validación y prueba**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Siempre es muy muy muy **MUY** importante separar los datos de entrenamiento de los datos de prueba.\n", "\n", "- **Datos de entrenamiento**: Usamos estos datos para **entrenar el modelo de ML**. En este caso usaremos el **70%** de los datos.\n", "- **Datos de validación**: Usamos estos datos para **ajustar los hiperparámetros** de nuestro modelo. En este caso usaremos el **15%** de los datos.\n", "- **Datos de test**: Usamos estos datos para **evaluar nuestro modelo** en su versión final. En este caso usaremos el **15%** de los datos.\n", "\n", "**IMPORTANTE: Cómo y por qué usamos el conjunto de validación?**\n", "\n", "El conjunto de validación se usa para ajustar los hiperparámetros de nuestro modelo, o para cualquier otro ajuste que necesitemos hacer. La idea de esto es que **el conjunto de testing de verdad simulen datos que no ha visto antes**.\n", "\n", "**IMPORTANTE 2: Por qué usar stratify?**\n", "\n", "El parámetro **stratify** en el método **train_test_split** permite que al dividir los datos, **se mantenga la proporción de cada clase**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Notemos que el tipo de dato del output de la función es: \n" ] } ], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "# Primero separamos los datos de entrenamiento y validación/test\n", "X_train, X_val_and_test, y_train, y_val_and_test = train_test_split(X, y, test_size=0.7, random_state=0, stratify=y)\n", "\n", "# Luego separamos los datos de validación y pruebas 0.5 x 0.3 = 0.15\n", "X_val, X_test, y_val, y_test = train_test_split(X_val_and_test, y_val_and_test, test_size=0.5, random_state=0, stratify=y_val_and_test)\n", "\n", "print(\"Notemos que el tipo de dato del output de la función es: \", type(X_train))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para más detalles sobre qué hace la función **train_test_split**: [aquí](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Capitulo 1: Preprocesamiento de datos**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hay muchas técnicas de preprocesamiento de datos como **escalamiento, eliminación de outliers, manejo de valores faltantes, etc**.\n", "\n", "En este tutorial nos enfocaremos en el **escalamiento de los datos**, una técnica fundamental para el correcto funcionamiento de algunos algoritmos de machine learning.\n", "\n", "**OJO**: Super importante! Hacemos **fit del scaler con los datos de entrenamiento** y **transformamos todos los datos** con el mismo scaler." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Estándarización de datos**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La estandarización corresponde a **transformar los datos de manera que tengan media 0 y desviación estándar 1**. \n", "\n", "https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import StandardScaler\n", "\n", "std_scaler = StandardScaler()\n", "\n", "X_train_std_scaled = std_scaler.fit_transform(X_train)\n", "\n", "X_val_std_scaled = std_scaler.transform(X_val)\n", "X_test_std_scaled = std_scaler.transform(X_test)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def plot_before_after_scaling(X_before, X_after):\n", " plt.figure(figsize=(12, 3))\n", "\n", " plt.subplot(1, 2, 1)\n", " plt.title('Before Scaling')\n", " plt.hist(X_before[:, 0], bins=20)\n", " \n", " plt.subplot(1, 2, 2)\n", " plt.title('After Scaling')\n", " plt.hist(X_after[:, 0], bins=20)\n", " \n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8gAAAEpCAYAAABP1QsMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0zElEQVR4nO3deXSTZd7/8U9paVqBAoWWFoGWIvsOFQYQAQERiwr+BGRQCiiDDCiIonTOGbHDo0XHxwGVKYtIFaooCsqogGyFUdkXBURssWzKIltbQIo01+8PD3kMXWhCkibN+3VOzmnuXHfu79Uk9zefLHcCjDFGAAAAAAD4uQplXQAAAAAAAN6AgAwAAAAAgAjIAAAAAABIIiADAAAAACCJgAwAAAAAgCQCMgAAAAAAkgjIAAAAAABIIiADAAAAACCJgAwAAAAAgCQCMuCQf/7zn4qLi1NgYKDatGlT1uWUqYCAAD3//PO282lpaQoICNDBgwfLrCYAAJyxYMECNWnSRBUrVlS1atXKuhyPKqp/d+/eXd27dy+zmoCyREBGuXN1R//HU2RkpHr06KHly5c7fb1ffPGFnnnmGXXp0kXz58/Xiy++6MKqnWe1WvXOO++oY8eOCg8PV5UqVdSoUSMNGzZMmzZtKuvyAAAoU//+978VEBCgjh07Fnn5999/r+HDh6tBgwaaO3eu5syZo4sXL+r5559XRkaGR2v95ZdfNH78eDVp0kShoaGKjIxUhw4d9Oyzz+r8+fMerQXwV0FlXQDgLv/4xz9Uv359GWN04sQJpaWl6e6779Z//vMf9evXz+HrW7t2rSpUqKB58+YpODjYDRU754knntDMmTN13333aejQoQoKCtL+/fu1fPlyxcXF6U9/+pNH6nj44Yf14IMPymKxeGR7AACURnp6umJjY7VlyxZlZWXplltusbs8IyNDVqtVM2bMsF126tQpJScnS5LH3kk9c+aM4uPjlZubq5EjR6pJkyY6ffq0vv32W6WmpmrMmDGqXLmyR2r54osvPLIdwBsRkFFu9e3bV/Hx8bbzjzzyiGrVqqX33nvPqYB88uRJhYaGuiwcG2N06dIlhYaGOn0dJ06c0L///W+NGjVKc+bMsbts+vTp+uWXX260zFILDAxUYGCgx7YHAMD1ZGdn6+uvv9aSJUs0evRopaena8qUKXZjTp48KUke+Wj1hQsXVKlSpSIvmzdvng4fPqyvvvpKnTt3trssNzfXoy/Oe9MbAYCn8RFr+I1q1aopNDRUQUH2rwtZrVZNnz5dzZs3V0hIiGrVqqXRo0fr7NmztjEBAQGaP3++Lly4YPvYdlpamiTpypUrmjp1qho0aCCLxaLY2Fj97W9/U35+vt12YmNj1a9fP61cuVLx8fEKDQ3V7NmzJUnnzp3ThAkTVLduXVksFt1yyy166aWXZLVaS5xTdna2jDHq0qVLocuufrT8j86dO6cnn3xSsbGxslgsqlOnjoYNG6ZTp05Jki5fvqznnntO7du3V9WqVVWpUiV17dpV69atu+7/t6jvMF2d85dffqkOHTooJCREcXFxeueddwqt/+2336pbt24KDQ1VnTp19D//8z+aP38+32sGADgtPT1d1atXV0JCgh544AGlp6fbXR4bG2sLzBEREQoICNDw4cMVEREhSUpOTrb1/T8ed+P777/XAw88oPDwcIWEhCg+Pl7Lli2zu+6rfXH9+vX661//qsjISNWpU6fYWg8cOKDAwMAiP/kVFhamkJAQu2WbN2/W3XffrerVq6tSpUpq1aqVZsyYYbv822+/1fDhwxUXF6eQkBBFRUVp5MiROn369HX/b9d+BzkjI0MBAQH64IMP9MILL6hOnToKCQlRz549lZWVVWj9mTNnKi4uTqGhoerQoYP++9//8r1m+AzeQUa5lZOTo1OnTskYo5MnT+r111/X+fPn9dBDD9mNGz16tNLS0jRixAg98cQTys7O1htvvKGdO3fqq6++UsWKFbVgwQLNmTNHW7Zs0ZtvvilJtld3H330Ub399tt64IEH9NRTT2nz5s1KSUnRvn37tHTpUrtt7d+/X0OGDNHo0aM1atQoNW7cWBcvXlS3bt30008/afTo0apXr56+/vprJSUl6dixY5o+fXqxc4yJiZEkLV68WAMHDtRNN91U7Njz58+ra9eu2rdvn0aOHKl27drp1KlTWrZsmY4ePaqaNWsqNzdXb775poYMGaJRo0YpLy9P8+bNU58+fbRlyxanDkyWlZWlBx54QI888ogSExP11ltvafjw4Wrfvr2aN28uSfrpp5/Uo0cPBQQEKCkpSZUqVdKbb77Jx7UBADckPT1d999/v4KDgzVkyBClpqZq69atuvXWWyX9/mmrd955R0uXLlVqaqoqV66sli1b6k9/+pPGjBmjAQMG6P7775cktWrVSpK0d+9edenSRTfffLMmT56sSpUq6YMPPlD//v310UcfacCAAXY1/PWvf1VERISee+45XbhwodhaY2JiVFBQoAULFigxMbHEea1atUr9+vVTdHS0xo8fr6ioKO3bt0+ffvqpxo8fbxvz448/asSIEYqKitLevXs1Z84c7d27V5s2bVJAQIDD/89p06apQoUKevrpp5WTk6OXX35ZQ4cO1ebNm21jUlNTNW7cOHXt2lVPPvmkDh48qP79+6t69eolvkAAeA0DlDPz5883kgqdLBaLSUtLsxv73//+10gy6enpdstXrFhRaHliYqKpVKmS3bhdu3YZSebRRx+1W/70008bSWbt2rW2ZTExMUaSWbFihd3YqVOnmkqVKpkffvjBbvnkyZNNYGCgOXz4cInzHTZsmJFkqlevbgYMGGBeeeUVs2/fvkLjnnvuOSPJLFmypNBlVqvVGGPMlStXTH5+vt1lZ8+eNbVq1TIjR460Wy7JTJkyxXb+6v89Ozu70Jw3bNhgW3by5EljsVjMU089ZVv2+OOPm4CAALNz507bstOnT5vw8PBC1wkAQGls27bNSDKrVq0yxvze6+rUqWPGjx9vN27KlClGkvnll19sy3755ZdCfe6qnj17mpYtW5pLly7ZllmtVtO5c2fTsGFD27KrffG2224zV65cuW69x48fNxEREUaSadKkiXnsscfMu+++a86dO2c37sqVK6Z+/fomJibGnD171u6yq/3cGGMuXrxYaBvvvfdeob5cVP/u1q2b6datm+38unXrjCTTtGlTu+cJM2bMMJLM7t27jTHG5Ofnmxo1aphbb73V/Pbbb7ZxaWlpRpLddQLeio9Yo9yaOXOmVq1apVWrVmnhwoXq0aOHHn30US1ZssQ2ZvHixapatap69+6tU6dO2U7t27dX5cqVr/vR4s8//1ySNHHiRLvlTz31lCTps88+s1tev3599enTx27Z4sWL1bVrV1WvXt2uhl69eqmgoEAbNmwosYb58+frjTfeUP369bV06VI9/fTTatq0qXr27KmffvrJNu6jjz5S69atC72yLcn2KnJgYKDte0dWq1VnzpzRlStXFB8frx07dpRYR3GaNWumrl272s5HRESocePG+vHHH23LVqxYoU6dOtm9Qx0eHq6hQ4c6tU0AANLT01WrVi316NFD0u+9bvDgwVq0aJEKCgqcus4zZ85o7dq1GjRokPLy8mw9+/Tp0+rTp48yMzPteq8kjRo1qlTH6KhVq5a++eYbPfbYYzp79qxmzZqlP//5z4qMjNTUqVNljJEk7dy5U9nZ2ZowYUKh703/8V3hPx7j5NKlSzp16pTt49vO9vQRI0bYfT/5an+/2tO3bdum06dPa9SoUXZfaRs6dKiqV6/u1DYBTyMgo9zq0KGDevXqpV69emno0KH67LPP1KxZM40bN06XL1+WJGVmZionJ0eRkZGKiIiwO50/f9524I7iHDp0SBUqVCh0RMyoqChVq1ZNhw4dsltev379QteRmZmpFStWFNp+r169JOm6NVSoUEFjx47V9u3bderUKX3yySfq27ev1q5dqwcffNA27sCBA2rRokWJ1yVJb7/9tlq1aqWQkBDVqFFDERER+uyzz5STk3PddYtSr169QsuqV69u9x3vQ4cOFfofSipyGQAA11NQUKBFixapR48eys7OVlZWlrKystSxY0edOHFCa9ascep6s7KyZIzR3//+90J9++p3ma/t20X1/uJER0crNTVVx44d0/79+/Xaa6/ZPp49b948Sb/3c0nX7elnzpzR+PHjVatWLYWGhioiIsJWi6t6+tXQe7WnX33ec23/DgoKUmxsrFPbBDyN7yDDb1SoUEE9evTQjBkzlJmZqebNm8tqtSoyMrLQQTuuunqQjusp7fd4ijpitdVqVe/evfXMM88UuU6jRo1Kdd2SVKNGDd17772699571b17d61fv16HDh2yfVf5ehYuXKjhw4erf//+mjRpkiIjIxUYGKiUlBRbQ3ZUca+aX30lHAAAV1u7dq2OHTumRYsWadGiRYUuT09P15133unw9V49eObTTz9d6BNhV10bDp35tYqAgAA1atRIjRo1UkJCgho2bKj09HQ9+uijpb6OQYMG6euvv9akSZPUpk0bVa5cWVarVXfdddd1DwJaHHo6/AEBGX7lypUrkn4/YJUkNWjQQKtXr1aXLl2camAxMTGyWq3KzMxU06ZNbctPnDihc+fOlSqYNmjQQOfPn7e9Y+wq8fHxWr9+vY4dO6aYmBg1aNBAe/bsKXGdDz/8UHFxcVqyZIld6L/2JzFcLSYmpsijYBa1DACA60lPT1dkZKRmzpxZ6LIlS5Zo6dKlmjVrVrG9v7gXvuPi4iRJFStWdHnfLk5cXJyqV6+uY8eOSfr9eYMk7dmzp9gazp49qzVr1ig5OVnPPfecbXlmZqZba736vCcrK8v20Xbp9+dfBw8etB3oDPBmfMQafuO3337TF198oeDgYFuYHTRokAoKCjR16tRC469cuaJz586VeJ133323JBU60vSrr74qSUpISLhuXYMGDdLGjRu1cuXKQpedO3fOFuqLcvz4cX333XeFll++fFlr1qyx+/j3//t//0/ffPNNoSNrS//3yu/VV4b/+Erw5s2btXHjxuvO40b06dNHGzdu1K5du2zLzpw5U+w7+wAAFOfXX3/VkiVL1K9fPz3wwAOFTuPGjVNeXl6hn2X6o6u/CnHt84DIyEh1795ds2fPtgXWP/rll1+crnvz5s1FHuV6y5YtOn36tBo3bixJateunerXr6/p06cXqq+kfi4Vfr7iavHx8apRo4bmzp1r9/wlPT3d7qtVgDfjHWSUW8uXL9f3338v6ffvA7377rvKzMzU5MmTFRYWJknq1q2bRo8erZSUFO3atUt33nmnKlasqMzMTC1evFgzZszQAw88UOw2WrdurcTERM2ZM0fnzp1Tt27dtGXLFr399tvq37+/3aunxZk0aZKWLVumfv362X7+6MKFC9q9e7c+/PBDHTx4UDVr1ixy3aNHj6pDhw6644471LNnT0VFRenkyZN677339M0332jChAm2dSdNmqQPP/xQAwcO1MiRI9W+fXudOXNGy5Yt06xZs9S6dWv169dPS5Ys0YABA5SQkKDs7GzNmjVLzZo1s73r7g7PPPOMFi5cqN69e+vxxx+3/cxTvXr1dObMGad+igIA4J+WLVumvLw83XvvvUVe/qc//UkRERFKT0/X4MGDixwTGhqqZs2a6f3331ejRo0UHh6uFi1aqEWLFpo5c6Zuu+02tWzZUqNGjVJcXJxOnDihjRs36ujRo/rmm2+cqnvBggVKT0/XgAED1L59ewUHB2vfvn166623FBISor/97W+Sfv/KWGpqqu655x61adNGI0aMUHR0tL7//nvt3btXK1euVFhYmG6//Xa9/PLL+u2333TzzTfriy++UHZ2tlO1lVZwcLCef/55Pf7447rjjjs0aNAgHTx4UGlpaWrQoAH9HL6h7A6gDbhHUT/zFBISYtq0aWNSU1PtfgLhqjlz5pj27dub0NBQU6VKFdOyZUvzzDPPmJ9//tk2pqifeTLGmN9++80kJyeb+vXrm4oVK5q6deuapKQku59/MOb3nzxKSEgosua8vDyTlJRkbrnlFhMcHGxq1qxpOnfubF555RVz+fLlYueam5trZsyYYfr06WPq1KljKlasaKpUqWI6depk5s6dW2iup0+fNuPGjTM333yzCQ4ONnXq1DGJiYnm1KlTxpjffx7ixRdfNDExMcZisZi2bduaTz/91CQmJpqYmBi761Ipf+apqDlf+/MRxhizc+dO07VrV2OxWEydOnVMSkqKee2114wkc/z48WL/BwAA/NE999xjQkJCzIULF4odM3z4cFOxYkVz6tSpIn/myRhjvv76a9O+fXsTHBxcqOcdOHDADBs2zERFRZmKFSuam2++2fTr1898+OGHtjFX++LWrVtLVfe3335rJk2aZNq1a2fCw8NNUFCQiY6ONgMHDjQ7duwoNP7LL780vXv3NlWqVDGVKlUyrVq1Mq+//rrt8qNHj5oBAwaYatWqmapVq5qBAwean3/+uVT9u7ifeVq8eLFdDdnZ2UaSmT9/vt3y1157zfZcokOHDuarr74y7du3N3fddVep/hdAWQowhm/VA/BOEyZM0OzZs3X+/PlS/UQGAADwPlarVREREbr//vs1d+7csi4HKBHfQQbgFX799Ve786dPn9aCBQt02223EY4BAPARly5dKvTd53feeUdnzpxR9+7dy6YowAG8gwzAK7Rp00bdu3dX06ZNdeLECc2bN08///yz1qxZo9tvv72sywMAAKWQkZGhJ598UgMHDlSNGjW0Y8cOzZs3T02bNtX27dsVHBxc1iUCJeIgXQC8wt13360PP/xQc+bMUUBAgNq1a6d58+YRjgEA8CGxsbGqW7euXnvtNZ05c0bh4eEaNmyYpk2bRjiGT+AdZAAAAAAAxHeQAQAAAACQREAGAAAAAEBSGXwH2Wq16ueff1aVKlX4sXAAQJkzxigvL0+1a9dWhQq8buwK9HoAgLcpbb/3eED++eefVbduXU9vFgCAEh05ckR16tQp6zLKBXo9AMBbXa/fezwgV6lSRdLvhYWFhXl68wAA2MnNzVXdunVt/Qk3jl4PAPA2pe33Hg/IVz9qFRYWRtMEAHgNPgrsOvR6AIC3ul6/58tWAAAAAACIgAwAAAAAgCQCMgAAAAAAkgjIAAAA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F9S6dWvNnDmzVOO98bmQo3O4ylue56xfv15jx47Vpk2btGrVKv3222+68847deHChWLX8cbHgkuYciQvL880bNjQrFq1ynTr1s2MHz++2LHz5883VatW9VhtrjJlyhTTunXrUo8fNGiQSUhIsFvWsWNHM3r0aBdX5lqOztNXb89nn33W3HbbbQ6t88wzz5jmzZvbLRs8eLDp06ePK0tzKWfmuW7dOiPJnD171j1Fecj48eNNgwYNjNVqLfJyX32MXut68/TVxyh8kyP3t8TERHPfffe5tR5nlHYOVqvVREVFmX/+85+2ZefOnTMWi8W89957bqywaN99952RZLZu3Wpbtnz5chMQEGB++umnYte73vM2d+rQoYMZO3as7XxBQYGpXbu2SUlJKXK8N+63HZ2DN++TJZmlS5eWOMbbnwuVZg7e/jzn5MmTRpJZv359sWO88bHgCuXqHeSxY8cqISFBvXr1KtX48+fPKyYmRnXr1tV9992nvXv3urlC18jMzFTt2rUVFxenoUOH6vDhw8WO3bhxY6H/R58+fbRx40Z3l3nDHJmn5Ju357JlyxQfH6+BAwcqMjJSbdu21dy5c0tcxxdvU2fmeVWbNm0UHR2t3r1766uvvnJzpa51+fJlLVy4UCNHjlRAQECRY3zx9rxWaeYp+eZjFP4hIyNDkZGRaty4scaMGaPTp0+XdUmllp2drePHj9vtR6pWraqOHTuWyX5k48aNqlatmuLj423LevXqpQoVKmjz5s0lrpuenq6aNWuqRYsWSkpK0sWLF91dri5fvqzt27fb/f8qVKigXr16Ffv/87b9tjNzkHx7n+xtt8GN8NbnOTk5OZKk8PDwYseUp9vhj8pNQF60aJF27NihlJSUUo1v3Lix3nrrLX3yySdauHChrFarOnfurKNHj7q50hvTsWNHpaWlacWKFUpNTVV2dra6du2qvLy8IscfP35ctWrVsltWq1Ytr/8ep6Pz9NXb88cff1RqaqoaNmyolStXasyYMXriiSf09ttvF7tOcbdpbm6ufv31V3eX7BRn5hkdHa1Zs2bpo48+0kcffaS6deuqe/fu2rFjhwcrvzEff/yxzp07p+HDhxc7xlcfo39Umnn66mMU5d9dd92ld955R2vWrNFLL72k9evXq2/fviooKCjr0krl6r7CW/Yjx48fL/QR0aCgIIWHh5dY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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_before_after_scaling(X_train, X_train_std_scaled)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Escalado Min-Max**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Otra técnica de escalado es el Min-Max Scaling, que reescala los valores al rango [0, 1].\n", "\n", "https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import MinMaxScaler\n", "\n", "min_max_scaler = MinMaxScaler()\n", "\n", "X_train_min_max_scaled = min_max_scaler.fit_transform(X_train)\n", "\n", "X_val_min_max_scaled = min_max_scaler.transform(X_val)\n", "X_test_min_max_scaled = min_max_scaler.transform(X_test)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8gAAAEpCAYAAABP1QsMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAznklEQVR4nO3deVxU9f7H8TeyDGSoqICoCGK5bwlpbldNzatYaT+XvFao5fUWlWab9HuUkiXW7Xa1MlwiKMUsTctbqblE3VLTXErNDBSXzH0BtERlvr8/eji/RkCZkRmWeT0fj3k8nDPnzPl8z8zxM2/OnDNexhgjAAAAAAA8XJWyLgAAAAAAgPKAgAwAAAAAgAjIAAAAAABIIiADAAAAACCJgAwAAAAAgCQCMgAAAAAAkgjIAAAAAABIIiADAAAAACCJgAwAAAAAgCQCMuCQf/7zn4qKipK3t7fatm1b1uWUKS8vL02aNMl2Py0tTV5eXtq7d2+Z1QQAgDPmzp2rpk2bytfXVzVq1CjrctyqqP7dvXt3de/evcxqAsoSARmVzqX/6P98CwkJUY8ePbRs2TKnn/fzzz/XU089pc6dOys1NVVTpkwpxaqdZ7Va9e6776pDhw6qWbOmAgMD1bhxY913331av359WZcHAECZevPNN+Xl5aUOHToU+fhPP/2kESNGqFGjRpozZ45mz56t3377TZMmTVJGRoZbaz127JjGjh2rpk2bKiAgQCEhIWrfvr2efvppnTlzxq21AJ7Kp6wLAFzl+eefV8OGDWWM0ZEjR5SWlqZ+/frpP//5j/r37+/w861Zs0ZVqlRRSkqK/Pz8XFCxcx599FHNmDFDd955p4YPHy4fHx/t2rVLy5YtU1RUlG655Ra31HHvvffq7rvvlsViccv6AAAoifT0dEVGRmrDhg3KysrSDTfcYPd4RkaGrFarpk+fbnvs+PHjSkxMlCS3HUk9efKkYmJilJubq1GjRqlp06Y6ceKEfvjhByUnJ+vBBx/U9ddf75ZaPv/8c7esByiPCMiotPr27auYmBjb/fvvv1+hoaF67733nArIR48eVUBAQKmFY2OMzp07p4CAAKef48iRI3rzzTc1evRozZ492+6xadOm6dixY9daZol5e3vL29vbbesDAOBqsrOztXbtWi1evFhjxoxRenq6Jk6caDfP0aNHJcktX60+e/asqlatWuRjKSkp2r9/v7755ht16tTJ7rHc3Fy3/nG+PB0IANyNr1jDY9SoUUMBAQHy8bH/u5DVatW0adPUokUL+fv7KzQ0VGPGjNGpU6ds83h5eSk1NVVnz561fW07LS1NknTx4kVNnjxZjRo1ksViUWRkpJ555hnl5+fbrScyMlL9+/fXihUrFBMTo4CAAM2aNUuSdPr0aY0bN07h4eGyWCy64YYb9NJLL8lqtV5xTNnZ2TLGqHPnzoUeu/TV8j87ffq0HnvsMUVGRspisah+/fq67777dPz4cUnS+fPn9dxzzyk6OlrVq1dX1apV1bVrV33xxRdX3b5FncN0acxff/212rdvL39/f0VFRendd98ttPwPP/ygbt26KSAgQPXr19cLL7yg1NRUzmsGADgtPT1dQUFBio2N1aBBg5Senm73eGRkpC0wBwcHy8vLSyNGjFBwcLAkKTEx0db3/3zdjZ9++kmDBg1SzZo15e/vr5iYGC1dutTuuS/1xS+//FIPPfSQQkJCVL9+/WJr3b17t7y9vYv85le1atXk7+9vN+3bb79Vv379FBQUpKpVq6p169aaPn267fEffvhBI0aMUFRUlPz9/VWnTh2NGjVKJ06cuOp2u/wc5IyMDHl5eemDDz7Qiy++qPr168vf3189e/ZUVlZWoeVnzJihqKgoBQQEqH379vrvf//Lec2oMDiCjEorJydHx48flzFGR48e1euvv64zZ87onnvusZtvzJgxSktL08iRI/Xoo48qOztbb7zxhrZs2aJvvvlGvr6+mjt3rmbPnq0NGzborbfekiTbX3cfeOABvfPOOxo0aJAef/xxffvtt0pKStLOnTu1ZMkSu3Xt2rVLw4YN05gxYzR69Gg1adJEv/32m7p166aDBw9qzJgxatCggdauXauEhAQdOnRI06ZNK3aMERERkqSFCxdq8ODBuu6664qd98yZM+ratat27typUaNGqV27djp+/LiWLl2qX375RbVr11Zubq7eeustDRs2TKNHj1ZeXp5SUlLUp08fbdiwwakLk2VlZWnQoEG6//77FRcXp7ffflsjRoxQdHS0WrRoIUk6ePCgevToIS8vLyUkJKhq1ap66623+Lo2AOCapKen66677pKfn5+GDRum5ORkbdy4UTfffLOkP75t9e6772rJkiVKTk7W9ddfr1atWumWW27Rgw8+qIEDB+quu+6SJLVu3VqStGPHDnXu3Fn16tXThAkTVLVqVX3wwQcaMGCAPvzwQw0cONCuhoceekjBwcF67rnndPbs2WJrjYiIUEFBgebOnau4uLgrjmvlypXq37+/wsLCNHbsWNWpU0c7d+7UJ598orFjx9rm2bNnj0aOHKk6depox44dmj17tnbs2KH169fLy8vL4e05depUValSRU888YRycnL08ssva/jw4fr2229t8yQnJ+vhhx9W165d9dhjj2nv3r0aMGCAgoKCrvgHAqDcMEAlk5qaaiQVulksFpOWlmY373//+18jyaSnp9tNX758eaHpcXFxpmrVqnbzbd261UgyDzzwgN30J554wkgya9assU2LiIgwkszy5cvt5p08ebKpWrWq+fnnn+2mT5gwwXh7e5v9+/dfcbz33XefkWSCgoLMwIEDzSuvvGJ27txZaL7nnnvOSDKLFy8u9JjVajXGGHPx4kWTn59v99ipU6dMaGioGTVqlN10SWbixIm2+5e2e3Z2dqExf/XVV7ZpR48eNRaLxTz++OO2aY888ojx8vIyW7ZssU07ceKEqVmzZqHnBACgJL777jsjyaxcudIY80evq1+/vhk7dqzdfBMnTjSSzLFjx2zTjh07VqjPXdKzZ0/TqlUrc+7cOds0q9VqOnXqZG688UbbtEt9sUuXLubixYtXrffw4cMmODjYSDJNmzY1//jHP8z8+fPN6dOn7ea7ePGiadiwoYmIiDCnTp2ye+xSPzfGmN9++63QOt57771Cfbmo/t2tWzfTrVs32/0vvvjCSDLNmjWz+5wwffp0I8ls27bNGGNMfn6+qVWrlrn55pvNhQsXbPOlpaUZSXbPCZRXfMUaldaMGTO0cuVKrVy5UvPmzVOPHj30wAMPaPHixbZ5Fi5cqOrVq6t37946fvy47RYdHa3rr7/+ql8t/uyzzyRJ48ePt5v++OOPS5I+/fRTu+kNGzZUnz597KYtXLhQXbt2VVBQkF0NvXr1UkFBgb766qsr1pCamqo33nhDDRs21JIlS/TEE0+oWbNm6tmzpw4ePGib78MPP1SbNm0K/WVbku2vyN7e3rbzjqxWq06ePKmLFy8qJiZGmzdvvmIdxWnevLm6du1qux8cHKwmTZpoz549tmnLly9Xx44d7Y5Q16xZU8OHD3dqnQAApKenKzQ0VD169JD0R68bOnSoFixYoIKCAqee8+TJk1qzZo2GDBmivLw8W88+ceKE+vTpo8zMTLveK0mjR48u0TU6QkND9f333+sf//iHTp06pZkzZ+pvf/ubQkJCNHnyZBljJElbtmxRdna2xo0bV+i86T8fFf7zNU7OnTun48eP276+7WxPHzlypN35yZf6+6We/t133+nEiRMaPXq03Sltw4cPV1BQkFPrBNyNgIxKq3379urVq5d69eql4cOH69NPP1Xz5s318MMP6/z585KkzMxM5eTkKCQkRMHBwXa3M2fO2C7cUZx9+/apSpUqha6IWadOHdWoUUP79u2zm96wYcNCz5GZmanly5cXWn+vXr0k6ao1VKlSRfHx8dq0aZOOHz+ujz/+WH379tWaNWt099132+bbvXu3WrZsecXnkqR33nlHrVu3lr+/v2rVqqXg4GB9+umnysnJueqyRWnQoEGhaUFBQXbneO/bt6/QNpRU5DQAAK6moKBACxYsUI8ePZSdna2srCxlZWWpQ4cOOnLkiFavXu3U82ZlZckYo2effbZQ3750LvPlfbuo3l+csLAwJScn69ChQ9q1a5dee+0129ezU1JSJP3RzyVdtaefPHlSY8eOVWhoqAICAhQcHGyrpbR6+qXQe6mnX/rcc3n/9vHxUWRkpFPrBNyNc5DhMapUqaIePXpo+vTpyszMVIsWLWS1WhUSElLooh2XXLpIx9WU9Dyeoq5YbbVa1bt3bz311FNFLtO4ceMSPbck1apVS3fccYfuuOMOde/eXV9++aX27dtnO1f5aubNm6cRI0ZowIABevLJJxUSEiJvb28lJSXZGrKjivur+aW/hAMAUNrWrFmjQ4cOacGCBVqwYEGhx9PT03Xbbbc5/LyXLp75xBNPFPpG2CWXh0Nnfq3Cy8tLjRs3VuPGjRUbG6sbb7xR6enpeuCBB0r8HEOGDNHatWv15JNPqm3btrr++utltVr117/+9aoXAS0OPR2egIAMj3Lx4kVJf1ywSpIaNWqkVatWqXPnzk41sIiICFmtVmVmZqpZs2a26UeOHNHp06dLFEwbNWqkM2fO2I4Yl5aYmBh9+eWXOnTokCIiItSoUSNt3779isssWrRIUVFRWrx4sV3ov/wnMUpbREREkVfBLGoaAABXk56erpCQEM2YMaPQY4sXL9aSJUs0c+bMYnt/cX/4joqKkiT5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Uq9Z3759bf9u3bq1OnTooIiICH3wwQeV6i+cjo6zor6eVqtVMTExmjJliiTppptu0vbt2zVz5kzFxcWVcXWlx5lxNmnSRE2aNLHd79Spk3bv3q1///vfmjt3rlvqvlYpKSnq27ev6tatW9aluFRJxllR91Ggspk6daoWLFigjIwMLpRXjLy8PN17772aM2eOateuXdblVBhWq1UhISGaPXu2vL29FR0drYMHD+qf//ynJk6cWNbllTsZGRmaMmWK3nzzTXXo0EFZWVkaO3asJk+erGeffbasy/NolSIgb9q0SUePHlW7du1s0woKCvTVV1/pjTfeUH5+vry9va/4HL6+vrrpppuUlZXl6nJLVY0aNdS4ceNi665Tp46OHDliN+3IkSOqU6eOO8orNVcb5+UqyusZFham5s2b201r1qyZPvzww2KXKe41rVatmgICAlxS57VyZpxFad++/VUv1lZe7Nu3T6tWrdLixYuvOF9F30dLOs7LVZR9FK5Vu3ZteXt7O7QPVPR95lo5s80ueeWVVzR16lStWrWqRBczrSwc3Wa7d+/W3r17dfvtt9umWa1WSZKPj4927dqlRo0aubboMubM+ywsLEy+vr52n7mbNWumw4cP6/z58/Lz83NpzWXJme317LPP6t5779UDDzwgSWrVqpXOnj2rv//97/rf//1fValSab7oW2rc9Rm4Umz5nj17atu2bdq6davtFhMTo+HDh2vr1q1XDcfSH4F627ZtCgsLc0PFpefMmTPavXt3sXV37NhRq1evtpu2cuVKuyM5FcHVxnm5ivJ6du7cWbt27bKb9vPPPysiIqLYZSria+rMOIuydevWcv+aXpKamqqQkBDFxsZecb6K+Hr+WUnHebmKso/Ctfz8/BQdHW23D1itVq1evbrYfaCi7zPXypltJkkvv/yyJk+erOXLlysmJsYdpZYbjm6zpk2bFvpceccdd9iunBseHu7O8suEM++zzp07Kysry/bHBOmPXh8WFlapw7Hk3Pb67bffCoXgS5nlj2tW4XJu+/+/VC/5VY5cfhXre++910yYMMF2PzEx0axYscLs3r3bbNq0ydx9993G39/f7NixowyqLbnHH3/cZGRkmOzsbPPNN9+YXr16mdq1a5ujR48aYwqP85tvvjE+Pj7mlVdeMTt37jQTJ040vr6+Ztu2bWU1hBJxdJwV9fXcsGGD8fHxMS+++KLJzMw06enp5rrrrjPz5s2zzTNhwgRz77332u7v2bPHXHfddebJJ580O3fuNDNmzDDe3t5m+fLlZTGEEnFmnP/+97/NRx99ZDIzM822bdvM2LFjTZUqVcyqVavKYggOKSgoMA0aNDBPP/10occqyz5qjGPjrKj7KFxvwYIFxmKxmLS0NPPjjz+av//976ZGjRrm8OHDxpjKtc+UFke32dSpU42fn59ZtGiROXTokO2Wl5dXVkNwO0e32eU88SrWjm6z/fv3m8DAQPPwww+bXbt2mU8++cSEhISYF154oayG4FaObq+JEyeawMBA895775k9e/aYzz//3DRq1MgMGTKkrIbgdnl5eWbLli1my5YtRpJ59dVXzZYtW8y+ffuMMWX3GdhjAnK3bt1MXFyc7f64ceNMgwYNjJ+fnwkNDTX9+vUzmzdvdn+hDho6dKgJCwszfn5+pl69embo0KEmKyvL9vjl4zTGmA8++MA0btzY+Pn5mRYtWphPP/3UzVU7ztFxVtTX0xhj/vOf/5iWLVsai8VimjZtambPnm33eFxcnOnWrZvdtC+++MK0bdvW+Pn5maioKJOamuq+gp3k6Dhfeukl06hRI+Pv729q1qxpunfvbtasWePmqp2zYsUKI8ns2rWr0GOVZR81xrFxVuR9FK73+uuv294f7du3N+vXr7c9Vpn2mdLkyDaLiIgwkgrdJk6c6P7Cy5Cj77M/88SAbIzj22zt2rWmQ4cOxmKxmKioKPPiiy+aixcvurnqsuPI9rpw4YKZNGmS7bNOeHi4eeihhyr8z1s64tJPel5+u7SdyuozsJcxHMMHAAAAAKBSnIMMAAAAAMC1IiADAAAAACACMgAAAAAAkgjIAAAAAABIIiADAAAAACCJgAwAAAAAgCQCMgAAAAAAkgjIAAAAAABIIiADAAAAACCJgAwAAAAAgCQCMgAAAAAAkgjIAAAAAABIkv4PODHYLXoQ6FYAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_before_after_scaling(X_train, X_train_min_max_scaled)" ] }, { "cell_type": "markdown", "metadata": { "id": "L4UssHGwxrXe" }, "source": [ "## **Capítulo 2: Entremaniento de un clasificador**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Definimos nuestro modelo" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
DecisionTreeClassifier(max_depth=10, random_state=0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "DecisionTreeClassifier(max_depth=10, random_state=0)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf = DecisionTreeClassifier(criterion='gini', max_depth=10, random_state=0)\n", "clf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2. Entrenamos a nuestro modelo con el método **fit**. Al entrenar un modelo, se están ajustando los parámetros del modelo para que se ajusten a los datos para que pueda hacer predicciones más precisas." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 75 }, "id": "wFHhKgbSxrXf", "outputId": "9d0fdb39-e863-4bb2-d7a3-9bd1a74bf6ba" }, "outputs": [ { "data": { "text/html": [ "
DecisionTreeClassifier(max_depth=10, random_state=0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "DecisionTreeClassifier(max_depth=10, random_state=0)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf.fit(X_train, y_train) ## Entrenar usando X (features), y (clase)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3.1. Predecimos con nuestro modelo con el método **predict**. Nos gustaría usar el modelo para predecir la clase de un nuevo dato.\n", "\n", "**OJITO**: El método predict recibe una lista de datos, y cada dato es una lista de características, osea que le damos una lista de listas. " ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "epm_ERtlxrXf", "outputId": "3b6b96be-3cf9-4685-a400-54325cafd1a5" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Label predicho: [0]\n", "Especie predicha: setosa\n" ] } ], "source": [ "una_flor_afuera_de_mi_casa = np.array([[5.0, 3.6, 1.3, 0.25]])\n", "\n", "flor_predicha = clf.predict(una_flor_afuera_de_mi_casa)\n", "\n", "print(\"Label predicho:\", flor_predicha)\n", "print(\"Especie predicha:\", label_map[flor_predicha[0]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3.2 Evaluemos nuestro modelo con el conjunto de **validation** con las métricas **accuracy**, **precision**, **recall**, **f1 score**. Este método nos dice qué tan bien se ajusta nuestro modelo a los datos." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "# Realizamos las predicciones de nuestros datos\n", "y_val_pred = clf.predict(X_val)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 0.9615384615384616\n", "Precision (micro): 0.9615384615384616\n", "Precision (macro): 0.9618736383442266\n", "Recall (micro): 0.9615384615384616\n", "Recall (macro): 0.9618736383442266\n", "F1 (micro): 0.9615384615384616\n", "F1 (macro): 0.9618736383442266\n" ] } ], "source": [ "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n", "\n", "# Evaluamos qué tan bien lo hizo el modelo\n", "accuracy = accuracy_score(y_val, y_val_pred)\n", "precision_micro = precision_score(y_val, y_val_pred, average='micro')\n", "precision_macro = precision_score(y_val, y_val_pred, average='macro')\n", "recall_micro = recall_score(y_val, y_val_pred, average='micro')\n", "recall_macro = recall_score(y_val, y_val_pred, average='macro')\n", "f1_micro = f1_score(y_val, y_val_pred, average='micro')\n", "f1_macro = f1_score(y_val, y_val_pred, average='macro')\n", "\n", "print(\"Accuracy:\", accuracy)\n", "print(\"Precision (micro):\", precision_micro)\n", "print(\"Precision (macro):\", precision_macro)\n", "print(\"Recall (micro):\", recall_micro)\n", "print(\"Recall (macro):\", recall_macro)\n", "print(\"F1 (micro):\", f1_micro)\n", "print(\"F1 (macro):\", f1_macro)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También podemos usar la función **classification_report** de sklearn para obtener un resumen más rápido de las métricas." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 17\n", " 1 0.94 0.94 0.94 17\n", " 2 0.94 0.94 0.94 18\n", "\n", " accuracy 0.96 52\n", " macro avg 0.96 0.96 0.96 52\n", "weighted avg 0.96 0.96 0.96 52\n", "\n" ] } ], "source": [ "from sklearn.metrics import classification_report\n", "\n", "print(classification_report(y_val, y_val_pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Además de monitorear las métricas en validation y testing, también es importante **monitorear las métricas en training**. Si las métricas en training son muy buenas pero en validation o testing no, **podría ser que el modelo esté sobreajustando**." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 15\n", " 1 1.00 1.00 1.00 15\n", " 2 1.00 1.00 1.00 15\n", "\n", " accuracy 1.00 45\n", " macro avg 1.00 1.00 1.00 45\n", "weighted avg 1.00 1.00 1.00 45\n", "\n" ] } ], "source": [ "y_train_pred = clf.predict(X_train)\n", "\n", "print(classification_report(y_train, y_train_pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4. Probamos con algún otro parámetros y volvemos a entrenar el modelo." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 17\n", " 1 0.94 0.94 0.94 17\n", " 2 0.94 0.94 0.94 18\n", "\n", " accuracy 0.96 52\n", " macro avg 0.96 0.96 0.96 52\n", "weighted avg 0.96 0.96 0.96 52\n", "\n" ] } ], "source": [ "clf_2 = DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=0)\n", "\n", "clf_2.fit(X_train, y_train)\n", "\n", "y_val_pred_2 = clf_2.predict(X_val)\n", "\n", "print(classification_report(y_val, y_val_pred_2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Capítulo 3: Evaluación de un clasificador**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Después de estar seguros que los hiperparámetros de nuestro modelo están bien ajustados, es hora de la evaluación final de nuestro modelo en el conjunto de test.\n", "\n", "En general si luego de la evaluación final no estamos satisfechos con el rendimiento de nuestro modelo, lo mejor sería probar con otro modelo, o volver a la parte de los datos ver si se pueden obtener más datos o más características." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "1ELByhfHxrXi", "outputId": "cb7b5ea1-1f6a-4239-89a7-216eff931d6e" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Métricas para el primer clasificador 1:\n", " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 18\n", " 1 0.88 0.78 0.82 18\n", " 2 0.79 0.88 0.83 17\n", "\n", " accuracy 0.89 53\n", " macro avg 0.89 0.89 0.89 53\n", "weighted avg 0.89 0.89 0.89 53\n", "\n", "\n", "Métricas para el segundo clasificador 2:\n", " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 18\n", " 1 0.88 0.78 0.82 18\n", " 2 0.79 0.88 0.83 17\n", "\n", " accuracy 0.89 53\n", " macro avg 0.89 0.89 0.89 53\n", "weighted avg 0.89 0.89 0.89 53\n", "\n" ] } ], "source": [ "y_test_pred = clf.predict(X_test)\n", "y_test_pred_2 = clf_2.predict(X_test)\n", "\n", "print(\"Métricas para el primer clasificador 1:\")\n", "print(classification_report(y_test, y_test_pred))\n", "print()\n", "print(\"Métricas para el segundo clasificador 2:\")\n", "print(classification_report(y_test, y_test_pred_2))" ] }, { "cell_type": "markdown", "metadata": { "id": "Lj3vDXqEAKCv" }, "source": [ "## **Capitulo 4: Matriz de confusión**" ] }, { "cell_type": "markdown", "metadata": { "id": "w85ktDOjUwpz" }, "source": [ "La matriz de confusión muestra cuantos elementos de cada clase son asignados a cada una de las posibles opciones por el clasificador." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 501 }, "id": "2F1adK5YANn_", "outputId": "2bbfe56f-7e26-4ec9-8744-a2cebcfb3ada" }, "outputs": [ { "data": { "image/png": "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SJL++9//enX8L7/8oqCgIFWvXt2jvXz58ipZsqR++eUXj/ZKlSrl6qNUqVI6fvy4nxHnds8996hp06bq2bOnypUrp65du2ru3LmXTCrOx1mjRo1c+2rVqqU//vhDmZmZHu0XnkupUqUkyadzuf322xUREaEPP/xQs2fPVsOGDXN9lufl5ORo3Lhxuvbaa+V0OlWmTBldddVV2rZtm06ePOn1mFdffbVPCytfeeUVRUVFKS0tTRMmTFDZsmW9fi8A75BIwDZKlCih6Ohoff/99z6978LFjhcTHBycZ7thGH6PcX7+/rywsDClpqbqq6++0gMPPKBt27bpnnvu0a233prr2MtxOedyntPpVOfOnTVjxgzNnz//otUISXrxxReVmJio5s2b67333tOXX36ppUuXqnbt2l5XXqS/Ph9fbNmyRYcPH5Ykfffddz69F4B3SCRgK3fccYd2796ttWvX/uOxMTExysnJ0a5duzzaDx06pBMnTrivwDBDqVKlPK5wOO/CqockBQUF6ZZbbtHYsWP1448/avTo0Vq+fLlWrFiRZ9/n49yxY0eufT/99JPKlCmj8PDwyzuBi7jvvvu0ZcsW/fe//81zgep5H3/8sVq2bKl33nlHXbt2VevWrdWqVatcn4m3SZ03MjMz1aNHD8XGxurRRx/VmDFjtGHDBtP6B/AXEgnYyjPPPKPw8HD17NlThw4dyrV/9+7deu211yT9VZqXlOvKirFjx0qS2rVrZ1pc1apV08mTJ7Vt2zZ324EDBzR//nyP444dO5brvedvzHThJannVahQQfXr19eMGTM8fjB///33WrJkifs8rdCyZUuNGjVKkyZNUvny5S96XHBwcK5qx0cffaTff//do+18wpNX0uWrQYMGad++fZoxY4bGjh2rypUrKyEh4aKfIwD/cEMq2Eq1atU0Z84c3XPPPapVq5bHnS3XrFmjjz76SN27d5ckxcXFKSEhQW+++aZOnDih+Ph4ffvtt5oxY4Y6dux40UsL/dG1a1cNGjRInTp1Ut++fXX69GlNmTJF1113ncdiw5EjRyo1NVXt2rVTTEyMDh8+rNdff13XXHONbr755ov2//LLL6tt27Zq3LixHn74YZ05c0YTJ05UZGSkRowYYdp5XCgoKEjPP//8Px53xx13aOTIkerRo4eaNGmi7777TrNnz1bVqlU9jqtW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796tzZs3a+LEie4FjI8//rh27dqlgQMHaseOHZozZ46mT5/u0/lee+212rdvnz744APt3r1bEyZMyHPhaGhoqBISErR161Z9/fXX6tu3r7p06aLy5ctLkpKSkpScnKwJEyZo586d+u677zRt2jSNHTvWp3gA5B8SCcACxYoVU2pqqipVqqTOnTurVq1aevjhh3X27Fl3heLpp5/WAw88oISEBDVu3FgRERHq1KnTJfudMmWK7rrrLj355JOqWbOmHnnkEWVmZkqSrr76aiUlJWnw4MEqV66cevfuLUkaNWqUhg4dquTkZNWqVUu33XabPvvsM1WpUkXSX+sW5s2bp5SUFMXFxWnq1Kl68cUXfTrfO++8U/3791fv3r1Vv359rVmzRkOHDs11XPXq1dW5c2fdfvvtat26terVq+dxeWfPnj319ttva9q0aapbt67i4+M1ffp0d6wACh6HcbGVXQAAAP+AigQAAPAbiQQAAPAbiQQAAPAbiQQAAPAbiQQAAPAbiQQAAPAbiQQAAPAbiQQAAPAbiQQAAPAbiQQAAPAbiQQAAPAbiQQAAPDb/wMc2zo+YU8U7gAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.metrics import confusion_matrix\n", "\n", "cm = confusion_matrix(y_test, y_test_pred) # calcula valores de la matriz de confusión\n", "\n", "fig, ax = plt.subplots()\n", "\n", "ax = sns.heatmap(cm, annot=True, cmap=\"Blues\") # transforma la matriz en un heatmap para su visualización\n", "\n", "ax.set_title('Confusion Matrix \\n')\n", "ax.set_xlabel('Predicted label')\n", "ax.set_ylabel('True label')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "zYJlYIYzW1Ct" }, "source": [ "## **Capitulo 5: Cross Validation**" ] }, { "cell_type": "markdown", "metadata": { "id": "uGH-Xm4HW_tR" }, "source": [ "Para realizar una evaluación más robusta del desempeño del modelo, una opción es aplicar validación cruzada. \n", "\n", "A diferencia de pasos anteriores, en cross validation usamos **todos los datos**, ya que al iterar por distintos conjuntos de datos aleatorios, también simulamos ese comportamiento de datos que no ha visto antes.\n", "\n", "Esto es posible en sklearn mediante la función `cross_validate`:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "id": "lQY2HZfuW0rB" }, "outputs": [], "source": [ "from sklearn.model_selection import cross_validate\n", "\n", "scoring = ['precision_macro', 'recall_macro', 'accuracy', 'f1_macro']\n", "\n", "cv_results = cross_validate(clf, X, y, cv=10, scoring=scoring)" ] }, { "cell_type": "markdown", "metadata": { "id": "2VwmvYoOZHyZ" }, "source": [ "`cross_validate` recibe los siguientes parámetros:\n", "\n", "- estimator: clasificador a evaluar\n", "- X: datos de entrada\n", "- y: etiquetas\n", "- cv: número de particiones en que se divide el dataset\n", "- scoring: métricas a evaluar\n", "- return_train_score: si es `True` calcula las métricas también para el entrenamiento\n", "- return_estimator: si es `True` retorna los clasificadores entrenados en cada iteración\n", "\n", "y entrega:\n", "\n", "- fit_time: tiempo que demora el entrenamiento\n", "- score_time: tiempo que demora la evaluación\n", "- test_score: métricas de evaluación para cada partición\n", "- train_score: métricas de entrenamiento para cada partición (si `return_train_score` es `True`)\n", "\n", "La función entrega un diccionario con los resultados obtenidos para cada métrica, además del tiempo que demora el entrenamiento y la evaluación." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
fit_timescore_timetest_precision_macrotest_recall_macrotest_accuracytest_f1_macro
00.0010020.0029991.0000001.0000001.0000001.000000
10.0010070.0020030.9444440.9333330.9333330.932660
20.0000000.0029991.0000001.0000001.0000001.000000
30.0000000.0030070.9444440.9333330.9333330.932660
40.0010030.0019970.9444440.9333330.9333330.932660
50.0010000.0020000.8666670.8666670.8666670.866667
60.0010000.0020040.9444440.9333330.9333330.932660
70.0000000.0030001.0000001.0000001.0000001.000000
80.0000000.0030011.0000001.0000001.0000001.000000
90.0000000.0029991.0000001.0000001.0000001.000000
\n", "
" ], "text/plain": [ " fit_time score_time test_precision_macro test_recall_macro \\\n", "0 0.001002 0.002999 1.000000 1.000000 \n", "1 0.001007 0.002003 0.944444 0.933333 \n", "2 0.000000 0.002999 1.000000 1.000000 \n", "3 0.000000 0.003007 0.944444 0.933333 \n", "4 0.001003 0.001997 0.944444 0.933333 \n", "5 0.001000 0.002000 0.866667 0.866667 \n", "6 0.001000 0.002004 0.944444 0.933333 \n", "7 0.000000 0.003000 1.000000 1.000000 \n", "8 0.000000 0.003001 1.000000 1.000000 \n", "9 0.000000 0.002999 1.000000 1.000000 \n", "\n", " test_accuracy test_f1_macro \n", "0 1.000000 1.000000 \n", "1 0.933333 0.932660 \n", "2 1.000000 1.000000 \n", "3 0.933333 0.932660 \n", "4 0.933333 0.932660 \n", "5 0.866667 0.866667 \n", "6 0.933333 0.932660 \n", "7 1.000000 1.000000 \n", "8 1.000000 1.000000 \n", "9 1.000000 1.000000 " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame.from_dict(cv_results)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "3oKHCkefY9Sv", "outputId": "60166d0a-76e9-41fc-b87d-09c9d3f81504" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Promedio Precision: 0.9644444444444445\n", "Promedio Recall: 0.96\n", "Promedio F1-score: 0.9597306397306398\n", "Promedio Accucary: 0.96\n" ] } ], "source": [ "print('Promedio Precision:', np.mean(cv_results['test_precision_macro']))\n", "print('Promedio Recall: ', np.mean(cv_results['test_recall_macro']))\n", "print('Promedio F1-score: ', np.mean(cv_results['test_f1_macro']))\n", "print('Promedio Accucary: ', np.mean(cv_results['test_accuracy']))" ] }, { "cell_type": "markdown", "metadata": { "id": "hiDmY7aQiW9b" }, "source": [ "## **Capitulo 6: Otros clasificadores**" ] }, { "cell_type": "markdown", "metadata": { "id": "6KQP9CpJibAi" }, "source": [ "Sklearn incluye varios modelos de clasificación que pueden entrenar y evaluar de igual forma que el árbol de decisión" ] }, { "cell_type": "markdown", "metadata": { "id": "Dqx2y0mKjA1-" }, "source": [ "### **Naive Bayes**" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "aJdmvxPhjI0Z", "outputId": "80674734-5c78-4867-b341-da0b1f90883f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 18\n", " 1 0.94 0.94 0.94 18\n", " 2 0.94 0.94 0.94 17\n", "\n", " accuracy 0.96 53\n", " macro avg 0.96 0.96 0.96 53\n", "weighted avg 0.96 0.96 0.96 53\n", "\n" ] } ], "source": [ "nb_clf = GaussianNB()\n", "\n", "nb_clf.fit(X_train, y_train)\n", "\n", "y_pred = nb_clf.predict(X_test)\n", "\n", "nb_acc = accuracy_score(y_test, y_pred)\n", "print(classification_report(y_test, y_pred))" ] }, { "cell_type": "markdown", "metadata": { "id": "7-dho-y6lcOk" }, "source": [ "### **Random Forest**" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "NCbXbOMxlb0R", "outputId": "7e5793da-3f66-42c4-f523-848d84798453" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 18\n", " 1 0.89 0.94 0.92 18\n", " 2 0.94 0.88 0.91 17\n", "\n", " accuracy 0.94 53\n", " macro avg 0.94 0.94 0.94 53\n", "weighted avg 0.94 0.94 0.94 53\n", "\n" ] } ], "source": [ "from sklearn.ensemble import RandomForestClassifier\n", "\n", "rd_clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)\n", "\n", "rd_clf.fit(X_train, y_train)\n", "\n", "y_pred = rd_clf.predict(X_test)\n", "\n", "rd_acc = accuracy_score(y_test, y_pred)\n", "print(classification_report(y_test, y_pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Ahora recordemos que para los clasificadores basados en distancia, es importante **escalar los datos**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **K-Nearest Neighbors**" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "YVZjoNeRkXxf", "outputId": "4e821922-2185-4464-fabf-12239bf37869" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 18\n", " 1 0.94 0.94 0.94 18\n", " 2 0.94 0.94 0.94 17\n", "\n", " accuracy 0.96 53\n", " macro avg 0.96 0.96 0.96 53\n", "weighted avg 0.96 0.96 0.96 53\n", "\n" ] } ], "source": [ "kn_clf = KNeighborsClassifier(n_neighbors=5)\n", "\n", "# Usamos los datos escalados con el StandardScaler\n", "kn_clf.fit(X_train_std_scaled, y_train)\n", "\n", "y_pred = kn_clf.predict(X_test_std_scaled)\n", "\n", "kn_acc = accuracy_score(y_test, y_pred)\n", "print(classification_report(y_test, y_pred))" ] }, { "cell_type": "markdown", "metadata": { "id": "HycRF4kWkvUg" }, "source": [ "### **Support Vector Machine**" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "bpqLn_6ik7Tx", "outputId": "7f0249e8-2624-4a79-ee89-b74342ae0a19" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 18\n", " 1 0.94 0.94 0.94 18\n", " 2 0.94 0.94 0.94 17\n", "\n", " accuracy 0.96 53\n", " macro avg 0.96 0.96 0.96 53\n", "weighted avg 0.96 0.96 0.96 53\n", "\n" ] } ], "source": [ "sv_clf = SVC(C=1.0, kernel='rbf')\n", "\n", "sv_clf.fit(X_train_std_scaled, y_train)\n", "\n", "y_pred = sv_clf.predict(X_test_std_scaled)\n", "\n", "sv_acc = accuracy_score(y_test, y_pred)\n", "print(classification_report(y_test, y_pred))" ] }, { "cell_type": "markdown", "metadata": { "id": "mG2LFPXZo4Mm" }, "source": [ "### **Dummy**" ] }, { "cell_type": "markdown", "metadata": { "id": "_o9jhwLxtFxy" }, "source": [ "Sklearn también incluye la clase `DummyClassifier`, esta corresponde a un clasificador que realiza una clasificación trivial y se puede usar como punto de comparación para el resto de clasificadores. Si un modelo obtiene valores similares al los de `DummyClassifier`, se podría decir no ha logrado aprender de los datos." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "BM3ktSULo3ED", "outputId": "6c0d8142-2840-44de-ef3c-2a797c1adbd6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 0.27 0.39 0.32 18\n", " 1 0.07 0.06 0.06 18\n", " 2 0.23 0.18 0.20 17\n", "\n", " accuracy 0.21 53\n", " macro avg 0.19 0.21 0.19 53\n", "weighted avg 0.19 0.21 0.19 53\n", "\n" ] } ], "source": [ "dm_clf = DummyClassifier(strategy='stratified')\n", "\n", "dm_clf.fit(X_train, y_train)\n", "\n", "y_pred = dm_clf.predict(X_test)\n", "\n", "dm_acc = accuracy_score(y_test, y_pred)\n", "print(classification_report(y_test, y_pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Capitulo 7: Análisis de resultados**" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 450 }, "id": "QhcFR1pPpGtL", "outputId": "1f9bc3b1-a3d0-4dba-d98e-02abd0c662a8" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAngAAAGuCAYAAAADGHuVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5NElEQVR4nO3df3zN9f//8fvZmW1szK/MMFbKb+a3luTXahLlrSS8ze9+zlst0goL76gUKt55v8XoWyLyo0+ktMy78Ebk1zuRX1llQ8oyP8b2/P7h7eTY2eyMYc9u18vldbnsvM7j9Xo9X3ud1/Pcz/N1fjiMMUYAAACwhs+1bgAAAACuLAIeAACAZQh4AAAAliHgAQAAWIaABwAAYBkCHgAAgGUIeAAAAJYh4AEAAFiGgAcAAGAZ32vdgPzIzs7Wzz//rJIlS8rhcFzr5gAAAFwTxhj9/vvvqlSpknx88hinM15atWqV6dSpkwkNDTWSzKJFiy65zMqVK02jRo2Mn5+fqV69uklMTPRqmykpKUYSExMTExMTExOTZFJSUvLMTl6P4GVkZCgiIkL9+/dX165dL1m/b98+3XPPPXr00Uf13nvvKSkpSQMHDlRoaKiio6Pztc2SJUtKklJSUlSqVClvmwwAAGCF9PR0hYWFubJRbhzGGFPQjTgcDi1atEhdunTJtWb48OFaunSptm/f7pr30EMP6bffftPy5cvztZ309HQFBwfr2LFjBDwAAPCnld9MVOgfsli7dq2ioqLc5kVHR2vt2rW5LnP69Gmlp6e7TQAAAMifQg94qampCgkJcZsXEhKi9PR0nTx50uMy48ePV3BwsGsKCwsr7GYCAABY47r8mpT4+HgdO3bMNaWkpFzrJgEAABQZhf41KRUrVlRaWprbvLS0NJUqVUrFixf3uIy/v7/8/f292k52drYyMzML3E5cWcWKFZPT6bzWzQAA4E+p0ANeZGSkli1b5jZvxYoVioyMvGLbyMzM1L59+5SdnX3F1onLV7p0aVWsWJHvLgQA4CrzOuAdP35cu3fvdt3et2+fNm/erLJly6pq1aqKj4/XTz/9pHfeeUeS9Oijj2rKlCl65pln1L9/f33xxRf64IMPtHTp0iuyA8YYHTx4UE6nU2FhYXl/6R+uCmOMTpw4oUOHDkmSQkNDr3GLAAD4c/E64H399ddq27at63ZcXJwkqU+fPpo1a5YOHjyoAwcOuO6/8cYbtXTpUj311FN6/fXXVaVKFb399tv5/g68Szl79qxOnDihSpUqqUSJEldknbh85y+/Hzp0SBUqVOByLQAAV9FlfQ/e1ZLXd76cOnVK+/btU3h4eK7v6cO1cfLkSe3fv1833nijAgICrnVzAAAo8q6b78G7Wnif1/WHYwIAwLVhTcADAADAOQS860ybNm305JNPXutmAACAIoyABwAAYBkCHgAAgGUIeNdQRkaGYmJiFBQUpNDQUL322mtu9zscDi1evNhtXunSpTVr1ixJ0v79++VwOPTBBx+oVatWKl68uJo1a6Zdu3Zpw4YNatq0qYKCgnT33Xfr8OHDrnX07dtXXbp00bhx4xQSEqLSpUtrzJgxOnv2rIYNG6ayZcuqSpUqSkxMdC3Trl07xcbGurXl8OHD8vPzU1JS0pX9xwAAgMtib8DLyMh9OnUq/7UnT+avtgCGDRumVatWacmSJfrss8+UnJysTZs2eb2ehIQEjRgxQps2bZKvr6969uypZ555Rq+//rq+/PJL7d69W6NGjXJb5osvvtDPP/+sf//735o4caISEhLUqVMnlSlTRuvWrdOjjz6qRx55RD/++KMkaeDAgZozZ45Onz7tWse7776rypUrq127dgXafwAAUDjsDXhBQblP99/vXluhQu61d9/tXhse7rnOS8ePH9eMGTP06quvqn379qpfv75mz56ts2fPer2uoUOHKjo6WrVr19aQIUO0ceNGjRw5Ui1btlSjRo00YMAArVy50m2ZsmXL6o033lDNmjXVv39/1axZUydOnNBzzz2nW265RfHx8fLz89NXX30lSerataskacmSJa51zJo1S3379uXrUAAAuM4U+m/RwrM9e/YoMzNTLVq0cM0rW7asatas6fW6GjRo4Po7JCREklS/fn23eed/Nuy8unXruv2sW0hIiOrVq+e67XQ6Va5cOddyAQEB6t27t2bOnKkHH3xQmzZt0vbt2/XRRx953d7CEP7slfnpO3i2/6V7CmW9HLfCxXErmgrruOHPxd6Ad/x47vdd/LNZF4UfNxf/tu3+/QVukrccDocu/qGRM2fO5KgrVqyY2zKe5mVnZ+e6zPkaT/MuXG7gwIFq2LChfvzxRyUmJqpdu3aqVq2al3sFAAAKm70BLzDw2tfmoXr16ipWrJjWrVun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7f1joaGhOnTokNf7fV7Tpk3dbm/ZskWzZs1y2//o6GhlZ2dr37592rZtm7KyslSjRg23mlWrVrmNghWml19+WbNnz3b7v5yXlZWlsWPHqn79+ipbtqyCgoL06aef5hiRuVCvXr00Z84cSeceD++//7569eol6dwr1T179mjAgAFu+/v3v//9kvvbtm1bbd68WZs3b9b69esVHR2tu+++Wz/88IOrZt68eWrZsqUqVqyooKAgjRgxwq2tXbp0kdPp1KJFiySdG4lo27at643iW7Zs0cqVK93adn40Y8+ePYqIiFD79u1Vv359devWTdOnT7/s9zAWlgYNGig8PFwJCQk6fvy4JKlu3bqu/br77rtzLDNgwACVK1dOL7/8co778nM+Hz9+XEOHDlXt2rVVunRpBQUFaceOHTkeL96eJ3feeaeqVaumm266Sb1799Z7773nGk2CZ/fff79+/vlnffTRR+rQoYOSk5PVuHFj14dmevTooaysLH3wwQeSzp07Pj4+Oa5ynNe/f38lJiZq1apVysjIUMeOHa/WrhSa833KunXr1KdPH/Xr10/333+/6/789n8NGjRwu33h88j556JKlSq57o+MjHSr37FjhyIiIhQYGOia17JlS2VnZ2vnzp2ueXXr1nX7idOQkBC3q1hOp1PlypW75HPYhX3p5s2b9cYbb7jaERkZ6fZBu5YtW+r48eNuo4JNmjRxW19R7ze9/i3aP6sdO3a43qx5/PhxhYaGKjk5OUdd6dKlJUnFixfP97rDwsK0c+dOff7551qxYoUef/xxTZgwQatWrXK9IdhbFy/ncDgu65PAF56g0rn/wSOPPKK//e1vOWqrVq2qrVu3yul0auPGjXI6nW73BwUFFbgd3rjjjjsUHR2t+Ph49e3b1+2+CRMm6PXXX9fkyZNVv359BQYG6sknn8zzjbU9evTQ8OHDtWnTJp08eVIpKSmuJ43zQWP69Olq0aKF23IX7//FAgMDdfPNN7tuv/322woODtb06dP197//XWvXrlWvXr00evRoRUdHKzg4WHPnznX71Kifn59iYmKUmJiorl27as6cOXr99ddd9x8/flydO3f2GHBCQ0PldDq1YsUKrVmzRp999pnefPNNPf/881q3bl2B36RcWCpXrqwFCxaobdu26tChgz755BMtW7ZMZ86ckeT53PP19dWLL76ovn375rg8lJ/zeejQoVqxYoVeffVV3XzzzSpevLgeeOCBHI8Xb88TPz8/bdq0ScnJyfrss880atQovfDCC9qwYYNr28gpICBAd955p+68806NHDlSAwcOVEJCgvr27atSpUrpgQceUGJioiu8Pfjgg7n2O7169dIzzzyjF154Qb1795avb9F/WrywT5k5c6YiIiI0Y8YMDRgwQFL++78r/TySG0/bKci2L+5LveXp/C3K/WbRfyRfBV988YW2bdump556SpLUuHFjpaamytfXN9eP0jdo0EBJSUnq169fvrZRvHhxde7cWZ07d9YTTzyhWrVqadu2bWrcuLFbXe3atZWSkqKUlBTXKN63336r3377TXXq1Cn4TnqpcePG+vbbb3M9mRo1aqSsrCwdOnRIrVq1umrtuthLL72khg0bqmbNmm7zV69erfvuu09//etfJZ17P8muXbvy/B9WqVJFrVu31nvvvaeTJ0/qzjvvVIUKFSSde8VZqVIl7d271zWqV1AOh0M+Pj46efKkJGnNmjWqVq2ann/+eVfNhaN75w0cOFD16tXTP/7xD509e1Zdu3Z13de4cWN9+OGHCg8Pz/UJzOFwqGXLlmrZsqVGjRqlatWqadGiRYqLi7us/SkM1apV06pVq1whb/ny5Zf8xHO3bt00YcIEjR492m1+fs7n1atXq2/fvq73+x0/flz79++/ZDsvdZ5I58JnVFSUoqKilJCQoNKlS+uLL75wvb/p4q94QU516tRx++61AQMGqE2bNvr444+1Zs0aTZgwIddly5Ytq3vvvVcffPCBpk2bdhVae3X5+PjoueeeU1xcnHr27KnixYsXqP+72PnnooMHDyo0NFSS9J///CdHzaxZs5SRkeEKT6tXr5aPj0+OPrkw1a5dWx9++KHblbjVq1erZMmSqlKlSq7LXW6/ea3PXy7RXuT06dNKTU3VTz/9pE2bNmncuHG677771KlTJ8XExEiSoqKiFBkZqS5duuizzz7T/v37tWbNGj3//PP6+uuvJUkJCQl6//33lZCQoB07dmjbtm0eXwVI5y6nzZgxQ9u3b9fevXv17rvvqnjx4qpWrVqO2qioKNWvX1+9evXSpk2btH79esXExKh169Y5Lg8VpuHDh2vNmjWKjY3V5s2b9f3332vJkiWu0ZEaNWqoV69eiomJ0cKFC7Vv3z6tX79e48eP19KlS69aO8//r84P1Z93yy23uF557dixQ4888ojS0tIuub5evXpp7ty5mj9/fo4gN3r0aI0fP15vvPGGdu3apW3btikxMVETJ07Mc53nH3OpqanasWOHBg8e7HrleL6tBw4c0Ny5c7Vnzx698cYbrkuxF6pdu7ZuvfVWDR8+XD169HAbyXriiSd09OhR9ejRQxs2bNCePXv06aefql+/fsrKytK6des0btw4ff311zpw4IAWLlyow4cPe/yesOtFWFiYkpOTdejQIUVHRys9Pf2Sy7z00kuaOXOmMjIyXPPycz7fcsstWrhwoTZv3qwtW7aoZ8+e+RrJuNR58vHHH+uNN97Q5s2b9cMPP+idd95Rdna268kvPDxc69at0/79+3XkyJFCGT0pSn755Re1a9dO7777rrZu3ap9+/Zp/vz5euWVV3Tfffe56u644w7dfPPNiomJUa1atS755vZZs2bpyJEjOT6EYYtu3brJ6XRq6tSpkgre/10oKipKNWrUUJ8+fbRlyxZ9+eWXbi9CpXP9ZUBAgPr06aPt27dr5cqVGjx4sHr37n1VP8jy+OOPKyUlRYMHD9Z3332nJUuWKCEhQXFxcW6Xhi92uf1meHi4tm7dqp07d+rIkSOuqwxXCwHvIsuXL1doaKjCw8PVoUMHrVy5Um+88YaWLFniutTmcDi0bNky3XHHHerXr59q1Kihhx56SD/88IPrQdumTRvNnz9fH330kRo2bKh27drl+gnN0qVLa/r06WrZsqUaNGigzz//XP/3f//n9inK8xwOh5YsWaIyZcrojjvuUFRUlG666SbNmzev8P4pHjRo0ECrVq3Srl271KpVKzVq1EijRo1yez9GYmKiYmJi9PTTT6tmzZrq0qWLNmzYcNW/Y2rMmDE5nhhHjBihxo0bKzo6Wm3atFHFihXz9YWUDzzwgH755RedOHEiR/3AgQP19ttvKzExUfXr11fr1q01a9asSw7Vn3/MhYaGqkWLFq5Pm7Vp00aSdO+99+qpp55SbGysGjZsqDVr1mjkyJEe1zVgwABlZmaqf//+bvMrVaqk1atXKysrS3fddZfq16+vJ598UqVLl5aPj49KlSqlf//73+rYsaNq1KihESNG6LXXXvP4frbrSZUqVZScnKwjR47kK+S1a9dO7dq1c3uPa37O54kTJ6pMmTK67bbb1LlzZ0VHR+cYXffkUudJ6dKltXDhQrVr1061a9fWtGnT9P7776tu3bqSzl0adjqdqlOnjm644YY83yP6ZxAUFKQWLVpo0qRJuuOOO1SvXj2NHDlSgwYN0pQpU1x1DodD/fv316+//prjXPCkePHiHvtbW/j6+io2NlavvPKKMjIyCtz/XcjHx0eLFi3SyZMn1bx5cw0cOFAvvviiW02JEiX06aef6ujRo2rWrJkeeOABtW/f3u1YXQ2VK1fWsmXLtH79ekVEROjRRx/VgAEDNGLEiDyXu9x+c9CgQapZs6aaNm2qG264QatXr74au+viMOY6/R4EAF4bO3as5s+fzy9hAMCfHCN4gAWOHz+u7du3a8qUKRo8ePC1bg4A4Boj4AEWiI2NVZMmTdSmTZt8XZICANiNS7QAAACWYQQPAADAMgQ8AAAAyxDwAAAALEPAAwAAsAwBDwAAwDIEPAAAAMsQ8AAAACxDwAMAALAMAQ8AAMAy/x+47ozIeZaPmQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dt_acc = accuracy_score(y_test, clf.predict(X_test))\n", "\n", "fig, ax = plt.subplots(figsize=(7.5, 5))\n", "\n", "accuracies = [dt_acc, nb_acc, kn_acc, sv_acc, rd_acc]\n", "classifires = ['Decision Tree', 'Naive Bayes', 'K-Nearest', 'SVM', 'Random Forest']\n", "\n", "ax.bar(classifires, accuracies)\n", "ax.axhline(dm_acc, color='r', linestyle='--', label='dummy')\n", "\n", "ax.legend()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Epílogo: Feature Extraction**\n", "\n", "##### [Documentación de sklearn](https://scikit-learn.org/stable/modules/feature_extraction.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Dict to Vector**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Algo común es tener datos en una lista con diccionarios, y querer convertirlos a una matriz para poder entrenar un modelo. Para esto, sklearn tiene la clase **DictVectorizer**." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "people_data = [\n", " {'name': 'John', 'age': 25, 'income': 50000},\n", " {'name': 'Linda', 'income': 80000},\n", " {'name': 'Peter', 'age': 45, 'income': 70000},\n", " {'name': 'Anna', 'age': 35},\n", "]" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature names: ['age' 'income' 'name=Anna' 'name=John' 'name=Linda' 'name=Peter']\n", "Data:\n", " [[2.5e+01 5.0e+04 0.0e+00 1.0e+00 0.0e+00 0.0e+00]\n", " [0.0e+00 8.0e+04 0.0e+00 0.0e+00 1.0e+00 0.0e+00]\n", " [4.5e+01 7.0e+04 0.0e+00 0.0e+00 0.0e+00 1.0e+00]\n", " [3.5e+01 0.0e+00 1.0e+00 0.0e+00 0.0e+00 0.0e+00]]\n" ] } ], "source": [ "from sklearn.feature_extraction import DictVectorizer\n", "\n", "dv = DictVectorizer()\n", "\n", "people_data_encoded = dv.fit_transform(people_data)\n", "print(\"Feature names:\", dv.get_feature_names_out())\n", "print(\"Data:\\n\", people_data_encoded.toarray())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**IMPORTANTE: Muchas veces después del fit_trasnform se usa el método **toarray()** ya que este es más fácil de manejar.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Text to Vector**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Otro tipo de dato común es el texto. Para convertir texto a vectores veremos el **CountVectorizer** que es uno de los vectorizadores más simples de entender.\n", "\n", "**CountVectorizer** convierte un conjunto de textos en una matriz donde cada fila es un texto y cada columna es una palabra. En la fila i, columna j, se encuentra el número de veces que aparece la palabra j en el texto i.\n", "\n", "**Ej**: Si tenemos los textos \"hola mundo\" y \"mundo mundo\", la matriz resultante sería:\n", "\n", "```\n", "[[1, 1],\n", " [0, 2]]\n", "```\n", "\n", "Donde la primera columna corresponde a la palabra \"hola\" y la segunda a la palabra \"mundo\"." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "example_text = [\n", " 'The flowers are beautiful this time of year.',\n", " 'The weather is nice and sunny.',\n", " 'The flowers are blooming.',\n", " 'The sun is shining and the weather is sweet.',\n", "]" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature names: ['and' 'are' 'beautiful' 'blooming' 'flowers' 'is' 'nice' 'of' 'shining'\n", " 'sun' 'sunny' 'sweet' 'the' 'this' 'time' 'weather' 'year']\n", "Data:\n", " [[0 1 1 0 1 0 0 1 0 0 0 0 1 1 1 0 1]\n", " [1 0 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0]\n", " [0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0]\n", " [1 0 0 0 0 2 0 0 1 1 0 1 2 0 0 1 0]]\n" ] } ], "source": [ "from sklearn.feature_extraction.text import CountVectorizer\n", "\n", "count_vectorizer = CountVectorizer()\n", "converted_text = count_vectorizer.fit_transform(example_text)\n", "print(\"Feature names:\", count_vectorizer.get_feature_names_out())\n", "print(\"Data:\\n\", converted_text.toarray())" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
andarebeautifulbloomingflowersisniceofshiningsunsunnysweetthethistimeweatheryear
001101001000011101
110000110001010010
201011000000010000
310000200110120010
\n", "
" ], "text/plain": [ " and are beautiful blooming flowers is nice of shining sun sunny \\\n", "0 0 1 1 0 1 0 0 1 0 0 0 \n", "1 1 0 0 0 0 1 1 0 0 0 1 \n", "2 0 1 0 1 1 0 0 0 0 0 0 \n", "3 1 0 0 0 0 2 0 0 1 1 0 \n", "\n", " sweet the this time weather year \n", "0 0 1 1 1 0 1 \n", "1 0 1 0 0 1 0 \n", "2 0 1 0 0 0 0 \n", "3 1 2 0 0 1 0 " ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(converted_text.toarray(), columns=count_vectorizer.get_feature_names_out())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Spinn Off: Pipelines, la profecía**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Los pipelines son una forma de encadenar varios procesos de preprocesamiento y un modelo en un solo objeto. Esto es útil para que no se nos olvide preprocesar los datos de test de la misma forma que los de entrenamiento.\n", "\n", "https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Es importante notar que ahora que tenemos un pipeline, **no necesitamos escalar los datos manualmente** antes de entrenar, o antes de hacer predicciones, ya que el pipeline se encarga de hacerlo al llamar a los métodos **fit** y **predict**." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 15\n", " 1 0.94 1.00 0.97 15\n", " 2 1.00 0.93 0.97 15\n", "\n", " accuracy 0.98 45\n", " macro avg 0.98 0.98 0.98 45\n", "weighted avg 0.98 0.98 0.98 45\n", "\n" ] } ], "source": [ "from sklearn.linear_model import LogisticRegression\n", "from sklearn.pipeline import Pipeline\n", "\n", "X = iris.data\n", "y = iris.target\n", "\n", "# Usaremos solo train y test para simplificar el ejemplo\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)\n", "\n", "# Creamos un pipeline que primero escala los datos y luego entrena un clasificador KNN\n", "clf_pipeline = Pipeline([\n", " ('scaler', StandardScaler()),\n", " ('classifier', LogisticRegression())\n", "])\n", "\n", "\n", "# Notemos que al usar el pipeline, no necesitamos escalar los datos manualmente\n", "# ya que el pipeline se encarga de hacerlo al correr el método fit, predict, etc.\n", "clf_pipeline.fit(X_train, y_train)\n", "\n", "y_pred = clf_pipeline.predict(X_test)\n", "\n", "print(classification_report(y_test, y_pred))" ] } ], "metadata": { "colab": { "provenance": [] }, "hide_input": false, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.1" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 0 }