42 votos

¿Por qué mis colegas y yo aprendimos definiciones opuestas para los conjuntos de prueba y validación?

En mi programa de maestría aprendí que cuando se construye un modelo de ML:

  1. entrenar el modelo en el conjunto de entrenamiento
  2. comparar su rendimiento con el conjunto de validación
  3. ajustar la configuración y repetir los pasos 1 y 2
  4. cuando esté satisfecho, compare el modelo final con el conjunto de pruebas (hold out)

Cuando empecé a trabajar como DS planteé una pregunta sobre el tamaño de los conjuntos de prueba y validación, porque parecía que alguien los había etiquetado mal. Esto causó confusión porque aparentemente todos los demás utilizaron el conjunto de "prueba" en el paso 2 y mantuvieron el conjunto de "validación" para el paso 4.

Supuse que lo había aprendido mal y que no había ningún daño porque simplemente cambié los términos para ser coherente. Sin embargo, estaba estudiando de nuevo algunos libros de aprendizaje profundo y me di cuenta de que, según el creador de Keras, ¡tenía razón todo el tiempo! Justo antes de escribir esta pregunta encontré este que sugiere que la OTRA definición de conjuntos de prueba/validación es correcta...

¿Esto es algo que se acuerda? ¿Existe una división entre los profesionales del método ml clásico y del aprendizaje profundo en cuanto a cuáles son los términos correctos? Por lo que veo, nadie ha discutido realmente cómo algunos estadísticos/científicos de datos utilizan definiciones completamente opuestas para los dos términos.

7 votos

No leo que la pregunta enlazada apoye la otra definición, y nunca he visto el uso que has dicho que usan tus colegas.

3 votos

Yo también los he oído usar de las dos maneras, y la mayoría de las veces da igual, pero +1 por si alguien que responda puede aportar algo de contexto histórico.

3 votos

Los uso como tú. Es coherente con el uso de cross- validación para el ajuste del modelo.

36voto

Dipstick Puntos 4869

Aparentemente, los términos se utilizan de forma ambigua, pero siempre he visto que se utilizan como que hay tres (o más) conjuntos de datos: tren conjunto utilizado para el entrenamiento del modelo, validación para evaluar el rendimiento del modelo a la hora de afinarlo, y se mantiene prueba que se utiliza al final para evaluar el rendimiento del modelo. Estos nombres se utilizan en el Curso acelerado de aprendizaje automático El Aprendizaje profundo con Python libro de François Chollet, el Aprendizaje automático práctico con Scikit-Learn, Keras y TensorFlow libro de Aurélien Géron, Los elementos del aprendizaje estadístico de Trevor Hastie, Robert Tibshirani y Jerome Friedman, y otros libros.

Si encuentra esta convención de nombres confusa, puedes, como Andrew Ng, utilizar el tren/dev/test nomenclatura, en la que el dev se utiliza para dev elopment.

25voto

cbeleites Puntos 12461

Para el aprendizaje automático, he visto predominantemente el uso que OP describe, pero también he encontrado lotes de la confusión que se deriva de este uso.


Históricamente, supongo que lo que ocurrió (al menos en mi campo, la química analítica) es que, a medida que los modelos se hacían más complejos, en algún momento la gente se dio cuenta de que se necesitaban datos independientes para fines de verificación y validación (en nuestra terminología, casi todas las pruebas que se hacen habitualmente con los modelos se considerarían parte de la verificación, que a su vez forma parte de la tarea mucho más amplia de la validación de métodos). Así pues, se ha introducido el conjunto de validación y métodos como la validación cruzada (con su propósito original de estimar el error de generalización).

Más tarde, la gente empezó a utilizar las estimaciones del error de generalización de lo que llamamos verificación/validación interna, como la validación cruzada o una división aleatoria, para refinar/optimizar sus modelos. Así surgió el ajuste de hiperparámetros.
Una vez más, se ha comprobado que la estimación del error de generalización del modelo refinado necesita datos independientes. Y también se necesitaba un nuevo nombre, ya que el uso de "conjunto de validación" para los datos utilizados para el refinamiento/optimización ya se había establecido. Así pues, se creó el conjunto de pruebas.

Así pues, nos encontramos con la situación de que un validación se utiliza para el desarrollo/optimización/refinamiento del modelo y, por tanto, es no adecuado para los fines de verificación y validación de modelos.


