La regresión logística es el algoritmo de aprendizaje automático más famoso después de la regresión lineal. En muchos sentidos, la regresión lineal y la regresión logística son similares. Pero, la mayor diferencia radica en para qué se utilizan. Los algoritmos de regresión lineal se usan para predecir/pronosticar valores, pero la regresión logística se usa para tareas de clasificación. Si tiene dudas sobre los conceptos de regresión lineal, consulte esto . Hay muchas tareas de clasificación realizadas rutinariamente por personas. Por ejemplo, clasificar si un correo electrónico es spam o no, clasificar si un tumor es maligno o benigno, clasificar si un sitio web es fraudulento o no, etc. Estos son ejemplos típicos en los que los algoritmos de aprendizaje automático pueden hacernos la vida mucho más fácil. Un algoritmo de clasificación realmente simple, rudimentario y útil es el algoritmo de regresión logística. Ahora, echemos un vistazo más profundo a la regresión logística.
El algoritmo de regresión logística también usa una ecuación lineal con predictores independientes para predecir un valor. El valor predicho puede estar en cualquier lugar entre infinito negativo e infinito positivo. Necesitamos que la salida del algoritmo sea variable de clase, es decir, 0-no, 1-sí. Por lo tanto, estamos aplastando la salida de la ecuación lineal en un rango de [0,1]. Para aplastar el valor predicho entre 0 y 1, usamos la función sigmoidea.
Ecuación lineal y función sigmoidea
Salida aplastada-h
Tomamos la salida (z) de la ecuación lineal y le damos a la función g(x) que devuelve un valor h aplastado, el valor h estará en el rango de 0 a 1. Para comprender cómo la función sigmoidea aplasta los valores dentro de la rango, vamos a visualizar la gráfica de la función sigmoidea.
Gráfico de la función sigmoidea
Como puede ver en el gráfico, la función sigmoidea se convierte en asíntota de y=1 para valores positivos de x y se convierte en asíntota de y=0 para valores negativos de x.
Dado que estamos tratando de predecir los valores de clase, no podemos usar la misma función de costo que se usa en el algoritmo de regresión lineal. Por lo tanto, usamos una función de pérdida logarítmica para calcular el costo de la clasificación errónea.
La función de costo anterior se puede reescribir como se muestra a continuación, ya que es difícil calcular los gradientes a partir de la ecuación anterior.
Tomamos derivadas parciales de la función de costo con respecto a cada parámetro (theta_0, theta_1, …) para obtener los gradientes. con la ayuda de estos gradientes, podemos actualizar los valores de theta_0, theta_1, … Para comprender las ecuaciones a continuación, necesitará algunos cálculos.
Gradientes
Pero, si no puede entenderlos, puede preguntarme o simplemente puede tomarlos tal como son.
Ahora que hemos formulado las ecuaciones necesarias, escribamos el código. Usaremos solo la biblioteca numpy para construir el modelo desde cero. Creo que esto proporcionaría una comprensión de lo que está sucediendo debajo del capó. Usaremos el conjunto de datos de Iris para entrenar y probar el algoritmo.
Cargamos los datos usando la biblioteca pandas. El conjunto de datos Iris tiene tres valores objetivo ('Iris-virginica', 'Iris-setosa', 'Iris-versicolor'). Como nos gustaría implementar un algoritmo de clasificación binaria, decidí descartar las filas con el valor objetivo Iris-virginica. Ahora, solo tenemos dos clases objetivo para predecir. Extraemos las variables independientes y dependientes del conjunto de datos. Ahora, pasemos a preparar los datos de entrenamiento y prueba.
Mezclamos los datos y los dividimos en datos de entrenamiento y prueba. Hay 90 ejemplos en nuestros datos de entrenamiento y 10 ejemplos en nuestros datos de prueba. Hay cuatro predictores en el conjunto de datos. Por lo tanto, extraemos cada una de las características y las almacenamos en vectores individuales.
Inicializamos los parámetros (theta_0, theta_1, …) con 0. Durante cada época, calculamos los valores usando la ecuación lineal, aplastamos los valores dentro del rango de 0 a 1 y luego calculamos el costo. A partir de la función de coste, calculamos los gradientes de cada parámetro y actualizamos sus valores multiplicando los gradientes por alfa. Alfa es la tasa de aprendizaje del algoritmo. Después de 10000 épocas, nuestro algoritmo habría convergido a los mínimos. Podemos probar nuestro algoritmo con los datos de prueba.
Preparamos las características de datos de prueba similares a los datos de entrenamiento. También recortamos los valores de theta_0, theta_1, theta_2, theta_3 y theta_4 de 90x1 a 10x1 ya que el número de ejemplos de prueba es solo 10. Calculamos las clases de prueba y verificamos la precisión de nuestro modelo.
Puntuación de precisión de nuestro modelo
Nuestro modelo es capaz de alcanzar el 100% de precisión. Aunque la regresión logística es un algoritmo bastante poderoso, el conjunto de datos que hemos usado no es realmente complejo. Por lo tanto, nuestro modelo es capaz de lograr una precisión del 100%. También podemos visualizar el valor de la función de costo como nuestro modelo entrenado para 10000 épocas.
función de costo
Ahora, quizás se pregunte si se trata de muchas líneas de código para implementar un algoritmo simple. Para evitar escribir tantas líneas de código, podemos usar la biblioteca de aprendizaje de scikit. La biblioteca de aprendizaje de scikit tiene una clase integrada para la regresión logística que podemos importar y usar.
Más de 50 líneas de código se han reducido a menos de 10 líneas de código. También obtenemos un 100% de precisión a través de la clase de regresión logística de scikit learn library.
La regresión logística es un algoritmo simple que se puede usar para tareas de clasificación binaria/multivariada. Creo que a estas alturas habrá obtenido una comprensión básica de cómo funciona el algoritmo de regresión logística. Espero que este artículo haya sido útil :)