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

08 Desafío: hora de la práctica


import pandas as pd
import numpy as np
from sklearn.model_selection import KFold, StratifiedKFold, LeaveOneOut, cross_val_score
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.metrics import make_scorer, f1_score

# CARGA DE DATOS
df = pd.read_csv('/content/diabetes.csv')
X = df.drop(columns=['diabetes'])
y = df['diabetes']

# 1: Función para Intervalo de Confianza
def intervalo_confianza(lista_metricas, nombre_algoritmo):

    media = np.mean(lista_metricas)
    desviacion = np.std(lista_metricas)
    
    min_intervalo = media - (2 * desviacion)
    max_intervalo = media + (2 * desviacion)
    
    print(f'Intervalo de confianza ("{nombre_algoritmo}"): [{min_intervalo:.4f}, {max_intervalo:.4f}]')

# Definimos los modelos a evaluar
modelos = {
    "SVM": SVC(kernel='linear', random_state=42),
    "Random Forest": RandomForestClassifier(n_estimators=100, random_state=42),
    "Gradient Boosting": GradientBoostingClassifier(random_state=42)
}

# Evaluación con KFold
print("PUNTO 2: Evaluación con KFold (Métrica: Accuracy)")
kf = KFold(n_splits=10, shuffle=True, random_state=42)

for nombre, modelo in modelos.items():
    scores = cross_val_score(modelo, X, y, cv=kf)
    intervalo_confianza(scores, nombre)

# Evaluación con StratifiedKFold
print("\nPUNTO 3: Evaluación con StratifiedKFold (Métrica: F1-Score)")
skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=42)

for nombre, modelo in modelos.items():
    scores_f1 = cross_val_score(modelo, X, y, cv=skf, scoring='f1')
    intervalo_confianza(scores_f1, f"{nombre} - F1")

# Evaluación con LeaveOneOut
print("\n--- PUNTO 4: Evaluación con LeaveOneOut (Media de Acierto) ---")
# Este método entrena un modelo por cada fila (394 modelos)
loo = LeaveOneOut()

for nombre, modelo in modelos.items():
    # Este proceso puede tardar debido a la cantidad de modelos
    score_loo = cross_val_score(modelo, X, y, cv=loo).mean()
    print(f"Media de acierto (LeaveOneOut) para {nombre}: {score_loo:.4f}")

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

Hola César, espero que estés bien

Tu implementación parece estar bien estructurada y sigue los pasos necesarios para evaluar los modelos utilizando KFold, StratifiedKFold y LeaveOneOut. Aquí hay algunas cosas que podrías verificar o ajustar:

  1. Datos de Entrada: Asegúrate de que el archivo diabetes.csv esté correctamente cargado y que las columnas estén bien definidas, especialmente la columna diabetes que estás utilizando como variable objetivo.

  2. Intervalo de Confianza: La función intervalo_confianza parece correcta. Calcula la media y la desviación estándar para determinar el intervalo de confianza. Asegúrate de que los resultados sean consistentes con las expectativas del ejercicio.

  3. Métricas de Evaluación: Estás utilizando accuracy para KFold y f1 para StratifiedKFold, lo cual es adecuado. Los resultados del LeaveOneOut se están calculando correctamente usando la media.

  4. Resultados: Los resultados que muestras parecen razonables, pero si los intervalos de confianza o las medias no son los esperados, podrías revisar los datos de entrada o ajustar los parámetros de los modelos.

Si hay algún error específico o algo que no esté funcionando como esperas, por favor proporciona más detalles para que pueda ayudarte mejor.

Espero haber ayudado y buenos estudios!