Validación cruzada y optimización de parámetros

14

Tengo una pregunta sobre la optimización de parámetros cuando uso la validación cruzada 10 veces.

Quiero preguntar si los parámetros deberían arreglarse o no durante el entrenamiento del modelo de cada pliegue, es decir (1) seleccionar un conjunto de parámetros optimizados para la precisión promedio de cada pliegue.

o

(2) ¿Debería encontrar el parámetro optimizado para cada pliegue y luego cada pliegue utiliza diferentes parámetros optimizados para entrenar su modelo y luego probar en los datos de prueba del pliegue respectivamente, y finalmente promediar la precisión de cada pliegue como resultado?

¿Cuál es el método correcto para la validación cruzada? Muchas gracias.

Kevin
fuente
Esta pregunta: stats.stackexchange.com/questions/1826/… tiene dos excelentes respuestas (puntaje más alto), creo que podrían ayudarlo en su pregunta. El segundo es exactamente lo que quieres. OBS .: Me gustaría escribir esto como un comentario, pero no puedo hacerlo, así que lo he respondido.
Augusto

Respuestas:

11

Primero, distingamos entre dos conjuntos de parámetros: parámetros del modelo (por ejemplo, ponderaciones para características en regresión) y parámetros para el algoritmo de aprendizaje (e hiperparámetros). El propósito de la validación cruzada es identificar parámetros de aprendizaje que se generalicen bien en las muestras de población de las que aprendemos en cada pliegue.

Más específicamente: buscamos globalmente en el espacio los parámetros de aprendizaje, pero dentro de cada pliegue, arreglamos los parámetros de aprendizaje y aprendemos los parámetros del modelo. El resultado debe ser aprender parámetros que produzcan en promedio el mejor rendimiento en todos los pliegues. Luego podemos usarlos para entrenar un modelo en todo el conjunto de datos.

Joel
fuente
Lo sentimos, el tipo de parámetro que cuestioné es hiperparámetros como dijiste.
Kevin
Tales como los parámetros c y g en libSVM. Entonces, ¿debería usar la misma c y g para entrenar el modelo de cada pliegue como el (2) método que mencioné anteriormente y luego elegir el mejor? Muchas gracias.
Kevin
2
Los (1) y (2) anteriores no me quedaron claros, así que no me referí a ellos explícitamente. Debe buscar el espacio de c & g que maximiza la métrica de su tarea cuando se promedia en los pliegues. Por lo tanto, debe establecer c & g en algún valor, ejecutar el procedimiento de entrenamiento y prueba en todos los pliegues, promediarlos, mantener ese puntaje, modificar c y g y repetir. En última instancia, encuentra el mejor c & g, y puede entrenar el modelo final en todos sus datos.
Joel
Muchas gracias. Intento resumir las respuestas. Los datos se dividieron en 10 veces: fold-1: (train1, test1) ... fold-10: (train10, test10) Luego use a (c1, g1) para entrenar y probar en fold-1 para fold-10, Promedio de la precisión de todos los pliegues. Pruebe con otro (c2, g2) para hacer el mismo proceso ... repita hasta que encuentre el mejor (c, g). Y la precisión promedio de los mejores (c, g) será el resultado de mi validación cruzada 10 veces.
Kevin
1
Suena correcto ...
Joel
16

Creo que la respuesta actualmente aceptada es incompleta de una manera desafortunada. No estoy de acuerdo con la frase

El propósito de la validación cruzada es identificar parámetros de aprendizaje que se generalicen bien en las muestras de población de las que aprendemos en cada pliegue.

De hecho, esta es una aplicación muy importante de la validación cruzada, pero no la única. Por lo general, quieres hacer dos cosas:

  1. Construye el mejor modelo que puedas
  2. Obtenga una impresión precisa de lo bien que funciona

Ahora, para completar el objetivo 1 dependiendo de su algoritmo, es posible que necesite ajustar algunos hiperparámetros y esto a menudo se hace mediante validación cruzada. Pero esto aún no lo ayuda con el objetivo 2. Para esto, básicamente necesita anidar la validación cruzada, de esta manera:

  • Separa los datos completos en n pliegues
  • Para cada uno, pliegue separe los datos de entrenamiento nuevamente en sub pliegues
  • Use la validación cruzada en los subpliegues para aprender buenos hiperparámetros
  • Con estos hiperparámetros, construya un modelo sobre los datos de entrenamiento de ese pliegue
  • Probar el modelo en los datos de prueba
  • Repita en el siguiente pliegue

Para construir un buen modelo solo necesita la validación cruzada interna. Aún deberá hacerlo para obtener un buen modelo. Pero para obtener una buena estimación del rendimiento de su modelo, debe realizar todo el proceso de construcción del modelo dentro de un esquema de validación cruzada. Esto también incluye pasos como la imputación, etc.

Erik
fuente
1
Erik, ¿podrías proporcionar una referencia de cómo hacer este proceso?
chao
Hola @Erik, entonces el orden general de análisis sería (1) Encontrar los parámetros de ajuste óptimos con validación cruzada, (2) Volver a entrenar el modelo (con los parámetros de ajuste obtenidos) en todo el conjunto de datos de entrenamiento para obtener los parámetros del modelo, y (3 ) ¿Ver la estimación de rendimiento general de este método mediante el uso de validación cruzada anidada? Lo que me confunde es que se pueden elegir diferentes hiperparámetros en el proceso de anidado de CV, por lo que el anidado CV no estaría investigando específicamente el rendimiento general de los parámetros de hiperparámetro / modelo que obtuvimos anteriormente.
Michelle
1
Llego un poco tarde a la conversación, pero me gustaría señalar que este método también se llama "anidado" o "doble validación cruzada" y aquí hay una buena explicación de Tom Fearn y un ejemplo con código en el scikit- aprender documentación
MD004