¿Cómo se usa el conjunto de datos de 'prueba' después de la validación cruzada?

25

En algunas conferencias y tutoriales que he visto, sugieren dividir sus datos en tres partes: capacitación, validación y prueba. Pero no está claro cómo se debe usar el conjunto de datos de prueba, ni cómo este enfoque es mejor que la validación cruzada en todo el conjunto de datos.

Digamos que hemos guardado el 20% de nuestros datos como un conjunto de prueba. Luego tomamos el resto, lo dividimos en k pliegues y, mediante validación cruzada, encontramos el modelo que hace la mejor predicción sobre datos desconocidos de este conjunto de datos. Digamos que el mejor modelo que hemos encontrado nos da una precisión del 75% .

Varios tutoriales y muchas preguntas en varios sitios web de preguntas y respuestas dicen que ahora podemos verificar nuestro modelo en un conjunto de datos guardado (prueba). Pero todavía no puedo entender cómo se hace exactamente, ni cuál es el punto.

Digamos que tenemos una precisión del 70% en el conjunto de datos de prueba. Entonces, ¿qué hacemos ahora? ¿Intentamos con otro modelo, y luego con otro, hasta que obtengamos una puntuación alta en nuestro conjunto de datos de prueba? Pero en este caso realmente parece que encontraremos el modelo que se ajusta a nuestro conjunto de prueba limitado (solo el 20%) . No significa que encontraremos el modelo que es mejor en general.

Además, ¿cómo podemos considerar este puntaje como una evaluación general del modelo, si solo se calcula en un conjunto de datos limitado? Si este puntaje es bajo, tal vez tuvimos mala suerte y seleccionamos datos de prueba "malos".

Por otro lado, si usamos todos los datos que tenemos y luego elegimos el modelo usando la validación cruzada k-fold, encontraremos el modelo que hace la mejor predicción sobre datos desconocidos de todo el conjunto de datos que tenemos.

Serhiy
fuente
1
Evalúa su mejor modelo en ese conjunto de pruebas e informa el rendimiento en él. Es su mejor estimación del rendimiento de su modelo. Le sugiero que lea los dos primeros capítulos del excelente libro "Aprendiendo de los datos" de Yaser Abu-Mostafa. Muy sucinto y muy accesible. work.caltech.edu/telecourse.html
Vladislavs Dovgalecs
1
¡Gracias por el libro que has sugerido! Pero con respecto a su respuesta a la pregunta: usted dice que es la "mejor estimación del rendimiento de su modelo", pero en realidad es la estimación del rendimiento de un modelo en un conjunto de prueba pequeño (20%) , no Significa el modelo el rendimiento en general.
Serhiy
2
En realidad, es su mejor estimación del rendimiento del modelo en general. Su modelo puede estar sesgado y / o sufrir una gran variación, pero el rendimiento del modelo en su conjunto de prueba es el mejor indicador de cómo se desempeñaría en cualquier información invisible.
Vladislavs Dovgalecs
Gracias xeon! Lo único que aún no está claro para mí es qué hacemos después de evaluar el modelo utilizando el conjunto de datos de prueba .
Serhiy
Puede enviar el modelo si está satisfecho con los resultados o si encuentra mejores características / algoritmo / más datos para mejorar el modelo.
Vladislavs Dovgalecs

Respuestas:

20

Esto es similar a otra pregunta que respondí con respecto a la validación cruzada y los conjuntos de pruebas . El concepto clave para entender aquí son los conjuntos de datos independientes . Considere solo dos escenarios:

  1. Si tiene muchos recursos, lo ideal sería recopilar un conjunto de datos y entrenar su modelo mediante validación cruzada. Luego, recopilaría otro conjunto de datos completamente independiente y probaría su modelo. Sin embargo, como dije anteriormente, esto generalmente no es posible para muchos investigadores.

Ahora, si soy un investigador que no es tan afortunado, ¿qué hago? Bueno, puedes intentar imitar ese escenario exacto:

  1. Antes de realizar cualquier entrenamiento modelo , tomaría una división de sus datos y los dejaría a un lado ( nunca se debe tocar durante la validación cruzada ). Esto es para simular ese mismo conjunto de datos independiente mencionado en el escenario ideal anterior. Aunque proviene del mismo conjunto de datos, la capacitación modelo no tomará ninguna información de esas muestras (donde con validación cruzada se utilizan todos los datos). Una vez que haya entrenado su modelo, lo aplicará a su conjunto de prueba , nuevamente eso nunca se vio durante el entrenamiento, y obtendría sus resultados. Esto se hace para asegurarse de que su modelo sea más generalizable y no solo haya aprendido sus datos.

