¿Siempre es mejor usar todo el conjunto de datos para entrenar el modelo final?

24

Una técnica común después de entrenar, validar y probar el modelo de preferencia de Machine Learning es usar el conjunto de datos completo, incluido el subconjunto de pruebas, para entrenar un modelo final para implementarlo , por ejemplo, en un producto.

Mi pregunta es: ¿es siempre lo mejor hacerlo? ¿Qué pasa si el rendimiento realmente se deteriora?

Por ejemplo, supongamos un caso en el que el modelo obtiene un puntaje de alrededor del 65% al ​​clasificar el subconjunto de pruebas. Esto podría significar que o bien el modelo está entrenado de manera insuficiente O que el subconjunto de pruebas consta de valores atípicos. En el último caso, entrenar el modelo final con ellos disminuiría su rendimiento y lo descubrirá solo después de implementarlo.

Reformulando mi pregunta inicial:

Si tuviera una demostración única de un modelo , como implementarlo en dispositivos electrónicos integrados a bordo de un costoso experimento con un cohete, ¿confiaría en un modelo que se ha vuelto a entrenar con el subconjunto de prueba en el paso final sin volver a serlo? probado en su nuevo rendimiento?

pcko1
fuente

Respuestas:

14

Una vez que haya obtenido hiperparamters óptimos para su modelo, después del entrenamiento y validación cruzada, etc., en teoría está bien entrenar el modelo en todo el conjunto de datos para implementarlo en producción. Esto, en teoría, generalizará mejor.

SIN EMBARGO, ya no puede hacer afirmaciones estadísticas / de rendimiento en los datos de prueba ya que ya no tiene un conjunto de datos de prueba.

Si implementa un modelo en producción utilizando todo el conjunto de datos de entrenamiento, y conoce los valores verdaderos de la variable objetivo de los nuevos datos entrantes (es decir, los datos sobre los que el modelo de producción está haciendo predicciones), puede calcular las métricas de rendimiento en tiempo real como Estos nuevos datos son como datos de prueba (no fueron vistos por el modelo durante el entrenamiento). A partir de este proceso, puede actualizar los hiperparámetros de los modelos para lograr un mejor rendimiento.

Pero si conociera los valores objetivo de los nuevos datos, ¿por qué entrenaría un modelo en primer lugar?

En general, diría que si tiene suficientes datos con suficiente variedad, luego mezclar y dividir los datos 80:20 entrenamiento: la prueba debería ser suficiente para entrenar un modelo robusto y no tener que preocuparse por los problemas de generalización (suponiendo, por supuesto, que regularice el modelo).

