49 votos

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

En algunos conferencias y tutoriales He visto que sugieren dividir los datos en tres partes: entrenamiento, validación y prueba. Pero no está claro cómo se debe utilizar el conjunto de datos de prueba, ni cómo este enfoque es mejor que la validación cruzada sobre todo el conjunto de datos.

Digamos que hemos guardado el 20% de nuestros datos como conjunto de pruebas. A continuación, tomamos el resto, lo dividimos en k pliegues y, utilizando la validación cruzada, encontramos el modelo que hace la mejor predicción sobre los datos desconocidos de este conjunto de datos. Digamos que el mejor modelo que hemos encontrado nos da 75% precisión.

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 (de prueba). Pero sigo sin entender cómo se hace exactamente, ni para qué sirve.

Digamos que tenemos una precisión de 70% en el conjunto de datos de prueba. ¿Y qué hacemos ahora? ¿Probamos con otro modelo, y luego con otro, hasta que consigamos una puntuación alta en nuestro conjunto de datos de prueba? Pero en este caso parece que sólo encontraremos el modelo que se ajuste a nuestro limitado (sólo el 20%) conjunto de pruebas . Esto no significa que vayamos a encontrar el modelo que sea mejor en general.

Además, ¿cómo podemos considerar esta puntuación como una evaluación general del modelo, si sólo se calcula sobre un conjunto de datos limitado? Si esta puntuación es baja, puede que hayamos tenido mala suerte y hayamos seleccionado datos de prueba "malos".

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

33voto

llg179 Puntos 1

Esto es similar a otra pregunta que respondí sobre validación cruzada y conjuntos de pruebas . El concepto clave que hay que entender aquí es conjuntos de datos independientes . Considere sólo dos escenarios:

  1. Si dispone de muchos recursos, lo ideal sería recopilar un conjunto de datos y entrenar el modelo mediante validación cruzada. A continuación, recogería otro totalmente independiente conjunto de datos y prueba su modelo. Sin embargo, como he dicho anteriormente, esto no suele ser posible para muchos investigadores.

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

  1. Antes de realizar el entrenamiento del modelo se tomaría una parte de los datos y se 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 provenga del mismo conjunto de datos, el entrenamiento del modelo no tomará ninguna información de esas muestras (mientras que con la validación cruzada se utilizan todos los datos). Una vez que haya entrenado su modelo, lo aplicará a su prueba conjunto, de nuevo que nunca se vio durante el entrenamiento, y obtener sus resultados. Esto se hace para asegurarse de que su modelo es más generalizable y no acaba de aprender su datos.

Para abordar sus otras preocupaciones:

Digamos que tenemos una precisión del 70% en el conjunto de datos de prueba, ¿qué hacemos ahora? ¿Probamos con otro modelo, y luego con otro, hasta que consigamos una alta puntuación en nuestro conjunto de datos de prueba?

Más o menos, la idea es que estás creando el mejor modelo que puedes a partir de tus datos y luego lo evalúas con otros datos que nunca ha visto antes. Puedes reevaluar tu esquema de validación cruzada, pero una vez que tienes un modelo ajustado (es decir, hiperparámetros) sigues adelante con ese modelo porque era el mejor que podías hacer. La clave es NO UTILIZAR NUNCA LOS DATOS DE LAS PRUEBAS PARA LA PUESTA A PUNTO . El resultado de los datos de prueba es el rendimiento de su modelo en los datos "generales". Replicar este proceso eliminaría la independencia de los conjuntos de datos (que era el objetivo). Esto también se aborda en otra pregunta sobre datos de prueba/validación .

Y además, ¿cómo podemos considerar esta puntuación como una evaluación general del modelo, si se calcula sobre un conjunto de datos limitado? Si esta puntuación es baja, tal vez hayamos tenido la mala suerte de seleccionar datos de prueba "malos".

Esto es poco probable si ha dividido sus datos correctamente. Debería dividir los datos de forma aleatoria (aunque potencialmente estratificada para equilibrar las clases). Si su conjunto de datos es lo suficientemente grande como para dividirlos en tres partes, su subconjunto de prueba debería ser lo suficientemente grande como para que la probabilidad de que haya elegido datos incorrectos sea muy baja. Es más probable que su modelo haya sido sobreajustado.

5voto

Edward Puntos 123

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 (por ejemplo, codificación de un solo disparo y/o eliminación de NA), no necesita un conjunto de pruebas separado, puede simplemente entrenar en su conjunto de entrenamiento y probar en su conjunto de validación, o incluso mejor, entrenar en todo el conjunto utilizando la validación cruzada para estimar su rendimiento.

