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}")