{ "cells": [ { "cell_type": "markdown", "id": "6df6d314-21c7-42fe-b9d1-1fa1e61948a5", "metadata": {}, "source": [ "
\n", " \n", "
\n", "\n", "# Aprendizaje Profundo" ] }, { "cell_type": "markdown", "id": "3e57f3e1-d4f2-4329-8359-0a0370026c28", "metadata": {}, "source": [ "#
Modelaje Estadístico
" ] }, { "cell_type": "markdown", "id": "5462e41e-fbb8-480f-80b4-17e5d8ee0c3b", "metadata": {}, "source": [ "
\n", "
\n", "\n", "
\n", "
\n", "

Joint Log Likelihood per N, for Beta distribution Maxima at alpha=beta=2

\n", "
\n", "
\n", "\n", "Fuente:Dr. J. Rodal, CC BY-SA 3.0, via Wikimedia Commons" ] }, { "cell_type": "markdown", "id": "ab6bb05b-0af6-4a57-a00b-fbd8eefc3a56", "metadata": {}, "source": [ "## Profesores" ] }, { "cell_type": "markdown", "id": "423b51e8-5c00-4f85-a710-47a97a2d1d1a", "metadata": {}, "source": [ "1. Alvaro Montenegro, PhD, ammontenegrod@unal.edu.co\n", "1. Camilo José Torres Jiménez, Msc, cjtorresj@unal.edu.co\n", "1. Daniel Montenegro, Msc, dextronomo@gmail.com " ] }, { "cell_type": "markdown", "id": "a23c1084-c935-4e58-9d5c-e499f97d5559", "metadata": {}, "source": [ "## Asesora Medios y Marketing digital" ] }, { "cell_type": "markdown", "id": "722b8e5d-defd-4b10-af11-697a779557f7", "metadata": {}, "source": [ "4. Maria del Pilar Montenegro, pmontenegro88@gmail.com\n", "5. Jessica López Mejía, jelopezme@unal.edu.co" ] }, { "cell_type": "markdown", "id": "241f8927-11cd-4140-bbcb-e184bc0fe931", "metadata": {}, "source": [ "## Jefe Jurídica" ] }, { "cell_type": "markdown", "id": "d45af8d4-7d9c-45a9-b263-0ce2451031ac", "metadata": {}, "source": [ "6. Paula Andrea Guzmán, guzmancruz.paula@gmail.com" ] }, { "cell_type": "markdown", "id": "3e662739-8c32-4580-b930-1732ec4ad338", "metadata": {}, "source": [ "## Coordinador Jurídico" ] }, { "cell_type": "markdown", "id": "ff23b9d3-95c8-4afa-93a1-e3ec08911e8d", "metadata": {}, "source": [ "7. David Fuentes, fuentesd065@gmail.com" ] }, { "cell_type": "markdown", "id": "f777903f-4693-4ee3-98fe-780dd3a0509c", "metadata": {}, "source": [ "## Desarrolladores Principales" ] }, { "cell_type": "markdown", "id": "01f09d44-ffad-4c4a-93e0-5012667dea6f", "metadata": {}, "source": [ "8. Dairo Moreno, damoralesj@unal.edu.co\n", "9. Joan Castro, jocastroc@unal.edu.co\n", "10. Bryan Riveros, briveros@unal.edu.co\n", "11. Rosmer Vargas, rovargasc@unal.edu.co\n", "12. Venus Puertas, vpuertasg@unal.edu.co" ] }, { "cell_type": "markdown", "id": "68b3a752-9c43-4d30-8897-97f6a2ee8e06", "metadata": {}, "source": [ "## Expertos en Bases de Datos" ] }, { "cell_type": "markdown", "id": "e0a0fd29-5ad2-474d-82d4-d7186ab35171", "metadata": { "tags": [] }, "source": [ "13. Giovvani Barrera, udgiovanni@gmail.com\n", "14. Camilo Chitivo, cchitivo@unal.edu.co" ] }, { "cell_type": "markdown", "id": "42d4e4e4-4965-415e-872d-8b648c5ff8f2", "metadata": {}, "source": [ "## Contenido" ] }, { "cell_type": "markdown", "id": "480caa43-4a09-43c6-89fa-99cbfc94c66c", "metadata": {}, "source": [ "* [Introducción](#Introducción)\n", "* [Etiquetado de los datos](#Etiquetado-de-los-datos)\n", "* [Modelo de probabilidad](#Modelo-de-probabilidad)\n", "* [Log verosimilitud y función de pérdida](#Log-verosimilitud-y-función-de-pérdida)\n", "* [Entrenamiento del modelo (la red neuronal](#Entrenamiento-del-modelo-(la-red-neuronal)\n" ] }, { "cell_type": "markdown", "id": "14bfef09-91fb-4030-9f82-7e4be9ea15c1", "metadata": {}, "source": [ "## Introducción" ] }, { "cell_type": "markdown", "id": "9f140436-7680-4754-85cd-a7de2024f9f9", "metadata": {}, "source": [ "El concepto de log-verosimilitud es una medida utilizada en estadística para evaluar cuánto se ajustan los datos observados a un modelo estadístico específico. La verosimilitud es una función que mide la probabilidad de observar los datos dados los parámetros de un modelo, y la log-verosimilitud es simplemente el logaritmo de esta función.\n", "\n", "En otras palabras, la log-verosimilitud es una medida de la calidad de ajuste de un modelo a los datos observados, y se utiliza para comparar diferentes modelos y seleccionar el mejor. La log-verosimilitud se utiliza a menudo en técnicas estadísticas como la regresión y el análisis de varianza.\n", "\n", "La log-verosimilitud se define como la suma de los logaritmos de las densidades de probabilidad de los datos observados, dadas las estimaciones de los parámetros del modelo. En otras palabras, si tenemos un conjunto de datos y un modelo estadístico que describe cómo se generaron esos datos, la log-verosimilitud es la suma de los logaritmos de las probabilidades de obtener cada punto de datos dado el modelo y los parámetros elegidos.\n", "\n", "La maximización de la log-verosimilitud es un enfoque común para estimar los parámetros de un modelo estadístico. Esto se hace encontrando los valores de los parámetros que maximizan la función de verosimilitud o, lo que es equivalente, la log-verosimilitud. En otras palabras, encontramos los valores de los parámetros que hacen que los datos observados sean más probables bajo el modelo.\n", "\n", "En resumen, la log-verosimilitud es una medida importante en estadística que se utiliza para evaluar la calidad del ajuste de un modelo a los datos observados. La maximización de la log-verosimilitud se utiliza a menudo como un método para estimar los parámetros de un modelo, y se utiliza en una variedad de aplicaciones en ciencias sociales, biología, física, economía y muchas otras áreas." ] }, { "cell_type": "code", "execution_count": null, "id": "538ef0c3-ad14-484c-ab69-10faeff61cc8", "metadata": {}, "outputs": [], "source": [ "# !conda install -c conda-forge tensorflow\n", "# !conda install -c conda-forge matplotlib\n", "# !conda install -c anaconda numpy" ] }, { "cell_type": "markdown", "id": "879bdc59-d7cd-4368-ad04-5f342ecb999a", "metadata": { "tags": [] }, "source": [ "### Generamos un conjunto de datos" ] }, { "cell_type": "markdown", "id": "90d144ee-ddc7-4ffb-a6ba-b900b0093ee0", "metadata": {}, "source": [ "En este momento vamos a generar un conjunto de datos que consiste en dos clases de puntos, etiquetados respectivamente como 0 y 1. El propósito es entrenar un clasificador que pueda clasificar puntos no vistos antes por el modelos en cada una de las clases. \n", "\n", "Generamos la muestra de datos a partir de la distribución normal estándar. En seguida separamos en dos clase, desplazando la mitad de los datos. El desplazamiento es de tamaño 2.5. \n", "\n", "El siguiente código, genera 500 datos " ] }, { "cell_type": "code", "execution_count": 10, "id": "b6a7bfe0-b55a-4f61-8c17-1e124aa76614", "metadata": {}, "outputs": [ { "data": { "image/png": "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GvdToDn8qbvrSaJm4zspVvenP/0J48ePx4ABA9CrVy/813/9F5qampLv33bbbbjhhhtw/vnn4/7778fWrVuT7/3gBz/AnDlzMG7cOMyaNQv//Oc/LfenH6OiKFRkjyBcQh8IXFendSfF42w9VdA0NABjx7JYmiLdo+306UwMEUQYIVHjBj0lM7Bk15PkxBNPRCQSwYcffmjrc2vWrMHUqVNx0UUX4S9/+Qvef/993H333Thy5EhyndmzZ6OxsRHf+ta3sGzZMpx66qlYtGgRAOCGG27Atm3bMH36dGzcuBGjR4/Gr371K+G+1LYW+sajLS0tadYbgiCcowYCq8KGz2x69VWgulrrWkokWCxNZycTNsOGATU12rRvgggbJGrcoN+5LMsJRpaHCFAaY+u5SJ8+ffCNb3wD//M//4Mvvvgi7f2DBw8KP7dq1SoMGjQId999N0aPHo0TTzxR6Ao66aST8MMf/hCvvfYapkyZgmeeeSb5XiwWw/e//33U19fjRz/6EebNmyfc1+DBgzFgwAC8/vrryWVHjhzBihUrMHbsWJtHTBCEGaJA4PnzmWBZsgRYsYKt09ysDQpetYq93npLa+3hA4/DVpE4bOMl3IFEjRsUFLK0bQDpwqb771GPuBokrPL444+jq6sLZ511Fl566SVs2bIFH374IR577DGcc845ws+ccMIJaGpqwnPPPYetW7fiscceS1phAODw4cOYMWMGGhoasHPnTqxatQrr16/HKaecAgCYOXMmli5diu3bt+O9997DsmXLku/piUQimDlzJn7+859j0aJF2LRpE6677jqUlpbi6quvdv18EEQ+k0ikBwKr7qSKilQ2U1kZCxxWLTdnncXe5609/fuz9YBUIPKECekWnCDWtQnbeAkXUfKI1tZWBYDS2tqa9t7hw4eVDz74QDl8+LDzHTS9pCiLooryR6Rei2JsuYfs3r1bufnmm5VBgwYpxcXFysCBA5WLL75YWb58eXIdAMqiRYuSf99xxx1K3759lV69eilXXXWV8vDDDysVFRWKoihKR0eHMnXqVCUWiynFxcVKdXW1MmPGjOS5mTFjhjJkyBClpKRE6devnzJ9+nTls88+Mxzf0aNHlVmzZikDBgxQSkpKlPPOO0/ZuHGj4fquXAuCyDOamhSltlZRAPZz1Srt301N2vUPHlSUREK8rUSCvc//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EARBEEROQKKGIAiCIIicgERNjlFSUoJZs2ahpKTE76F4Tj4dK5Bfx5tPxwrk1/Hm07EC+XW8QTjWvAoUJgiCIAgidyFLDUEQBEEQOQGJGoIgCIIgcgISNQRBEARB5AQkagiCIAiCyAlI1OQoO3bswHe/+10MHjwYPXv2xJAhQzBr1iwcOXLE76F5xn333YexY8eitLQUvXv39ns4rvL4449j8ODB6NGjB0aNGoWVK1f6PSTPeOuttzB58mRUV1cjEong5Zdf9ntInjF37lyceeaZKCsrQ//+/XHppZdi8+bNfg/LE5544gmcfvrpycJs55xzDv72t7/5PaysMHfuXEQiEcycOdPvoXjC7NmzEYlENK8BAwb4MhYSNTnKRx99hKNHj+LJJ59EY2MjHn74YfzmN7/BXXfd5ffQPOPIkSO44oorcOONN/o9FFd5/vnnMXPmTNx99914//33ce655+Kiiy5CU1OT30PzhC+++AJnnHEGfv3rX/s9FM9ZsWIFbr75ZqxZswavv/46Ojs7ccEFF+CLL77we2iuE41Gcf/99+Odd97BO++8g6997Wu45JJL0NjY6PfQPGX9+vV46qmncPrpp/s9FE8ZNmwYPv300+Rr48aN/gxEIfKGBx54QBk8eLDfw/CcZ555RqmoqPB7GK5x1llnKd///vc1y04++WTlpz/9qU8jyh4AlEWLFvk9jKzR0tKiAFBWrFjh91CywnHHHac8/fTTfg/DM9rb25UTTzxRef3115UJEyYot956q99D8oRZs2YpZ5xxht/DUBRFUchSk0e0traiT58+fg+DsMGRI0fw7rvv4oILLtAsv+CCC7B69WqfRkV4RWtrKwDk/P9pV1cXnnvuOXzxxRc455xz/B6OZ9x888341re+hfPPP9/voXjOli1bUF1djcGDB2Pq1KnYtm2bL+PIq4aW+czWrVvxq1/9Cg899JDfQyFs8Nlnn6GrqwtVVVWa5VVVVdizZ49PoyK8QFEU3HbbbRg/fjxOO+00v4fjCRs3bsQ555yDL7/8Er169cKiRYtw6qmn+j0sT3juuefw3nvvYf369X4PxXPOPvts/P73v8dJJ52EvXv3Ys6cORg7diwaGxvRt2/frI6FLDUhQxSQpX+98847ms/s3r0bF154Ia644grccMMNPo3cGU6ONxeJRCKavxVFSVtGhJsZM2bgn//8JxYuXOj3UDxj6NCh2LBhA9asWYMbb7wR1157LT744AO/h+U6iUQCt956K/7whz+gR48efg/Hcy666CJ8+9vfxvDhw3H++efjr3/9KwDgd7/7XdbHQpaakDFjxgxMnTrVdJ2amprk77t378bEiRNxzjnn4KmnnvJ4dO5j93hzjcrKShQWFqZZZVpaWtKsN0R4ueWWW/DKK6/grbfeQjQa9Xs4nlFcXIwTTjgBADB69GisX78ejz76KJ588kmfR+Yu7777LlpaWjBq1Kjksq6uLrz11lv49a9/jY6ODhQWFvo4Qm859thjMXz4cGzZsiXr+yZREzIqKytRWVkpte6uXbswceJEjBo1Cs888wwKCsJnmLNzvLlIcXExRo0ahddffx2XXXZZcvnrr7+OSy65xMeREW6gKApuueUWLFq0CA0NDRg8eLDfQ8oqiqKgo6PD72G4zqRJk9Kyf/793/8dJ598Mn7yk5/ktKABgI6ODnz44Yc499xzs75vEjU5yu7du1FXV4d4PI4HH3wQ+/btS77nV/0Ar2lqasKBAwfQ1NSErq4ubNiwAQBwwgknoFevXv4OLgNuu+02TJ8+HaNHj05a3JqamvD973/f76F5wueff45PPvkk+ff27duxYcMG9OnTB/F43MeRuc/NN9+MBQsWYPHixSgrK0ta5CoqKtCzZ0+fR+cud911Fy666CLEYjG0t7fjueeeQ0NDA5YsWeL30FynrKwsLS7q2GOPRd++fXMyXur222/H5MmTEY/H0dLSgjlz5qCtrQ3XXntt9gfjb/IV4RXPPPOMAkD4ylWuvfZa4fEuX77c76FlzP/8z/8ogwYNUoqLi5WRI0fmdMrv8uXLhdfx2muv9XtormP0P/rMM8/4PTTXuf7665P3cL9+/ZRJkyYpr732mt/Dyhq5nNJ91VVXKccff7xyzDHHKNXV1cqUKVOUxsZGX8YSURRFyaaIIgiCIAiC8ILwBVkQBEEQBEEIIFFDEARBEEROQKKGIAiCIIicgEQNQRAEQRA5AYkagiAIgiByAhI1BEEQBEHkBCRqCIIgCILICUjUEARBEASRE5CoIQiCIAgiJyBRQxBEzvDpp5/i6quvxtChQ1FQUICZM2f6PSSCILIIiRqCIHKGjo4O9OvXD3fffTfOOOMMv4dDEESWIVFDEERo2LdvHwYMGICf//znyWVr165FcXExXnvtNdTU1ODRRx/Fd77zHVRUVPg4UoIg/KDI7wEQBEHI0q9fP/z2t7/FpZdeigsuuAAnn3wy/u3f/g033XQTLrjgAr+HRxCEz5CoIQgiVHzzm9/E9773PVxzzTU488wz0aNHD9x///1+D4sgiABA7ieCIELHgw8+iM7OTrzwwgv44x//iB49evg9JIIgAgCJGoIgQse2bduwe/duHD16FDt37vR7OARBBARyPxEEESqOHDmCa665BldddRVOPvlkfPe738XGjRtRVVXl99AIgvAZEjUEQYSKu+++G62trXjsscfQq1cv/O1vf8N3v/td/OUvfwEAbNiwAQDw+eefY9++fdiwYQOKi4tx6qmn+jhqgiCyQURRFMXvQRAEQcjQ0NCAr3/961i+fDnGjx8PAGhqasLpp5+OuXPn4sYbb0QkEkn73KBBg7Bjx44sj5YgiGxDooYgCIIgiJyAAoUJgiAIgsgJSNQQBEEQBJETkKghCIIgCCInIFFDEARBEEROQKKGIAiCIIicgEQNQRAEQRA5AYkagiAIgiByAhI1BEEQBEHkBCRqCIIgCILICUjUEARBEASRE5CoIQiCIAgiJ/j/bq1PZsEfjBEAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "# Número de datos\n", "N = 500\n", "\n", "# Generar un conjunto de datos de muestra\n", "np.random.seed(0)\n", "x = np.random.randn(N, 2)\n", "y = np.random.randint(0, 2, (N, 1))\n", "\n", "# Separar los puntos de datos en dos grupos basados en su clase\n", "class_0 = x[y.ravel() == 0]\n", "class_1 = x[y.ravel() == 1]\n", "class_1 += 2.5\n", "\n", "# Recodifica la matriz de datos\n", "x[y.ravel() == 1] += 2.5\n", "\n", "# Graficar los puntos de datos\n", "plt.scatter(class_0[:, 0], class_0[:, 1], marker='o', color='orange', label='Class 0')\n", "plt.scatter(class_1[:, 0], class_1[:, 1], marker='x', color='blue', label='Class 1')\n", "plt.legend(loc='upper left')\n", "plt.xlabel('x1')\n", "plt.ylabel('x2')\n", "plt.show()\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "d2a51222-db1f-40cc-91d7-2576c0d5787b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[x y]\n", "x=[1.76405235 0.40015721], y =[0]\n" ] } ], "source": [ "#Una muestra de los datos es la siguiente\n", "\n", "print('[x y]')\n", "for (x,y) in zip(x,y):\n", " #print(np.round(x,2),y)\n", " print(\"x={}, y ={}\".format(x,y))\n", " break" ] }, { "cell_type": "markdown", "id": "1003eb86-a1f3-41ea-8541-2c410d97499d", "metadata": {}, "source": [ "## Etiquetado de los datos " ] }, { "cell_type": "markdown", "id": "2a74918d-e40d-4cc0-9b2f-310361f28f50", "metadata": {}, "source": [ "Lo que postulamos como modelo separador de estas dos clases es una recta dada por \n", "\n", "$$\n", "w x_1+ x_2 + b = 0\n", "$$\n", "\n", "Como es sabido esta recta divide el plano exactamente en tres regiones. Si por ejemplo la recta tuviera la forma $2x+y-1=0$, se tendrían:\n", "\n", "+ El conjunto de datos que están en la recta y satisfacen la ecuación. Por ejemplo el punto (0,1) está en la recta.\n", "+ El conjunto de de datos que están por encima de la recta. En este caso se tiene que $2x+y-1>0$. Por ejemplo el punto (1,1) esta sobre la recta.\n", "+ El conjunto de de datos que están por debajo de la recta. En este caso se tiene que $2x+y-1<0$. Por ejemplo el punto (0,0) está por debajo de la recta.\n", "\n", "Los datos anteriores han etiquetados con 0 y 1 respectivamente, por anotador. En este caso los autores de esta lección hemos hecho la anotación de forma conveniente. Esta tarea de anotación o etiquetado ha sido una tarea bastante usual a lo largo de la historia de al inteligencia artificial moderna.\n", "En el ejemplo, la observación (1.76405235 0.40015721) fue etiquetada como 0." ] }, { "cell_type": "markdown", "id": "5c821bf0-8264-4698-bc0d-c0ef1ca02533", "metadata": {}, "source": [ "## Modelo de probabilidad " ] }, { "cell_type": "markdown", "id": "33453b87-3a21-4cdb-99cf-d2ec90f40669", "metadata": {}, "source": [ "Lo que sabemos con precisión es que los datos son clasificados en dos categorías por lo que para el experimento podemos esperar que al selección cualquier pareja de números reales, esta pertenezca a una de esas dos clases, pero no sabemos a cual. Entonces estamos frente a un experimento de Bernoulli. Recordemos que si digamos $\\pi$ es la probabilidad de que el punto sea de la clase 1, el modelo de probabilidad correspondiente esta dado por\n", "\n", "$$\n", "P(Y=y) = \\pi^y(1-\\pi)^{1-y}, \\text{ con } y \\in \\{0,1\\}.\n", "$$\n", "\n", "Observe que la etiqueta es $y$. y la variable aleatoria $Y$ toma valores 0, 1, únicamente. La pregunta es ¿Cómo asociamos las etiquetas a las coordenadas de los puntos?\n", "\n", "Esta es la pregunta central en nuestro proceso de modelación. Para contestarlo, puede imaginar que los valores que toma la variable aleatoria $Y$ están regidos por la probabilidad $\\pi$. Entonces, lo que vamos a intentar es asociar la probabilidad con las coordenadas de los puntos.\n", "\n", "Construimos entonces una función predictora, de tal manera que dadas las coordenadas de un punto, las transforme en una probabilidad. ¿Cómo hacemos esto?" ] }, { "cell_type": "markdown", "id": "7c04d4f2-60b0-41ab-b6fc-1a97e1dd212b", "metadata": {}, "source": [ "## Función predictora " ] }, { "cell_type": "markdown", "id": "23787fb3-717d-42fd-825a-cc4ed0cd663d", "metadata": {}, "source": [ "Para este ejemplo usaremos un modelo logístico como función de predicción. En el problema tenemos dos clases: clase 0 y clase 1. Tenemos dos variables predictoras $x_1$ y $x_2$ respectivamente y que corresponden a las coordenadas de los puntos. El vector predictor se denota $\\mathbf{x}=(x_1,x_2)$.\n", "\n", "La función predictora que introducimos es la `función de distribución logística`, la cual llamaremos `sigmoide` en lo sucesivo. Este nombre deriva del hecho que la función tiene la forma de una letra s estirada. Como toda función de distribución, la logística tiene dominio en todos los número reales y como salida los números en el intervalo (0,1). Elegimos esta función de predicción porque la salida puede ser interpretada como una probabilidad. La función predictora general para este caso es dada entonces por\n", "\n", "\n", "$$\n", "\\hat{y} = P[Y=1|\\mathbf{x}, \\mathbf{w}, b ]= g_{(\\mathbf{w},b)}(\\mathbf{x}) = \\frac{1}{1 + \\exp \\{-(w_1x_1 + w_2x_2+b)\\}},\n", "$$\n", "\n", "en donde el vector de parámetros de nuestro modelo será $(\\mathbf{w},b)$. Observe que $\\hat{y}$ es un número real en el intervalo (0,1) que interpretamos como la probabilidad de que la muestra $\\mathbf{x}$ provenga de la clase 1. Para usos prácticos la decisión se toma 'cuidadosamente', así:\n", "\n", "1. Si $\\hat{y}<0.5$ la muestra $\\mathbf{x}$ proviene de la clase 0." ] }, { "cell_type": "markdown", "id": "9ad402a3-ed23-4c48-a4a5-d55988215ea6", "metadata": {}, "source": [ "### El sigmoide" ] }, { "cell_type": "markdown", "id": "99111a0f-d0f0-4652-b96f-5b8728e3758c", "metadata": {}, "source": [ "El siguiente código dibuja la distribución logística estándar o sigmoide. Esta es una función muy importante en el área de la inteligencia artificial. En es ámbito es conocida como una función de activación. Aquí nos interesa porque convierte cualquier número real a un número en el intervalo (0,1), el cual puede ser interpretado como una probabilidad." ] }, { "cell_type": "code", "execution_count": 83, "id": "5252bb11-16d3-4322-b1e7-543b4580e369", "metadata": {}, "outputs": [ { "data": { "image/png": "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oNFoMG/ePPTs2RPbt29H9+7dy6xz1qxZmDVrFsaOHYt//etfSExMxAsvvACdToegoCBDv7y8PERGRiIpKQnTpk1DSEgIzp49i/fffx+nT5/Gtm3bjD6bnj17YsmSJThz5gzatWtXqc+MLIDUu46Iqqu8YakSnp6eIjg42PB8xowZ4t5f+19++UUAECdPnizzPcobvih5v/fff7/M1+7l7+8vZDJZqfn169dPODg4GIa0SpYtPj7eqN/OnTsFALFz504hhBDZ2dnCwcFBdO/eXej1+jKX4f5azp8/LwCIV155xajfX3/9JQCIadOmGdoiIyMFAPHXX38Z9W3durXo379/mfO8d5nvHZZ65513TL7fyy+/LGQymbhw4YIQQoivvvpKABB//vmnUb+XXnpJABArVqwoc/kedL3e//lX9nO+n1arFTk5OcLOzk58/vnn5fa9ceOGACA+/vjjUq8dPnxY+Pn5CQACgLC3txeDBw8WK1euLFXP/cv01FNPCTs7O3Hz5k1Dm06nE61bty71O+bv7y9sbGxEUlKSoe3kyZMCgPD29jYacv31118FAPH7778b3tPHx0e0a9fOaKgsOztbeHh4iPDwcEPb/Z/v7du3hVqtFk888YTRsuzfv18AMBqWmjNnjpDL5aX+35es85iYGKP2S5cuCQBiyZIlpT5XslwcliKLJirYFd2hQwcolUq8+OKL+P777xEXF1et+QwZMqTSfdu0aYP27dsbtY0YMQJZWVk4fvx4leZ74MABZGVl4ZVXXqnSWWA7d+4EgFJnMXXp0gXBwcHYvn27UbuXlxe6dOli1BYSElLp4ZZ77dixA61bty71fmPGjIEQAjt27AAA7N69G/b29hgwYIBRv+HDh1c4j5paryUq+znn5ORgypQpaN68OaysrGBlZYVGjRohNzcX58+fL3ceycnJAAAPD49Srz300EO4fPkyNm/ejGnTpiEsLAzbt2/HqFGj8Nhjj5X7e75792707t3baK+RXC7H0KFDTfbv0KEDGjdubHgeHBwMoGgPiK2tban2kt+BCxcuIDk5GSNHjjTa89SoUSMMGTIEhw4dQl5ensl5Hjx4EPn5+XjmmWeM2sPDw+Hv72/UtnHjRrRt2xYdOnSAVqs1PPr3729yyLbk87x+/brJeZNlYrghi5Wbm4uMjAz4+PiU2adZs2bYtm0bPDw8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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from scipy.special import expit\n", "\n", "# Crear un conjunto de datos x\n", "x = np.linspace(-10, 10, 1000)\n", "\n", "# Calcular los valores de y utilizando la función sigmoide\n", "y = expit(x)\n", "\n", "# Graficar los datos utilizando la función plot de matplotlib\n", "plt.plot(x, y, label='Función sigmoide')\n", "\n", "# Añadir título y etiquetas de los ejes\n", "plt.title('Distribución logística (Sigmoide)')\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "\n", "# Mostrar la leyenda y el gráfico\n", "plt.legend()\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "7ee0c77f-ec6a-485d-8253-c77f913a57cf", "metadata": {}, "source": [ "### Ejemplo de uso de la función predictora" ] }, { "cell_type": "markdown", "id": "b880671b-e12e-486b-9e19-630728465ee0", "metadata": {}, "source": [ "El propósito del entrenamiento de nuestro modelo será determinar los mejores valores para $\\mathbf{w}$ y $b$. Pero antes de hacerlo vamos suponer que ya lo hemos hechos y que tenemos que $\\mathbf{w}=(2,1), b -1$, como hicimos antes. Veamos que predice nuestra función para los datos que probamos antes.\n", "\n", "+ $g_{(\\mathbf{w},b)}(1,1) = 0.119$. Punto en la clase 0.\n", "+ $g_{(\\mathbf{w},b)}(0,0) = 0.731$. Punto en la clase 1.\n", "+ $g_{(\\mathbf{w},b)}(0,1) = 0.500$. Punto en la línea recta. \n", "\n", "El siguiente código Python muestra una forma de hacer el cálculo." ] }, { "cell_type": "code", "execution_count": 84, "id": "5656b196-4c3e-427e-8d99-dde2d8517580", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.11920292 0.73105858 0.5 ]\n" ] } ], "source": [ "import numpy as np\n", "\n", "w = (2,1)\n", "b= -1\n", "x = np.array([[1,1],[0,0], [0,1]])\n", "\n", "yb = 1/(1+np.exp(np. matmul(x,w)+b))\n", "print(yb)" ] }, { "cell_type": "markdown", "id": "80b5bf1d-8145-4fcd-ab90-a4f17d4c1272", "metadata": {}, "source": [ "Es importante que tenga en cuenta que las etiquetas pueden colocarse al contrario. ¿Porque?" ] }, { "cell_type": "markdown", "id": "085cb8ca-8a54-4fe7-882f-c04182a65e64", "metadata": { "tags": [] }, "source": [ "## Función de probabilidad conjunta" ] }, { "cell_type": "markdown", "id": "92d0da11-8d92-4298-abee-07c3cb63dbe8", "metadata": {}, "source": [ "Si estuvo muy atento en la sección anterior, puede ahora entender que para cualquier punto $(x_1,x_2) \\in \\mathbb{R}^2$ se determina un modelo de probabilidad diferente. En realidad la probilidad de que un punto obtenga una determinada etiqueta depende de su posición en el espacio. Entonces para un punto dado $(x_1,x_2) \\in \\mathbb{R}^2$ la probabilidad de que obtenga una determinada etiqueta del conjunto $\\{0,1\\}$ termina siendo una probabilidad condicional dada por\n", "\n", "$$\n", "P(Y=y|\\mathbf{x}, \\mathbf{w}, b) = [g_{(\\mathbf{w},b)}(\\mathbf{x})]^y \\times [1-g_{(\\mathbf{w},b)}(\\mathbf{x})]^{1-y}\n", "$$\n", "\n", "\n", "Si por otro lado, suponemos que se obtendrán $N$ muestras $(\\mathbf{x}, y_i), \\hspace{3mm} i=1,\\ldots,N$, la función de probabilidad conjunta para esa muestra es dada por\n", "\n", "$$\n", "P(\\mathbf{Y}=\\mathbf{y}|\\mathbf{X}, \\mathbf{w},b) = \\prod_{i=1}^N[g_{(\\mathbf{w},b)}(\\mathbf{x}_i)]^{y_i} \\times [1-g_{(\\mathbf{w},b)}(\\mathbf{x}_i)]^{1-y_i}.\n", "$$\n", "\n", "Aqui hemos denotado \n", "+ $\\mathbf{Y}= (Y_1, \\ldots, Y_N)$, \n", "+ $\\mathbf{y}= (y_1, \\ldots, y_N)$, \n", "+ $\\mathbf{X}= (\\mathbf{x}_1, \\ldots, \\mathbf{x}_N)$." ] }, { "cell_type": "markdown", "id": "c61401cf-e628-4b32-8d36-708809565883", "metadata": {}, "source": [ "### Poder predictivo del modelo de probabilidad" ] }, { "cell_type": "markdown", "id": "b15caa03-d99e-414d-84a0-3474620da0d8", "metadata": {}, "source": [ "Queremos dejar bastante claro porque nuestro modelo de probabilidad en realidad es un modelo predictivo en todo el sentido de la palabra. Esta es la magia que subyace en los modelos de probabilidad. Para esto nos apoyaremos en el modelo del ejemplo con $\\mathbf{w}=(2, 1), b = -1$. Recuerde que en el modelo hemos definido $P[Y=1|\\mathbf{x}] = g_{(\\mathbf{w},b)}(\\mathbf{x})$.\n", "\n", "Tomemos el punto $\\mathbf{x} = (1,1)$. Supongamos que necesitamos asignar una etiqueta a este punto. La etiqueta es desconocida y por tanto será el resultado de la evaluación de una variable aleatoria $Y$ y tenemos que\n", "\n", "\n", "+ $Prob(Y=1) = g_{(\\mathbf{w},b)}(\\mathbf{x}) = 0.119$\n", "+ $Prob(Y=0) = (1-g_{(\\mathbf{w},b)}(\\mathbf{x})) = 0.881$\n", "\n", "Nuestro modelo predice que *con probabilidad 0.881* este punto proviene de la clase 1. " ] }, { "cell_type": "markdown", "id": "5e976514-9e1b-4268-9d8f-7ae0f0c7a309", "metadata": {}, "source": [ "### Implementación de la función predictora" ] }, { "cell_type": "markdown", "id": "c6d1cffb-de19-450c-9224-f7247d83c901", "metadata": {}, "source": [ "Nuestro modelo `predice` la probabilidad que el punto $\\mathbf{x}$ pertenece a la clase 1. Entonces nuestra implementación en Tensorflow es como sigue:" ] }, { "cell_type": "code", "execution_count": 43, "id": "4fdcfb40-2623-47a0-9f1e-fcc3655ebd4a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tf.Tensor(\n", "[[0.11920292]\n", " [0.7310586 ]\n", " [0.5 ]], shape=(3, 1), dtype=float32)\n" ] } ], "source": [ "import tensorflow as tf\n", "\n", "def pred(x):\n", " '''\n", " Función de predictora logística o sigmoide\n", " f_w(x) = 1/(1 + exp(-(1+ w'x+b)))\n", " '''\n", " y_hat = 1 / (1 + tf.exp(-tf.add(tf.matmul(x,w),b)))\n", " return y_hat\n", "\n", "# prueba\n", "#w = [2, -1]\n", "w = tf.Variable([[2.],[1.]])\n", "b = tf.Variable([-1.])\n", "x = tf.constant(\n", " [[1.,1.], \n", " [0., 0.],\n", " [0., 1.]]\n", " )\n", "\n", "prediccion = pred(x)\n", "print(prediccion) #[[0.11920292],[0.7310586 ], [0.5]]" ] }, { "cell_type": "markdown", "id": "9cb88c24-5efd-4e9e-896a-7e3f5bddb105", "metadata": {}, "source": [ "## Log verosimilitud y función de pérdida" ] }, { "cell_type": "markdown", "id": "5001d01a-6af8-4730-a2d3-e1586a5b626c", "metadata": {}, "source": [ "El proceso de entrenamiento de nuestro modelo consiste en estimar los parámetros $(\\mathbf{w},b)$ del modelo a partir de los datos de entrenamiento recibidos.\n", "\n", "Recordemos que la función de probabilidad definida por nuestro modelo de Bernoulli es dada por\n", "\n", "$$\n", "P(Y=y| \\mathbf{w},b, \\mathbf{x}) = [g_{(\\mathbf{w},b)}(\\mathbf{x})]^y \\times [1-g_{(\\mathbf{w},b)}(\\mathbf{x})]^{1-y}.\n", "$$\n", "\n", "Como modelo de probabilidad es necesario asumir que se conocen los valores para $w$ y $b$. Eso hemos hecho para poder presentar los ejemplos previos. Pero en este momento vamos a cambiar la perspectiva. Al disponer del dato de entrenamiento nuestra función ahora tiene conocidos los valores $(\\mathbf{x},y)$. Vamos a definir la función de verosimilitud con la misma expresión, pero ahora consideramos como desconocidos a los parámetros $w$ y $b$. Esta nueva función se denomina veromilitud para la observación $(\\mathbf{x},y)$ y se denota\n", "\n", "$$\n", "l(\\mathbf{w},b|\\mathbf{x},y) = [g_{(\\mathbf{w},b)}(\\mathbf{x})]^y \\times [1-g_{(\\mathbf{w},b)}(\\mathbf{x})]^{1-y}\n", "$$\n", "\n", "Si tomamos logaritmo y anteponemos el signo menos obtenemos la función de pérdida\n", "\n", "$$\n", "\\mathfrak{L}(\\mathbf{w},b|\\mathbf{x},y) = - (y\\log[g_{(\\mathbf{w},b)}(\\mathbf{x})] + (1-y)[\\log[1-g_{(\\mathbf{w},b)}(\\mathbf{x})])\n", "$$\n", "\n", "Hemos encontrado la entropía cruzada entre dos distribuciones:\n", "\n", "+ La distribución de referencia dada por $[y, 1-y]$\n", "+ La distribución aproximante dada por $[g_{(\\mathbf{w},b)}(\\mathbf{x}), 1-g_{(\\mathbf{w},b)}(\\mathbf{x})]$.\n", "\n", "Para el conjunto de datos de entrenamiento $(\\mathbf{x}, y_i), \\hspace{3mm} i=1,\\ldots,N$, la entropía cruzada *promedio* es dada por\n", "\n", "$$\n", "\\mathfrak{L}(\\mathbf{w},b|\\mathbf{X},\\mathbf{y}) = -\\frac{1}{N} \\sum_{i=1}^N y_i\\log[g_{(\\mathbf{w},b)}(\\mathbf{x}_i)] + (1-y_i)[\\log[1-g_{(\\mathbf{w},b)}(\\mathbf{x}_i)]\n", "$$\n", "\n", "Esta es la función que es necesario minimizar con respecto a $\\mathbf{w}$ y $b$.\n", "\n", "El proceso de optimización requiere el cálculo del gradiente de esta función de pérdida el cual es dado por\n", "\n", "$$\n", "\\nabla_{(\\mathbf{w},b)}\\mathfrak{L}(\\mathbf{w},b|\\mathbf{X},\\mathbf{y}) = \\left[\\frac{\\partial \\mathfrak{L}}{\\partial \\mathbf{w}}, \\frac{\\partial \\mathfrak{L}}{\\partial b}\\right]\n", "$$" ] }, { "cell_type": "markdown", "id": "0a7c96bc-7502-4b77-977d-15070714caa0", "metadata": {}, "source": [ "### Ejercicio" ] }, { "cell_type": "markdown", "id": "d8b6be1b-f9f6-497b-b617-79f061a12861", "metadata": {}, "source": [ "Calcule explícitamente $\\nabla_{(w,b)}\\mathfrak{L}(\\mathbf{w},b|\\mathbf{X},\\mathbf{y})$." ] }, { "cell_type": "markdown", "id": "ed8d4584-766c-4c95-8eaa-dd2a8e6a4866", "metadata": {}, "source": [ "### Implementación de la función de pérdida" ] }, { "cell_type": "code", "execution_count": 70, "id": "c5e3bcdc-fb2e-414e-9e5c-fd76300f94b8", "metadata": {}, "outputs": [], "source": [ "def loss_f(y,y_pred):\n", " loss = -tf.reduce_mean(y * tf.math.log(y_pred) + (1 - y) * tf.math.log(1 - y_pred))\n", " return loss" ] }, { "cell_type": "markdown", "id": "ef6f008a-3100-4aff-a5ec-cfb938b9942b", "metadata": {}, "source": [ "### Regularización L2" ] }, { "cell_type": "markdown", "id": "3cf48d2b-7a34-4b52-9e62-e56d9cdbb047", "metadata": {}, "source": [ "Es muy frecuente tener que introducir un regularizador para evitar que la norma del vector $\\mathbf{w}$ crezca demasiado, lo que implica sobre ajuste en el modelo. En el siguiente código se ilustra como introducir el regulador L2." ] }, { "cell_type": "code", "execution_count": 106, "id": "bdf44c56-2d62-4906-9333-b6ca1dcf5e52", "metadata": {}, "outputs": [], "source": [ "def loss_f_L2(y, y_pred,w, l=1):\n", " loss = tf.add(loss_f(y,y_pred) - l*tf.matmul(tf.transpose(w),w))\n", " return loss" ] }, { "cell_type": "markdown", "id": "63dacee0-0b32-48d4-b1db-189e3e869de0", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## Entrenamiento del modelo (la red neuronal)" ] }, { "cell_type": "markdown", "id": "3797b272-8ac0-401c-98de-c0da2862ddd0", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "
\n", " \n", "
\n", "\n", "
Entrenamiento de una red neuronal. Modelo de objetos.
\n", "\n", "Fuente Alvaro Montenegro" ] }, { "cell_type": "markdown", "id": "87cbd397-63cc-4697-a8af-859f90b971b7", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "El siguiente es el código completo paar resolver el problema" ] }, { "cell_type": "code", "execution_count": 17, "id": "ec724dc5-409a-411b-aa6f-5e2dc520b745", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch: 0 loss: 0.8554065 accuracy: 0.68333334\n", "Epoch: 1 loss: 0.40895918 accuracy: 0.8437499\n", "Epoch: 2 loss: 0.20631151 accuracy: 0.92499995\n", "Epoch: 3 loss: 0.13479117 accuracy: 0.9499999\n", "Epoch: 4 loss: 0.11106267 accuracy: 0.9625\n", "Epoch: 5 loss: 0.10282208 accuracy: 0.96458316\n", "Epoch: 6 loss: 0.09847403 accuracy: 0.9687499\n", "Epoch: 7 loss: 0.09532579 accuracy: 0.9687499\n", "Epoch: 8 loss: 0.09287048 accuracy: 0.9687499\n", "Epoch: 9 loss: 0.09092692 accuracy: 0.9708333\n" ] } ], "source": [ "import numpy as np\n", "import tensorflow as tf\n", "from tensorflow.keras.optimizers import Adam\n", "\n", "\n", "# Inicializar pesos aleatorios y modelo\n", "np.random.seed(1)\n", "#w = tf.Variable(np.random.randn(2, 1))\n", "w = tf.Variable([[-2.0], [2.0]])\n", "#b = tf.Variable([0.])\n", "b = tf.Variable([0.])\n", "\n", "# Generar un conjunto de datos de muestra\n", "np.random.seed(0)\n", "x = np.random.randn(N, 2)\n", "y = np.random.randint(0, 2, (N, 1))\n", "\n", "# Separar los puntos de datos en dos grupos basados en su clase\n", "class_0 = x[y.ravel() == 0]\n", "class_1 = x[y.ravel() == 1]\n", "class_1 += 2.5\n", "\n", "# Recodifica la matriz de datos\n", "x[y.ravel() == 1] += 2.5\n", "\n", "# convierte x en un tensor constante\n", "x = tf.constant(x)\n", "y = tf.constant(y)\n", "\n", "# ajusta los tipos de datos para evitar problemas de cálculo\n", "w = tf.cast(w, tf.float32)\n", "b = tf.cast(b, tf.float32)\n", "x = tf.cast(x, tf.float32)\n", "y = tf.cast(y, tf.float32)\n", "\n", "#optimizer = Adam()\n", "optimizer = tf.keras.optimizers.Adam(learning_rate=0.1)\n", "\n", "# función predictora\n", "def pred(x):\n", " y_hat = 1 / (1 + tf.exp(-tf.add(tf.matmul(x,w),b)))\n", " return y_hat\n", "\n", "# pérdida\n", "def loss_f(y,y_pred):\n", " loss = -tf.reduce_mean(y * tf.math.log(y_pred) + (1 - y) * tf.math.log(1 - y_pred))\n", " return loss\n", "\n", "# Bucle de entrenamiento\n", "losses = []\n", "accuracies = []\n", "\n", "def train_step(x, y):\n", " with tf.GradientTape() as tape:\n", " y_pred = pred(x)\n", " l = loss_f(y, y_pred)\n", " grads = tape.gradient(l, [w, b])\n", " optimizer.apply_gradients(zip(grads, [w, b]))\n", " accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.round(y_pred), y), tf.float32))\n", " return l, accuracy\n", "\n", "# Entrenar el modelo durante varias épocas\n", "epochs = 10\n", "for epoch in range(epochs):\n", " avg_loss = 0.\n", " avg_accuracy = 0.\n", " total_batch = int(len(x) / 32)\n", " for i in range(total_batch):\n", " batch_x = x[i * 32:(i + 1) * 32]\n", " batch_y = y[i * 32:(i + 1) * 32]\n", " l, accuracy = train_step(batch_x, batch_y)\n", " avg_loss += l / total_batch\n", " avg_accuracy += accuracy / total_batch\n", " losses.append(avg_loss)\n", " accuracies.append(avg_accuracy)\n", " print(\"Epoch:\", epoch, \"loss:\", avg_loss.numpy(), \"accuracy:\", avg_accuracy.numpy())" ] }, { "cell_type": "code", "execution_count": 13, "id": "f807fd82-97b3-45ea-b334-57a12ee80336", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "w = [[1.9622128]\n", " [1.9799416]]\n", "b = [-4.368994]\n" ] } ], "source": [ "w_opt = w.numpy()\n", "b_opt = b.numpy()\n", "\n", "print('w =', w_opt)\n", "print('b =',b_opt)" ] }, { "cell_type": "markdown", "id": "ae3f6c67-887d-459b-b251-5744b8cc2035", "metadata": {}, "source": [ "## Ilustración del modelo" ] }, { "cell_type": "code", "execution_count": 15, "id": "c896339a-ba5c-4122-9722-37b3809da38d", "metadata": {}, "outputs": [ { "data": { "image/png": "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oDBBEARBEHEBiRqCIAiCIOICEjVxRmpqKiZMmIDU1FSnh2I7iXSsQGIdbyIdK5BYx5tIxwok1vG64VgTKlCYIAiCIIj4hSw1BEEQBEHEBSRqCIIgCIKIC0jUEARBEAQRF5CoIQiCIAgiLiBRE6fs3LkTt912G9q3b4+mTZuiQ4cOmDBhAmpqapwemm0888wz6Nu3L9LS0tCiRQunh2Mpr776Ktq3b48mTZqgZ8+eWLJkidNDso3FixfjyiuvRG5uLjweDz799FOnh2QbkydPxrnnnov09HRkZ2fjqquuwubNm50eli289tpr6NatW0Nhtj59+uDLL790elhRYfLkyfB4PBg3bpzTQ7GFiRMnwuPxBL3atGnjyFhI1MQpP//8M+rr6/H666+jtLQUU6ZMwb///W888cQTTg/NNmpqanDdddfh7rvvdnoolvLBBx9g3LhxGD9+PH744QcMGDAAl112GXw+n9NDs4XffvsNZ599Nl555RWnh2I7ixYtwr333osVK1bg66+/Rm1tLS655BL89ttvTg/NcvLy8vDss89izZo1WLNmDS688EIMGzYMpaWlTg/NVlavXo033ngD3bp1c3oottKlSxf8+uuvDa/169c7MxBGJAzPPfcca9++vdPDsJ23336bZWZmOj0MyzjvvPPYXXfdFbTszDPPZI899phDI4oeANjs2bOdHkbUKC8vZwDYokWLnB5KVDjllFPYm2++6fQwbOPw4cOsY8eO7Ouvv2YDBw5kY8eOdXpItjBhwgR29tlnOz0MxhhjZKlJICorK9GyZUunh0EYoKamBmvXrsUll1wStPySSy7B8uXLHRoVYReVlZUAEPd/p3V1dZg1axZ+++039OnTx+nh2Ma9996LK664AhdddJHTQ7GdLVu2IDc3F+3bt8eIESOwfft2R8aRUA0tE5lt27bhn//8J1544QWnh0IY4MCBA6irq0NOTk7Q8pycHOzdu9ehURF2wBjDgw8+iP79++Oss85yeji2sH79evTp0wfHjx9H8+bNMXv2bHTu3NnpYdnCrFmz8P3332P16tVOD8V2zj//fLz33ns4/fTTsW/fPkyaNAl9+/ZFaWkpWrVqFdWxkKUmxhAFZClfa9asCfrOnj17MGTIEFx33XW4/fbbHRq5Ocwcbzzi8XiC3jPGQpYRsc2YMWPw008/YebMmU4PxTbOOOMMrFu3DitWrMDdd9+Nm2++GRs3bnR6WJbj9/sxduxYvP/++2jSpInTw7Gdyy67DNdccw26du2Kiy66CP/9738BAO+++27Ux0KWmhhjzJgxGDFihOY6BQUFDf/fs2cPBg0ahD59+uCNN96weXTWY/R4442srCwkJSWFWGXKy8tDrDdE7HLfffdh7ty5WLx4MfLy8pwejm2kpKTgtNNOAwD06tULq1evxj/+8Q+8/vrrDo/MWtauXYvy8nL07NmzYVldXR0WL16MV155BdXV1UhKSnJwhPbSrFkzdO3aFVu2bIn6vknUxBhZWVnIysrSte7u3bsxaNAg9OzZE2+//TYaNYo9w5yR441HUlJS0LNnT3z99de4+uqrG5Z//fXXGDZsmIMjI6yAMYb77rsPs2fPRklJCdq3b+/0kKIKYwzV1dVOD8NyBg8eHJL98/vf/x5nnnkmHn300bgWNABQXV2NTZs2YcCAAVHfN4maOGXPnj0oKipCfn4+nn/+eezfv7/hM6fqB9iNz+fDoUOH4PP5UFdXh3Xr1gEATjvtNDRv3tzZwUXAgw8+iNGjR6NXr14NFjefz4e77rrL6aHZwpEjR7B169aG9zt27MC6devQsmVL5OfnOzgy67n33nsxY8YMzJkzB+np6Q0WuczMTDRt2tTh0VnLE088gcsuuwxerxeHDx/GrFmzUFJSgnnz5jk9NMtJT08PiYtq1qwZWrVqFZfxUg899BCuvPJK5Ofno7y8HJMmTUJVVRVuvvnm6A/G2eQrwi7efvttBkD4ilduvvlm4fEuXLjQ6aFFzL/+9S/Wrl07lpKSwnr06BHXKb8LFy4UXsebb77Z6aFZjtrf6Ntvv+300Czn1ltvbbiHW7duzQYPHsy++uorp4cVNeI5pfuGG25gp556KmvcuDHLzc1lw4cPZ6WlpY6MxcMYY9EUUQRBEARBEHYQe0EWBEEQBEEQAkjUEARBEAQRF5CoIQiCIAgiLiBRQxAEQRBEXECihiAIgiCIuIBEDUEQBEEQcQGJGoIgCIIg4gISNQRBEARBxAUkagiCIAiCiAtI1BAEETf8+uuvuPHGG3HGGWegUaNGGDdunNNDIggiipCoIQgibqiurkbr1q0xfvx4nH322U4PhyCIKEOihiCImGH//v1o06YN/vrXvzYsW7lyJVJSUvDVV1+hoKAA//jHP/C73/0OmZmZDo6UIAgnSHZ6AARBEHpp3bo13nrrLVx11VW45JJLcOaZZ+Kmm27CPffcg0suucTp4REE4TAkagiCiCkuv/xy3HHHHRg1ahTOPfdcNGnSBM8++6zTwyIIwgWQ+4kgiJjj+eefR21tLT788ENMnz4dTZo0cXpIBEG4ABI1BEHEHNu3b8eePXtQX1+PXbt2OT0cgiBcArmfCIKIKWpqajBq1CjccMMNOPPMM3Hbbbdh/fr1yMnJcXpoBEE4DIkagiBiivHjx6OyshIvv/wymjdvji+//BK33XYbPv/8cwDAunXrAABHjhzB/v37sW7dOqSkpKBz584OjpogiGjgYYwxpwdBEAShh5KSElx88cVYuHAh+vfvDwDw+Xzo1q0bJk+ejLvvvhsejyfke+3atcPOnTujPFqCIKINiRqCIAiCIOICChQmCIIgCCIuIFFDEARBEERcQKKGIAiCIIi4gEQNQRAEQRBxAYkagiAIgiDiAhI1BEEQBEHEBSRqCIIgCIKIC0jUEARBEAQRF5CoIQiCIAgiLiBRQxAEQRBEXECihiAIgiCIuOD/AWoaN4DccmZNAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "# Número de datos\n", "N = 500\n", "\n", "# Generar un conjunto de datos de muestra\n", "np.random.seed(0)\n", "x = np.random.randn(N, 2)\n", "y = np.random.randint(0, 2, (N, 1))\n", "\n", "# Separar los puntos de datos en dos grupos basados en su clase\n", "class_0 = x[y.ravel() == 0]\n", "class_1 = x[y.ravel() == 1]\n", "class_1 += 2.5\n", "\n", "# Recodifica la matriz de datos\n", "x[y.ravel() == 1] += 2.5\n", "\n", "\n", "# modelo\n", "z = range(-2,5)\n", "v = - w_opt[0]/w_opt[1]*z - b_opt/w_opt[1]\n", "\n", "# Graficar los puntos de datos\n", "plt.scatter(class_0[:, 0], class_0[:, 1], marker='o', color='orange', label='Class 0')\n", "plt.scatter(class_1[:, 0], class_1[:, 1], marker='x', color='blue', label='Class 1')\n", "plt.plot(z,v, color='red', label='Modelo')\n", "plt.legend(loc='upper left')\n", "plt.xlabel('x1')\n", "plt.ylabel('x2')\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "7c0a448e-ce81-43fa-8192-e6946617552f", "metadata": {}, "source": [ "### Ejercicio: Clase Trainer" ] }, { "cell_type": "markdown", "id": "bf8bb41e-cf71-4f23-87d8-a3ee002521f5", "metadata": {}, "source": [ "\n", "Como ejercicio se propone la implementación de esta clase, basandose en el código anterior.\n", "\n", "Esta clase es diseñada para controlar el proceso de entrenamiento. Antes de crear un objeto de tipo datset, asegúrese de tener disponible los siguiente objetos\n", "\n", "1. Un modelo.\n", "1. Un optimizador configurado para el modelo\n", "1. Una función de pérdida adecuada para el modelo\n", "\n", "Opcionalmente puede de un objeto SummaryWriter de Tensorboard y el path para almacenar los modelos.\n", "\n", "Para ejecutar el método `fit` se requiere disponer de los objetos de datos para entrenamiento y validación. " ] }, { "cell_type": "markdown", "id": "2ebcea22-0cb4-4a55-be58-1ccee2212eea", "metadata": {}, "source": [ "**¡Eso es todo!**" ] }, { "cell_type": "code", "execution_count": null, "id": "380e0344-ae82-4e9a-8a07-4dd176035aa2", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.10" } }, "nbformat": 4, "nbformat_minor": 5 }