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

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, precision_score, recall_score, f1_score,
classification_report, RocCurveDisplay, PrecisionRecallDisplay, auc, roc_curve)
import matplotlib.pyplot as plt

--- Pasos Previos: Carga, División y Entrenamiento de los Modelos ---

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']

División en Entrenamiento, Validación y Prueba (misma división que en la clase 1)

X_train_val, X_test, y_train_val, y_test = train_test_split(X, y, test_size=0.05, random_state=42, stratify=y)
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)

Entrenar los dos modelos de la clase anterior

Modelo 1: Árbol de Decisión

dt_modelo = DecisionTreeClassifier(max_depth=3, random_state=42)
dt_modelo.fit(X_train, y_train)
y_pred_dt = dt_modelo.predict(X_val)

Modelo 2: Bosque Aleatorio (Random Forest)

rf_modelo = RandomForestClassifier(max_depth=2, random_state=42)
rf_modelo.fit(X_train, y_train)
y_pred_rf = rf_modelo.predict(X_val)

--- 1. Extracción de Métricas de Clasificación ---

print("--- 1. Métricas de Clasificación (sobre datos de validación) ---")

Métricas para el Árbol de Decisión

precision_dt = precision_score(y_val, y_pred_dt)
recall_dt = recall_score(y_val, y_pred_dt)
f1_dt = f1_score(y_val, y_pred_dt)

Métricas para el Random Forest

precision_rf = precision_score(y_val, y_pred_rf)
recall_rf = recall_score(y_val, y_pred_rf)
f1_rf = f1_score(y_val, y_pred_rf)

Crear un DataFrame para comparar

metrics_df = pd.DataFrame({
'Métrica': ['Precisión', 'Recall', 'F1-Score'],
'Árbol de Decisión': [precision_dt, recall_dt, f1_dt],
'Random Forest': [precision_rf, recall_rf, f1_rf]
})

print(metrics_df.round(4))
print("\n" + "="*50 + "\n")

--- 4. Generación del Informe de Clasificación ---

(Se adelanta el paso 4 por ser un resumen de las métricas del paso 1)

print("--- 4. Informe de Clasificación - Árbol de Decisión ---")
print(classification_report(y_val, y_pred_dt, target_names=['No Diabetes', 'Diabetes']))
print("\n" + "="*50 + "\n")

print("--- 4. Informe de Clasificación - Random Forest ---")
print(classification_report(y_val, y_pred_rf, target_names=['No Diabetes', 'Diabetes']))
print("\n" + "="*50 + "\n")

--- 2. Curva ROC y Métrica AUC ---

print("--- 2. Generando Curva ROC ---")
fig, ax = plt.subplots(figsize=(8, 6))

Curva para el Árbol de Decisión

RocCurveDisplay.from_estimator(dt_modelo, X_val, y_val, name='Árbol de Decisión', ax=ax)

Curva para el Random Forest

RocCurveDisplay.from_estimator(rf_modelo, X_val, y_val, name='Random Forest', ax=ax)

ax.set_title('Curva ROC para ambos modelos')
plt.savefig('roc_curve_comparison.png')
plt.show()
print("\n" + "="*50 + "\n")

--- 3. Curva de Precisión x Recall y Métrica AP ---

print("--- 3. Generando Curva Precisión vs. Recall ---")
fig, ax = plt.subplots(figsize=(8, 6))

Curva para el Árbol de Decisión

PrecisionRecallDisplay.from_estimator(dt_modelo, X_val, y_val, name='Árbol de Decisión', ax=ax)

Curva para el Random Forest

PrecisionRecallDisplay.from_estimator(rf_modelo, X_val, y_val, name='Random Forest', ax=ax)

ax.set_title('Curva Precisión vs. Recall para ambos modelos')
plt.savefig('precision_recall_curve_comparison.png')
plt.show()

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