Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

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.