PROPÓSITO: La siguiente unidad tiene como propósito principal el desarrollo de aplicaciones o resolución de problemas de programación utilizando algoritmos de aprendizaje supervisado.
¿Cómo es que algo construido por humanos puede aprender por sí solo? De esta cuestión viene el campo del aprendizaje de máquinas (machine learning), también conocido como el aprendizaje automático, que es un subconjunto de la inteligencia artificial.
El aprendizaje automático se hace a través de un sistema, lo cual tiene tres componentes:
El Modelo — la lógica que subraye el proceso, basada en investigaciones y pronósticos
Los Parámetros — los límites del proceso
El “Aprendizaje” — un mecanismo que modifica los parámetros según las discrepancias entre los pronósticos y los resultados
Los programadores empiezan con un problema que quieren resolver, reforzados con información y predicciones para diseñar el modelo y los parámetros que lo complementan. El modelo típicamente se expresa en una función, escrito concisamente para minimizar error y complejidad. Los parámetros también son establecidos por los programadores para cumplir con las metas del modelo; en un sistema sencillo es un sólo límite de decisión para separar los resultados deseados de los no deseados. Después el sistema procesa algunos datos de prueba a ver cómo los resultados se comparan con los pronósticos.
Existen 3 tipos de aprendizaje automático con diferentes caracteristicas y funciones: Aprendizaje supervisado, aprendizaje no supervisado, aprendizaje por refuerzo.
Aprendizaje supervisado: funcionamiento y tipos
La primera modalidad de aprendizaje que tiene el machine learning es la de aprendizaje supervisado. Usándola, se entrena al algoritmo otorgándole las preguntas, denominadas características, y las respuestas, denominadas etiquetas. Esto se hace con la finalidad de que el algoritmo las combine y pueda hacer predicciones. Por este motivo, en esta modalidad se podría entender como algoritmos que “aprenden” de los datos introducidos por una persona. En este caso:
Se necesita la intervención humana para etiquetar, clasificar e introducir los datos en el algoritmo.
El algoritmo genera datos de salida esperados, ya que en la entrada han sido etiquetados y clasificados por alguien.
Algunas aplicaciones prácticas de este tipo de Machine Learning:
La predicción de coste de un siniestro en el caso de las compañías de seguros.
La detección de fraude bancario por parte de entidades financieras.
La previsión de avería en la maquinaria de una compañía.
Existen, a su vez, dos tipos de aprendizaje supervisado:
Clasificación:
Clasifican un objeto dentro de diversas clases. Por ejemplo, para determinar si un paciente está enfermo o si un correo electrónico es spam.
Regresión:
El algoritmo no está en capacidad de determinar a qué grupo pertenece un valor. Solamente logra relacionar características con etiquetas y así obtener un resultado. Sería el caso de los precios de una casa al escoger diferentes opciones o la demanda de ocupación de un hotel
A diferencia del caso anterior, no existe la intervención humana en este tipo de Machine Learning. Aquí los algoritmos aprenden de datos con elementos no etiquetados buscando patrones o relaciones entre ellos automáticamente. Usualmente, se les conoce como algoritmos de Clustering o Agrupamiento. En este caso:
Se introducen datos de entrada sin etiquetar.
No necesita la intervención humana.
Existen otros casos prácticos en los que se utiliza este tipo de aprendizaje:
La segmentación del tipo de clientes en un banco.
La clasificación del tipo de pacientes en un hospital.
El sistema de recomendaciones de contenido según el consumo del usuario en plataformas de streaming de vídeo.
el aprendizaje semi-supervisado es una clase de técnicas de aprendizaje automático que utiliza datos de entrenamiento tanto etiquetados como no etiquetados: normalmente una pequeña cantidad de datos etiquetados junto a una gran cantidad de datos no etiquetados. El aprendizaje semi-supervisado se encuentra entre el aprendizaje no supervisado (sin datos de entrenamiento etiquetados) y el aprendizaje supervisado (con todos los datos de entrenamiento etiquetados). Los investigadores del campo del aprendizaje automático han descubierto que los datos no etiquetados, cuando se utilizan junto a una pequeña cantidad de datos etiquetados, pueden mejorar de forma considerable la exactitud del aprendizaje. La adquisición de datos etiquetados para resolver un problema suele requerir un agente humano capacitado para clasificar de forma manual los ejemplos de entrenamiento. El coste asociado al proceso de etiquetado puede hacer que un conjunto de entrenamiento totalmente etiquetado sea inviable, mientras que la adquisición de datos sin etiquetar es relativamente poco costoso. En estos casos, el aprendizaje semi-supervisado puede ser muy útil.
Para progrmaar en Python, utilizaremos algunas librerías particulares que desarrollan este tipo de algoritmos:
SciPy: es una biblioteca libre y de código abierto para Python. Se compone de herramientas y algoritmos matemáticos. SciPy contiene módulos para optimización, álgebra lineal, integración, interpolación, funciones especiales, Transformada de Fourier, procesamiento de señales y de imagen, resolución de ODEs y otras tareas para la ciencia e ingeniería. SciPy se basa en el objeto de matriz NumPy y es parte del conjunto NumPy, que incluye herramientas como Matplotlib, pandas y SymPy, y un conjunto en expansión de bibliotecas de computación científica.
Scikit-learn: es una biblioteca para aprendizaje automático de software libre para el lenguaje de programación Python. Incluye varios algoritmos de clasificación, regresión y análisis de grupos entre los cuales están máquinas de vectores de soporte, bosques aleatorios, Gradient boosting, K-means y DBSCAN. Está diseñada para interoperar con las bibliotecas numéricas y científicas NumPy y SciPy.
scikit-image: es una biblioteca de procesamiento de imágenes de código abierto para el lenguaje de programación Python. [2] Incluye algoritmos para segmentación, transformaciones geométricas, manipulación del espacio de color, análisis, filtrado, morfología, detección de características y más. [3] Está diseñado para interoperar con las bibliotecas numéricas y científicas de Python NumPy y SciPy.
Dentro del aprendizaje supervisado, existen multiples algoritmos, unos con más complejidad que otros, para realizar las tareas de aprendizaje. Veremos algunos de los mas básicos
La regresión lineal es una técnica paramétrica de machine learning. Con «paramétrica» queremos decir que incluso antes de mirar a los datos, ya sabemos cuántos parámetros (o coeficientes) vamos a necesitar.
En el caso que estemos usando una sola variable, x, sabemos que una línea necesita 2 parámetros. La fórmula para la regresión lineal con una sola variable x es:
y=wx+b
El aprendizaje consiste en encontrar cuáles son los mejores parámetros (coeficientes) para los datos que tengamos. Los mejores coeficientes serán los que minimicen alguna medida de error. Para la regresión lineal usaremos el error cuadrático medio.
Ejemplo de Regresión Lineal
Hemos usado una regresión lineal para encontrar los parámetros de la línea que minimiza el error de los datos que tenemos. El proceso de aprendizaje consiste en estimar los parámetros w y b. Así nos queda que para estos datos, los mejores valores son:
w=0.0918, b=1.2859
así que nos queda: y=0.0918x+1.2859
Podemos usar este modelo de regresión lineal para estimar cuáles serán los resultados para otros valores de x. Por ejemplo, si queremos saber el resultado para x = 5, usaremos el modelo anterior y veremos que el resultado es 1.7449:
y=0.0918⋅5+1.2859=1.7449
Este es un ejemplo muy simple. En realidad, los problemas de machine learning tienen muchas más variables. Sin embargo, he escogido este ejemplo porque es muy fácil de visualizar, explicar y entender. Espero que la intuición de este ejemplo sirva para entender lo que está pasando cuando haya más variables.
La Regresión Logística es un método estadístico para predecir clases binarias. El resultado o variable objetivo es de naturaleza dicotómica. Dicotómica significa que solo hay dos clases posibles. Por ejemplo, se puede utilizar para problemas de detección de cáncer o calcular la probabilidad de que ocurra un evento.
La Regresión Logística es uno de los algoritmos de Machine Learning más simples y más utilizados para la clasificación de dos clases. Es fácil de implementar y se puede usar como línea de base para cualquier problema de clasificación binaria. La Regresión Logística describe y estima la relación entre una variable binaria dependiente y las variables independientes.
La Regresión Logística lleva el nombre de la función utilizada en el núcleo del método, la función logística es también llamada función Sigmoide. Esta función es una curva en forma de S que puede tomar cualquier número de valor real y asignar a un valor entre 0 y 1. Si la curva va a infinito positivo la predicción se convertirá en 1, y si la curva pasa el infinito negativo, la predicción se convertirá en 0. Si la salida de la función Sigmoide es mayor que 0.5, podemos clasificar el resultado como 1 o SI, y si es menor que 0.5 podemos clasificarlo como 0 o NO. Por su parte si el resultado es 0.75, podemos decir en términos de probabilidad como, hay un 75% de probabilidades de que el paciente sufra cáncer.
Diferencias entre Regresión Lineal y Regresión Logística
La Regresión Lineal proporciona una salida continua, pero la Regresión Logística proporciona una salida discreta. Un ejemplo de una salida continua es conocer el porcentaje de probabilidad de lluvia o el precio de una acción. Un ejemplo de una salida discreta, por su parte, es conocer si va a llover o no, o si el precio de una acción subirá o no. Para visualizar un ejemplo, en el siguiente enlace.
Tipos de Regresión Logística
Regresión Logística Binaria: la variable objetivo tiene solo dos resultados posible, Llueve o NO Llueve, Sube o Baja.
Regresión Logística Multinomial: la variable objetivo tiene tres o más categorías nominales, como predecir el tipo de vino.
Regresión Logística Ordinal: la variable objetivo tiene tres o más categorías ordinales, como clasificar un restaurante o un producto del 1 al 5.
Comenzaremos con un ejemplo, en el siguiente notebook
Uno de los clasificadores más utilizados en Machine Learning por su simplicidad y rapidez, es el Clasificador Bayes ingenuo. El cual es una técnica de clasificación supervisada basada en el teorema de Bayes que asume que existe una independencia entre los atributos. En términos simples, un Clasificador Bayes ingenuo asume que la presencia de una característica particular en una clase no está relacionada con la presencia de cualquier otra característica. Por ejemplo, una fruta puede considerarse como una manzana si es roja, redonda y de aproximadamente 9 cm de diámetro.
Incluso si estas características dependen unas de otras o de la existencia de otras características, todas estas propiedades contribuyen independientemente a la probabilidad de que esta fruta sea una manzana. Se lo llama ingenuo ya que asumir independencia absoluta entre todos los atributos, no es algo que se suela dar en la realidad. El modelo Bayes ingenuo es fácil de construir y particularmente útil para conjuntos de datos muy grandes. A pesar de su simplicidad y de su irealista postulado de independencia, este clasificador se ha mostrado muy efectivo y se suele utilizar como el estándar para evaluar el rendimiento de otros modelos de Machine Learning.
El Clasificador Bayes ingenuo se utiliza en múltiples escenarios de la vida real, tales como:
Clasificación de texto: Es uno de los algoritmos conocidos más exitosos cuando se trata de la clasificación de documentos de texto, es decir, si un documento de texto pertenece a una o más categorías (clases).
Detección de spam: Es un ejemplo de clasificación de texto. Se ha convertido en un mecanismo popular para distinguir el correo electrónico spam del correo electrónico legítimo.
Análisis de sentimientos: Puede ser utilizado para analizar el tono de tweets, comentarios y revisiones, ya sean negativos, positivos o neutrales.
Sistema de Recomendaciones: El algoritmo Bayes ingenuo en combinación con el filtrado colaborativo se utiliza para construir sistemas de recomendación híbridos que ayudan a predecir si un usuario desea un recurso determinado o no.
Veamos un ejemplo con la ayuda de Scikit-Learn en el siguiente enlace. También tendremos un ejemplo en un notebook aquí.
K-Nearest-Neighbors es un algoritmo basado en instancia de tipo supervisado de Machine Learning. Puede usarse para clasificar nuevas muestras (valores discretos) o para predecir (regresión, valores continuos). Al ser un método sencillo, es ideal para introducirse en el mundo del Aprendizaje Automático. Sirve esencialmente para clasificar valores buscando los puntos de datos “más similares” (por cercanía) aprendidos en la etapa de entrenamiento y haciendo conjeturas de nuevos puntos basado en esa clasificación.
Es un método que simplemente busca en las observaciones más cercanas a la que se está tratando de predecir y clasifica el punto de interés basado en la mayoría de datos que le rodean. Que sea un algoritmo basado en instancias, simplemente significa que nuestro algoritmo no aprende explícitamente un modelo (como por ejemplo en Regresión Logística o árboles de decisión). En cambio memoriza las instancias de entrenamiento que son usadas como “base de conocimiento” para la fase de predicción.
Aunque sencillo, se utiliza en la resolución de multitud de problemas, como en sistemas de recomendación, búsqueda semántica y detección de anomalías.
Veamos un ejemplo de un clasificador de K-Nearest-Neighbors en Scikit-learn en el siguiente enlace, y también tendremos un ejemplo en un notebook aquí.
El método de clasificación-regresión Máquinas de Vector Soporte (Support Vector Machines, SVMs) fue desarrollado como un método de clasificación binaria, extendido a aplicación a problemas de clasificación múltiple y regresión. Se fundamentan en el Maximal Margin Classifier, que a su vez, se basa en el concepto de hiperplano.
Hiperplano y Maximal Margin Classifier
En un espacio p-dimensional, un hiperplano se define como un subespacio plano y afín de dimensiones, p−1. El término afín significa que el subespacio no tiene por qué pasar por el origen. En un espacio de dos dimensiones, el hiperplano es un subespacio de 1 dimensión, es decir, una recta. En un espacio tridimensional, un hiperplano es un subespacio de dos dimensiones, un plano convencional. Para dimensiones p>3 no es intuitivo visualizar un hiperplano, pero el concepto de subespacio con p−1 dimensiones se mantiene. La definición matemática de un hiperplano es bastante simple. En el caso de dos dimensiones, el hiperplano se describe acorde a la ecuación de una recta. El punto x cae a un lado o al otro del hiperplano cuando no satisface la ecuación.. Así pues, se puede entender que un hiperplano divide un espacio p-dimensional en dos mitades. Para saber en qué lado del hiperplano se encuentra un determinado punto x, solo hay que calcular el signo de la ecuación.
La siguiente imagen muestra el hiperplano de un espacio bidimensional. La ecuación que describe el hiperplano (una recta) es 1+2x1+3x2=0. La región azul representa el espacio en el que se encuentran todos los puntos para los que 1+2x1+3x2>0 y la región roja el de los puntos para los que 1+2x1+3x2<0.
Clasificación binaria empleando un hiperplano
Cuando se dispone de n observaciones, cada una con p predictores y cuya variable respuesta tiene dos niveles (de aquí en adelante identificados como +1 y −1), se pueden emplear hiperplanos para construir un clasificador que permita predecir a que grupo pertenece una observación en función de sus predictores. Este mismo problema puede abordarse también con otros métodos (regresión logística, LDA, árboles de clasificación…) cada uno con ventajas y desventajas.
Para facilitar la comprensión, las siguientes explicaciones se basan en un espacio de dos dimensiones, donde un hiperplano es una recta. Sin embargo, los mismos conceptos son aplicables a dimensiones superiores.
La definición de hiperplano para casos perfectamente separables linealmente resulta en un número infinito de posibles hiperplanos, lo que hace necesario un método que permita seleccionar uno de ellos como clasificador óptimo.
Comenzaremos con la implementación de una SVM simple en el siguiente notebook.
Los algoritmos SVM utilizan un conjunto de funciones matemáticas que se definen como el kernel. La función del kernel es tomar datos como entrada y transformarlos en la forma requerida. Los diferentes algoritmos de SVM utilizan diferentes tipos de funciones del kernel. Estas funciones pueden ser de diferentes tipos. Por ejemplo, lineal, no lineal, polinomial, función de base radial (RBF) y sigmoide. Para evaluar los distintos tipos de kernels, revisemos el siguiente notebook.
Además de los algoritmos de clasificación, un aspecto importante a tener en cuenta según la aplicación es la forma de medir el desempeño de los algoritmos de aprendizaje. Estos, deben implementarse de acuerdo a aquello que desee medirse en la tarea. Hay varias formas de evaluar un modelo de clasificación, y a continuación cubriremos algunas de las más populares. Además, un post más completo sobre estas métricas es encontrado aquí.
Después de entrenar un modelo de Machine Learning con datos etiquetados, se supone que tiene que funcionar con nuevos datos. No obstante, es importante garantizar la exactitud de las predicciones del modelo en producción.
Para conseguirlo, es necesario validar el modelo. El proceso de validación consiste en decidir si los resultados digitales que cuantifican las relaciones hipotéticas entre las variables son aceptables como descripciones de los datos.
Con el fin de evaluar el rendimiento de un modelo de Machine Learning, hay que probarlo con nuevos datos. En función del rendimiento del modelo con datos desconocidos, se puede determinar si aún falta por ajustarlo, se ha ajustado de más o está “bien generalizado”.
Algunos de los elementos importantes empleados para la validación son:
Conjunto de entrenamiento (training set): datos/observaciones con las que se entrena el modelo.
Conjunto de validación y conjunto de test (validation set y test set): datos/observaciones del mismo tipo que las que forman el conjunto de entrenamiento pero que no se han empleado en la creación del modelo. Son datos que el modelo no ha “visto”.
Métricas de entrenamiento (training error): error que comete el modelo al predecir observaciones que pertenecen al conjunto de entrenamiento.
Métricas de validación y error de test (evaluation error y test error): error que comete el modelo al predecir observaciones del conjunto de validación y del conjunto de test. En ambos casos son observaciones que el modelo no ha “visto”.
Algunos ejemplos de validación pueden encontrarse aquí y aquí
Matriz de confusión - Confusion Matrix
Primero, asegurémonos de conocer la terminología básica utilizada en los problemas de clasificación antes de analizar los detalles de cada métrica. Puede omitir esta sección si ya está familiarizado con la terminología.
Uno de los conceptos clave en el rendimiento de la clasificación es la matriz de confusión (también conocida como matriz de error), que es una visualización tabular de las predicciones del modelo frente a las etiquetas de verdad fundamental. Cada fila de la matriz de confusión representa las instancias en una clase predicha y cada columna representa las instancias en una clase real.
Repasemos esto con un ejemplo. Supongamos que estamos construyendo una clasificación binaria para clasificar imágenes de gatos a partir de imágenes que no son de gatos. Y supongamos que nuestro conjunto de prueba tiene 1100 imágenes (1000 imágenes que no son de gatos y 100 imágenes de gatos), con la siguiente matriz de confusión.
De 100 imágenes de gatos, el modelo ha predicho correctamente 90 de ellas y ha clasificado incorrectamente 10 de ellas. Si nos referimos a la clase “gato” como positiva ya la clase que no es gato como clase negativa, entonces 90 muestras predichas como gato se consideran como verdaderas positivas y las 10 muestras predichas como no gato son falsas negativas.
De 1000 imágenes que no son de gatos, el modelo ha clasificado correctamente 940 de ellas y ha clasificado erróneamente 60 de ellas. Las 940 muestras clasificadas correctamente se denominan verdaderas negativas, y esas 60 se denominan falsas positivas.
Como podemos ver, los elementos diagonales de esta matriz denotan la predicción correcta para diferentes clases, mientras que los elementos fuera de la diagonal denotan las muestras que están mal clasificadas.
Ahora que comprendemos mejor la matriz de confusión, entremos en las métricas reales.
Example:
Exactitud - Accuracy
La exactitud de la clasificación es quizás la métrica más simple que uno pueda imaginar, y se define como el número de predicciones correctas dividido por el número total de predicciones, multiplicado por 100. Entonces, en el ejemplo anterior, de 1100 muestras 1030 se predicen correctamente, lo que da como resultado un precisión de clasificación de:
Classification accuracy= (True_Positive+True_Negatives)/ (Total samples)
Classification accuracy= (90+940)/(1000+100)= 1030/1100= 93.6%
Especificidad
Hay muchos casos en los que la precisión de la clasificación no es un buen indicador del rendimiento de su modelo. Uno de estos escenarios es cuando su distribución de clases está desequilibrada (una clase es más frecuente que otras). En este caso, incluso si predice todas las muestras como la clase más frecuente, obtendría una alta tasa de precisión, lo que no tiene ningún sentido (porque su modelo no está aprendiendo nada y solo está prediciendo todo como la clase superior). Por ejemplo, en nuestra clasificación de gatos frente a no gatos anterior, si el modelo predice que todas las muestras no son de gatos, el resultado sería 1000/1100 = 90,9%.
Por lo tanto, también debemos analizar las métricas de rendimiento específicas de la clase. La precisión es una de esas métricas, que se define como:
Precision= True_Positive/ (True_Positive+ False_Positive)
Precision_cat= #samples correctly predicted cat/#samples predicted as cat = 90/(90+60) = 60%
Precision_NonCat= 940/950= 98.9%
Sensibilidad - Recall
El recuerdo es otra métrica importante, que se define como la fracción de muestras de una clase que el modelo predice correctamente. Más formalmente:
Recall= True_Positive/ (True_Positive+ False_Negative)
Por lo tanto, para nuestro ejemplo anterior, la tasa de recuperación de clases de gatos y no gatos se puede encontrar como:
Recall_cat= 90/100= 90%
Recall_NonCat= 940/1000= 94%
F1 score
Según la aplicación, es posible que desee dar mayor prioridad a la recall o la precisión. Pero hay muchas aplicaciones en las que ambos son importantes. Por lo tanto, es natural pensar en una forma de combinar estos dos en una sola métrica. Una métrica popular que combina precisión y recuperación se llama F1-score, que es la media armónica de precisión y recuperación definida como:
F1-score= 2*Precision*Recall/(Precision+Recall)
Entonces, para nuestro ejemplo de clasificación con la matriz de confusión en la el F1 score se puede calcular como:
F1_cat= 2*0.6*0.9/(0.6+0.9)= 72%
Error Cuadrático Medio ECM - Mean Squared Error MSE
El “error cuadrático medio” es quizás la métrica más utilizada para los problemas de regresión. Básicamente, encuentra el error cuadrático medio entre los valores predichos y reales.
Supongamos que tenemos un modelo de regresión que predice el precio de las casas en el área de Seattle (muéstrelo con ŷᵢ), y digamos que para cada casa también tenemos el precio real por el que se vendió (denotado con yᵢ).
A veces, las personas usan RMSE para tener una métrica con escala como valores objetivo, que es esencialmente la raíz cuadrada de MSE.
Al observar la predicción del precio de la vivienda, RMSE muestra esencialmente cuál es la desviación promedio en los precios de la vivienda predichos de su modelo de los valores objetivo (los precios por los que se venden las viviendas).
Error Medio Absoluto EMA - Mean Absolute Error MAE
El error absoluto medio (o la desviación absoluta media) es otra métrica que encuentra la distancia absoluta media entre los valores previstos y los objetivos.
Se sabe que MAE es más robusto a los valores atípicos que MSE. La razón principal es que en MSE al elevar al cuadrado los errores, los valores atípicos (que generalmente tienen errores más altos que otras muestras) reciben más atención y dominio en el error final e impactan los parámetros del modelo.
También vale la pena mencionar que hay una buena interpretación de máxima probabilidad (MLE) detrás de las métricas de MSE y MAE. Si asumimos una dependencia lineal entre las características y los objetivos, entonces MSE y MAE corresponden a la MLE en los parámetros del modelo asumiendo a priori de Gauss y Laplace en los errores del modelo, respectivamente.
Revisemos el siguiente notebook.