Sin embargo, en el momento en que su conocimiento de los datos le haga cambiar su estrategia original, habrá "contaminado" su resultado. Algunos ejemplos son:

  • Elección del modelo: Ha probado la logística, el lazo, el bosque aleatorio, el XGBoost y las máquinas de vectores de apoyo y ha elegido el mejor modelo

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

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

  • Imputación de faltas: Imputó las variables ausentes con la media, o con un modelo simple basado en las otras variables

  • Transformación de características: Ha centrado y escalado sus variables numéricas para sustituirlas por 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 retención, o incluso la validación cruzada, no le va a dar una estimación realista del rendimiento en el mundo real porque está utilizando información que no tendrá en los datos futuros en su decisión. En lugar de ello, está eligiendo el mejor modelo, los mejores hiperparámetros, el mejor conjunto de características, etc. para sus datos, y es probable que esté "sobreajustando" ligeramente su estrategia a sus datos. Para obtener una estimación honesta del rendimiento en el mundo real, es necesario puntuar los datos que no entraron en el proceso de decisión en absoluto, de ahí la práctica común de utilizar un conjunto de pruebas independientes separadas de su formación (modelado) y validación (la elección de un modelo, características, hiperparámetros, etc.) conjunto.

Como alternativa a la realización de un conjunto de pruebas, puede utilizar una técnica denominada 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 modelos, ajuste de hiperparámetros) como una función no paramétrica y, a continuación, 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 de ML, pero se puede implementar fácilmente en R con el paquete mlr utilizando envolturas para definir su estrategia de entrenamiento y luego remuestrear su aprendiz envuelto:

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

2voto

Stijn Puntos 11

Asumo que estás haciendo la clasificación.

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

Usted entrena su modelo con trainingData. A continuación, se comprueba el rendimiento del modelo mediante validateData, que podemos considerar independiente de trainingData y, por lo tanto, una buena evaluación de lo bien que está generalizando el modelo. Supongamos que se consigue un 75% de precisión.

Ahora vuelve a entrenar su modelo un número arbitrario de veces. En cada reentrenamiento, se evalúa un conjunto diferente de hiperparámetros (los parámetros con los que se alimenta el modelo en primer lugar frente a aquellos para los que se optimiza el modelo), pero se sigue utilizando el subconjunto TrainingData. En cada reentrenamiento, también se comprueba lo bien que se generaliza el nuevo modelo mediante la comprobación del rendimiento en validateData.

Una vez que haya comprobado todas las combinaciones de hiperparámetros que quiere evaluar, elija el conjunto de hiperparámetros que le proporcionaron el 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 utilizará para el siguiente paso.

Ahora toma el modelo que utiliza sus hiperparámetros finales y evalúa testData. Esta es la primera vez que se toca testData desde que comenzó todo este proceso. Si el rendimiento de testData es comparable al rendimiento de validateData (aunque normalmente será ligeramente inferior), entonces puede confiar en que su modelo funciona como se esperaba 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 se utilizan cuando se entrena y se afina (es decir, se valida) el modelo. Si entrenas, ajustas (validas) y pruebas utilizando un solo conjunto de datos, hay muchas posibilidades de que sobreajustes esos datos y no se generalice bien. Al separar los conjuntos de datos de entrenamiento y de prueba (y asumiendo que se ajusta utilizando los datos de prueba), se tiene la oportunidad de comprobar internamente, pero sigue existiendo la posibilidad de que se esté sobreajustando a los datos de prueba. Es por eso que se crea un tercer conjunto de datos, validar, por lo que tenemos una capa adicional de mantenernos internamente honestos. El ajuste con validateData nos impide sobreajustar a trainingData. La prueba final con testData nos impide sobreajustar a validateData.

1voto

Matt Wolfe Puntos 4123

Veámoslo de la siguiente manera

  1. Práctica común

    a) Datos de entrenamiento: se utilizan 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 los 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 los resultados de los dos pasos anteriores

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

    a) Nuestro conjunto de candidatos al modelo es un conjunto de 5 dimensones, 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 modelos candidatos de 5 dimensiones a 1 dimensión.

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

    d) Sin embargo, el PO puede pensar que el resultado "final" anterior no está funcionando bien en el conjunto de datos de prueba, y por lo tanto rehacer todo el proceso de nuevo, digamos utilizando la regresión ridge en lugar de la regresión lineal ordinaria. Entonces, el conjunto de datos de datos de prueba se utiliza varias veces y, por tanto, el ruido de estos datos podría producir algún exceso de ajuste al decidir si se utiliza la regresión lineal o la la regresión lineal o la regresión por crestas.

    e) Tratar 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 de los datos disponibles es esencialmente la definición de 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 del PO

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

    b) En algún momento, puede llegar a un grupo de candidatos modelo "final", y entonces puede pensar en cómo diseñar el proceso de reducción de la dimensión secuencialmente, de manera 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 puede conseguir 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.

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