Parada temprana vs validación cruzada

8

Actualmente estoy usando una parada temprana en mi trabajo para evitar un ajuste excesivo. Específicamente, los que se tomaron antes de parar pero ¿cuándo? .

Ahora quiero comparar con otros algoritmos de clasificación donde parece que la validación cruzada 10 veces se usa ampliamente.

Sin embargo, estoy confundido acerca de si la validación cruzada es un método para evitar un ajuste excesivo o seleccionar buenos parámetros. (¿o tal vez esto es lo mismo?). También estoy confundido si los métodos de detención temprana y la validación cruzada se pueden usar en lugar de uno al otro o en combinación.

Entonces la pregunta es: ¿cuál es la relación entre la detención temprana y la validación cruzada?

Andy T
fuente

Respuestas:

4

La validación cruzada es un método para estimar la precisión de generalización de un algoritmo de aprendizaje supervisado.

La detención temprana es un método para evitar el sobreajuste y requiere un método para evaluar la relación entre la precisión de generalización del modelo aprendido y la precisión del entrenamiento.

Por lo tanto, podría usar la validación cruzada para reemplazar el conjunto de validación, mencionado en el documento que cita, dentro de un marco de detención temprana. La validación cruzada diez veces, por ejemplo, sería más precisa que usar un solo conjunto de validación, y normalmente sería una mejor estimación del error de generalización.

Para resumir, la validación cruzada es una medida de precisión de generalización que podría usarse como parte de un marco de detención temprana.

image_doctor
fuente
1
Todo eso tiene sentido, saludos. Pero a partir de lo que puedo decir 10, la validación cruzada encontrada parece usarse para elegir los parámetros de un método determinado, no para detenerse antes de usar ese método. Así que creo que todavía me falta algo.
Andy T
@AndyT Tal vez lo que debe centrarse aquí es la estimación de generalización. Tanto la selección de parámetros como la detención temprana requieren un buen estimador del error de generalización. La validación cruzada N fold es uno de esos estimadores. Hay otros, como repetición de espera y arranque, o un conjunto de validación simple. Lo que está intentando hacer en ambos casos, la selección de parámetros y la detención temprana es evaluar cómo funcionará el modelo con datos no vistos para que pueda elegir un buen modelo. Para hacer esto, en ambos casos utiliza un estimador de generalización. Eso ayuda ?
image_doctor
Si, eso está claro. ¡Muchas gracias por tu tiempo! Es muy apreciado
Andy T
@AndyT No hay problema, ¡espero que tu proyecto salga bien!
image_doctor
1

Además de los dos enfoques de generalización que menciona, hay muchos otros.

  • agregando términos de regularización en su función de pérdida (costo) que minimizan el número y la magnitud de los parámetros de su modelo distinto de cero
  • abandonar aleatoriamente (poner a cero) una parte de los pesos / parámetros en su modelo con cada época de entrenamiento
  • Agregar una capa de nodos estocásticos en su modelo (por ejemplo, muestreo de las "probabilidades" dadas por las salidas de las funciones logísticas)

Muchos de estos enfoques (incluidos los enfoques de validación cruzada y de detención temprana) se pueden combinar para maximizar el rendimiento del modelo en datos no vistos (rendimiento de generalización).

Una nota sobre el enfoque de parada temprana. Para las redes neuronales, Geoffrey Hinton recomienda detener el entrenamiento cuando la precisión del conjunto de prueba alcanza su máximo (la pérdida del conjunto de prueba, excluyendo los términos de regularización, es mínima). Un "ajuste" adicional al enfoque de Hinton es no detenerse si la precisión test_set es mejor (la pérdida es menor) que para su conjunto de entrenamiento, incluso si la precisión del conjunto de prueba ha dejado de mejorar (la pérdida del conjunto de prueba ha dejado de disminuir). Es poco probable que gane más de una época de entrenamiento, pero a veces eso puede ayudar un poco, especialmente para pequeños test_sets. No haga esto para conjuntos de prueba extremadamente pequeños (más pequeños que un conjunto de muestra representativo, como a veces se usa en el entrenamiento de K-folds y la validación cruzada).

placas
fuente
0

no puede usar la detención temprana y la validación cruzada K-fold en combinación. debido a que la detención temprana selecciona el mejor modelo del conjunto de validación, el rendimiento debe ser verificado por el conjunto de prueba. pero en la validación cruzada K-fold, no hay un conjunto de prueba, si utiliza la detención temprana para seleccionar el mejor modelo del conjunto de validación, y se verificará nuevamente en el conjunto de validación. la validación cruzada K-fold está obteniendo el rendimiento promedio (medido por la precisión) del mejor modelo, y no tiene sentido.

tianyu zhou
fuente
El número de iteraciones de entrenamiento puede tratarse como un hiperparámetro y seleccionarse mediante validación cruzada, como cualquier otro hiperparámetro. Uno podría razonablemente llamar a esto "parada temprana".
user20160
cuando se utiliza la detención temprana en la validación cruzada K fold, el número de epoch se fija por conjunto de validación y es diferente para cada división. Esto hará que la red elija el mejor modelo en cada división, lo que no representa el rendimiento promedio.
tianyu zhou
2
La forma de hacerlo sería 1) Entrenar para un cierto número de iteraciones en cada pliegue (por ejemplo, hasta un máximo dado). 2) Calcule el error promedio del conjunto de validación (entre pliegues) en función del número de iteraciones. 3) Seleccione el número de iteraciones que minimiza el error promedio del conjunto de validación.
user20160
1
Aquí está mi solución: 1. baraja todos los datos, 2. haz 10 veces por sklearn, kfold = StratifiedKFold (n_splits = 10, shuffle = False) 3, configura la devolución de llamada: callbacks_list = [EarlyStopping (monitor = 'val_loss', paciencia = 50, detallado = 0, modo = 'min')] 4. elija el mejor modelo deteniéndose temprano. history = model.fit (X [train], Y [train], epochs = 250, batch_size = 512, verbose = 1, callbacks = callbacks_list, validation_split = 0.1, shuffle = False) establece otro conjunto de validación de división automática desde X [train ], Y [tren]. 5. pruebe el rendimiento por X [prueba] eY [prueba]: puntajes = model.evaluate (X [prueba], Y [prueba], detallado = 0)
tianyu zhou