PyRsquared
fuente
Hice +1, ¡gracias por la respuesta! parece que la combinación aleatoria del conjunto de datos antes de dividirse en 80/20 probablemente nos haga sentir "estadísticamente" seguros (:
pcko1
2
Se supone que el rendimiento de su conjunto de prueba extendido se generalizará a toda la población, siempre que lo haya hecho correctamente. Aunque no tiene un conjunto de pruebas después de aplicar su método a todo el conjunto de datos, el rendimiento en su conjunto original de entrenamiento / prueba con validación cruzada es un estimador imparcial del rendimiento de su algoritmo de entrenamiento. Ese es el objetivo de CV: no entrenar o parametrizar un modelo, sino estimar el rendimiento del proceso de construcción del modelo. Su rendimiento en cualquier conjunto de pruebas antes del modelado de datos completos es su estimación de rendimiento en los datos completos.
Nuclear Wang
13

Interesante pregunta. Personalmente, no he visto eso para los productos que entran en producción, pero entiendo la lógica.

Teóricamente, cuantos más datos haya visto su modelo implementado, mejor debería generalizarse. Entonces, si entrenó al modelo en el conjunto completo de datos que tiene disponible, debería generalizar mejor que un modelo que solo vio, por ejemplo, conjuntos de entrenamiento / val (por ejemplo, ~ 90%) del conjunto de datos completo.

El problema con esto (¡y la razón por la que dividimos los datos en conjuntos de tren / val / prueba en primer lugar!) Es que queremos poder hacer afirmaciones estadísticas en cuanto a la precisión de los datos no vistos. Tan pronto como volvamos a entrenar un modelo nuevamente en todos los datos, ya no es posible hacer tales afirmaciones.

[Editar]

Aquí hay una pregunta relacionada sobre validación cruzada , donde la respuesta aceptada me hace puntos similares y menciona otras formas de hacer las cosas.


Hacemos un bucle:

  1. entrenar a un modelo
  2. evaluar el rendimiento en el conjunto de validación si es satisfactorio, vaya al paso 5
  3. cambiar modelo
  4. ir al paso 1
  5. evaluar el rendimiento en el conjunto de prueba
  6. Presente modelo con precisión de prueba encontrada en el paso 5

Eventualmente, si logras obtener una excelente puntuación en el conjunto de pruebas, puedes afirmar que se generaliza bien. Por lo tanto, la pregunta de si volver a entrenar en el conjunto de datos completo mejorará el rendimiento en futuros datos no vistos no es estrictamente algo que pueda probar. La evidencia empírica de un mejor rendimiento en otros conjuntos de problemas relacionados sería la única fuente u orientación en el momento en que debe tomar la decisión.

Una verificación de cordura sería probar el modelo final reentrenado nuevamente en el conjunto de prueba original; esperando que obtenga un puntaje más alto que nunca cuando el modelo solo vio el conjunto de tren / val, porque realmente ha visto el conjunto de prueba durante el entrenamiento. Esto no me haría sentir 100% seguro de que este modelo final es superior en todos los casos futuros, pero al menos es tan bueno como puede ser con los datos dados.

Tal vez haya argumentos más rigurosos en contra de hacer lo que usted dice (probablemente académicamente motivado), sin embargo, ¡parece atractivo para aplicaciones prácticas!

n1k31t4
fuente
Hice +1, gracias por tu esfuerzo y por señalar esa publicación, ¡me la perdí! En cuanto a su sugerencia de probar el modelo en todo el conjunto de datos de entrenamiento al final, creo que no obtiene ninguna información valiosa por su resultado. Simplemente porque el entrenamiento del algoritmo generalmente se basa en la optimización de las funciones de costos, por lo tanto, el modelo entrenado es óptimo dados los datos de entrenamiento. La baja precisión en los datos del tren no significa que no sea óptima, solo significa que simplemente no puede hacerlo mejor dado ese conjunto de datos y la arquitectura del algoritmo seleccionado. No se puede inferir nada por su validez externa por eso.
pcko1
1
¡De nada! Estoy totalmente de acuerdo con su declaración (aunque dije que probar el modelo entrenado final en los datos de la prueba de origen , no entrenar). En cualquier caso, todavía me gustaría ver que el modelo final no haya hecho algo completamente inesperado. La teoría y la práctica no siempre se alinean :)
n1k31t4
6

Un punto que debe enfatizarse sobre el aprendizaje automático de estadísticas es que no hay garantías . Cuando estima el rendimiento utilizando un conjunto extendido, eso es solo una estimación . Las estimaciones pueden estar equivocadas.

Esto lleva un tiempo acostumbrarse, pero es algo con lo que tendrá que sentirse cómodo. Cuando dices "¿Qué pasa si el rendimiento realmente se deteriora?", La respuesta es segura, eso podría suceder. El rendimiento real podría ser peor de lo que estimó / predijo. También podría ser mejor. Ambos son posibles. Eso es inevitable. Existe cierta incertidumbre inherente e irreducible.

Cuando evalúa el rendimiento utilizando un conjunto de prueba extendido, está utilizando datos del pasado para intentar predecir el rendimiento futuro. Como dicen, el rendimiento pasado no es garantía de resultados futuros . Este es un hecho de la vida que solo tenemos que aceptar.

No puedes dejar que esto te inmovilice. El hecho de que sea posible hacerlo peor de lo que predice no es una razón para evitar implementar en producción un modelo entrenado en los datos. En particular, también es posible hacerlo mal si no lo haces. Es posible que un modelo entrenado en todos los datos (tren + validación + prueba) sea peor que un modelo entrenado solo en la parte de tren + validación. También es posible que sea mejor. Entonces, en lugar de buscar una garantía, debemos preguntarnos: ¿Qué nos da la mejor oportunidad de éxito? ¿Qué es más probable que sea el más efectivo?

Y en este caso, cuando desee implementar en producción, lo mejor que puede hacer es utilizar todos los datos disponibles. En términos del rendimiento esperado, usar todos los datos no es peor que usar algunos de los datos, y potencialmente mejor. Por lo tanto, también puede utilizar todos los datos disponibles para entrenar el modelo cuando construya el modelo de producción. Las cosas aún pueden salir mal, siempre es posible tener mala suerte, siempre que use métodos estadísticos, pero esto le brinda la mejor oportunidad posible de que las cosas salgan bien.