Alguien con, por ejemplo, formación en química analítica (o ingeniería) se referirá sin duda a los datos que utiliza/adquiere con fines de validación de métodos como sus datos de validación*, y ese es el uso correcto de los términos en estos campos.

*(a menos que conozcan el uso diferente de la terminología en el aprendizaje automático, en cuyo caso suelen explicar de qué están hablando exactamente).


Personalmente, para evitar la continua confusión que surge de este choque de terminología entre campos, he pasado a utilizar "datos/conjunto de optimización" para los datos utilizados para el ajuste de los hiperparámetros (el conjunto de desarrollo de Andrew Ng también me parece bien) y "datos/conjunto de verificación" para los datos de prueba independientes finales (las pruebas que solemos hacer son en realidad de verificación y no de validación, por lo que se evita otro error común: las pruebas que solemos hacer ni siquiera se acercan a una validación completa del método en química analítica, y es bueno ser consciente de ello)

Otra estrategia que me parece útil para evitar la confusión es pasar de la división en 3 conjuntos de datos a la división en datos de entrenamiento y verificación, y luego describir el ajuste de los hiperparámetros como parte del procedimiento de entrenamiento que resulta incluir otra división en datos utilizados para ajustar los parámetros del modelo y datos utilizados para optimizar los hiperparámetros.

0 votos

Esta puede ser la respuesta más útil, ya que proporciona una explicación de por qué los nombres no parecen coincidir con lo que se hace con las divisiones.

0 votos

Dado que esta discusión se centra en la terminología, creo que merece la pena señalar que "verificación" tiene una definición precisa en CS relacionada con la solidez y completitud de un sistema lógico (por ejemplo, en la verificación formal). El uso aquí es bastante diferente y se refiere al proceso de confirmar que el modelo final es prácticamente adecuado para la tarea para la que se desarrolló.

0 votos

Empieza a gustarme la idea de llamarlo simplemente el set de espera.

13voto

wch1zpink Puntos 11

Me enseñaron que tienes una división de entrenamiento/prueba para afinar y luego tienes un conjunto de validación para "validar" que no has sobreajustado tu división de prueba. Si tienes un conjunto de datos pequeño, sólo tienes tu división de entrenamiento/prueba, nunca la llamaría división de entrenamiento/validación porque pienso en la validación como el paso final para "validar" todos tus resultados, mientras que la prueba es para "probar" tu modelo en datos no vistos. Pero puedes invertirlos fácilmente y es lo mismo.

Me he dado cuenta de los términos que se usan de un lado a otro, pero realmente no importa cómo se llame mientras todos estén en la misma página.

EDITAR después de investigar un poco:

Su uso es el correcto, aunque se sabe que el reverso se utiliza con frecuencia (aunque de forma incorrecta). Wiki incluso tiene una sección que revisa esta discrepancia.

Son puras conjeturas, pero creo que lo más probable es que se deba a esto: enter image description here

Si sólo tienes una división simple es tren/prueba y esta división solía ser una forma estándar de afinar para modelos simples por lo que el conjunto de "prueba" era todo.

Y para añadir algo más, parece que si sólo se hace una validación cruzada de 5 pliegues, entonces se hacen 5 conjuntos de entrenamiento y 5 conjuntos de prueba. PERO si luego se añade un tercer conjunto de retención, entonces ahora tiene 5 conjuntos de entrenamiento, 5 validación conjuntos, y 1 conjunto de prueba.

8 votos

Yo también lo he oído siempre así. Creo que el punto principal es que los nombres no importan mientras todos estén en la misma página.

4 votos

Cómo los llames importa en la medida en que quieras comunicarte o trabajar con los demás. Si están acostumbrados a nombres diferentes, eso hace que comunicarse sea algo más laborioso y potencialmente confuso.

0 votos

@BernhardBarker Yo diría que, como práctica habitual, deberíamos pedir/recibir AMBOS conjuntos, el de "validación" y el de "prueba". De este modo, sólo se plantea un problema si la precisión difiere significativamente entre ellos y podemos pedir más aclaraciones si es necesario. Y normalmente informamos del kfold como la precisión CV y el conjunto de validación para que todo el mundo esté de acuerdo. Hay muchos términos en este ámbito en los que deberíamos ser rigurosos y, personalmente, no creo que éste sea uno de ellos. Si informamos de ambos y decimos lo que son, todo irá bien.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X