39 votos

¿Cómo puedo saber qué método de validación cruzada es el mejor?

Estoy tratando de averiguar qué método de validación cruzada es el mejor para mi situación.

Los siguientes datos son sólo un ejemplo para trabajar el tema (en R), pero mi verdadero X datos ( xmat ) están correlacionados entre sí y correlacionados en diferentes grados con el y variable ( ymat ). He proporcionado el código R, pero mi pregunta no es sobre R sino sobre los métodos. Xmat incluye las variables X V1 a V100 mientras que ymat incluye una única variable y.

set.seed(1233)
xmat           <- matrix(sample(-1:1, 20000, replace = TRUE), ncol = 100)
colnames(xmat) <- paste("V", 1:100, sep ="")
rownames(xmat) <- paste("S", 1:200, sep ="")
  # the real y data are correlated with xmat
ymat           <- matrix(rnorm(200, 70,20), ncol = 1)
rownames(ymat) <- paste("S", 1:200, sep="")

Me gustaría construir un modelo para predecir y en función de todas las variables de xmat . Así que será un modelo de regresión lineal y ~ V1 + V2 + V3+ ... + V100 . De una revisión, puedo ver los siguientes tres métodos de validación cruzada:

  1. Dividir los datos en aproximadamente la mitad y utilizar una para el entrenamiento y otra mitad para la prueba (validación cruzada):

    prop       <- 0.5 # proportion of subset data
    set.seed(1234)
      # training data set 
    training.s <- sample (1:nrow(xmat), round(prop*nrow(xmat),0))
    xmat.train <- xmat[training.s,]
    ymat.train <- ymat[training.s,]
    
      # testing data set 
    testing.s <- setdiff(1:nrow(xmat), training)
    xmat.test <- xmat[testing.s,]
    ymat.test <- ymat[testing.s,]
  2. Validación cruzada K-fold - utilizando una validación cruzada de 10 veces:

    mydata <- data.frame(ymat, xmat)
    fit    <- lm(ymat ~ ., data=mydata)
    library(DAAG)
    cv.lm(df=mydata, fit, m=10) # ten-fold cross validation 
  3. Enmascarar un valor o varios valores a la vez : En este método enmascaramos aleatoriamente un valor del conjunto de datos (y) sustituyéndolo por NA y lo predecimos. El proceso se repite n veces.

    n = 500 
    predicted.v <- rep(NA, n)
    real.v      <- rep(NA, n)
    
    for (i in 1:n){
      masked.id <- sample (1:nrow(xmat), 1)
      ymat1     <- ymat 
      real.v[i] <- ymat[masked.id,]
      ymat1[masked.id,] <- NA
      mydata            <- data.frame(ymat1, xmat)
      fit               <- lm(ymat1 ~ ., data=mydata)
      predicted.v[i]    <- fit$fitted.values[masked.id]
    }

¿Cómo saber cuál es el mejor para cada situación? ¿Existen otros métodos? Bootstrap validation vs CV ? Se agradecería que se dieran ejemplos prácticos.

38voto

BillyJean Puntos 118

Dado que el OP ha puesto una recompensa en esta pregunta, debería atraer algo de atención, y por lo tanto es el lugar adecuado para discutir algunas ideas generales, incluso si no responde al OP directamente.

Primero, los nombres:

a) validación cruzada es el nombre general de todas las técnicas de estimación/medida que utilizan un conjunto de pruebas diferente del conjunto de entrenamiento. Sinónimo: estimaciones fuera de la muestra o extra-muestra. Antónimo: estimación dentro de la muestra.

La estimación dentro de la muestra son técnicas que utilizan alguna información sobre el conjunto de entrenamiento para estimar la calidad del modelo (no necesariamente el error). Esto es muy habitual si el modelo tiene un sesgo elevado, es decir, hace fuertes suposiciones sobre los datos. En los modelos lineales (un modelo de alto sesgo), como el del ejemplo de la pregunta, se utiliza R-cuadrado, AIC, BIC, desviación, como medida de la calidad del modelo - todos ellos son estimadores dentro de la muestra. En SVM, por ejemplo, la relación entre los datos del vector de soporte y el número de datos es una estimación dentro de la muestra del error del modelo.

