Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

PyTorch desde cero, Unidad 8 — Evaluación y validación, 8.2 — Validación adecuada ·

Separación de datos

Separación de datos

Introducción

En el desarrollo de modelos de aprendizaje profundo, la separación adecuada de los datos es una práctica fundamental y crítica. La idea detrás de esta práctica es dividir nuestros conjuntos de datos en subconjuntos distintos: un conjunto de entrenamiento, un conjunto de validación y, a veces, un conjunto de prueba. Esta división permite evaluar con precisión cómo nuestro modelo generaliza al nuevo, no visto anteriormente, y evita el overfitting (sobreajuste). En este artículo, exploraremos la importancia de separar los datos correctamente, analizaremos errores comunes que deben evitarse y proporcionaremos un checklist para asegurar una buena práctica.

Explicación principal con ejemplos

La separación de datos en entrenamiento y validación es crucial para evaluar el rendimiento del modelo. Sin esta separación adecuada, podríamos terminar optimizando nuestro modelo no solo para predecir bien los datos de entrenamiento (que conocemos muy bien), sino también para predecir correctamente los datos que nunca vio durante el entrenamiento.

A continuación, mostramos un ejemplo sencillo utilizando PyTorch. Consideremos un conjunto de datos llamado dataset y queremos separarlo en conjuntos de entrenamiento y validación con una proporción del 80% para entrenamiento y 20% para validación.

from torch.utils.data import random_split

# Supongamos que dataset es nuestro conjunto de datos completo
n_train = int(len(dataset) * 0.8)
train_dataset, val_dataset = random_split(dataset, [n_train, len(dataset) - n_train])

# Definir los DataLoader para cargar los datos
from torch.utils.data import DataLoader

batch_size = 64
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=batch_size)

Errores típicos / trampas

  1. Confundir el conjunto de validación con el conjunto de prueba: A menudo se usa el término "prueba" como sinónimo para "validación". Esto puede llevar a mal interpretaciones y análisis incorrectos del rendimiento del modelo.
  1. No utilizar una semilla al dividir los datos: La división aleatoria de los datos puede ser reproducible si no utilizamos una semilla, lo cual es crucial para comparar modelos o realizar pruebas replicables.
  1. Omitir la validación durante el entrenamiento: Es común que se omita el uso del conjunto de validación durante la fase de entrenamiento para ahorrar tiempo y recursos, pero esto puede llevar al overfitting y a una subestimación del rendimiento real del modelo en datos no vistos.

Checklist accionable

  1. Establecer una proporción adecuada: Generalmente, se recomienda un 80% para entrenamiento y el resto para validación (a veces también se utiliza un conjunto de prueba).
  1. Usar una semilla al dividir los datos: Esto asegura que la división de los datos sea reproducible.
  1. Ejecutar una validación durante el entrenamiento: Incluir un mecanismo de validación en cada época del entrenamiento para monitorear el rendimiento del modelo en datos no vistos.
  1. Evitar confundir terminología: Distinguir entre conjuntos de entrenamiento, validación y prueba.
  1. Realizar pruebas de separación aleatoria múltiples veces: Para asegurarse de que la distribución de los datos es consistente en las distintas ejecuciones del modelo.

Cierre

Siguientes pasos

  • Aprender más sobre validación cruzada: Si tu conjunto de datos es pequeño, considera usar técnicas como la validación cruzada para obtener una estimación más precisa del rendimiento del modelo.
  • Explorar técnicas de agregación de modelos: Estas pueden mejorar el rendimiento al combinar múltiples modelos entrenados en subconjuntos diferentes de los datos.
  • Optimizar la separación de datos: Asegúrate de que tu conjunto de validación es representativo del conjunto de prueba, especialmente si tus datos tienen una distribución desigual o imbalanced.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).