33 votos

¿Imputación antes o después de dividir en tren y prueba?

Tengo un conjunto de datos con N ~ 5000 y alrededor de la mitad de ellos faltan en al menos una variable importante. El método analítico principal será el de riesgos proporcionales de Cox.

Pienso utilizar la imputación múltiple. También voy a dividir en un conjunto de entrenamiento y de prueba.

¿Debo dividir los datos y luego imputar por separado, o imputar y luego dividir?

Si importa, usaré PROC MI en SAS .

42voto

Alan Puntos 7273

Debe dividir antes de preprocesar o imputar.

La división entre el conjunto de entrenamiento y el conjunto de pruebas es un intento de replicar la situación en la que se tiene información pasada y se está construyendo un modelo que se probará con información futura aún desconocida: el conjunto de entrenamiento ocupa el lugar del pasado y el conjunto de pruebas ocupa el lugar del futuro, por lo que sólo se puede probar el modelo entrenado una vez.

Teniendo en cuenta la analogía pasado/futuro, esto significa que cualquier cosa que se haga para preprocesar o procesar los datos, como la imputación de valores perdidos, debe hacerse sólo en el conjunto de entrenamiento. Así podrá recordar lo que hizo en el conjunto de entrenamiento si el conjunto de prueba también necesita un preprocesamiento o una imputación, de modo que lo haga de la misma manera en ambos conjuntos.

Añadido de los comentarios: si utiliza los datos de prueba para afectar a los datos de entrenamiento, entonces los datos de prueba se están utilizando para construir su modelo, por lo que dejan de ser datos de prueba y no proporcionarán una prueba justa de su modelo. Se corre el riesgo de sobreajustar, y fue para desalentar esto que se separaron los datos de prueba en primer lugar

5voto

Harry Puntos 31

Creo que es mejor dividir antes de hacer la imputación. Para los casos, es posible que desee imputar los valores perdidos con la media de la columna. En este caso, si imputa primero con el conjunto de datos de entrenamiento+válido y divide después, entonces habrá utilizado el conjunto de datos de validación antes de construir su modelo, lo que supone un problema de fuga de datos.

Pero se puede preguntar, si imputo después de dividir, puede ser demasiado tedioso cuando tenga que hacer la validación cruzada. Mi sugerencia para eso es utilizar la tubería de sklearn. Realmente simplifica su código, y reduce la posibilidad de cometer un error. Ver Tubería

2voto

John Puntos 26

Sólo para añadir a lo anterior, yo también sería partidario de dividir antes de imputar o de cualquier tipo de preprocesamiento. Nada de lo que se haga con los datos de entrenamiento debe ser informado por los datos de prueba (la analogía es que el futuro no debe afectar al pasado). De este modo, podrá recordar lo que hizo con su conjunto de entrenamiento si su conjunto de prueba también necesita un preprocesamiento o una imputación, de modo que lo haga de la misma manera en ambos conjuntos (la analogía es que puede utilizar el pasado para ayudar a predecir el futuro).

Si utiliza los datos de prueba para afectar a los datos de entrenamiento de alguna manera, entonces los datos de prueba se están utilizando para construir su modelo, por lo que dejan de ser datos de prueba y no proporcionarán una prueba justa de su modelo. Se corre el riesgo de sobreajustar, y fue para desalentar esto que se separaron los datos de prueba en primer lugar.

Creo que el paquete caret en r es muy útil en ese escenario. En concreto, este post me ha resultado muy útil https://topepo.github.io/caret/model-training-and-tuning.html

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