Para abordar sus otras preocupaciones:

Digamos que tenemos una precisión del 70% en el conjunto de datos de prueba, entonces, ¿qué hacemos a continuación? ¿Intentamos con otro modelo, y luego con otro, hasta que obtengamos un puntaje alto en nuestro conjunto de datos de prueba?

Más o menos, la idea es que esté creando el mejor modelo que pueda a partir de sus datos y luego evaluándolo en algunos datos más que nunca antes haya visto. Puede volver a evaluar su esquema de validación cruzada, pero una vez que tenga un modelo ajustado (es decir, hiperparámetros), avanzará con ese modelo porque fue lo mejor que pudo hacer. La clave es NUNCA UTILIZAR SUS DATOS DE PRUEBA PARA SINTONIZAR . El resultado de los datos de prueba es el rendimiento de su modelo en datos "generales". La replicación de este proceso eliminaría la independencia de los conjuntos de datos (que era el punto completo). Esta también es la dirección en otra pregunta sobre datos de prueba / validación .

Y también, ¿cómo podemos considerar este puntaje como una evaluación general del modelo, si se calcula en un conjunto de datos limitado? Si este puntaje es bajo, tal vez no tuvimos la suerte de seleccionar datos de prueba "malos".

Esto es poco probable si ha dividido sus datos correctamente. Debería dividir sus datos al azar (aunque potencialmente estratificados para el equilibrio de clases). Si su conjunto de datos es lo suficientemente grande como para dividir sus datos en tres partes, su subconjunto de prueba debe ser lo suficientemente grande como para que haya muy pocas posibilidades de que elija datos incorrectos. Es más probable que su modelo haya sido sobreajustado.

cdeterman
fuente
3
¡Gracias por una explicación tan detallada! Lo único que aún no está claro para mí es qué hacemos después de evaluar el modelo utilizando el conjunto de datos de prueba . ¿Qué pasa si el resultado es realmente bajo? ¿Probamos con otro modelo?
Serhiy
Como dije anteriormente, puede reevaluar su validación cruzada y ver si su método puede mejorarse siempre que no use sus datos de 'prueba' para el entrenamiento del modelo. Si su resultado es bajo, es probable que haya sobreajustado su modelo. Su conjunto de datos solo puede tener tanto poder predictivo.
cdeterman
¿No es la validación cruzada simplemente dividirse repetidamente en entrenamiento y conjunto de prueba (por ejemplo, el conjunto de prueba es el primer 20%, luego el segundo 20%, luego el tercero y así sucesivamente, o todos seleccionan al azar el 20% para la prueba n veces y calculan la precisión promedio) y haciendo exactamente lo mismo, que usted describe haciendo con el conjunto de prueba? ¿No se lo muestra al algoritmo en absoluto hasta la prueba?
Zelphir Kaltstahl el
2
@Zelphir no, cada pliegue se evalúa varias veces con cada combinación de hiperparámetro. Es probable que simplemente elegir el mejor resultado arroje resultados más altos que en un conjunto de prueba 'independiente'. La idea es ver qué parámetros se generalizan en estos pliegues y usar esa arquitectura en un conjunto de prueba que nunca ha visto para determinar qué tan "generalizable" es el modelo.
cdeterman
1
Quiero agregar que, en realidad, el hecho de mirar el rendimiento en su conjunto de prueba independiente y decidir volver y volver a entrenar su modelo hace que su conjunto de prueba ya no sea completamente independiente . De hecho, podría hacerlo infinitamente muchas veces hasta obtener la precisión perfecta. En cuanto a la referencia académica, recomiendo el libro "Aprendiendo de los datos", también hay un curso en línea gratuito del autor ( work.caltech.edu/telecourse.html ).
Michael
4

Si todo lo que va a hacer es entrenar un modelo con la configuración predeterminada en el conjunto de datos sin procesar o mínimamente preprocesado (p. Ej., Codificación de un solo uso y / o eliminación de NA), no necesita un conjunto de pruebas por separado, simplemente puede entrenar en su entrene y pruebe en su conjunto de validación, o incluso mejor, entrene en todo el conjunto utilizando la validación cruzada para estimar su rendimiento.

