Validación cruzada y selección de modelos
En simple: lee esto primero
Validación cruzada = turnarse para que cada parte de los datos sirva una vez de «examen», y así elegir bien la configuración del modelo.
Divides tus ejercicios de práctica en 5 grupos. Estudias con 4 y te tomas un mini-examen con el 5.º; repites cambiando cuál grupo es el examen. Tu nota real es el promedio de los 5 mini-exámenes.
- Sirve para elegir cosas que el modelo no aprende solo: λ, el grado del polinomio, la profundidad del árbol…
- El conjunto de test no se toca hasta el final; si lo usas para decidir, tu nota final sale inflada.
- Data leakage (fuga): cuando información del examen se «cuela» en el estudio, p. ej. escalar los datos usando también el test.
- K-fold
- partir los datos en K grupos y rotar cuál es el de prueba.
- hiperparámetro
- una configuración que eliges tú (no la aprende el modelo).
- regla de 1 SE
- entre modelos casi igual de buenos, quedarse con el más simple.
- fuga de datos
- hacer trampa sin querer: el modelo «ve» algo del examen antes de tiempo.
Más abajo viene la versión completa, con fórmulas. Si una palabra aparece subrayada con puntos, pasa el mouse (o tócala) para ver qué significa.
Todavía hay que elegir λ (o el grado)
Sección titulada «Todavía hay que elegir λ (o el grado)»Todo modelo tiene hiperparámetros: settings que eliges, no que se aprenden (λ de ridge/lasso, el grado, C y γ del SVM, el α de poda). Una sola partición train/validación es ruidosa: el «mejor λ» depende de qué puntos cayeron en validación, y con pocos datos cada punto separado es precioso.
K-fold, paso a paso
Sección titulada «K-fold, paso a paso»- Parte los datos (de entrenamiento) en bloques iguales (típico o ).
- Para cada : entrena con los bloques restantes y valida en el bloque .
- Promedia los errores ⇒ un score para ese valor del hiperparámetro.
- Repite sobre una grilla de valores (λ en escala log) y quédate con el mínimo.
- Re-entrena con todos los datos de entrenamiento usando el valor elegido y evalúa una vez en el test.
Cada punto se usa para validar exactamente una vez: una estimación más honesta y de menor varianza del error de generalización.
Validación cruzada K-fold
Cada bloque se turna como validación; se entrena con los K−1 restantes y se promedian los K errores. El test set no participa: queda aparte y se usa una sola vez al final.
(guardado)
Una sola partición es una lotería
Ridge con polinomio de grado 9 sobre 30 puntos. Las curvas finas son 8 particiones 50/50 al azar; la gruesa es el promedio 5-fold (la banda es ±1 error estándar).
La curva de CV y la regla de 1 SE
Sección titulada «La curva de CV y la regla de 1 SE»La curva CV vs λ tiene otra vez forma de U: poca penalización sobreajusta (izquierda), demasiada subajusta (derecha). Se grafica con ±1 error estándar entre folds.
Regla de 1 SE: entre todos los λ cuyo error CV está a menos de un SE del mínimo, elige el más fuerte (el modelo más simple). Las diferencias menores a un SE son ruido: obtienes un modelo más simple, estable e interpretable gratis. La misma regla se usa para podar árboles.
Data leakage: el pecado capital
Sección titulada «Data leakage: el pecado capital»Hay fuga cuando información de evaluación influye en el entrenamiento, y los scores salen optimistas. Formas típicas:
- Elegir hiperparámetros mirando el test.
- Estandarizar (o imputar, o seleccionar features) usando todo el dataset antes de partir. El escalador se ajusta solo con los folds de entrenamiento y luego se aplica a validación/test (en scikit-learn:
Pipeline+GridSearchCV). - Series de tiempo partidas al azar (hay que respetar el orden temporal).
La maldición del ganador (y por qué el test se usa una vez)
Las etiquetas son puro ruido: ningún modelo puede superar 50% de verdad. Aun así, si pruebas muchos modelos y te quedas con el mejor en validación, su score de validación sale inflado. En el test nuevo vuelve a ~50%.
Todo junto: el barrido de complejidad
Sección titulada «Todo junto: el barrido de complejidad»Barriendo el grado de 0 a 18: el RMSE de entrenamiento no deja de bajar mientras el de validación traza la U; se elige el mínimo de validación (grado 8 en la slide). Es el trade-off sesgo–varianza resuelto con datos.
Ejercicio
Sección titulada «Ejercicio»Tienes 1000 ejemplos. Reservas 200 para test. Con los 800 restantes haces 5-fold CV para 10 valores de λ. ¿Cuántos modelos entrenas en total y con cuántos puntos cada uno?
Ver solución
- CV: modelos, cada uno con puntos (validando en 160).
- Luego 1 modelo final con los 800 puntos y el λ elegido, evaluado una vez en los 200 de test.
- Total: 51 entrenamientos.
Autoevaluación
0/4 correctas · 0 respondidasStandardScaler correctamente?En código: CV sin fugas
Sección titulada «En código: CV sin fugas»from sklearn.pipeline import make_pipelinefrom sklearn.preprocessing import StandardScaler, PolynomialFeaturesfrom sklearn.linear_model import Ridgefrom sklearn.model_selection import GridSearchCV, KFold, cross_val_scoreimport numpy as np
# el escalador vive DENTRO del pipeline: en cada fold se ajusta solo con trainpipe = make_pipeline(PolynomialFeatures(9), StandardScaler(), Ridge())grid = GridSearchCV(pipe, {'ridge__alpha': np.logspace(-6, 2, 30)}, cv=KFold(5, shuffle=True, random_state=0), scoring='neg_root_mean_squared_error')grid.fit(X_tr, y_tr) # el test no aparece aquíprint(grid.best_params_, -grid.best_score_)print('test:', -grid.score(X_test, y_test)) # una sola vez, al final
# CV anidada: estima qué tan bueno es TODO el procedimiento de selecciónouter = cross_val_score(grid, X_tr, y_tr, cv=5)Para profundizar
Sección titulada «Para profundizar»Fuente ·ML_Course_regularization_and_model_selection.pdf (slides 27–34) · ML_Course/session-03c-model-selection-cv.ipynb · ML_Course/session-01d-train-val-test.ipynb