Cross-Validation
La validación cruzada entrena y evalúa un modelo en k particiones rotatorias de un conjunto de datos para estimar su capacidad de generalización. Explica los pasos de la validación k-fold, las variantes, la fuga de datos y el código.
La validación cruzada estima el rendimiento de un modelo con datos no vistos entrenándolo y evaluándolo varias veces con distintas particiones del mismo conjunto de datos, y combinando las puntuaciones. En la validación cruzada de k pliegues, los datos se dividen en k partes iguales llamadas pliegues, y cada pliegue se utiliza una vez como datos de validación mientras el modelo se entrena con los otros k − 1 pliegues. La media de las k puntuaciones estima el rendimiento, y su dispersión indica cuánto depende esa estimación de los ejemplos que hayan caído en el conjunto de validación. La validación cruzada es el método estándar de evaluación cuando los datos son demasiado escasos para que una única partición reservada proporcione una puntuación fiable; también se utiliza ampliamente para comparar algoritmos y ajustar hiperparámetros sin tocar los datos de prueba.
Cómo funciona la validación cruzada de k pliegues#
El conjunto de datos se baraja una vez y se divide en k pliegues, normalmente 5 o 10. En cada una de las k rondas, se entrena un modelo nuevo con k − 1 pliegues y se evalúa con el pliegue restante, de modo que cada ejemplo se utiliza exactamente una vez para la validación y k − 1 veces para el entrenamiento. Se calcula la media de las k puntuaciones y se informa junto con su desviación estándar. Una vez que la validación cruzada ha seleccionado un modelo o un conjunto de hiperparámetros, normalmente se vuelve a entrenar el modelo final con todos los datos de entrenamiento y esos ajustes. La validación cruzada dejando uno fuera es el caso extremo en el que k equivale al número de ejemplos: utiliza la mayor cantidad de datos posible para entrenar en cada ronda, a costa de entrenar tantos modelos como ejemplos haya.
Cómo interpretar las puntuaciones de validación cruzada#
La dispersión entre pliegues es tan informativa como la media. El siguiente script de scikit-learn ejecuta una validación cruzada de 5 pliegues con el conjunto de datos de cáncer de mama incluido:
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
# 569 labeled tumor samples with 30 features each
X, y = load_breast_cancer(return_X_y=True)
# The scaler sits inside the pipeline, so each round fits it on that round's training folds only
model = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))
# 5 stratified folds: each sample is validated exactly once
folds = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
scores = cross_val_score(model, X, y, cv=folds)
print("Fold accuracies:", scores.round(3))
print(f"Mean {scores.mean():.3f} +/- {scores.std():.3f}")Las cinco exactitudes de los pliegues oscilan entre 0.956 y 1.000, con una media de 0.979 y una desviación estándar de 0.014. Una única partición 80/20 habría dado cualquiera de esos cinco valores, un intervalo de 4,4 puntos porcentuales. Al colocar el escalador dentro de la canalización, el pliegue de validación no interviene en las estadísticas de preprocesamiento de los datos; escalar primero todo el conjunto de datos provocaría filtración de datos desde cada pliegue de validación al entrenamiento.
Cómo elegir una variante de validación cruzada#
La validación cruzada k-fold simple presupone que los ejemplos son independientes e intercambiables. Si no lo son, una partición aleatoria filtra información o genera pliegues que no representan bien la tarea:
- k-fold estratificada: mantiene en cada pliegue las mismas proporciones de clase que en el conjunto de datos completo, algo importante cuando una clase poco frecuente podría quedar fuera de un pliegue.
- Validación cruzada k-fold por grupos: mantiene todos los ejemplos de un grupo, como un paciente, un vídeo o una ubicación de campo, en el mismo pliegue, para que el modelo nunca se valide con imágenes de entrenamiento casi idénticas. La validación cruzada k-fold estratificada por grupos combina ambas restricciones.
- Partición de series temporales: entrena solo con datos del pasado y valida con el periodo siguiente; amplía la ventana de entrenamiento en cada ronda porque, al barajar datos ordenados en el tiempo, el modelo puede ver el futuro.
- Validación cruzada anidada: ejecuta un ciclo interno de validación cruzada para ajustar los hiperparámetros dentro de cada pliegue externo, de modo que la puntuación externa no se infle por ajustar el modelo con los mismos pliegues que evalúa.
Validación cruzada para aprendizaje profundo#
Entrenar una red profunda k veces multiplica por k el coste de cálculo, así que conjuntos de datos grandes, como ImageNet y COCO, utilizan una única partición fija de validación, que ya es suficientemente grande para obtener una puntuación estable. La validación cruzada resulta útil con conjuntos de datos de visión pequeños, de unos cientos a unos miles de imágenes, donde una única partición de validación puede contener apenas unos pocos ejemplos de cada clase. La guía de validación cruzada k-fold de Ultralytics divide un conjunto de datos de detección en cinco pliegues con KFold de scikit-learn, escribe listas de imágenes de entrenamiento y validación y un YAML del conjunto de datos para cada pliegue, y entrena un modelo YOLO26 por pliegue. Como las imágenes de detección suelen contener varias clases, no se pueden estratificar con una sola etiqueta; por eso, la guía también registra en cada pliegue la proporción entre las etiquetas de validación y las de entrenamiento para cada clase.
Validación cruzada y términos relacionados#
- Validación con partición reservada: una única partición, como 80/20, que se evalúa una vez. Cuesta una ejecución de entrenamiento y es adecuada para conjuntos de datos grandes; su puntuación depende de los ejemplos que caigan en la partición de validación.
- Remuestreo bootstrap: genera conjuntos de entrenamiento mediante muestreo con reemplazo y evalúa cada modelo con los ejemplos que quedan fuera de la muestra. k-fold divide los datos sin reemplazo, de modo que cada ejemplo queda en exactamente un pliegue.
- Evaluación con conjunto de prueba: la validación cruzada selecciona entre modelos y ajustes. Un conjunto de prueba independiente, que se mantiene fuera de todos los pliegues, proporciona la estimación final del modelo elegido.










