Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Desafío: hora de la práctica

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.

1 respuesta

Hola , espero que estés muy bien.

Felicitaciones por tu aprendizaje. Estamos priorizando el foro para postear dudas, así optimizamos el tiempo de respuesta para ustedes.

Para no dejar de compartir los códigos, actividades y ejercicios que realizas, creamos un canal en Discord (#compartetucodigo) donde puedes compartirlos, dar y sugerir mejoras con el resto de tus compañeros.

Un saludo.

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios