{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "8qPBlJDHwucz" }, "source": [ "Experimentos y ensayos en modelos de aprendizaje automático\n", "===============================================================" ] }, { "cell_type": "markdown", "source": [ "## Introducción\n", "\n", "El seguimiento (o tracking) de experimentos de aprendizaje automático es el proceso de organizar, registrar y analizar los resultados de los procesos de entrenamiento y evaluación de modelos. El objetivo es obtener información que pueda usarse para mejorar modelos futuros y tomar mejores decisiones sobre qué algoritmos y parámetros a usar.\n", "\n", "### Beneficios\n", "\n", "Hay muchos beneficios al usar herramientas de tracking de experimentos de aprendizaje automático, particularmente:\n", "\n", "- Ayuda a comprender el rendimiento de los modelos.\n", "- Ayuda a comparar differentes modelos y encontrar los hiperparámetros correctos.\n", "- Posibilita la automatización de experimentos.\n", "- Posibilita la reproducibilidad de los resultados." ], "metadata": { "id": "tPVTBk-eje0Y" } }, { "cell_type": "markdown", "source": [ "![](https://github.com/santiagxf/E72102/blob/main/docs/develop/_images/tracking.png?raw=true)" ], "metadata": { "id": "364OnGDGjbEj" } }, { "cell_type": "markdown", "metadata": { "id": "PM02vWO4wuc5" }, "source": [ "### Conceptos\n", "\n", "La mayoria de las herramientas de seguimiento utilizan 6 conceptos fundamentales:\n", "\n", "- **Experimentos:** Representan el problema que queremos resolver. Los experimentos en general se identifican con un nombre y sirven de contenedor de todas las ejecuciones de nuestras iteraciones de aprendizaje automático.\n", "- **Ensayos (runs o trials):** Es cada de la iteraciones dentro del proceso de desarrollo, incluyendo el proceso de preprocesamiento de datos, entrenamiento de modelos, y evaluación. En simples términos, cualquier operación que es necesaria para generar y/o evaluar nuestro modelo de aprendizaje automático se sucede dentro de un ensayo o ejecución.\n", "- **Parámetros:** Representan cada uno de los valores que nuestro proceso de aprendizaje automático utiliza cómo configuración para el proceso de aprendizaje. Los hiperparámetros son casos típicos.\n", "- **Métricas:** Representan cada una de las métricas que podemos utilizar para comparar o evaluar los resultados de la ejecución.\n", "- **Modelos:** Representan cada uno de los modelos de aprendizaje automático que fueron generados durante la ejecución.\n", "- **Artefactos:** Cualquier otro archivo que es generado como parte del proceso y que nos interesa mantener bajo control (source control) a los efectos de auditoria y reproducibilidad." ] }, { "cell_type": "markdown", "source": [ "### Herramientas\n", "\n", "Existen multiples herramientas en el mercado para el siguimiento de experimentos. Algunas de las más populares incluye:\n", "\n", "**Herramientas incorporadas en nubes públicas:**\n", "\n", "- Azure Machine Learning\n", "- AWS SageMaker\n", "- GCP Vertex AI\n", "\n", "**Herramientas especificas:**\n", "\n", "- MLflow (open-source).\n", "- Weights & Biases\n", "- Comet\n", "- ClearML\n", "- Neptune\n", "- Guild AI\n", "- Polyaxon\n", "\n", "**Herramientas incorporadas en librarias:**\n", "\n", "- Tensorboard (TensorFlow)" ], "metadata": { "id": "ce0P3t9VjjzP" } }, { "cell_type": "markdown", "metadata": { "id": "PjoSE6qawuc6" }, "source": [ "## Seguimiento del proceso de entrenando para el problema censo de la UCI\n", "\n", "En este ejemplo, utilizaremos la herramienta Comet por el simple hecho de que es gratuita y tiene una curva de aprendizaje muy baja." ] }, { "cell_type": "markdown", "metadata": { "id": "CWmaFc37wuc8" }, "source": [ "### Instalación" ] }, { "cell_type": "markdown", "source": [ "Para utilizar Comet en el seguimiento de experimentos, debemos instalar el paquete de Python que le da soporte:" ], "metadata": { "id": "pbaipmSenCxJ" } }, { "cell_type": "code", "source": [ "%pip install comet_ml --quiet" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Z4jhvJw5VAAv", "outputId": "8906e513-020a-44e0-ea0a-c0abf31038e6" }, "execution_count": 1, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m558.4/558.4 kB\u001b[0m \u001b[31m3.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.3/3.3 MB\u001b[0m \u001b[31m15.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.5/54.5 kB\u001b[0m \u001b[31m3.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m215.6/215.6 kB\u001b[0m \u001b[31m7.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m137.9/137.9 kB\u001b[0m \u001b[31m5.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.3/54.3 kB\u001b[0m \u001b[31m1.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m510.1/510.1 kB\u001b[0m \u001b[31m4.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25h" ] } ] }, { "cell_type": "markdown", "source": [ "Finalmente, instalemos las librerias que necesitamos para resolver nuestro problema:" ], "metadata": { "id": "k1KQjsT9m9gL" } }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "CRlKo48owuc_", "outputId": "cc8d711b-1a49-488c-b378-a55ba30d54de", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/100.3 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m \u001b[32m61.4/100.3 kB\u001b[0m \u001b[31m1.7 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m100.3/100.3 kB\u001b[0m \u001b[31m1.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25h" ] } ], "source": [ "!wget https://raw.githubusercontent.com/santiagxf/E72102/master/docs/develop/modeling/experimentation/code/tuning_bayesian.txt \\\n", " --quiet --no-clobber\n", "!pip install -r tuning_bayesian.txt --quiet" ] }, { "cell_type": "markdown", "metadata": { "id": "CyWscZCQwudE" }, "source": [ "### Sobre el conjunto de datos del censo UCI\n", "\n", "El conjunto de datos del censo de la UCI es un conjunto de datos en el que cada registro representa a una persona. Cada registro contiene 14 columnas que describen a una una sola persona, de la base de datos del censo de Estados Unidos de 1994. Esto incluye información como la edad, el estado civil y el nivel educativo. La tarea es determinar si una persona tiene un ingreso alto (definido como ganar más de $50 mil al año). Esta tarea, dado el tipo de datos que utiliza, se usa a menudo en el estudio de equidad, en parte debido a los atributos comprensibles del conjunto de datos, incluidos algunos que contienen tipos sensibles como la edad y el género, y en parte también porque comprende una tarea claramente del mundo real." ] }, { "cell_type": "markdown", "metadata": { "id": "OnHZuGLSwudG" }, "source": [ "Descargamos el conjunto de datos" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "PcnArrfQwudH" }, "outputs": [], "source": [ "!wget https://santiagxf.blob.core.windows.net/public/datasets/uci_census.zip \\\n", " --quiet --no-clobber\n", "!mkdir -p datasets/uci_census\n", "!unzip -qq uci_census.zip -d datasets/uci_census" ] }, { "cell_type": "markdown", "metadata": { "id": "0ZO-pj3WwudI" }, "source": [ "Lo importamos" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "id": "sn4kODTMwudI" }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "\n", "train = pd.read_csv('datasets/uci_census/data/adult-train.csv')\n", "test = pd.read_csv('datasets/uci_census/data/adult-test.csv')" ] }, { "cell_type": "markdown", "source": [ "### Configurando Comet en nuestro notebook\n", "\n", "Comencemos configurando nuestro notebook para enviar toda la información de seguimiento a Comet.\n", "\n", "1. Cree una cuenta de Comet gratuita: Dirijase a https://www.comet.com/login y cree una cuenta en la plataforma.\n", "2. Cree un nuevo projecto donde incluir sus experimentos: Para ello, en el margen derecho de la pantalla verá la opción **New project**.\n", "3. Los projectos solo necesitan un nombre para poder reconocerlos. Configure el projecto como **Experiment Tracking** y finalmente configure el nivel de visibilidad que quiere. En la mayoria de los casos utilizará **Private** pero si desea compartir su experimento con colegas, en la versión gratuita requerirá configurarlo como **Public**.\n", "4. Necesitaremos también una forma de autenticar el código que ejecuta en el notebook para que pueda enviar la información a Comet. Esta comunicación se asegura utilizando un secreto o **key**. En la esquina superior derecha de la pantalla verá un botón con su nombre de usuario, haga click en el y seleccione **Account settings**.\n", "5. En esta página, bajo la sección **API Keys**, copie el valor que se muestra. **No comparta este clave con nadie y asegurese de no incluirla en su código cuando lo distribuye**.\n" ], "metadata": { "id": "QnYxyGpWfO7m" } }, { "cell_type": "markdown", "source": [ "![image.png](data:image/png;base64,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09PatE70U7FuuS3fr6Gpy/GPJH7u41x/jBqd76/zrnvz7dj2sUAimtp1rAsmCgMKcNpH1ZGOLgx0diGmMgWDqVPDfh1Io0alT5Zq2ybBtTFk02bULVDVRG3SfdO9edeFE4XRkTen+o841jVdNSLP3nir2Pr0CpV9sle3ronWxrVHgUXBBQBQOwklTunfAQD1SNOY9C67BuYa8Fam17SNBr91nZok2leDY+1/JPqpr2210L2q88TboalW5T9Gt7bHr4k+4ldTsiof/1+drkl9V3mKmipYTz9baHe4wFqbhfsAgBiCCgAA9UCB7EBuiZ/upnjysxEpVFQAoA7+H72XBQBAcOgTzO66p8C2by+xy76fTEgBgDqiogIAAAAgcKioAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgcggoAAACAwCGoAAAAAAgYs/8FSsfQaURed1AAAAAASUVORK5CYII=)" ], "metadata": { "id": "0ALIPImhmQ8e" } }, { "cell_type": "markdown", "source": [ "Utilizando esta información, ya tiene todo lo que necesita para configurar el notebook de la siguiente manera:" ], "metadata": { "id": "76tMrBFZmUr_" } }, { "cell_type": "code", "source": [ "import comet_ml" ], "metadata": { "id": "0dsrlISLCREN" }, "execution_count": 5, "outputs": [] }, { "cell_type": "code", "source": [ "comet_ml.init()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Q27SiTtiCTVl", "outputId": "f5c401d7-e794-49d3-f2f9-fded24b24e9d" }, "execution_count": 6, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Please paste your Comet API key from https://www.comet.com/api/my/settings/\n", "(api key may not show as you type)\n", "Comet API key: ··········\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Valid Comet API Key saved in /root/.comet.config (set COMET_CONFIG to change where it is saved).\n" ] } ] }, { "cell_type": "markdown", "source": [ "Una vez que la herramienta está configurada, podemos crear un experimento:" ], "metadata": { "id": "4EWMpEsdCrbv" } }, { "cell_type": "code", "source": [ "import comet_ml\n", "\n", "experiment = comet_ml.Experiment(\n", " project_name = \"uci-adults-income\",\n", " workspace=\"santiagxf\"\n", ")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "OcnIIfpOebz6", "outputId": "ddfd4f4e-c714-4915-d388-c1c1c209a8f5" }, "execution_count": 7, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "\u001b[1;38;5;214mCOMET WARNING:\u001b[0m As you are running in a Jupyter environment, you will need to call `experiment.end()` when finished to ensure all metrics and code are logged before exiting.\n", "\u001b[1;38;5;214mCOMET WARNING:\u001b[0m You are trying to log string value as a metric. This is not recommended.\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Couldn't find a Git repository in '/content' nor in any parent directory. Set `COMET_GIT_DIRECTORY` if your Git Repository is elsewhere.\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Experiment is live on comet.com https://www.comet.com/santiagxf/uci-adults-income/066e3be264ea408395002f0a2f524357\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "A partir de este momento, Comet está monitoreando toda la actividad en este notebook. Comet tiene una funcionalidad de *autologging* lo cual hace que la actividad se registre automaticamente sin necesidad de escribir código especial.\n", "\n", "Comet tiene integraciones con la librarias de código mas conocidas de ML, pero si en algún momento necesita trackear algo de forma especifica, la herramienta brinda formas de hacerlo." ], "metadata": { "id": "YVEbNAZAmk5P" } }, { "cell_type": "markdown", "metadata": { "id": "MMG5UhjewudK" }, "source": [ "### Creando el modelo\n", "\n", "En este ejemplo, crearemos un modelo muy sencillo con el cual trabajar y demostrar como funciona." ] }, { "cell_type": "markdown", "metadata": { "id": "gdNPtv-KwudK" }, "source": [ "Preparando nuestros conjuntos de datos:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "EhLsyUphwudL" }, "outputs": [], "source": [ "X_train = train.drop(['income'], axis=1)\n", "y_train = train['income'].to_numpy()\n", "X_test = test.drop(['income'], axis=1)\n", "y_test = test['income'].to_numpy()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "id": "oZiFns7SwudL" }, "outputs": [], "source": [ "classes = train['income'].unique().tolist()\n", "features = X_train.columns.values.tolist()\n", "categorical_features = X_train.dtypes[X_train.dtypes == 'object'].index.tolist()" ] }, { "cell_type": "markdown", "metadata": { "id": "6HzsWIV1wudM" }, "source": [ "Realizaremos un pequeño preprocesamiento antes de entrenar el modelo:\n", "\n", "- Imputaremos los valores faltantes de las caracteristicas numéricas con la media\n", "- Imputaremos los valores faltantes de las caracteristicas categóricas con el valor `?`\n", "- Escalaremos los valores numericos utilizando un `StandardScaler`\n", "- Codificaremos las variables categóricas utilizando `OneHotEncoder`" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "id": "374RsZu0wudM" }, "outputs": [], "source": [ "from typing import Tuple, List\n", "\n", "import sklearn\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.impute import SimpleImputer\n", "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", "from sklearn.compose import ColumnTransformer\n", "\n", "\n", "def prepare(X: pd.DataFrame) -> Tuple[np.ndarray, sklearn.compose.ColumnTransformer]:\n", " pipe_cfg = {\n", " 'num_cols': X.dtypes[X.dtypes == 'int64'].index.values.tolist(),\n", " 'cat_cols': X.dtypes[X.dtypes == 'object'].index.values.tolist(),\n", " }\n", "\n", " num_pipe = Pipeline([\n", " ('num_imputer', SimpleImputer(strategy='median')),\n", " ('num_scaler', StandardScaler())\n", " ])\n", "\n", " cat_pipe = Pipeline([\n", " ('cat_imputer', SimpleImputer(strategy='constant', fill_value='?')),\n", " ('cat_encoder', OneHotEncoder(handle_unknown='ignore', sparse_output=False))\n", " ])\n", "\n", " transformations = ColumnTransformer([\n", " ('num_pipe', num_pipe, pipe_cfg['num_cols']),\n", " ('cat_pipe', cat_pipe, pipe_cfg['cat_cols'])\n", " ])\n", " X = transformations.fit_transform(X)\n", "\n", " return X, transformations\n", "\n", "\n", "X_train_transformed, transformations = prepare(X_train)\n", "X_test_transformed = transformations.transform(X_test)" ] }, { "cell_type": "markdown", "metadata": { "id": "81atQ7WUwudN" }, "source": [ "Entrenamos un modelo basado en `lightgbm`" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "id": "u2MVdIhKwudN" }, "outputs": [], "source": [ "from lightgbm import LGBMClassifier\n", "\n", "with experiment.train():\n", " clf = LGBMClassifier(n_estimators=5)\n", " model = clf.fit(X_train_transformed, y_train)" ] }, { "cell_type": "markdown", "source": [ "Podemos revisar la performance del modelo:" ], "metadata": { "id": "Lwr57cbqJRuN" } }, { "cell_type": "code", "source": [ "from sklearn.metrics import accuracy_score, recall_score\n", "\n", "predictions = model.predict(X_test_transformed)\n", "accuracy = accuracy_score(y_test, predictions)\n", "recall = recall_score(y_test, predictions, pos_label='>50K')" ], "metadata": { "id": "uLIRYvzLn_93" }, "execution_count": 12, "outputs": [] }, { "cell_type": "markdown", "source": [ "Este calculo que acabamos de realizar no queda registrado en Comet como una métrica. Si este valor es una métrica que nos interesa *grabar*, podermos logearla explicitamente:" ], "metadata": { "id": "e9sj6620nJbG" } }, { "cell_type": "code", "source": [ "with experiment.test():\n", " experiment.log_metric(name=\"accuracy\", value=accuracy)\n", " experiment.log_metric(name=\"recall\", value=recall)" ], "metadata": { "id": "xFZaH072nUrG" }, "execution_count": 13, "outputs": [] }, { "cell_type": "markdown", "source": [ "Si quisieramos utilizar `classification_report`, podemos hacer algo como lo siguiente:" ], "metadata": { "id": "2TItZjYZooRq" } }, { "cell_type": "code", "source": [ "from sklearn.metrics import classification_report\n", "\n", "with experiment.test():\n", " print(classification_report(y_test, predictions))\n", " for key, value in classification_report(y_test, predictions, output_dict=True).items():\n", " if key == \"accuracy\":\n", " experiment.log_metric(key, value)\n", " else:\n", " experiment.log_metrics(value, prefix=f\"{key}\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "kMNf-9RkJTme", "outputId": "4c2b0c3e-8fab-4111-96d6-e08c5ef372ae" }, "execution_count": 14, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " precision recall f1-score support\n", "\n", " <=50K 0.81 1.00 0.90 12435\n", " >50K 0.98 0.25 0.40 3846\n", "\n", " accuracy 0.82 16281\n", " macro avg 0.90 0.63 0.65 16281\n", "weighted avg 0.85 0.82 0.78 16281\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "Podemos también persistir el modelo dentro del experimento. Para ello, primero lo guardamos en un archivo:" ], "metadata": { "id": "IVTFsf_FEsO1" } }, { "cell_type": "code", "source": [ "import cloudpickle\n", "\n", "with open('model.pkl', 'wb') as f:\n", " cloudpickle.dump(model, f)" ], "metadata": { "id": "TsX7ZwOFDYre" }, "execution_count": 15, "outputs": [] }, { "cell_type": "markdown", "source": [ "Luego utilizamos el método `log_model`:" ], "metadata": { "id": "hzyS2ZmrEw59" } }, { "cell_type": "code", "source": [ "experiment.log_model(\"classifier\", \"model.pkl\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Zgnl6HG8DIl4", "outputId": "1830797b-2c08-4d69-c92e-2ecf30ebfe5a" }, "execution_count": 16, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "{'web': 'https://www.comet.com/api/asset/download?assetId=3bd22b67abb4464ea2ffe41a07184ad6&experimentKey=066e3be264ea408395002f0a2f524357',\n", " 'api': 'https://www.comet.com/api/rest/v2/experiment/asset/get-asset?assetId=3bd22b67abb4464ea2ffe41a07184ad6&experimentKey=066e3be264ea408395002f0a2f524357',\n", " 'assetId': '3bd22b67abb4464ea2ffe41a07184ad6'}" ] }, "metadata": {}, "execution_count": 16 } ] }, { "cell_type": "markdown", "source": [ "### Finalizando la ejecución del experimento\n", "\n", "En notebooks, es importante que finalicemos la ejecución para indicar a Comet que la ejecución del experimento ha finalizado." ], "metadata": { "id": "hQRzBj31nXgZ" } }, { "cell_type": "code", "source": [ "experiment.end()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "nrR0ZH-tfYVr", "outputId": "ebc3102f-616a-4190-ff4f-75f3540e0bc6" }, "execution_count": 17, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "\u001b[1;38;5;39mCOMET INFO:\u001b[0m ---------------------------------------------------------------------------------------\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Comet.ml Experiment Summary\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m ---------------------------------------------------------------------------------------\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Data:\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m display_summary_level : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m url : https://www.comet.com/santiagxf/uci-adults-income/066e3be264ea408395002f0a2f524357\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Metrics:\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_<=50K_f1-score : 0.8955966677485665\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_<=50K_precision : 0.8118870145154963\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_<=50K_recall : 0.9985524728588661\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_<=50K_support : 12435\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_>50K_f1-score : 0.4009931719428926\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_>50K_precision : 0.9817629179331308\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_>50K_recall : 0.25195007800312014\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_>50K_support : 3846\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_accuracy : 0.8221853694490511\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_macro avg_f1-score : 0.6482949198457295\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_macro avg_precision : 0.8968249662243135\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_macro avg_recall : 0.6252512754309931\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_macro avg_support : 16281\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_recall : 0.25195007800312014\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_weighted avg_f1-score : 0.7787583258243221\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_weighted avg_precision : 0.8520161665666125\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_weighted avg_recall : 0.8221853694490511\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m test_weighted avg_support : 16281\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Parameters:\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m add_indicator : False\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m categories : auto\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m copy : True\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m drop : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m dtype : \n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m fill_value : ?\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m handle_unknown : ignore\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m keep_empty_features : False\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m max_categories : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m min_frequency : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m missing_values : nan\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m sparse : deprecated\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m sparse_output : False\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m strategy : constant\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_boosting_type : gbdt\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_colsample_bytree : 1.0\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_early_stopping_round : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_learning_rate : 0.1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_max_depth : -1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_metric : ['binary']\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_min_child_samples : 20\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_min_child_weight : 0.001\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_min_split_gain : 0.0\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_n_jobs : -1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_num_iterations : 5\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_num_leaves : 31\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_objective : binary\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_random_state : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_reg_alpha : 0.0\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_reg_lambda : 0.0\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_subsample : 1.0\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_subsample_for_bin : 200000\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_subsample_freq : 0\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m train_verbose : -1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m verbose : deprecated\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m with_mean : True\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m with_std : True\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Uploads:\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m environment details : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m filename : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m installed packages : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m model graph : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m model-element : 1 (22.96 KB)\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m notebook : 2\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m os packages : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m source_code : 1\n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m \n", "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Please wait for metadata to finish uploading (timeout is 3600 seconds)\n" ] } ] }, { "cell_type": "markdown", "source": [ "Dirijase a Comet y verá todos estos resultados dentro de la plataforma." ], "metadata": { "id": "XTSzEY-6pWCb" } } ], "metadata": { "language_info": { "name": "python" }, "vscode": { "interpreter": { "hash": "c0c26a04c01997af4d3a54c44ba2029caf4208eaf3de13f3aa81bddca06af044" } }, "colab": { "provenance": [], "toc_visible": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "nbformat": 4, "nbformat_minor": 0 }