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
Publicar un comentario