background-image: url(img/portada.png) background-size: cover class: animated slideInRight fadeOutLeft, middle # Introducción a Machine Learning con `tidymodels` ### 1º Congreso Latinoamericano de Mujeres en Bioinformática y Ciencia de Datos --- background-image: url(img/equipo-fondo.png) background-size: cover ## Equipo <img src="img/equipo.png" width="100%" /> --- background-image: url(img/material.png) background-size: cover ## Material de este tutorial <br><br> ## 🌎 https://ml-tidy-wibds.netlify.app/ <br><br> ## <svg style="height:0.8em;top:.04em;position:relative;fill:black;" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> https://bit.ly/ml-wibds --- ## ¿Qué es modelar? .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### Es el proceso de desarrollo de una herramienta matemática que genera una predicción precisa. ### Entrenamos un modelo para encontrar esa predicción precisa. <sup>*</sup> ] .footnote[<sup>*</sup> Applied Predictive Modeling] --- ## Aprendizaje Automático 🤖 .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### El aprendizaje automático (ML)-también llamado aprendizaje estadístico- es un subcampo dentro de la inteligencia artificial (IA) donde *los algoritmos "aprenden" patrones en los datos para realizar una tarea específica.* ] --- ## Conceptos Importantes 💡 * __Muestra, punto, observación, instancia__ se refiere a una unidad de análisis. <br> * __Set de entrenamiento__ son los datos utilizados para el modelado. <br> * __Set de prueba__ son los datos utilizados para medir el desempeño del modelo, entre un conjunto de candidatos. <br> * __Atributos, predictores, variables independientes o descriptores__ son los datos de entrada para la ecuación de predicción. <br> * __Salida, variable dependiente, variable respuesta, clase, o "target"__ es la cantidad a ser predicha. <br> * __Datos categóricos, también conocidos como nominales o atributos__ toman valores específicos que no tienen escala. Ejemplo: bueno/malo, rojo/azul, etc. <br> * __Datos continuos__ son a base de escalas numéricas. El costo de un producto, la presión sanguínea, etc. .footnote[<sup>*</sup> Applied Predictive Modeling] --- ## Aprendizaje automático e IA <img src="img/ml-ia.png" width="75%" style="display: block; margin: auto;" /> .footnote[<sup>*</sup> ] --- ## El aprendizaje automático y otros campos relacionados <img src="img/ml-related.png" width="90%" style="display: block; margin: auto;" /> Fuente: [link](https://ldi.upenn.edu/sites/default/files/Introduction-to-Machine-Learning.pdf) --- ## Aplicaciones en la biología molecular ### [AlphaFold: plegamiento de proteínas](https://deepmind.com/blog/article/AlphaFold-Using-AI-for-scientific-discovery) <img src="img/prot-fold.png" width="90%" style="display: block; margin: auto;" /> #### [De novo generation of hit-like molecules from gene expression signatures using artificial intelligence](https://www.nature.com/articles/s41467-019-13807-w) <img src="img/gans.png" width="90%" style="display: block; margin: auto;" /> --- ### Otros hitos en el campo de la IA 🧠 <img src="img/AI-hits.png" width="100%" style="display: block; margin: auto;" /> --- ## Tipos de aprendizaje <img src="img/ml.png" width="90%" style="display: block; margin: auto;" /> --- ## Aprendizaje supervisado <img src="img/supervised.png" width="90%" style="display: block; margin: auto;" /> .footnote[<sup>*</sup> Machine Learning with R, the tidyverse and mlr] --- ## Bias - Variance tradeoff <img src="img/bias-variance.png" width="90%" style="display: block; margin: auto;" /> *Para una introducción visual ver: http://www.r2d3.us/visual-intro-to-machine-learning-part-2/* .footnote[<sup>*</sup> Machine Learning with R, the tidyverse and mlr] --- ## Entrenamiento, validación y testeo <img src="img/train-val-test.jpeg" width="40%" style="display: block; margin: auto;" /> .footnote[Fuente: https://www.tmwr.org/resampling.html] --- ## Resampleo El resampleo se utiliza en ML para estimar el desempeño de un modelo. <img src="img/resampling.png" width="100%" style="display: block; margin: auto;" /> .footnote[Fuente: https://www.tmwr.org/resampling.html] --- ## Validación cruzada <img src="img/CV.png" width="100%" style="display: block; margin: auto;" /> .footnote[Fuente: https://www.tmwr.org/resampling.html] --- ## Bootstraping <img src="img/bootstrap.png" width="100%" style="display: block; margin: auto;" /> .footnote[Fuente: https://www.tmwr.org/resampling.html] --- .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### Tanto validación cruzada como bootstrap son técnicas de resampleo (resampling). ### La diferencia radica en que la validación cruzada no es con reemplazo mientras que bootstrap sí lo es. ] --- # Árboles de decisión <img src="img/bret-tree.png" width="100%" style="display: block; margin: auto;" /> .footnote[Imagen tomada de https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-r-second-edition] --- ## Hiperparámetro .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### Un hiperparámetro es una propiedad de un algoritmo de aprendizaje. Este valor influencia la forma en que trabaja el algoritmo. Estos valores no son aprendidos por el algoritmo desde los datos. Deben ser seteados antes de correr el algoritmo por el analista. ] .footnote[The Hundred-page machine learning book. Andriy Burkov] --- ## Hiperparámetros de ## árboles de decisión .panelset[ .panel[.panel-name[min_n] Establezca n mínimo para dividir en cualquier nodo. Es un método de parada temprana. Se utiliza para evitar el sobreajuste. ] .panel[.panel-name[tree_depth] Pone un límite a la profundidad máxima del árbol. Un método para detener el algoritmo. Se utiliza para evitar el sobreajuste. ] .panel[.panel-name[cost_complexity] Agrega un costo o penalización a los errores de árboles más complejos. Es una forma de poda. Utilizado para evitar el sobreajuste (overfitting). ] ] --- # Random Forest <img src="img/random-forest1.png" width="90%" style="display: block; margin: auto;" /> .footnote[Imagen tomada de https://conf20-intro-ml.netlify.com/] --- # Bootstraping <img src="img/random-forest2.png" width="100%" style="display: block; margin: auto;" /> .footnote[Imagen tomada de https://conf20-intro-ml.netlify.com/] --- # Bagging <img src="img/random-forest3.png" width="100%" style="display: block; margin: auto;" /> .footnote[Imagen tomada de] --- ### Veamos que sucede al clasificar el conjunto de testeo <img src="img/random-forest4.png" width="100%" style="display: block; margin: auto;" /> .footnote[Imagen tomada de https://conf20-intro-ml.netlify.com/] --- ### Voto mayoritario (majority vote) <img src="img/random-forest5.png" width="100%" style="display: block; margin: auto;" /> .footnote[Imagen tomada de https://conf20-intro-ml.netlify.com/] --- ### Hiperparámetros de ### random forest ### mtry * El número de predictores a muestrearse en cada split de árbol -- ### min_n * el número de observaciones necesarias para seguir dividiendo nodos --- # Métricas 📐 .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### Durante el modelado de datos es probable que no hagamos un solo modelo, sino varios. ### La manera de saber qué tan buenos son, es evaluar esos algoritmos mediante métricas. ### Tenemos métricas de regresión y clasificación. ] --- ## Métricas en la clasificación <img src="img/metricas1.png" width="100%" style="display: block; margin: auto;" /> --- # Positivos verdaderos <img src="img/metricas2.png" width="100%" style="display: block; margin: auto;" /> --- ## Falsos positivos <img src="img/metricas3.png" width="100%" style="display: block; margin: auto;" /> --- # Negativos verdaderos <img src="img/metricas4.png" width="100%" style="display: block; margin: auto;" /> --- ## Falsos Negativos <img src="img/metricas5.png" width="100%" style="display: block; margin: auto;" /> --- ## Matriz de Confusión <img src="img/matriz-confusion.png" width="100%" style="display: block; margin: auto;" /> .footnote[Traducido de 10.7717/peerj.5666/fig-2] --- ## Principios del aprendizaje ### 1. Navaja de Occam 🔪 .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### El modelo más simple que pueda ser ajustado es el más factible. #### Si tuviéramos para elegir entre un modelo simple y uno complejo con el mismo desempeño, debo preferir **siempre** el modelo más simple ] .footnote[__Learning from data__ Abu-Mostafa, Y.] --- ## Principios del aprendizaje ### 2. Bias en el muestreo (sampling bias) .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### Si los datos contienen un sesgo, el algoritmo tendrá ese mismo sesgo. ] .footnote[__Learning from data__ Abu-Mostafa, Y.] --- ## Principios del aprendizaje ### 3. Data snooping 👀 .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### El set de datos de testeo no debe usarse nunca durante la fase de entrenamiento, ya que esto arrojará resultados más optimistas que los esperados. ] .footnote[__Learning from data__ Abu-Mostafa, Y.] --- ## De caret a `tidymodels` .pull-left[ El objetivo de caret era **unificar la sintaxis** para modelizar datos usando como base distintas librerías de R. <img src="img/caret.png" width="100%" align="right" /> ] -- .pull-right[ El objetivo de Tidymodels es además hacerlo **en un formato ordenado**. <img src="img/tidymodels.png" width="80%" align="right" /> ] --- ## `tidymodels` .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### `tidymodels` es un grupo de paquetes centrado en las tareas de modelización de datos. ### La modelización consta de varios pasos, la idea es que cada paso lo realice una librería diferente. ] .footnote[Sitio web: https://www.tidymodels.org/] --- # Etapas del modelado de datos <img src="img/modeling.png" width="100%" style="display: block; margin: auto;" /> .footnote[Sitio web: https://www.tmwr.org/software-modeling.html] --- ## Modelado y `tidymodels` <img src="img/tidy-w.png" width="100%" style="display: block; margin: auto;" /> --- ## Librerías de `tidymodels` .left-column[ ### `library(rsample)` __Librería que nos permite hacer división del set de datos__ ] .right-column[ <img src="img/rsample.png" width="40%" style="display: block; margin: auto;" /> ] --- ## Librerías de `tidymodels` .left-column[ #### `library(rsample)` ### `library(recipes)` __Permite hacer preprocesamiento de los datos__ ] .right-column[ <img src="img/recipes.png" width="40%" style="display: block; margin: auto;" /> ] --- ## Librerías de `tidymodels` .left-column[ #### `library(rsample)` #### `library(recipes)` ### `library(parsnip)` __Permite unificar los modelos a optimizar__ ] .right-column[ <img src="img/parsnip.png" width="40%" style="display: block; margin: auto;" /> ] --- ## Librerías de `tidymodels` .left-column[ #### `library(rsample)` #### `library(recipes)` #### `library(parsnip)` ### `library(workflows)` __Nos permite unificar el flujo de trabajo__ ] .right-column[ <img src="img/workflow.png" width="40%" style="display: block; margin: auto;" /> ] --- ## Librerías de `tidymodels` .left-column[ #### `library(rsample)` #### `library(recipes)` #### `library(parsnip)` #### `library(workflows)` ### `library(tune)` __Permite el tuneo de los hiperparámetros de los modelos__ ] .right-column[ <img src="img/tune.png" width="40%" style="display: block; margin: auto;" /> ] --- ## Librerías de `tidymodels` .left-column[ #### `library(rsample)` #### `library(recipes)` #### `library(parsnip)` #### `library(workflows)` #### `library(tune)` ### `library(yardstick)` __Permite evaluar las métricas de los modelos__ ] .right-column[ <img src="img/yardstick.png" width="40%" style="display: block; margin: auto;" /> ] --- background-image: url(img/biblio.png) background-size: cover # Bibliografía #### Max Kuhn & Julia Silge - [Tidy Modeling (en desarrollo)](https://www.tmwr.org/) #### Julia Silge's [Personal Blog](https://juliasilge.com/blog/) #### Max Kuhn & Kjell Johnson - [Feature engineering and Selection: A Practical Approach for Predictive Models](http://www.feat.engineering/) #### Max Kuhn & Kjell Johnson - Applied Predictive Modeling #### Documentación de [`tidymodels`](https://www.tidymodels.org/) #### Alison Hill [rstudio conf](https://conf20-intro-ml.netlify.app/materials/) y [curso virtual](https://alison.rbind.io/post/2020-06-02-tidymodels-virtually/) material --- background-image: url(img/final-fondo.png) background-size: cover class: middle # Muchas gracias 🎉 --- background-image: url(img/final-fondo.png) background-size: cover class: middle # Recreo 🍵
15
:
00