Aplicación Práctica: Regresión Logística (Aprendizaje Supervisado)

 Regresión Lógistica.-


En estadística, la regresión logística es un tipo de análisis de clasificación utilizado para predecir el resultado de una variable categórica (una variable que puede adoptar un número limitado de categorías) en función de las variables independientes o predictoras. Es útil para modelar la probabilidad de un evento ocurriendo en función de otros factores. El análisis de regresión logística se enmarca en el conjunto de Modelos Lineales Generalizados (GLM por sus siglas en inglés) que usa como función de enlace la función logit. Las probabilidades que describen el posible resultado de un único ensayo se modelan como una función de variables explicativas, utilizando una función logística.

La regresión logística es usada extensamente en las ciencias médicas y sociales. Otros nombres para regresión logística usados en varias áreas de aplicación incluyen modelo logístico, modelo logit, y clasificador de máxima entropía.

La regresión logística analiza datos distribuidos binomialmente de la forma:
$$Y_i \sim B(p_i, n_i), \text{para } i =1,\ldots , m.$$

donde los números de ensayos Bernoulli $n_{i}$ son conocidos y las probabilidades de éxito  ${\displaystyle p_{i}}$ son desconocidas. Un ejemplo de esta distribución es el porcentaje de semillas (${\displaystyle p_{i}}$) que germinan después de que  $n_{i}$ son plantadas. El modelo es entonces obtenido a base de lo que cada ensayo (valor de i) y el conjunto de variables explicativas/independientes puedan informar acerca de la probabilidad final. Estas variables explicativas pueden pensarse como un vector $X_i$ k-dimensional y el modelo toma entonces la forma

$$p_i = \mathbb{E}\left(\dfrac{Y_i}{n_i}| X_i \right)$$.

Los logits de las probabilidades binomiales desconocidas son modeladas como una función lineal de los $X_i$.

$$ logit(p_i) = ln \left(\dfrac{p_i}{1-p_i}\right) = \beta_0 + \beta_1 x_1 + \ldots + \beta_k x_{ki}$$

Notar que un elemento particular de $X_i$ puede ser ajustado a 1 para todo i obteniendose una constante independiente en el modelo. Los parámetros desconocidos $\beta_j$   son usualmente estimados a través del método de maxima verosimilitud.

Un ejemplo simple de una aplicación de regresión logística en Python para un caso de estudio de clasificación binaria en diagnósticos médicos. En este ejemplo, utilizaremos el conjunto de datos "Breast Cancer Wisconsin" que está disponible en la biblioteca scikit-learn. La idea es predecir si un tumor es benigno o maligno según ciertas características.

Código python

# Importar bibliotecas
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
from sklearn.datasets import load_breast_cancer

# Cargar el conjunto de datos de cáncer de mama
data = load_breast_cancer()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target, name='target')

# Dividir los datos en conjunto de entrenamiento y conjunto de prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear el modelo de regresión logística
model = LogisticRegression()

# Entrenar el modelo
model.fit(X_train, y_train)

# Hacer predicciones en el conjunto de prueba
y_pred = model.predict(X_test)

# Evaluar el rendimiento del modelo
accuracy = metrics.accuracy_score(y_test, y_pred)
precision = metrics.precision_score(y_test, y_pred)
recall = metrics.recall_score(y_test, y_pred)
conf_matrix = metrics.confusion_matrix(y_test, y_pred)

# Mostrar resultados
print(f'Accuracy: {accuracy:.2f}')
print(f'Precision: {precision:.2f}')
print(f'Recall: {recall:.2f}')
print(f'Confusion Matrix:\n{conf_matrix}')

# Obtener coeficientes e interpretarlos
coefficients = model.coef_[0]
intercept = model.intercept_[0]

print('\nCoefficients:')
for feature, coef in zip(X.columns, coefficients):
    print(f'{feature}: {coef:.4f}')

print(f'\nIntercept: {intercept:.4f}')

# Visualizar la curva ROC
probs = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = metrics.roc_curve(y_test, probs)
roc_auc = metrics.auc(fpr, tpr)

plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, label=f'AUC = {roc_auc:.2f}')
plt.plot([0, 1], [0, 1], linestyle='--', color='gray')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend()
plt.show()

Coefficients: mean radius: 1.1873 mean texture: 0.5157 mean perimeter: 0.1374 mean area: -0.0134 mean smoothness: -0.0451 mean compactness: -0.2158 mean concavity: -0.2983 mean concave points: -0.1275 mean symmetry: -0.0672 mean fractal dimension: -0.0136 radius error: 0.0408 texture error: 0.5110 perimeter error: 0.0431 area error: -0.0937 smoothness error: -0.0042 compactness error: -0.0443 concavity error: -0.0611 concave points error: -0.0164 symmetry error: -0.0158 fractal dimension error: -0.0039 worst radius: 1.2486 worst texture: -0.5482 worst perimeter: -0.2063 worst area: -0.0146 worst smoothness: -0.0803 worst compactness: -0.6525 worst concavity: -0.8066 worst concave points: -0.2361 worst symmetry: -0.2169 worst fractal dimension: -0.0606 Intercept: 0.2255




Este código utiliza la biblioteca scikit-learn para cargar el conjunto de datos de cáncer
de mama, dividirlo en conjuntos de entrenamiento y prueba, crear un modelo de regresión
logística, entrenar el modelo, hacer predicciones y evaluar el rendimiento del modelo.
La interpretación de los coeficientes se realiza después de entrenar el modelo.

Los coeficientes indican la contribución relativa de cada característica a la predicción.
Un coeficiente positivo significa que a medida que esa característica aumenta,
la probabilidad de que la clase positiva también aumente. La evaluación del modelo
incluye métricas como precisión, sensibilidad (recall) y la matriz de confusión.
Además, se visualiza la curva ROC para evaluar el rendimiento del modelo en diferentes
umbrales de clasificación.
Este es solo un ejemplo básico, y en un escenario real, puedes necesitar ajustar
el modelo, realizar la validación cruzada y ajustar los hiperparámetros para obtener
un rendimiento óptimo.


Comentarios

Entradas populares de este blog

Aplicación Práctica: Regresión Lineal (Aprendizaje Supervisado)

Aplicación Práctica: Naive Bayes (Aprendizaje Supervisado)