Validación cruzada anidada

Eval

Validación cruzada anidada

Creado: Última actualización: Tiempo de lectura: 2 min
まとめ
  • La validación cruzada anidada separa la búsqueda de hiperparámetros de la evaluación externa para evitar sesgos optimistas.
  • Construye bucles externo/interno en scikit-learn y observa cómo se previene la fuga de información.
  • Comprende cuándo merece la pena el coste adicional y cómo comunicar los resultados.

1. Funcionamiento #

  1. Bucle externo: divide los datos con K_outer; cada pliegue actúa como conjunto de prueba intacto.
  2. Bucle interno: ejecuta una validación cruzada de K_inner pliegues sobre el resto para ajustar hiperparámetros (grid search, random search, optimización bayesiana, etc.).
  3. Evaluación: reentrena con los hiperparámetros óptimos y evalúa en el pliegue externo reservado.

Repite el proceso K_outer veces y agrega las puntuaciones externas (media ± desviación típica o intervalos de confianza).


2. Implementación en Python #

from sklearn.model_selection import GridSearchCV, cross_val_score, KFold
from sklearn.ensemble import RandomForestClassifier

param_grid = {
    "n_estimators": [100, 200],
    "max_depth": [None, 10, 20],
}
inner_cv = KFold(n_splits=3, shuffle=True, random_state=0)
outer_cv = KFold(n_splits=5, shuffle=True, random_state=1)

grid = GridSearchCV(
    RandomForestClassifier(random_state=0),
    param_grid=param_grid,
    cv=inner_cv,
    scoring="roc_auc",
    n_jobs=-1,
)

scores = cross_val_score(grid, X, y, cv=outer_cv, scoring="roc_auc", n_jobs=-1)
print("ROC-AUC anidado:", scores.mean(), "+/-", scores.std())

Pasar el objeto de búsqueda (GridSearchCV, RandomizedSearchCV, etc.) a cross_val_score es suficiente para ejecutar una validación cruzada anidada.


3. Ventajas #

  • Evita fuga entre ajuste y evaluación: impide el sesgo optimista al usar los mismos datos para ambas tareas.
  • Comparaciones justas: cada modelo se ajusta independientemente pero se evalúa con idénticos pliegues externos.
  • Estimaciones de incertidumbre: las puntuaciones del bucle externo forman una distribución con la que calcular varianza e intervalos de confianza.

4. Precauciones #

  • Coste computacional alto: el entrenamiento crece con K_outer × K_inner; modelos pesados pueden ser inviables.
  • Cuidado con rejillas enormes: espacios de búsqueda grandes multiplican el tiempo; valora random search u optimización bayesiana.
  • Datasets pequeños: si el conjunto es muy reducido, puede que el modelo quede con pocos datos; ajusta los valores de K o usa CV repetida con cautela.

5. Consejos prácticos #

  • Ideal en datasets pequeños: la fuga de información es más dañina cuando hay pocos datos, por lo que la validación anidada compensa.
  • Resérvala para los candidatos finales: aplícala solo a los modelos finalistas para controlar el tiempo de cómputo.
  • Documenta la configuración: detalla número de pliegues, método de búsqueda y semillas aleatorias para demostrar control del riesgo.

Resumen #

  • La validación cruzada anidada ofrece una estimación imparcial de la generalización mientras optimiza hiperparámetros.
  • Combina GridSearchCV (u otra estrategia) con cross_val_score; planifica el coste adicional.
  • Úsala en la evaluación final de modelos críticos para que las métricas reflejen el rendimiento real.