Regresión Logística en Python y R. Machine Learning #02

Daniel Tello
8 min readFeb 29, 2020

--

Introducción

Anteriormente en el artículo Regresión Lineal en R y Python se abordaron conceptos de Machine Learning y la regresión lineal utilizando el algoritmo de descenso de gradiente (gradient descent).

En está ocasión hablaremos de la regresión logística, la cual está considerado dentro de machine learning como aprendizaje supervisado.

Regresión Logística

La regresión logística es un modelo utilizado para clasificación que es sencillo de implementar y es extensamente usado en la industria.

En esta nota se referirá como un modelo lineal para clasificación binaria. Algunos eventos de clasificación binaria pueden ser los siguientes:

  • Email: Spam / No spam
  • Tumor: Benigno/ Maligno

Los eventos de clasificación pueden ser representados por la variable Y, la cual puede tomar dos valores 0 y 1. El valor 1 habitualmente es representado como un evento exitoso, mientras que el valor 0 como un evento fallido.

Figura 1: Resultados de la función logística.

En la figura anterior se puede reconocer que Y es una variable discreta aleatoria y depende de los valores de X.

En las ecuaciones a continuación, Pr(A) es la probabilidad del evento A, P(Xi,θ) es la probabilidad como una función de Xi y (θ) es el vector de parámetros. P es una notación abreviada de la probabilidad, Q(Xi,θ) y Q son los complementos de P(Xi,θ) y Q respectivamente.

Un concepto importante dentro de la regresión logística son los odds que corresponde al cuociente entre los eventos de éxito y de fracaso.

La función logística puede definirse como el logaritmo natural del odds, en realidad puede ser un logaritmo con cualquier base, pero por convención se utiliza este. Además está función puede expresarse en términos lineales.

Para lograr predecir la probabilidad se recurre a la inversa de la función logística, la cual es llamada función sigmoide.

Figura 2: función sigmoide

Para trabajar con el modelo de regresión logística hemos de considerar lo siguiente, m es el número de training set (set de entrenamiento), x son las variables de entrada e y las variables a predecir.

La función de hipótesis en la regresión logística puede expresarse como la función sigmoide.

El valor de z representa la decision boundary (límite de decisión), para ilustrar esto se puede apreciar la siguiente figura, en donde la línea roja representa la decision boundary, los puntos azules a los eventos no exitosos y los verdes a los exitosos.

Figure 3: Decision Boundary

Algoritmo de gradient descent

En la nota anterior se explicó con mayor detalle acerca del algoritmo de gradient descent, por lo que ahora solo nos interesa presentar las ecuaciones principales.

La función objetivo que optimiza el proceso de aprendizaje y que busca minimizar el error cuadrático entre la hipótesis y los valores de y. La variable de decisión está representado por el vector , m es el total de variables del set de entrenamiento.

Para encontrar los valores del vector θ, se utiliza el gradient descent, en donde se va actualizando el valor de θ.

Usando el gradiente de descenso, se van actualizando los valores de θ

La variable x(i)quiere decir el valor número i dentro de un vector de datos, el valor corresponde al learning rate, es recomendable que este valor sea pequeño ( 0.000001 a 100).

En algunas oportunidades será necesario aplicar scaling method como la estandarización o normalización, la cual ayuda al algoritmo de descenso de gradiente a converger más rápido. Para implementar la estandarización se debe aplicar la ecuación 4 en donde jes la media y j es la desviación estándar. En Python este proceso puede ejecutarse importando el método StandardScaler de la librería sklearn, mientras que en R puede realizarse con la función scale.

Implementación de la regresión logística

Para aplicar el modelo de regresión logística se trabajará con el siguiente dataset llamado Social Network Ads, el cual fue extraído desde Kaggle. Este dataset contiene cinco columnas id de usuario, sexo, edad, sueldo anual estimado y si el usuario realiza o no compras (1: compra realizada, 0: en caso contrario).

Figura 3: Social Network

Para efectos de esta implementación solo se trabajará con la columna edad y salario estimado, con lo que se buscará predecir si es que el usuario compró o no gracias al anuncio.

En la tabla a continuación se observan las primeras diez filas del dataset:

En la figura se ve un gráfico que presenta a los usuarios que compran o no, por su edad y su salario.

Figura 4: Edad vs Salario.

