Código Completo para el Proyecto de Diabetes
Python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
--- 1. Carga y Separación de Datos ---
Cargar el dataset
df = pd.read_csv('diabetes.csv')
Separar en variables explicativas (X) y variable objetivo (y)
X = df.drop('diabetes', axis=1)
y = df['diabetes']
print("--- 1. Datos Cargados y Separados ---")
print(f"Dimensiones de X: {X.shape}")
print(f"Dimensiones de y: {y.shape}")
print("\n" + "="*50 + "\n")
--- 2. División en Entrenamiento, Validación y Prueba ---
Primer split: 5% para el conjunto de prueba final
X_train_val, X_test, y_train_val, y_test = train_test_split(
X, y,
test_size=0.05,
random_state=42,
stratify=y
)
Segundo split: 25% del resto para el conjunto de validación
X_train, X_val, y_train, y_val = train_test_split(
X_train_val, y_train_val,
test_size=0.25,
random_state=42,
stratify=y_train_val
)
print("--- 2. Tamaños de los Conjuntos de Datos ---")
print(f"Entrenamiento (Train): {len(X_train)} filas")
print(f"Validación (Validation): {len(X_val)} filas")
print(f"Prueba (Test): {len(X_test)} filas")
print("\n" + "="*50 + "\n")
--- 3. Creación y Evaluación de Modelos (Precisión) ---
Modelo 1: Árbol de Decisión (Decision Tree)
dt_modelo = DecisionTreeClassifier(max_depth=3, random_state=42)
dt_modelo.fit(X_train, y_train)
Evaluar precisión del Árbol de Decisión
acc_train_dt = accuracy_score(y_train, dt_modelo.predict(X_train))
acc_val_dt = accuracy_score(y_val, dt_modelo.predict(X_val))
print("--- 3.1 Resultados del Árbol de Decisión ---")
print(f"Precisión en Entrenamiento: {acc_train_dt:.2%}")
print(f"Precisión en Validación: {acc_val_dt:.2%}")
print("-" * 25)
Modelo 2: Bosque Aleatorio (Random Forest)
rf_modelo = RandomForestClassifier(max_depth=2, random_state=42)
rf_modelo.fit(X_train, y_train)
Evaluar precisión del Random Forest
acc_train_rf = accuracy_score(y_train, rf_modelo.predict(X_train))
acc_val_rf = accuracy_score(y_val, rf_modelo.predict(X_val))
print("\n--- 3.2 Resultados del Bosque Aleatorio ---")
print(f"Precisión en Entrenamiento: {acc_train_rf:.2%}")
print(f"Precisión en Validación: {acc_val_rf:.2%}")
print("\n" + "="*50 + "\n")
--- 4. Construcción de la Matriz de Confusión ---
print("--- 4. Matrices de Confusión (sobre datos de validación) ---")
Matriz de Confusión para el Árbol de Decisión
y_pred_dt = dt_modelo.predict(X_val)
matriz_dt = confusion_matrix(y_val, y_pred_dt)
display_dt = ConfusionMatrixDisplay(confusion_matrix=matriz_dt, display_labels=['No Diabetes', 'Diabetes'])
Matriz de Confusión para el Random Forest
y_pred_rf = rf_modelo.predict(X_val)
matriz_rf = confusion_matrix(y_val, y_pred_rf)
display_rf = ConfusionMatrixDisplay(confusion_matrix=matriz_rf, display_labels=['No Diabetes', 'Diabetes'])
Crear una figura con dos subplots para comparar
fig, axes = plt.subplots(1, 2, figsize=(15, 6))
Graficar la matriz del Árbol de Decisión
axes[0].set_title('Matriz de Confusión - Árbol de Decisión')
display_dt.plot(ax=axes[0], cmap='Blues')
Graficar la matriz del Random Forest
axes[1].set_title('Matriz de Confusión - Bosque Aleatorio')
display_rf.plot(ax=axes[1], cmap='Greens')
plt.tight_layout()
plt.savefig('confusion_matrices_comparison.png')
plt.show()
Análisis de los Resultados
Precisión (Accuracy):
Ambos modelos muestran una precisión similar en el conjunto de validación (alrededor del 75% - 77%), lo que indica que no están sobreajustados a los datos de entrenamiento.
El RandomForestClassifier obtiene una ligera ventaja en la precisión de validación, sugiriendo un rendimiento general un poco mejor.
Matriz de Confusión:
Árbol de Decisión:
Identificó correctamente a 113 pacientes sin diabetes (Verdaderos Negativos).
Identificó correctamente a 32 pacientes con diabetes (Verdaderos Positivos).
Cometió 31 errores de Falsos Negativos (dijo "No Diabetes" a pacientes que sí la tenían).
Bosque Aleatorio (Random Forest):
Identificó correctamente a 122 pacientes sin diabetes (un poco mejor que el Árbol de Decisión).
Identificó correctamente a 25 pacientes con diabetes (un poco peor que el Árbol de Decisión).
Cometió 38 errores de Falsos Negativos.