En el episodio de hoy de Un podcast ninja sobre Big Data hablamos de clasificar cosas y de modelos de regresión logística.
La regresión lineal es como ir a una cata de tartas con gymkana incluida.
Nos enseñan las tartas, nos las dejan probar y nos dicen qué ingredientes tiene cada una pero somos nosotros los que tenemos que averiguar qué cantidad de cada ingrediente tenemos que echarle a la receta para que salga la tarta que nos han enseñado.
En cada experimento que hacemos probamos el resultado y vemos cuánto se parece a la tarta que nos habían enseñado. Igual vamos pasados de azúcar, igual nos hemos quedado cortos de harina.
Da igual, lo importante es participar. Nosotros vamos ajustando cantidades.
Después de hacer esto unos cuantos miles de veces podrían darnos los ingredientes de una tarta y nosotros saber cuánto echar de cada uno para hacer la mejor tarta posible.
Lo primero de todo vamos a situar este modelo en el universo de la Inteligencia Artificial.
Tenemos el campo de la IA.
Dentro de la Inteligencia Artificial está el Machine Learning, que son sistemas capaces de hacer una tarea sin haber sido específicamente programados para hacerla.
Eso sí, lo que les damos datos. Vivan los datos.
Dentro del Machine Learning tenemos:
Por otra parte, tenemos modelos que resuelven problemas:
Solo hay dos clases de tarta, las que están ricas y las que no.
La idea es parecida a la regresión lineal pero el problema que resolvemos es diferente.
Tenemos los ingredientes de la tarta y tenemos que ir ajustando las cantidades de cada uno para obtener tartas que estén buenas o que no lo estén.
Depende de la tarta que nos hayan dado como ejemplo.
Un caso muy ilustrativo es relacionar las horas de estudio para clasificar a los alumnos en los que van a aprobar y los que no.
Por regla general, si ordenamos a los estudiantes en función de las horas de estudio que han metido para un examen veremos que la mayoría de los que han estudiado poco tiempo, suspenden y los que han estudiado muchas horas aprueban.
Evidentemente en el mundo real hay excepciones, pero esto del Machine Learning va de modelar y para eso hay que asumir cosas y simplificar la realidad.
Bien.
Hay un número de horas de estudio alrededor del cuál hay algunos que aprueban y otros que no. Una zona gris.
Si has estudiado ese número de horas, no lo tienes claro.
Por otro lado, cuántas más horas meta alguien de estudio, más seguro es que formará parte del grupo de los aprobados.
Hasta un cierto límite práctico.
Llegará un punto en el que estudiar más horas no proporcionará una mejora significativa en los resultados.
Pasar el examen es el objetivo, y una vez logrado, estudiar infinitas horas adicionales no tiene sentido.
Se pasa el examen y fin.
Esto tiene relación con la teoría de las ganancias marginales decrecientes que dice que, al añadir más de algo (tiempo de estudio), manteniendo el resto de cosas constante, las ganancias adicionales obtenidas de cada unidad extra que añadimos (en nuestro caso, de tiempo de estudio) disminuirán en algún punto.
Es decir, al principio, cada hora de estudio que echemos de más puede mejorar mucho nuestras probabilidades de aprobar un examen, pero eventualmente, cada hora adicional tendrá cada vez menos impacto.
La regresión logística nos ayuda a modelar esta relación porque utilizamos la combinación lineal de las características de entrada al modelo y las transformamos con una función matemática - la función sigmoide - que consigue precisamente reflejar este efecto.
Un modelo de regresión logística devuelve el grado de confianza del modelo de que la observación pertenezca a una clase, la de los aprobados, o no.
El grado de confianza es un numerito entre cero (nada de confianza en aprobar) y uno (fijo que aprobamos).
La función sigmoide no deja de ser un truco matemático más para conseguir transformar nuestros datos de la manera que mejor nos convenga.
En este caso para limitarlos entre cero y uno y que modelen el grado de confianza.
Por tanto, el modelo de regresión logística es la combinación lineal de las características de entrada al modelo a la que aplicamos una transformación para que la salida represente el grado de confianza de si esa observación pertenece a una clase o no.
Una vez llegados a este punto volvemos al episodio 80: Todo modelo de Machine Learning tiene 3 cosas en común:
La regresión logística también.
La función de coste en regresión logística se llama "entropía cruzada" o "log loss", que es un nombre también bastante poco atractivo.
Como la regresión logística lo que devuelve es un número entre 0 y 1 que refleja el grado de confianza de que esa observación pertenezca a una clase o no, la función de coste lo que hace es penalizar al modelo cuando tiene un grado de confianza muy grande de que una observación del dataset de entrenamiento va a pertenecer a la clase positiva y resulta que luego vemos la etiqueta de esa observación y no pertenece a esa clase.
Y al revés… si el modelo devuelve un grado de confianza pequeño de que una observación pertenezca a la clase positiva y luego sí que pertenece pues la función de coste aumenta.
Esto es lo que hace la entropía cruzada y lo que queremos es minimizarla.
Una vez tenemos claro el criterio de optimización, que es que la función de coste sea lo más pequeña posible, lo cual indicaría que el modelo habría conseguido no meter la pata en las clasificaciones de las observaciones, el siguiente paso es seleccionar un algoritmo de optimización.
Nuestro querido descenso de gradiente, del que ya hablábamos en el episodio 80.
Si queréis ver cómo implementar y entrenar un modelo de regresión logística desde cero con Python y así ver las funciones de coste y la optimización del descenso de gradiente os dejo enlazado uno de los tutoriales de la membresía ninja, que hace precisamente esto.
Para ver las tripas de la decisión logística.
En cuanto termina nuestro proceso de optimización que lo que hace es ir ajustando los coeficientes del modelo iterativamente para conseguir que la función de coste sea lo más pequeña posible ya tenemos nuestro modelo de regresión logística ready para clasificar.
Le podemos meter las horas que hemos estudiado para nuestro examen de Machine Learning clásico y nos devuelve cuánto confía en que seamos del prestigioso grupo de personas aprobadas.
Igual tiene un 0 de confianza en nosotros, igual tiene un 0,7 o igual tiene un 0,9.
Ya veremos.
Aquí tenemos otra decisión del ninja de los datos que ha diseñado y entrenado el modelo de regresión logística.
¿A partir de qué grado de confianza metemos a una observación dentro de la clase positiva, del grupo de alumnos aprobados?
Recordad que hay una zona un poco gris en las que una observación puede formar parte de la clase positiva o no, y dependiendo del caso de uso tendremos que decidir un umbral.
Por defecto se utiliza un umbral de 0,5… el grado de confianza va de cero a uno, por lo que tiene sentido fijar el umbral de decisión en el punto medio.
Sin embargo, este umbral puede ajustarse según nuestras necesidades específicas.
Si estamos en una situación donde es muy importante minimizar los falsos negativos, es decir, asegurarnos de que las observaciones que hemos decidido que pertenecen a la clase negativa no pertenezcan a la clase positiva, podríamos bajar el umbral a 0.4.
Es decir, si estamos haciendo una prueba médica para detectar si un paciente tiene o no una enfermedad será mejor bajar un poco el umbral de decisión para que no se nos queden pacientes con la enfermedad sin diagnosticar.
Por otro lado, si queremos estar seguros de que sólo los que tienen una alta probabilidad de aprobar sean clasificados como aprobados, podríamos subir el umbral.
Por ejemplo, podríamos estar ante un modelo de regresión logística que se dedique a filtrar el correo electrónico y determinar si un correo es spam o no.
La clase positiva es un mensaje de spam que el sistema manda a la bandeja de correo no deseado.
En este caso, preferiremos evitar que los correos importantes terminen en la carpeta de spam, donde podrían pasar desapercibidos.
Un falso positivo.
Aumentando el umbral de decisión conseguimos que sólo los correos que tienen una muy alta probabilidad de ser spam sean filtrados.
¿Se nos colará algún spammer a la bandeja principal?
Sí.
Pero el coste de un falso positivo (un correo legítimo clasificado como spam) puede ser alto. Podríamos perder un correo importante.
Si os habéis fijado hemos estado todo el rato clasificando entre dos clases… la clase positiva y la negativa, aprobar o suspender, correo de spam o no correo de spam, detectar una enfermedad o no.
¿Qué pasa si tenemos varias clases? Como bien preguntaban en una de las sesiones en directo que tuvimos en la Comunidad ninja.
Pues existen dos estrategias.
La estrategia de uno contra todos consiste en entrenar un clasificador binario para cada clase.
Estos clasificadores binarios distinguen entre esa clase y el resto. Después, se comparan los grados de confianza de cada clasificador binario y se elige el que sea mayor.
Si estamos clasificando imágenes con dígitos del 0 al 9, entrenaremos diez clasificadores binarios diferentes.
Cada clasificador se entrenaría para responder a una pregunta específica: ¿Es este dígito un 0 o no?, ¿Es este dígito un 1 o no?, y así sucesivamente hasta ¿Es este dígito un 9 o no?
Cuando llega una nueva imagen para clasificar, cada uno de estos clasificadores binarios asigna un grado de confianza de que la imagen pertenezca a su respectiva clase.
En la estrategia de uno contra uno entrenamos un clasificador para cada combinación de dos clases.
Entrenaríamos muchos más modelos pero la parte buena es que los clasificadores solo entrenan con las observaciones de las clases que deben distinguir por lo que funcionamos con datasets de entrenamiento más pequeños, lo cuál es útil para modelos que no escalan bien para datasets muy grandes.
¿Y todo esto que tiene que ver con una red neuronal?
La regresión logística puede considerarse como la unidad básica de una red neuronal.
Una red neuronal está formada por capas de neuronas y en cada capa, cada neurona toma una combinación lineal de las entradas a esa capa, aplica una función de activación - como la función sigmoide de la que hemos hablado antes - y produce un resultado, igual que un modelo de regresión logística, que pasa a la siguiente capa hasta llegar a la salida de la red.
La potencia y flexibilidad de las redes neuronales está en que tienen múltiples capas y cada una varias neuronas.
Peeero, la regresión logística es la piedra angular de las redes neuronales.
Cada neurona en una red neuronal aplica una transformación similar a la regresión logística, utilizando una combinación lineal de las entradas seguida por una función sigmoide o similar.
Así que, cuando trabajamos con regresión logística, estamos utilizando una técnica fundamental que también se aplica en modelos de aprendizaje más avanzados como las redes neuronales.
Esto nos muestra cómo los conceptos básicos de la regresión logística se pueden escalar y extender para abordar problemas más complejos en el mundo del aprendizaje automático y la inteligencia artificial.
Con este episodio tenemos dos modelos finiquitados, la regresión lineal y la regresión logística.
Hoy somos un poco más ninjas.
Espero que os guste el episodio.
Si es así, no olvidéis dejar un «Me gusta» y algún comentario al episodio en Ivoox o una valoración de 5 estrellas del podcast en Apple podcasts, en Spotify, en Youtube o donde quiera que escuchéis el podcast.
Recordad que si tenéis cualquier duda o pregunta podéis contactar conmigo a través del formulario de contacto o podemos seguir la conversación en Twitter.
Muchas gracias por estar ahí y os espero en el próximo episodio de Un Podcast Ninja sobre Big Data.