Hay muchas técnicas de validación cruzada:

b) hold-out es el método #1 de arriba. Dividir el conjunto en un entrenamiento y una prueba. Hay una larga historia de discusiones y prácticas sobre los tamaños relativos del conjunto de entrenamiento y de prueba.

c) k -doble - método #2 arriba. Bastante estándar.

d) Deja de lado - método #3 anterior.

e) bootstrap Si su conjunto tiene N datos, seleccionar al azar N muestras CON REEMPLAZO del conjunto y utilizarlo como entrenamiento. Los datos del conjunto original que no han sido muestras en ningún momento se utilizan como conjunto de prueba. Hay diferentes formas de calcular la estimación final del error del modelo que utiliza tanto el error del conjunto de prueba (fuera de la muestra) como el error del conjunto de entrenamiento (dentro de la muestra). Véase, por ejemplo, el bootstrap de 0,632. Creo que también hay una fórmula de 0,632+ - son fórmulas que estiman el verdadero error del modelo utilizando tanto los errores fuera de la muestra como los errores dentro de la muestra.

f) Ortogonal a la selección del método anterior es la cuestión de la repetición. A excepción del leave-one-out, todos los métodos anteriores pueden repetirse cualquier número de veces. De hecho, se puede hablar de hold-out REPETIDO, o REPETIDO k -doble. Para ser justos, casi siempre se utiliza el método bootstrap de forma repetida.


La siguiente pregunta es, ¿qué método es "mejor". El problema es qué significa "mejor".

1) La primera respuesta es si cada uno de estos métodos es sesgada para la estimación del error del modelo (para una cantidad infinita de datos futuros).

2) La segunda alternativa es la rapidez o la calidad de la convergencia de cada uno de estos métodos al verdadero error del modelo (si no son parciales). Creo que esto es todavía un tema de investigación. Permítanme señalar estos dos documentos (detrás de la pared de pago), pero el resumen nos da una cierta comprensión de lo que están tratando de lograr. Obsérvese también que es muy común llamar a k -se dobla como "validación cruzada" por sí misma.

Probablemente haya muchos otros documentos sobre estos temas. Estos son sólo algunos ejemplos.

3) Otro aspecto de "mejor" es: dada una medida concreta del error del modelo utilizando una de las técnicas anteriores, ¿qué certeza puede tener de que el error del modelo correcto está cerca?

En general, en este caso se quiere tomar muchas medidas del error y calcular un intervalo de confianza (o un intervalo creíble si se sigue un enfoque bayesiano). En este caso, la cuestión es hasta qué punto se puede confiar en la varianza del conjunto de medidas de error. Obsérvese que, excepto en el caso de la omisión, todas las técnicas anteriores darán lugar a muchas medidas diferentes ( k medidas para un k - doble, n medidas para un n -repetido) y así se puede medir la varianza (o desviación estándar) de este conjunto y calcular un intervalo de confianza para la medida del error.

Aquí las cosas se complican un poco. Por lo que entiendo del documento Ningún estimador insesgado de la varianza de k -validación cruzada (no detrás de un muro de pago), no se puede confiar en la variación que se obtiene de un k -de manera que no se puede construir un buen intervalo de confianza a partir de k -se dobla. También por lo que entiendo del documento Pruebas estadísticas aproximadas para comparar algoritmos de aprendizaje de clasificación supervisada (no detrás de un muro de pago), técnicas que utilizan medidas repetidas (repeated k -fold, repeated hold-out - no estoy seguro del bootstrap) subestimará la verdadera varianza de la medida de error (es algo fácil de ver que - ya que se está muestreando de un conjunto finito si se repite la medida un número muy grande de veces, los mismos valores se seguirán repitiendo, lo que mantiene la media igual, pero reduce la varianza). Por lo tanto, las técnicas de medidas repetidas serán demasiado optimistas en el intervalo de confianza.