En particular, la práctica estándar es la siguiente:

  1. Reserve algunos de sus datos en un conjunto de prueba extendido. No existe una regla estricta sobre qué fracción usar, pero, por ejemplo, puede reservar un 20% para el conjunto de prueba y conservar el 80% restante para capacitación y validación. Normalmente, todas las divisiones deben ser aleatorias.

  2. Luego, use los datos de capacitación y validación para probar múltiples arquitecturas e hiperparámetros, experimentando para encontrar el mejor modelo que pueda. Tome el 80% retenido para entrenamiento y validación, y divídalo en un conjunto de entrenamiento y un conjunto de validación, y entrene un modelo usando el conjunto de entrenamiento y luego mida su precisión en el conjunto de validación. Si está utilizando la validación cruzada, lo hará varias veces y promediará los resultados en el conjunto de validación; si no lo está, realizará una única división (por ejemplo, una división del 70% / 30% del 80%, o algo así) y evaluará el rendimiento en el conjunto de validación. Si tiene muchos hiperparámetros para probar, hágalo una vez para cada ajuste candidato de hiperparámetro. Si tiene muchas arquitecturas para probar, haga esto para cada arquitectura candidata. Puedes iterar sobre esto, usando lo que '

  3. Una vez que eres feliz, congelas la elección de arquitectura, hiperparámetros, etc. Ahora tu experimentación está hecha. Una vez que llegue a este punto, nunca podrá volver a probar ninguna otra opción (sin obtener un nuevo conjunto de pruebas nuevo), así que no lo haga hasta que esté seguro de que está listo.

  4. Cuando esté listo, entrena un modelo en el conjunto completo de entrenamiento + validación (ese 80%) utilizando la arquitectura y los hiperparámetros que seleccionó anteriormente. Luego, mida su precisión en el conjunto de prueba extendido. Esa es su estimación / predicción de cuán preciso será este enfoque de modelado. Obtienes un solo número aquí. Ese número es el que es: si no está satisfecho con él, no puede volver a los pasos 1 y 2 y hacer más experimentos; eso sería inválido.

  5. Finalmente, para uso en producción, puede entrenar un modelo en todo el conjunto de datos, entrenamiento + validación + conjunto de prueba y ponerlo en uso en producción. Tenga en cuenta que nunca mide la precisión de este modelo de producción, ya que no tiene datos restantes para hacerlo; ya has usado todos los datos. Si desea una estimación de qué tan bien funcionará, tiene derecho a usar la precisión estimada del paso 4 como su predicción de qué tan bien funcionará en la producción, ya que es la mejor predicción disponible de su rendimiento futuro. Como siempre, no hay garantías: esa es la mejor estimación posible, dada la información disponible para nosotros. Ciertamente es posible que pueda ser peor de lo que predice, o mejor de lo que predijo, eso siempre es cierto.

DW
fuente
Hice +1 por el esfuerzo, aunque no estoy totalmente de acuerdo :) por ejemplo, cuando menciona "En términos del rendimiento esperado, usar todos los datos no es peor que usar algunos de los datos, y potencialmente mejor". No veo el razonamiento detrás de esto. Por otro lado, el segundo punto que mencionas parece muy importante, ¡la validación cruzada! así que esencialmente entrena / valida con todas las muestras, por lo tanto, probablemente rechaza los valores atípicos en el modelo final elegido. Gracias por tu respuesta.
pcko1
@ pcko1, el principio es simple. Si tiene datos, ¿debería usarlos todos o parte de ellos? ¿Por qué? Tal vez cuando obtengamos datos, antes de hacer cualquier cosa, deberíamos tomar el 10% de ellos y tirarlos y nunca mirarlos. De hecho, si tirar algo es bueno, tirar más es aún mejor, por lo que tal vez deberíamos tirar todos nuestros datos. Eso es absurdo, ¿verdad? ¿Por qué? Vea si puede averiguar por qué y luego intente aplicarlo a esta situación. ¡Espero que esto te haga pensar!
DW
3

Una de las razones para tener un conjunto de datos es evitar el sobreajuste. Si emplea la validación cruzada, esencialmente permite que todo el conjunto de datos actúe como conjunto de entrenamiento, pero el reentrenamiento no le permitirá validar si hay signos de sobreajuste. Supongo que de cualquier manera (validación cruzada o reentrenamiento con todo el conjunto de datos) no debería cambiar drásticamente su resultado (desde mi suposición sin educación), pero no podrá realizar ajustes de hiperparámetro o validar el rendimiento de su modelo como no lo hace. tener un conjunto de prueba. Es difícil decir si termina siendo mejor, pero supongo que la única forma de saberlo es hacer un A / B de los dos modelos con datos reales a lo largo del tiempo.

El letrista
fuente