Sin embargo, tan pronto como su conocimiento sobre los datos le obligue a realizar cambios en su estrategia original, ahora ha "contaminado" su resultado. Algunos ejemplos incluyen:

  • Elección del modelo: Usted probó máquinas logísticas, de lazo, de bosque aleatorio, XGBoost y de soporte y eligió el mejor modelo

  • Ajuste de parámetros: sintonizó un XGBoost para encontrar los hiperparámetros óptimos

  • Selección de características: utilizó la selección hacia atrás, algoritmo genético, boruta, etc. para elegir un subconjunto óptimo de características para incluir en su modelo

  • Falta de imputación: imputaste las variables faltantes con la media, o con un modelo simple basado en las otras variables

  • Transformación de características: Centraste y escalaste tus variables numéricas para reemplazarlas con una puntuación z (número de desviaciones estándar de la media)

En todos los casos anteriores, el uso de un único conjunto de reserva, o incluso la validación cruzada, no le dará una estimación realista del rendimiento en el mundo real porque está utilizando información que no tendrá sobre datos futuros en su decisión. En cambio, está seleccionando el mejor modelo, los mejores hiperparámetros, el mejor conjunto de características, etc. para sus datos, y es probable que esté "ajustando" ligeramente su estrategia a sus datos. Para obtener una estimación honesta del rendimiento en el mundo real, debe calificarlo en los datos que no entraron en el proceso de decisión, de ahí la práctica común de usar un conjunto de pruebas independiente separado de su entrenamiento (modelado) y validación ( selección de un conjunto de modelos, características, hiperparámetros, etc.

Como alternativa a mantener un conjunto de prueba, puede utilizar una técnica llamada validación cruzada anidada. Esto requiere que codifique toda su estrategia de modelado (transformación, imputación, selección de características, selección de modelo, ajuste de hiperparámetro) como una función no paramétrica y luego realice una validación cruzada en toda esa función como si fuera simplemente una función de ajuste del modelo. Esto es difícil de hacer en la mayoría de los paquetes ML, pero puede implementarse con bastante facilidad en R con el paquete mlr utilizando envoltorios para definir su estrategia de entrenamiento y luego volver a muestrear a su alumno envuelto:

https://mlr.mlr-org.com/articles/tutorial/nested_resampling.html

Aaron Cooley
fuente
1

Supongo que estás haciendo clasificación.

Tome sus datos y divídalos 70/30 en subconjuntos trainingData / testData. Tome el subconjunto trainingData y divídalo 70/30 nuevamente en los subconjuntos trainingData / validateData. Ahora tiene 3 subconjuntos de sus datos originales: trainingData (.7 * .7), validateData (.7 * .3) y testData (.3).

Entrena su modelo con trainingData. Luego, verifica el rendimiento de ese modelo usando validateData, que podemos considerar como independiente de trainingData y, por lo tanto, una buena evaluación de qué tan bien el modelo se está generalizando. Supongamos que logras un 75% de precisión.

Ahora vuelve a entrenar su modelo un número arbitrario de veces. En cada reentrenamiento, está evaluando un conjunto diferente de hiperparámetros (los parámetros que se alimentan a su modelo en primer lugar frente a aquellos para los que está optimizando su modelo) pero aún utiliza el subconjunto trainingData. En cada reentrenamiento, también verifica nuevamente qué tan bien generaliza el nuevo modelo al verificar el rendimiento en validateData.

Una vez que haya verificado todas las combinaciones de hiperparámetros que quiere evaluar, elija el conjunto de hiperparámetros que le dio su mejor rendimiento en validateData. Supongamos que su mejor rendimiento en validateData fue del 80% de precisión. Estos son sus hiperparámetros finales y el modelo definido por esos hiperparámetros es el que usará para el siguiente paso.

Ahora toma el modelo que usa sus hiperparámetros finales y evalúa testData. Esta es la primera vez que testData ha sido tocado desde que comenzó todo este proceso. Si obtiene un rendimiento testData que es comparable a su rendimiento en validateData (aunque generalmente será un poco más bajo), ¡entonces puede sentirse seguro de que su modelo funciona como se espera y se generaliza bien! Si eso sucede, ¡este es tu modelo final!

¿Por qué hacer todo esto? Estás tratando de evitar el sobreajuste. Siempre existe el riesgo de que se sobreajuste a los datos que utiliza cuando entrena y ajusta (también conocido como validación) de su modelo. Si entrena, ajusta (valida) y prueba usando solo un conjunto de datos, existe una buena probabilidad de que sobreajuste esos datos y no se generalizará bien. Al separar los conjuntos de datos de entrenamiento y prueba (y suponiendo que sintonice usando los datos de prueba), tiene la oportunidad de comprobarse a sí mismo internamente, pero todavía existe la posibilidad de que solo esté ajustando los datos de prueba ahora. Es por eso que separamos un tercer conjunto de datos, lo validamos, por lo que tenemos una capa adicional de mantenernos honestos internamente. La sintonización con validateData nos impide adaptarnos en exceso a trainingData. Las pruebas finales con testData nos evitan el sobreajuste para validar los datos.

John D
fuente
¿Cómo es esta respuesta diferente de la respuesta aceptada ?
Jan Kukacka
La pregunta original es preguntar explícitamente sobre un flujo de trabajo que no incluya validación cruzada. Leí su pregunta para preguntar cómo funciona y por qué es confiable. La respuesta aceptada analiza un flujo de trabajo que todavía incluye validación cruzada. Quería explicar cómo las personas lo hacen sin usar necesariamente la validación cruzada en caso de que alguien sea un principiante y tal vez no lo sea en ese momento, todavía. Lo siento si publicar esto es incorrecto: soy un usuario nuevo y no pretendo haber infringido una regla.
John D
0

Veámoslo de la siguiente manera

  1. Práctica común

    a) Datos de capacitación: utilizados para elegir los parámetros del modelo.

     i) E.g., finding intercept and slope parameters for an ordinary linear 
        regression model. 
    
     ii) The noise in the training data-set is used in some extent 
         in over-fitting model parameters. 
    

    b) Datos de validación: se utilizan para elegir hiperparámetros.

     i)  E.g., we may want to test three different models at step 1.a, say 
         linear model with one, two or three variables.   
    
     ii) The validation data-set is independent from training data, and thus, they provide 
         'unbiased' evaluation to the models, which help to decide which 
         hyper-parameter to use. 
    
     iii) We note that, a model trained in 1.a, say y = b_0+b_1*x_1, does 
         not learn anything from this data-set. So, the noise in this data- 
         set is not used to over-fit the parameters (b_0, b_1), but, over- 
         fit exists in choosing which linear model to use (in terms of 
         number of variables). 
    

    c) Datos de prueba: se utilizan para obtener la confianza de la salida de los dos pasos anteriores

    i) Used once a model is completely trained
    
  2. Otra forma de ver la parte 1

    a) Nuestro grupo de candidatos modelo es un conjunto de 5 dimenson, es decir,

    i) Dimension 1: number of variables to keep in the regression model, 
       e.g., [1, 2, 3].
    
    ii) Dimension 2-5: (b_0, b_1, b_2, b_3). 
    

    b) El paso 1a reduce los candidatos modelo de 5 dimensiones a 1 dimensión.

    c) El paso 1b reduce los candidatos modelo de 1 dimensión a dimensión 0, que es un modelo único.

    d) Sin embargo, el OP puede pensar que el resultado 'final' anterior no está funcionando lo suficientemente bien en el conjunto de datos de prueba y, por lo tanto, rehace todo el proceso nuevamente, por ejemplo, usando la regresión de cresta en lugar de la regresión lineal ordinaria. Luego, el conjunto de datos de prueba se usa varias veces y, por lo tanto, el ruido en estos datos puede producir un sobreajuste al decidir si usar regresión lineal o regresión de cresta.

    e) Para tratar con un conjunto de modelos de alta dimensión con parámetros, hiperparámetros, tipos de modelos y métodos de preprocesamiento, cualquier división de los datos disponibles para nosotros es esencialmente definir un proceso de toma de decisiones que

    i)  Sequentially reducing the model pool to zero-dimension.
    
    ii) Allocating data noise overfitting to different steps of dimension 
        reductions (overfitting the noise in the data is not avoidable but 
        could be allocated smartly). 
    
  3. Conclusión y respuestas a la pregunta de OP

    a) Dos divisiones (entrenamiento y prueba), tres divisiones (capacitación, validación y prueba) o un número mayor de divisiones se trata esencialmente de reducir la dimensionalidad y asignar los datos (especialmente el ruido y el riesgo de sobreajuste).

    b) En algún momento, puede llegar a un grupo de candidatos modelo 'final', y luego, puede pensar en cómo diseñar el proceso de reducción de la dimensión secuencialmente de modo que

    i) At each step of reducing the dimensions, the output is satisfactory, 
      e.g., not using just 10 data points with large noise to estimate a 
      six-parameter liner model. 
    
    ii) There are enough data for you to reduce the dimension to zero 
       finally. 
    

    c) ¿Qué pasa si no puedes lograr b?

    i) Use model and data insight to reduce the overall dimensionality of 
      your model pool. E.g., liner regression is sensitive to outliers thus 
      not good for data with many large outliers. 
    
    ii) Choose robust non-parametric models or models with less number of 
       parameter if possible. 
    
    iii) Smartly allocating the data available at each step of reducing the 
        dimensionality. There is some goodness of fit tests to help us decide 
        whether the data we use to train the model is enough or not. 
    
Madriguera
fuente