Implementar K-fold validation en un modelo de regresión con redes neuronales permite entrenar y evaluar de forma robusta cuando se dispone de pocos datos. En esta práctica se construye paso a paso la lógica de partición de datos, la creación iterativa del modelo y el almacenamiento de métricas para análisis posterior.
¿Cómo funciona la partición de datos en K-fold validation?
El principio es sencillo: se divide el conjunto de entrenamiento en K partes iguales (en este caso cuatro). En cada iteración, una de esas partes se usa como set de validación y las restantes como set de entrenamiento [01:00].
Para calcular los índices de cada partición se utiliza el número de ejemplos por fold, que resulta de dividir la cantidad total de datos entre K. En el ejemplo, el dataset de entrenamiento tiene 404 registros divididos en cuatro, lo que da 101 ejemplos por fold [00:37]. La lógica de segmentación se apoya en multiplicar el índice de iteración i por ese valor:
val_data = train_data[i * num_val : (i + 1) * num_val].
val_targets = train_labels[i * num_val : (i + 1) * num_val].
Así, en cada fold el tramo de validación se desplaza y cubre una porción distinta del dataset.
¿Cómo se construye el set de entrenamiento parcial?
El partial train data se genera concatenando todo lo que queda fuera del tramo de validación. Se usa np.concatenate sobre el eje cero (axis 0) para unir los datos anteriores y posteriores al segmento seleccionado [02:35]:
python
partial_train_data = np.concatenate(
[train_data[:i * num_val],
train_data[(i + 1) * num_val:]],
axis=0
)
La misma operación se replica para los targets parciales con train_labels.
¿Por qué se crea el modelo dentro de una función?
El modelo se encapsula en la función build_model_regression para poder instanciar un modelo nuevo en cada iteración [04:10]. Esto es fundamental: no se quiere acumular el aprendizaje de un fold en el siguiente, sino obtener cuatro entrenamientos independientes y después promediar los resultados.
La función recibe dos parámetros principales:
- Learning rate: en este caso
0.001.
- Input shape: una tupla con el número de variables predictoras (trece), expresada como
(13,) para que la red reciba un tensor válido y no un entero [05:50].
¿Cómo se entrena y almacena cada iteración?
Dentro del bucle for i in range(k) se ejecuta model.fit con los datos parciales de entrenamiento y validación [04:30]:
python
history = model.fit(
partial_train_data,
partial_train_targets,
epochs=num_epochs,
batch_size=16,
validation_data=(val_data, val_targets),
verbose=0
)
- El batch size se fija en 16, adecuado para un dataset pequeño de 404 registros.
- El parámetro
verbose=0 silencia la salida para mantener limpio el log durante las cuatro iteraciones.
- El número de épocas se define previamente en la variable
num_epochs, que para este ejercicio vale 80.
Cada vez que termina un fold, el resultado del mean absolute error en validación (val_mae) se extrae de history.history y se añade a la lista all_histories [06:10].
¿Qué contiene la lista de historiales?
Al finalizar las cuatro iteraciones, all_histories almacena cuatro listas de 80 valores cada una [07:15]. Cada valor representa el mean absolute error de validación en una época específica para un fold determinado. Esta estructura permite calcular el promedio por época y obtener una curva de error más estable que la de un solo entrenamiento.
¿Qué errores comunes aparecen al implementar K-fold?
Durante la implementación surgieron dos problemas frecuentes que vale la pena destacar:
- Pasar un entero como input shape: las redes neuronales esperan tensores, no enteros. La solución es agregar una coma para convertirlo en tupla:
(13,) en lugar de 13 [05:50].
- Confundir el orden de parámetros en la función del modelo, enviando el learning rate donde debía ir el input shape y viceversa [05:15].
Con los historiales almacenados, el siguiente paso natural es promediar los errores de los cuatro folds y graficarlos para evaluar qué tan cerca están las predicciones del modelo respecto a los valores reales. ¿Ya has probado K-fold validation en tus propios proyectos? Comparte tu experiencia en los comentarios.