Este último documento sugiere hacer un doblete de 5 repeticiones -que él llama 5×2 CV- como un buen equilibrio de muchas medidas (10) pero sin demasiadas repeticiones.

EDITAR:

Por supuesto, hay grandes respuestas en Cross Validated a algunas de estas preguntas (aunque a veces no se ponen de acuerdo entre ellas). He aquí algunas:

¿Validación cruzada o bootstrapping para evaluar el rendimiento de la clasificación?

Diferencias entre la validación cruzada y el bootstrapping para estimar el error de predicción

¿Validación cruzada o bootstrapping para evaluar el rendimiento de la clasificación?

Comprender el bootstrapping para la validación y la selección de modelos

En general, la etiqueta validación cruzada es tu amigo aquí.


Entonces, ¿cuál es la mejor solución? No lo sé. He estado utilizando 5×2 CV cuando necesito ser muy riguroso, cuando necesito estar seguro de que una técnica es mejor que otra, especialmente en las publicaciones. Y utilizo una retención si no tengo previsto hacer ninguna medida de varianza o desviación estándar, o si tengo limitaciones de tiempo: sólo hay un modelo de aprendizaje en un hold-out .

7voto

Stefano Puntos 1

Consulte el página de wikipedia para las definiciones de los métodos (hacen un trabajo mucho mejor del que yo podría hacer aquí).

Después de echar un vistazo a esa página, lo siguiente puede serle de ayuda. Permítame centrarme en la parte de la pregunta en la que uno quiere elegir uno de estos métodos para su proceso de modelado. Como esta es una elección bastante frecuente que uno hace, y podría beneficiarse de un conocimiento adicional, aquí está mi respuesta para dos situaciones:

  1. Cualquier situación : Utilice k-fold cross validation con un número adecuado de repeticiones (digamos 5 o 10).

    • Dividir los datos en una mitad, entrenar en la primera mitad y validar en la otra es un paso de la validación cruzada doble (el otro paso es repetir el mismo ejercicio con las dos mitades intercambiadas). Por lo tanto, descarta la estrategia de "dividir los datos en dos".

    • Muchos trabajos de aprendizaje automático y minería de datos utilizan validación cruzada k-fold (no tienen citación), así que úsalo a menos que tengas que ser muy cuidadoso en este paso.

    • Ahora, deja un método fuera y otros métodos como ' dejar p fuera ' y ' división aleatoria y repetición ' (esencialmente bootstrap como el proceso descrito anteriormente) son definitivamente buenos contendientes.

    • Si el tamaño de los datos es N, entonces la validación cruzada N-fold es esencialmente lo mismo que dejar uno fuera.

    • 'leave p out' y 'bootstrap' son un poco más diferentes que la validación cruzada de pliegues k, pero la diferencia está esencialmente en cómo se definen los pliegues y el número de repeticiones 'k' que se producen.

    • Como dice la página wiki, tanto k-fold como ' dejar p fuera ' son estimadores decentes de la ' rendimiento/ajuste esperado ' (aunque las apuestas están en contra de la varianza de estos estimadores).

  2. Su situación: Sólo tiene un tamaño de muestra de 200 en comparación con el número de características (100). Creo que hay muchas posibilidades de que haya varios modelos lineales que ofrezcan el mismo rendimiento. Sugeriría utilizar la validación cruzada k-fold con > 10 repeticiones . Elige un valor k de 3 o 5.

    • Razón del valor k: elección genérica.

    • Razón para repetir el valor: Un valor decentemente alto para la repetición es probablemente crítico aquí porque la salida de un solo cálculo de validación cruzada k-fold puede ser suceptible a la variabilidad/aleatoriedad de división de pliegues que introducimos.

Pensamientos adicionales:

  • Tal vez también emplearía ' dejar p fuera ' y ' bootstrap como repetición de división aleatoria (además de la validación cruzada k-fold) para la misma medida de rendimiento/ajuste para comprobar si los resultados de mi método de validación cruzada k-fold son correctos.

  • Aunque quieras usar todas las 100 funciones, como alguien sugirió, presta atención a multicolinealidad/correlación y tal vez reducir el número de características.

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