Validación cruzada anidada para la selección del modelo

91

¿Cómo se puede usar la validación cruzada anidada para la selección del modelo ?

Por lo que leí en línea, el CV anidado funciona de la siguiente manera:

  • Existe el bucle CV interno, donde podemos realizar una búsqueda de cuadrícula (por ejemplo, ejecutar K-fold para cada modelo disponible, por ejemplo, combinación de hiperparámetros / características)
  • Existe el bucle CV externo, donde medimos el rendimiento del modelo que ganó en el pliegue interno, en un pliegue externo separado.

Al final de este proceso terminamos con modelos ( es el número de pliegues en el bucle externo). Estos modelos son los que ganaron en la búsqueda de cuadrícula dentro del CV interno, y es probable que sean diferentes (por ejemplo, SVM con diferentes núcleos, entrenados con características posiblemente diferentes, dependiendo de la búsqueda de cuadrícula).KK

¿Cómo elijo un modelo de esta salida? Me parece que seleccionar el mejor modelo de esos modelos ganadores no sería una comparación justa, ya que cada modelo fue entrenado y probado en diferentes partes del conjunto de datos.K

Entonces, ¿cómo puedo usar un CV anidado para la selección del modelo?

También he leído hilos discutiendo cómo la selección de modelos anidados es útil para analizar el procedimiento de aprendizaje. ¿Qué tipos de análisis / controles puedo hacer con los puntajes que obtengo de los pliegues K externos?

Amelio Vazquez-Reina
fuente

Respuestas:

76

¿Cómo elijo un modelo de esta salida [validación cruzada externa]?

Respuesta corta: no lo haces.

Trate la validación cruzada interna como parte del procedimiento de ajuste del modelo. Eso significa que el ajuste, incluido el ajuste de los hiperparámetros (aquí es donde se oculta la validación cruzada interna) es como cualquier otra rutina de inicialización del modelo.
La validación cruzada externa estima el rendimiento de este enfoque de ajuste del modelo. Para eso usas los supuestos habituales

  • Los modelos sustitutos externos son equivalentes al modelo "real" construido con todos los datos.kmodel.fitting.procedure
  • O, en el caso 1. se rompe (sesgo pesimista de validación de remuestreo), al menos los modelos sustitutos externos son equivalentes entre sí. Esto le permite agrupar (promedio) los resultados de la prueba. También significa que no necesita elegir entre ellos, ya que supone que son básicamente lo mismo. La ruptura de este segundo supuesto, más débil, es la inestabilidad del modelo.k

No , no recoger el aparentemente mejor de los modelos sustitutos - que suele ser sólo "cosecha" incertidumbre de pruebas y conduce a un sesgo optimista.k

Entonces, ¿cómo puedo usar un CV anidado para la selección del modelo?

El CV interno hace la selección.

Me parece que seleccionar el mejor modelo de esos K modelos ganadores no sería una comparación justa ya que cada modelo fue entrenado y probado en diferentes partes del conjunto de datos.

k

  • No tener los mismos datos de prueba: como quiere afirmar después que los resultados de la prueba se generalizan a datos nunca vistos, esto no puede hacer la diferencia.
  • No tener los mismos datos de entrenamiento:
    • si los modelos son estables, esto no hace una diferencia: estable aquí significa que el modelo no cambia (mucho) si los datos de entrenamiento se "perturban" al reemplazar algunos casos por otros.
    • Si los modelos no son estables, tres consideraciones son importantes:
      1. k
      2. k
      3. Si la inestabilidad es un problema real, no puede extrapolar bien el rendimiento del modelo "real".

Lo que me lleva a tu última pregunta:

¿Qué tipos de análisis / controles puedo hacer con los puntajes que obtengo de los pliegues K externos?

  • verificar la estabilidad de las predicciones (usar validación cruzada iterativa / repetida)
  • verifique la estabilidad / variación de los hiperparámetros optimizados.
    Por un lado, los hiperparámetros de dispersión salvaje pueden indicar que la optimización interna no funcionó. Por otro lado, esto puede permitirle decidir sobre los hiperparámetros sin el costoso paso de optimización en situaciones similares en el futuro. Con costoso no me refiero a los recursos computacionales, sino al hecho de que esta información de "costos" puede utilizarse mejor para estimar los parámetros del modelo "normal".

  • verifique la diferencia entre la estimación interna y externa del modelo elegido. Si hay una gran diferencia (el ser interno es demasiado optimista), existe el riesgo de que la optimización interna no funcione bien debido al sobreajuste.


Pregunta de update @ user99889: ¿Qué hacer si el CV externo encuentra inestabilidad?

