Codificación y validación cruzada

Aug 18 2020

Recientemente, he estado pensando en el uso adecuado de la codificación dentro del esquema de validación cruzada. La forma habitualmente recomendada de codificar funciones es:

  1. Divida los datos en un conjunto de trenes y pruebas (retención)
  2. Coloque el codificador ( LabelEncodero bien OneHotEncoder) en el tren
  3. Transforme tanto el tren como el equipo de prueba utilizando un codificador incorporado.

De esta manera se pretende evitar cualquier fuga de datos. Sin embargo, esto parece omitirse a menudo durante la validación cruzada. Supongamos que estoy realizando una validación cruzada en el conjunto de trenes mencionado anteriormente. Si codifico el conjunto de trenes y luego realizo una validación cruzada, realmente no imita los pasos anteriores. Entonces, ¿no debería realizarse la codificación "dentro" de la validación cruzada? Por ejemplo, suponiendo que realizamos una validación cruzada de 5 veces, ¿no deberíamos colocar el codificador en 4 pliegues y transformar en el quinto pliegue en cada paso de validación cruzada? Creo que es lo que se suele hacer en la codificación de destino, pero no con la codificación de etiquetas o one-hot.

Por tanto, mis preguntas son:

  1. ¿Tengo razón sobre la necesidad de ajustar el codificador en 4 pliegues y no en el quinto pliegue de validación en cada paso de validación cruzada si realmente queremos evitar el sobreajuste?
  2. Si no es así, ¿por qué es realmente necesario realizar los 3 pasos mencionados anteriormente al tratar con el conjunto de entrenamiento y prueba (retención)?

Respuestas

1 Erwan Aug 18 2020 at 07:50

Tiene razón, el paso de codificación en sí mismo puede ser una fuente de fuga de datos y normalmente debe realizarse dentro del ciclo CV utilizando solo el conjunto de entrenamiento actual, como usted describe.

De hecho, la razón es la que mencionas en el comentario: si hay una etiqueta de clase o una categoría de característica que no aparece por casualidad en un conjunto de entrenamiento en particular durante el CV, se supone que el modelo no debe saber que esta clase / categoría incluso existe.

En general, creo que este problema solo puede disminuir el rendimiento en el conjunto de prueba, por lo que probablemente no sea tan grave como otros tipos de filtración de datos. Aún así, definitivamente es un diseño experimental más limpio para codificar usando solo el conjunto de entrenamiento.

Un problema estrechamente relacionado en la PNL es cuando el sistema no está diseñado para tratar con palabras fuera del vocabulario (OOV): si todas las palabras en el conjunto de entrenamiento y prueba están codificadas (mismo error), entonces parece incorrectamente como si cualquier texto se puede codificar por completo, lo que podría causar malas sorpresas más adelante.

Dicho esto, generalmente es una buena idea descartar características raras o valores de etiqueta, y si esto se hace, el resultado debería ser el mismo usando el método adecuado o el descuidado.