Finalmente hemos arribado al último tramo antes de iniciar la primeras exploraciones enfocadas en modelos de machine learning; en esta ocasión, la travesía será fugaz, pero no por ello menos importante, ya que trata sobre un paso intermedio entre el preprocesamiento y procesamiento de datos, y que es prácticamente indefectible antes de comenzar con el entrenamiento de todo modelo de aprendizaje de máquinas.
Equipaje recomendado
Nociones sobre conjuntos de datos
Nociones sobre preprocesamiento de datos
Snack
¿Qué son los conjuntos de datos de entrenamiento, desarrollo y prueba?
Después de preprocesar el conjunto de datos, este ya está listo para ser computado por un algoritmo de machine learning, sin embargo, es necesario gestionar su estructura una última vez mediante un sencillo pero imprescindible paso: la división del conjunto en subconjuntos, conocidos como conjuntos de entrenamiento, desarrollo, y prueba.
Revisemos a detalle cada uno, y la proporción que generalmente tienen respecto a todos los datos disponibles.
Conjunto de datos de entrenamiento (test set)
El conjunto de datos de entrenamiento (test set) es el subconjunto de datos que se procesa para la extracción de patrones, y con ello ajustar automáticamente los parámetros que constituyen al modelo.
Es decir, es la porción de datos que se entrega de forma inicial a la máquina para que aprenda de estos.
Para ilustrar esto, recordaremos el ejemplo visto en nuestra primera exploración, en el que se entrena a un modelo para el reconocimiento de gatos en imágenes; en este caso, el conjunto de datos comprende la cantidad total de imágenes de animales que damos a la computadora para que aprenda a diferenciarlos.
Este ejemplo se había simplificado de la siguiente forma:
Ahora que tenemos mayor conocimiento sobre los conjuntos de datos, podemos desarrollar un poco más estas ejemplificaciones mostrando parte de la estructura y etapas subyacentes de un algoritmo de machine learning, cuya primera fase describiremos como el aprendizaje de la máquina a partir del conjunto de datos de entrenamiento, el cual está compuesto de una porción de todo el conjunto de datos:
El conjunto de datos de entrenamiento es la parte de todas nuestras imágenes que daremos a la máquina para este aprendizaje inicial. Es importante destacar que nunca le proporcionaremos el 100% de los datos, (al menos en lo que respecta a los algoritmos de aprendizaje supervisado), las razones se abordarán más adelante.
Tamaño del conjunto de datos de entrenamiento
La porción de datos que se debe elevir para el entrenamiento del modelo no será siempre la misma, ya que varía de acuerdo al tamaño del conjunto de datos, entre otros factores. Sin embargo, se suele recomendar que al menos el 70% de los datos estén dentro de este subconjunto, ya que se requieren suficientes ejemplos de entrenamiento para un ajuste óptimo del modelo (el tamaño definido puede variar significativamente conforme al número de ejemplos de entrenamiento disponibles).
Conjunto de datos de desarrollo (dev set)
Una vez que hemos seleccionado los datos a utilizar para generar el aprendizaje del modelo, ¿para qué necesitamos hacer otras divisiones del conjunto de datos?
La respuesta a esta cuestión se encuentra en la etapa posterior a la antes descrita, la cual es sumamente importante y característica del aprendizaje automático, ya que consiste en evaluar qué tan bien la máquina ha aprendido (qué tan bien se ha ajustado el modelo a los datos mediante la determinación de sus parámetros). Para estos fines, se distribuyen los datos en dos subconjuntos más: el de desarrollo, y el de pruebas. Hablemos sobre el primero.
El conjunto de datos de desarrollo o de validación (dev set), es el subconjunto que se utiliza para determinar el rendimiento del modelo operando sobre datos nuevos (que no pertenecen al conjunto de entrenamiento), y el cual se utiliza para ajustar sus hiperpárametros: experimentar y decidir cuáles de estos generan los mejores resultados.
Los hiperparámetros son parámetros que definen algunos aspectos sobre las operaciones y estructura del algoritmo de aprendizaje, y que no se ajustan automáticamente porque se definen antes de la etapa de entrenamiento (aunque hay algunos casos especiales que pueden cambiar conforme se procesand los datos); por lo pronto no ahondaremos mucho en ello, pero será objeto de estudio en próximas expediciones.
El punto clave aquí es que el conjunto de datos de validación se entrega al modelo para evaluar su desempeño; esto sucede probando el modelo y cuantificando sus aciertos y errores. En nuestro ejemplo, la evaluación se realizaría utilizando el modelo para etiquetar como gatos o no gatos a nuevas imágenes que no provengan del conjunto de entrenamiento.
Una vez evaluado el desempeño, se procede a realizar cambios en la arquitectura del modelo con el fin de dilucidar cuáles hiperparámetros proveen las mejores salidas, como se muestra en la figura 2.7.3.
Tamaño del conjunto de datos de desarrollo
Lo recomendable en cuanto al tamaño para este subconjunto es que abarque alrededor del 10% del conjunto original, pero esto dependerá del número total de ejemplos de entrenamiento. Por ejemplo, para un conjunto de datos de 1000 ejemplos de entrenamiento, el 10% es 100, y parece apenas suficiente para la etapa de desarrollo; pero si se tratara de un conjunto más grande, por ejemplo, de 1 millón de datos, el 10% serían 100 mil ejemplos de entrenamiento, por lo que incluso podría elegirse solo el 1% (10 mil) o menos del total para el tamaño del conjunto de validación.
Es importante tomar en cuenta esto último, ya que resalta la influencia de la extensión del conjunto de datos para la definición de las porciones de los subconjuntos de entrenamiento, desarrollo y prueba.
Conjunto de datos de prueba (test set)
Para finalizar, el conjunto de datos de prueba (test set) es el conjunto de datos que pretende simular el uso del modelo de machine learning en producción, es decir, en situaciones fuera del entorno de desarrollo, o lo que podemos llamar como la evaluación de su rendimiento en las condiciones más cercanas al «mundo real».
Estos datos son nuevos para el modelo, no se hallan contenidos en el conjunto de entrenamiento o de validación, por lo que se utilizan para evaluar su desempeño final (después de la elección de hiperparámetros); su intención es responder a la cuestión ¿qué tan preciso es el modelo en la ejecución sus tareas? Si los resultados son satisfactorios, entonces se puede generalizar que el modelo funcionará con el mismo rendimiento en datos nuevos ya no pertenecientes al conjunto de datos.
Respecto a nuestro ejemplo, esto se traduce en que, después de entrenar al modelo y seleccionar los hiperparámetros más convenientes, se evaluará una última vez con otro cúmulo de imágenes nuevas:
En la siguiente figura se puede ver una generalización del esquema antes mostrado para cualquier modelo que requiera de la división de los conjuntos de entrenamiento, desarrollo y prueba:
Tamaño del conjunto de datos de prueba
Las dimensiones de este conjunto son similares a las del conjunto de datos de desarrollo: se recomienda un aproximado del 10% del total de los datos, ya que se requiere una cantidad no muy pequeña de ejemplos para poner a prueba el modelo. Como se explicó anteriormente, esto depende mucho del tamaño del conjunto de datos, por lo que porcentajes más chicos pueden ser igualmente funcionales.
Una distribución común de división del conjunto de datos es la proporción 80%-10%-10% para cada subconjunto respectivamente (train, dev, test), sin embargo, esto aplica para conjuntos relativamente pequeños o medianos.
Notas:
- Los conjunto de datos en los códigos de machine learning que te encuentres en la red generalmente no se dividirán en los tres subconjuntos antes descritos, ya que son meramente demostrativos y no se harán variar hiperparámetros, por lo que se suelen utilizar solo los conjuntos de entrenamiento y prueba. Sin embargo, en proyectos industriales o de investigación científica, se recomienda considerar el conjunto de desarrollo/validación para realizar pruebas en las arquitecturas de los modelos implicados.
- Antes de hacer estas divisiones, es recomendable realizar un barajeo aleatorio de los ejemplos de entrenamiento. Esto se puede lograr fácilmente con funciones como shuffle de Sklearn en Python.
¡Hemos terminado!
Has finalizado tu entrenamiento en datos, lo que significa que en nuestra próxima exploración arrancaremos en terrenos más inmersos en el dominio del aprendizaje de máquinas, donde te adentrarás en el conocimiento de los algoritmos de aprendizaje supervisado, y podrás experimentar uno de estos por primera vez en Python.