En primer lugar, detectar en el bucle CV externo que los modelos no producen predicciones estables a ese respecto no difiere realmente de detectar que el error de predicción es demasiado alto para la aplicación. Es uno de los posibles resultados de la validación (o verificación) del modelo que implica que el modelo que tenemos no es adecuado para su propósito.

En el comentario que respondía a @davips, estaba pensando en abordar la inestabilidad en el CV interno , es decir, como parte del proceso de optimización del modelo.

Pero ciertamente tiene razón: si cambiamos nuestro modelo en función de los hallazgos del CV externo, es necesaria otra ronda de pruebas independientes del modelo modificado.
Sin embargo, la inestabilidad en el CV externo también sería una señal de que la optimización no se configuró bien, por lo que encontrar inestabilidad en el CV externo implica que el CV interno no penaliza la inestabilidad de la manera necesaria; este sería mi punto principal. crítica en tal situación. En otras palabras, ¿por qué la optimización permite / conduce a modelos muy sobreajustados?

Sin embargo, aquí hay una peculiaridad de que, en mi humilde opinión, puede excusar el cambio adicional del modelo "final" después de una cuidadosa consideración de las circunstancias exactas : como detectamos sobreajuste, cualquier cambio propuesto (menos df / más restrictivo o agregación) al modelo estar en dirección de menos sobreajuste (o al menos hiperparámetros que sean menos propensos a sobreajustar). El objetivo de las pruebas independientes es detectar el sobreajuste: los datos que ya se utilizaron en el proceso de capacitación pueden detectar el subajuste.

Entonces, si estamos hablando, digamos, de reducir aún más el número de variables latentes en un modelo PLS que sería comparablemente benigno (si el cambio propuesto fuera un tipo de modelo totalmente diferente, digamos PLS en lugar de SVM, todas las apuestas estarían apagadas ), y estaría aún más relajado al respecto si supiera que de todos modos estamos en una etapa intermedia de modelado; después de todo, si los modelos optimizados siguen siendo inestables, no hay duda de que se necesitan más casos. Además, en muchas situaciones, eventualmente necesitará realizar estudios diseñados para probar adecuadamente varios aspectos del rendimiento (por ejemplo, generalización a los datos adquiridos en el futuro). Aún así, insistiría en que el proceso de modelado completo necesitaría ser informado, y que las implicaciones de estos cambios tardíos deberían ser discutidas cuidadosamente.

Además, la agregación que incluye una estimación de rendimiento de CV analógico fuera de la bolsa sería posible a partir de los resultados ya disponibles, que es el otro tipo de "postprocesamiento" del modelo que estaría dispuesto a considerar benigno aquí. Una vez más, habría sido mejor si el estudio se diseñó desde el principio para verificar que la agregación no ofrece ninguna ventaja sobre las predicciones individuales (que es otra forma de decir que los modelos individuales son estables).


Actualización (2019): cuanto más pienso en estas situaciones, más favorezco el enfoque de "validación cruzada anidada aparentemente sin anidar" .

Cbeleites
fuente
Selección de modelo de Wrt, si el clasificador es inestable, ¿deberíamos elegir el que tenga el rendimiento medio entre los mejores? Esta elección sería análoga a su sugerencia de comparar el rendimiento interno con el rendimiento externo.
viyps
2
@davips: si los modelos son inestables, la optimización no funcionará (la inestabilidad causa una variación adicional). Sin embargo, elegir el modelo con rendimiento medio (o promedio) no ayudará. En cambio, si los modelos son inestables, recomendaría optar por modelos más restrictivos (por ejemplo, una regularización más fuerte) o construir un conjunto de modelos (que es fundamentalmente diferente de seleccionar un modelo).
cbeleites
1
@ user99889: consulte la respuesta actualizada.
cbeleites
1
@ user99889: sí, pero no esperes milagros allí. Si la estabilidad es un problema cuando se entrena con el 80% de los casos (k = 5), probablemente seguirá siendo un problema con k = 10, es decir, el 90% de n = 12.5% ​​adicional en comparación con el 80% / k = 5 modelos sustitutos.
cbeleites
1
@cbeleites: un hipotético relacionado. Supongamos que decido buscar un espacio de parámetros c: [1,2,3]. Realizo CV anidado en todo mi conjunto de datos y encuentro que el rendimiento no es tan bueno. Por lo tanto, amplío mi espacio de búsqueda a c: [0.5,1,1.5,2,2.5,3,3.5,4]. ¿He hecho algo muy malo? Parece que esencialmente he cambiado mi espacio de parámetros (que es parte del proceso de modelado) basado en el conocimiento obtenido de los datos de prueba y, por lo tanto, ¿necesito evaluar en un conjunto de datos externo a mi conjunto de datos actual? Feliz de hacer esta pregunta por separado si crees que es mejor.
user0
27

