
La regresión logística es uno de los algoritmos más utilizados en Machine Learning para resolver problemas de clasificación binaria. A continuación, exploraremos en detalle qué es, cómo funciona, sus ventajas, desventajas, cómo implementarla y los tipos de resultados que puede predecir.
¿Qué es la regresión logística?
La regresión logística es un modelo estadístico que se utiliza para predecir la probabilidad de que una observación pertenezca a una determinada clase. Aunque se basa en la regresión lineal, su objetivo principal es resolver problemas de clasificación binaria, por ejemplo, la clasificación de correos si es "spam" o "no spam".
El modelo transforma la salida lineal calculada en una probabilidad utilizando una función sigmoide. A partir de esa probabilidad, decide la clase a la que pertenece una muestra, basándose en un umbral predefinido (por ejemplo, 0.5).
¿Para qué sirve el modelo de la regresión logística?
Este modelo es ampliamente utilizado en situaciones donde el objetivo es clasificar datos en dos categorías. Algunos ejemplos incluyen:
- Diagnóstico médico: Determinar si un paciente tiene una enfermedad (1) o no (0).
- Modelos de riesgo de préstamos para la banca: Evaluar si un cliente es apto para un préstamo (1) o no (0).
- Clasificación de correos electrónicos: Identificar si un correo es spam (1) o no (0).
- Predicciones de comportamiento: Predecir si un usuario comprará un producto (1) o no (0).
- Estimar la probabilidad de pertenencia a una clase.
¿Cómo funciona la regresión logística?
El modelo sigue estos pasos:
1.Cálculo del puntaje lineal:
Se combina linealmente las entradas xi con los pesos wi y el sesgo bi:
z=w1x1+w2x2+⋯+wnxn+b
2.Aplicación de la función sigmoide:
La función sigmoide convierte esta salida lineal en una probabilidad p entre 0 y 1:
3.Clasificación basada en un umbral:
- Si p≥0.5 el modelo predice la clase 1.
- Si p<0.5, el modelo predice la clase 0.
4.Ejemplo:
En el modelo de la regresión logística vamos a aproximar la probabilidad a 0 o 1 con el valor de la variable explicativa X. Donde la aproximación la vamos a calcular mediante una la siguiente función logística:
Si tenemos la siguiente función:
Cuyo dominio es 0,1
Y su rango es −∞,+∞
Despejando el valor p:
Su dominio es −∞,+∞
Y su rango es 0,1
Ventajas y desventajas de la regresión logística
Ventajas:
La regresión logística es un modelo muy utilizado en problemas de clasificación binaria, y presenta una serie de ventajas que la hacen una herramienta poderosa y versátil. A continuación, te explicamos sus principales beneficios de forma clara y concisa:
- Simplicidad y eficiencia:
- Es fácil de implementar y rápido de entrenar, lo que la convierte en una opción ideal para proyectos iniciales de Machine Learning.
- Interpretación sencilla:
- Los coeficientes que genera la regresión logística son fácilmente interpretables. Estos indican la dirección (positiva o negativa) y la magnitud de la relación entre cada variable independiente y la probabilidad de pertenecer a una clase.
- Predicciones de probabilidad:
- A diferencia de otros modelos de clasificación, no solo asigna una etiqueta a cada clase, sino que genera probabilidades que indican el nivel de confianza en la predicción. Esto es útil para tomar decisiones informadas.
- Buen rendimiento con datos linealmente separables:
- Funciona muy bien cuando existe una relación lineal entre las variables independientes y la probabilidad de pertenecer a una clase. Es especialmente efectiva cuando las clases son linealmente separables.
- Manejo de variables categóricas:
- La regresión logística puede trabajar tanto con características numéricas como categóricas, lo que la hace versátil para diversos tipos de datos.
- No requiere normalidad de las variables independientes:
- A diferencia de otros algoritmos de regresión, no asume que las variables independientes sigan una distribución normal, lo que amplía su aplicabilidad.
Desventajas:
Aunque la regresión logística es un modelo muy útil y ampliamente utilizado, también tiene limitaciones importantes que debes tener en cuenta al usarlo. Aquí te explicamos sus principales desventajas de forma clara y resumida:
- Limitación a relaciones lineales:
- La regresión logística no funciona bien cuando las clases no son separables linealmente. En estos casos, es necesario usar técnicas adicionales, como características polinómicas o kernels.
- No adecuada para datos no lineales:
- Si las relaciones entre las variables independientes y la variable objetivo no son lineales, el modelo puede tener un rendimiento deficiente. En estos casos, modelos como árboles de decisión o máquinas de soporte vectorial (SVM) suelen ser mejores opciones.
- Sensibilidad a valores atípicos:
- Los valores extremos o atípicos pueden influir significativamente en los resultados del modelo, afectando la precisión de las predicciones.
- Limitaciones para clasificaciones multiclase:
- Por defecto, la regresión logística está diseñada para problemas de clasificación binaria. Para problemas de clasificación multiclase, es necesario aplicar estrategias como "one-vs-rest" o "softmax".
- Requiere datos etiquetados:
- Al ser un modelo supervisado, necesita un conjunto de datos con etiquetas para el entrenamiento, lo que puede ser un desafío si no se cuenta con datos correctamente etiquetados.
- Riesgo de sobreajuste:
- Si se utilizan demasiadas características o se ajusta demasiado el modelo, puede sobre ajustar los datos de entrenamiento, lo que provoca un bajo rendimiento al predecir datos nuevos.
¿Cómo se implementa la regresión logística?
A continuación, te mostramos un ejemplo práctico de implementación en Python utilizando la biblioteca scikit-learn:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
def getDatos():
iris = datasets.load_iris()
X = iris.data[:, [2,3]] #Carga en X las columnas 2 y 3
Y = iris.target #Devuelve las salidas deseadas
return X,Y
def divisionDatos(X_train,Y_train):
X_train,X_test,Y_train,Y_test = train_test_split(X,Y, test_size=0.3,random_state=1,stratify=Y)
return X_train,X_test,Y_train,Y_test
def normalizarDatos(X_train,X_test):
#Normalizacion de los datos
sc = StandardScaler()
X_train_std = sc.fit_transform(X_train) #Estima los parametros u y o para dimension de los datos
X_test_std = sc.transform(X_test)
return X_train_std,X_test_std
X,Y = getDatos()
X_train,X_test,Y_train,Y_test = divisionDatos(X,Y)
X_train_std,X_test_std=normalizarDatos(X_train,X_test)
#Entrenamiento del modelo
lr = LogisticRegression(C=100.0, random_state=1,multi_class='ovr')
lr.fit(X_train_std, Y_train)
#Predicion del modelo
Y_predic =lr.predict(X_test_std)
a=lr.predict_proba(X_test_std[:3, :])
print("Probabilidad de las tres primeras muestras:")
print("Clase 0", "Clase 1", "Clase 2")
print(a)
print("")
b=lr.predict(X_test_std[:3, :])
print("La muestra uno pertenece a la clase: ", b[0])
print("La muestra dos pertenece a la clase: ", b[1])
print("La muestra tres pertenece a la clase: ", b[2])
El código presentado implementa un modelo de regresión logística para clasificar flores del conjunto de datos Iris, un clásico en Machine Learning. A continuación, se describe paso a paso lo que hace el código:
- Carga de datos (Iris Dataset):
- Utiliza el conjunto de datos Iris disponible en la biblioteca scikit-learn. Este dataset contiene información sobre tres tipos de flores con características como longitud y ancho del pétalo y sépalo.
- Seleccionamos las características de longitud y ancho del pétalo para construir el modelo.
- División del conjunto de datos:
- Los datos se dividen en conjuntos de entrenamiento (70%) y prueba (30%) utilizando la función train_test_split, asegurando que las proporciones de las clases se mantengan constantes mediante la opción stratify.
- Normalización de los datos:
- Se aplica normalización a las características usando StandardScaler para que los datos tengan una media de 0 y una desviación estándar de 1. Esto mejora el rendimiento del modelo al eliminar escalas diferentes entre las variables.
- Entrenamiento del modelo de regresión logística:
- Creamos y entrenamos un modelo de regresión logística con el hiperparámetro C=100.0 y la estrategia multi_class=’ovr’ para clasificaciones multiclase (One-vs-Rest).
- Este modelo aprende a clasificar las flores en una de las tres categorías basándose en las características seleccionadas.
- Predicción y probabilidad:
- El modelo predice las clases de las muestras de prueba y calcula las probabilidades de pertenencia a cada clase utilizando el método predict_proba.
- También asigna una clase específica a cada muestra mediante el método predict.
- Resultados impresos:
- Imprimimos las probabilidades de pertenencia a cada clase para las tres primeras muestras de prueba.
- Finalmente, se muestra la clase asignada a cada una de esas muestras.
¿Qué tipo de resultados predice la regresión logística?
El fragmento de código lr.predict_proba(X_test_std[:3, :]) se utiliza para calcular las probabilidades de pertenencia a las clases de las primeras tres muestras del conjunto de prueba (X_test_std) utilizando el modelo de regresión logística previamente entrenado. A continuación, explicamos los elementos clave del proceso:
Elementos del código explicados:
- Modelo de clasificación logística – lr :
-
- lr es el modelo de regresión logística que ya ha sido entrenado con los datos. Este modelo es una herramienta poderosa para clasificar observaciones en una o varias clases basándose en probabilidades.
- Proporciona no solo predicciones binarias, sino también probabilidades que indican qué tan probable es que cada muestra pertenezca a una clase específica.
- Conjunto de datos de prueba estandarizado – X_test_std :
-
- X_test_std es el conjunto de datos que se usa para evaluar el rendimiento del modelo. Ha sido previamente normalizado (media 0 y desviación estándar 1) para garantizar que las características estén en la misma escala, lo que mejora la precisión de las predicciones.
- Selección de muestras – X_test_std[:3, :] :
-
- Este fragmento selecciona las tres primeras muestras del conjunto de prueba. El operador [:3, :] indica que se toman las tres primeras filas (X[0],X[1],X[2]) y todas las columnas correspondientes a las características.
- Predicción de probabilidades – predict_proba() :
-
- Este método calcula las probabilidades de pertenencia a cada clase para las muestras seleccionadas. En lugar de devolver una etiqueta binaria (0 o 1), genera un conjunto de probabilidades que siempre suman 1 para cada muestra.
- Por ejemplo, para una muestra, el resultado podría ser algo como [0.2,0.7,0.1], lo que significa que cada clase tiene:
- 0: 20% de probabilidad.
- 1: 70% de probabilidad.
- 2: 10% de probabilidad.
Por ejemplo en el código anterior lo que nos muestra lr.predict_proba(X_test_std[:3, :]) :
Probabilidad de las tres primeras muestras:
Clase 0 Clase 1 Clase 2
[[3.81527885e-09 1.44792866e-01 8.55207131e-01]
[8.34020679e-01 1.65979321e-01 3.25737138e-13] [8.48831425e-01 1.51168575e-01 2.62277619e-14]]
La muestra uno pertenece a la clase: 2
La muestra dos pertenece a la clase: 0
La muestra tres pertenece a la clase: 0
Donde:
- En la primera fila el mayor valor tiene una probabilidad del 85.5% la cual pertenece a la clase 2
- Para la segunda fila el mayor valor tiene una probabilidad del 83.4% la cual pertenece a la clase 0
- Y para la tercera fila el mayor valor tiene una probabilidad del 85.8% la cual pertenece a la clase 0
Conclusión
La regresión logística es un modelo esencial en problemas de clasificación binaria. Es fácil de implementar, interpretable y eficaz para datos linealmente separables. Aunque tiene limitaciones, combinada con técnicas adicionales, puede ser aplicada a problemas más complejos.
Si buscas un modelo simple, interpretable y confiable para clasificar datos binarios, la regresión logística es una excelente opción. ¡Anímate a probarla en tus proyectos!