Los modelos fueron implementados utilizando los lenguajes de programación Python y R. El IDE (Integrated Development Environment) utilizado en Python fue Spyder y en el R fue R Studio.

Implementación de gradient descent en Python

Para implementar el algoritmo de descenso de gradiente se utilizaron las librerías numpy, pandas, matplotlib y math de Python.

Se desarrolló la clase LogisticRegressionGD basado en Raschka la que contiene los siguientes métodos:

  • El método __init__ que es el primer método cuando se crea un objeto de tipo “LinearRegressionGD”, este método contiene tres argumentos: el learning rate (l_rate) que por defecto están en 0.1 , el total de iteraciones (n_iter) que por defecto es 10.000 y el random_state que corresponde a la semilla generadora de números aleatorios.
  • El método fit, busca los parámetros en la hipótesis θ.. Los argumentos que se necesitan son el vector de la variable independiente (X), el vector de la variable dependiente (y) y el vector theta que contiene los valores θ. El vector θ inicial comienza con valores aleatorios.
  • El método sigmoid retorna la función sigmoide.
  • El método net_input retorna la multiplicación entre el vector theta transpuesto y las variables independientes.
  • El método predict, entrega los valores y pronosticados a partir de la regresión lineal realizada. Tiene como parámetro un vector para ingresar valores de la variable independiente (se sugiere que sean los valores de test).

A continuación se describe el script del modelo de regresión logística. Este script está compuesto de estos pasos:

  • Importar el dataset: Importar el dataset del csv “Social_Network_Ads.csv” y se separan las variables independientes y dependientes.
  • Seleccionar el conjunto de training y test: Se selecciona un conjunto de entrenamiento del modelo. Para realizar esta etapa es utilizado el método train_test_split de la librería sklearn. El conjunto de entrenamiento corresponde al 75 % del dataset y es elegido aleatoriamente.
  • Aplicación del modelo: Se aplica la clase LogisticRegressionGD y sus respectivos métodos. Es considerado en learning rate de 1E-8 y el número de iteraciones es de 200 mil.
  • Aplicación del modelo de regresión lineal con la librería sklearn.: Es realizada la regresión con el método LogisticRegression.
  • Matriz de confusión: para comparar los resultados de cada modelo.

Implementación de regresión logística con librería de R

A continuación se describe el script del modelo de regresión logística en R:

  • Importar el dataset
  • Selección de un conjunto de entrenamiento y test: Es seleccionado un conjunto de entrenamiento y test utilizando el package caTools, set.seed(0) es la semilla del generador de dinero números aleatorios. El conjunto de entrenamiento corresponde al 75 % del dataset y es elegido aleatoriamente.
  • Aplicación del modelo con la librería de R: es aplicado el modelo de regresión lineal utilizando la función glm( generalized linear model).
  • Matriz de confusión: es realizada para comparar la cantidad de datos acertados por el modelo.

Resultados

Los resultados se pueden apreciar en la siguiente tabla, en la cual se muestra la tasa de datos aciertos por cada modelo realizado para Purchased 0 y 1.

En la gráfica se muestran las funciones lineales proporcionadas por cada modelo.

Figura 5: Comparación de modelos.

Comentarios finales

El algoritmo de descenso es una buena herramienta para realizar regresiones logísticas, pero hay que recordar que no siempre entregará el óptimo global.

A veces será necesario aplicar la estandarización o normalización para que el algoritmo de descenso de gradiente pueda converger más rápido.

Referencias

  • Cramer, J.S. Chapter 2: The Binary Model, Logit Model from Econometric and Other Field. Cambrige University; 2003.
  • Logistic Regression. Social Network Ads. Kaggle.
  • Bruce, P. & Bruce, Chapter 5: Classification. A. Practical Statistic for Data Scientist. EEUU. O’Reilly; 2017.
  • Raschka, S. & Mirjalili, V. Python Machine Learning. Birmingham: Packt; 2019.
  • Regresión Lineal. GitHub @dtellogaete. Consultado 29 de febrero 2020
  • Samuel AL. Some studies in machine learning using the game of checkers. IBM: J Res Dev. 1959;3:210–29.
  • Williams, T. (2017). Learning Statistics. Concept and Applications in R. Virginia, EEUU. The Teaching Company.

--

--