Además de la excelente respuesta de cebeleites (+1), la idea básica es que la validación cruzada se utiliza para evaluar el rendimiento de un método para ajustar un modelo, no del modelo en sí. Si necesita realizar la selección del modelo, debe hacerlo de forma independiente en cada pliegue del procedimiento de validación cruzada, ya que es una parte integral del procedimiento de ajuste del modelo. Si utiliza un procedimiento de selección de modelo basado en validación cruzada, esto significa que terminará con una validación cruzada anidada. Es útil considerar el propósito de cada validación cruzada: una es para la selección del modelo y la otra para la estimación del rendimiento.

Haría mi modelo final ajustando el modelo (incluida la selección del modelo) a todo el conjunto de datos, después de usar la validación cruzada anidada para tener una idea del rendimiento que razonablemente podría esperar obtener de ese modelo.

Dikran Marsupial
fuente
1
¿Por qué lo necesitas get an idea of the performance?
viyps
1
@davips Generalmente, si un método estadístico se va a utilizar para algún propósito práctico, los usuarios a menudo querrán tener una idea de qué tan bien funciona (por ejemplo, una prueba de detección médica). Además, si está desarrollando un algoritmo de aprendizaje automático, es útil tener una estimación imparcial de qué tan bien funciona en comparación con los métodos de la competencia. También es un medio útil para validar si el método realmente funciona (lo que se invalida si la validación cruzada se usa tanto para seleccionar parámetros como para estimar el rendimiento).
Dikran Marsupial
55
Entonces, para decidir qué parámetro usar en el modelo final, ¿haría el ciclo interno una vez? Entonces, si el bucle interno tuviera una validación de 10 veces, ¿podría retener 1/10 del tren de datos que cada modelo repita esto 10 veces y luego elegir el valor del parámetro con el error promedio más pequeño? ¿Entonces reentrenar el modelo con ese valor de parámetro en todo el conjunto de datos?
emschorsch
2
Si, eso es correcto. r
Dikran Marsupial
1
@FedericoTedeschi Las validaciones cruzadas deben estar anidadas, en lugar de simplemente una división diferente para obtener un estimador de rendimiento imparcial (consulte la sección 5.3 de mi artículo jmlr.csail.mit.edu/papers/volume11/cawley10a/cawley10a.pdf ) . En general, solo uso LOOCV para la selección de modelos para modelos donde se puede calcular de manera eficiente y usaría bootstrapping / bagging para modelos de conjuntos de datos pequeños (con el error OOB reemplazando la validación cruzada externa).
Dikran Marsupial
7

No creo que nadie haya respondido realmente la primera pregunta. Por "validación cruzada anidada" creo que se refería a combinarlo con GridSearch. Por lo general, GridSearch tiene un CV incorporado y toma un parámetro sobre cuántos pliegues queremos probar. Combinando esos dos, creo que es una buena práctica, pero el modelo de GridSearch y CrossValidation no es su modelo final. Debería elegir los mejores parámetros y entrenar un nuevo modelo con todos sus datos eventualmente, o incluso hacer una validación cruzada aquí también en datos invisibles y luego, si el modelo realmente es tan bueno, lo entrena en todos sus datos. Ese es tu modelo final.

anselal
fuente
3
para aclarar, en python scikit-learn, en GridSearchCV(refit=True)realidad se ajusta un modelo en los datos COMPLETOS utilizando los mejores parámetros, por lo que ese paso adicional no es necesario. Ver documentos
Paul
Tienes razón sobre la opción de reparación. ¡Solo decía que era obvio!
anselal
"el modelo de GridSearch no es tu modelo final". Pero mi punto es que el modelo de búsqueda de cuadrícula con refit = True es el modelo final. ¿Quieres decir que tú y yo estamos en la misma página? Pero aún no veo dónde ocurre el anidamiento en la búsqueda de cuadrícula con CV. Me parece una sola capa de CV (por ejemplo, un CV de 5 veces en la búsqueda de cuadrícula es una sola capa de CV).
Paul
Estamos en la misma página sobre el reacondicionamiento. Pero con CV anidado queremos decir que cree otro ciclo de CV fuera de su GridSearch, dejando algunos datos fuera del entrenamiento y probando su modelo final-final para ver si se generaliza (hace buenas predicciones sobre datos desconocidos)
anselal