Estoy tratando de averiguar qué método de validación cruzada es mejor para mi situación.
Los siguientes datos son solo un ejemplo para resolver el problema (en R), pero mis X
datos reales ( xmat
) están correlacionados entre sí y en diferentes grados con la y
variable ( ymat
). Proporcioné el código R, pero mi pregunta no es sobre R sino sobre los métodos. Xmat
incluye X variables V1 a V100 mientras que ymat
incluye una sola 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
basado en todas las variables en xmat
. Entonces 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:
Divida los datos en aproximadamente la mitad y use uno para el entrenamiento y otro medio para las pruebas (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,]
Validación cruzada K-fold - usando validación cruzada 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
Enmascarar un valor o pocos valores a la vez : en este método, enmascaramos aleatoriamente un valor en el conjunto de datos (y) al reemplazarlo con NA y predecirlo. 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 sé cuál es el mejor para cualquier situación? ¿Hay otros métodos? Bootstrap validation
vs CV
? Los ejemplos trabajados serían apreciados.
fuente
Respuestas:
Dado que el OP ha otorgado una recompensa por esta pregunta, debería atraer cierta atención y, por lo tanto, es el lugar adecuado para discutir algunas ideas generales, incluso si no responde directamente al OP.
Nombre de pila:
a) validación cruzada es el nombre general de todas las técnicas de estimación / medida que utilizan un conjunto de prueba diferente al conjunto de trenes. Sinónimo: estimaciones fuera de muestra o extramuestra. Antónimo: estimación en muestra.
La estimación dentro de la muestra son técnicas que utilizan cierta información sobre el conjunto de entrenamiento para estimar la calidad del modelo (no necesariamente un error). Esto es muy común si el modelo tiene un alto sesgo, es decir, hace fuertes suposiciones sobre los datos. En los modelos lineales (un modelo de alto sesgo), como en el ejemplo de la pregunta, uno usa R-cuadrado, AIC, BIC, desviación, como una medida de la calidad del modelo; todos estos son estimadores dentro de la muestra. En SVM, por ejemplo, la relación de datos en el vector de soporte con respecto al número de datos es una estimación de error en la muestra del modelo.
Existen muchas técnicas de validación cruzada:
b) la retención es el método # 1 anterior. Divide el set en un entrenamiento y una prueba. Hay una larga historia de debates y prácticas sobre los tamaños relativos de la formación y el conjunto de pruebas.
c) k -fold - método # 2 anterior. Bastante estándar
d) Dejar-uno-fuera - método # 3 arriba.
e) bootstrap : si su conjunto tiene N datos, seleccione aleatoriamente N muestras CON REEMPLAZO del conjunto y úselo como entrenamiento. Los datos del conjunto original que no han sido muestras en ningún momento se utilizan como conjunto de prueba. Existen diferentes formas de calcular la estimación final del error del modelo que utiliza tanto el error para el conjunto de prueba (fuera de la muestra) como el error para el conjunto del tren (dentro de la muestra). Ver, por ejemplo, la rutina de arranque .632. Creo que también hay una fórmula .632+: son fórmulas que estiman el verdadero error del modelo utilizando errores fuera de muestra y dentro de muestra.
f) Ortogonal a la selección del método anterior es el tema de la repetición. Excepto para dejar uno afuera, todos los métodos anteriores se pueden repetir cualquier cantidad de veces. De hecho, se puede hablar de retención REPETIDA, o REPETIDO k- pliegue. Para ser justos, casi siempre el método bootstrap se usa de manera repetida.
La siguiente pregunta es, qué método es "mejor". El problema es lo que significa "mejor".
1) La primera respuesta es si cada uno de estos métodos está sesgado para la estimación del error del modelo (para una cantidad infinita de datos futuros).
2) La segunda alternativa es qué tan rápido o qué tan bien convergen cada uno de estos métodos con el verdadero error del modelo (si no están sesgados). Creo que esto sigue siendo un tema de investigación. Permítanme señalar estos dos documentos (detrás del muro de pago), pero el resumen nos da una idea de lo que están tratando de lograr. Observe también que es muy común llamar a k -fold como "validación cruzada" por sí mismo.
Medición del error de predicción. Una comparación de validación cruzada, bootstrap y métodos de penalización de covarianza
Estimación de la tasa de error de clasificación: validación cruzada repetida, retención repetida y arranque
Probablemente hay muchos otros documentos sobre estos temas. Esos son solo algunos ejemplos.
3) Otro aspecto de "mejor" es: dada una medida particular del error del modelo utilizando una de las técnicas anteriores, ¿qué tan seguro puede estar de que el error correcto del modelo está cerca?
En general, en este caso, desea tomar muchas medidas del error y calcular un intervalo de confianza (o un intervalo creíble si sigue un enfoque bayesiano). En este caso, el problema es cuánto puede confiar en la variación del conjunto de medidas de error. Tenga en cuenta que, a excepción del “dejar uno afuera”, todas las técnicas anteriores le darán muchas medidas diferentes ( k medidas para un k veces, n medidas para una n repetición de retención) y, por lo tanto, puede medir la varianza (o desviación estándar ) de este conjunto y calcular un intervalo de confianza para la medida de error.
Aquí las cosas se ponen algo complicadas. Por lo que entiendo del documento No hay un estimador imparcial de la varianza de la validación cruzada de k - pliegues (no detrás de paywall), uno no puede confiar en la varianza que obtiene de un k- pliegue, por lo que no se puede construir un buen intervalo de confianza de k - pliegues También por lo que entiendo del documento Pruebas estadísticas aproximadas para comparar algoritmos de aprendizaje de clasificación supervisados (no detrás de paywall), técnicas que utilizan medidas repetidas ( k repetidasdoble, repetida retención - no estoy seguro acerca de bootstrap) subestimará la verdadera varianza de la medida de error (es algo fácil de ver eso - ya que está muestreando de un conjunto finito si repite la medida un número muy grande a veces, los mismos valores se repetirán, 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 artículo sugiere hacer 5 veces 2 veces repetidas, lo que él llama CV 5 × 2, como un buen equilibrio de muchas medidas (10) pero no demasiadas repeticiones.
EDITAR:
Por supuesto, hay excelentes respuestas en Cross Validated para algunas de estas preguntas (aunque a veces no coinciden entre sí). Aquí están algunos:
¿Validación cruzada o bootstrapping para evaluar el rendimiento de la clasificación?
Diferencias entre validación cruzada y bootstrapping para estimar el error de predicción
¿Validación cruzada o bootstrapping para evaluar el rendimiento de la clasificación?
Comprender el arranque para la validación y la selección del modelo
En general, la validación cruzada de etiquetas es tu amigo aquí.
Entonces, ¿cuál es la mejor solución? No lo sé. He estado usando 5 × 2 CV cuando necesito ser muy riguroso, cuando necesito estar seguro de que una técnica es mejor que otra, especialmente en publicaciones. Y uso una pausa si no planeo hacer ninguna medida de varianza o desviación estándar, o si tengo limitaciones de tiempo: solo hay un modelo de aprendizaje en una retención .
fuente
Consulte la página de wikipedia para ver las definiciones de los métodos (hacen un trabajo mucho mejor que el que yo podría hacer aquí).
Después de haber visto esa página, lo siguiente puede ser de ayuda para usted. Permítanme centrarme en la parte de la pregunta donde uno quiere elegir uno de estos métodos para su proceso de modelado. Como esta es una elección bastante frecuente que se hace, y podrían beneficiarse de un conocimiento adicional, aquí está mi respuesta para dos situaciones:
Cualquier situación : Úselo
k-fold cross validation
con un número adecuado de repeticiones (digamos 5 o 10).Dividir los datos en 1 mitad, entrenar en la primera mitad y validar en el otro es un paso en la validación cruzada doble de todos modos (el otro paso es repetir el mismo ejercicio con las dos mitades intercambiadas). Por lo tanto, descarte la estrategia de 'dividir los datos a la mitad'.
Muchos documentos de aprendizaje automático y minería de datos usan validación cruzada k-fold (no tiene citas), así que úselo a menos que tenga que tener mucho cuidado en este paso.
Ahora, deje un método fuera y otros métodos como ' dejar p fuera ' y ' dividir y repetir aleatoriamente ' (esencialmente el proceso de arranque descrito anteriormente) son definitivamente buenos contendientes.
Si el tamaño de sus datos es N, entonces la validación cruzada N-fold es esencialmente la misma que dejar uno fuera.
'Leave p out' y 'bootstrap' son un poco más diferentes que la validación cruzada de k fold, pero la diferencia radica esencialmente en cómo se definen los pliegues y en el número de repeticiones 'k' que ocurren.
Como dice la página wiki, tanto k-fold como ' leave p out ' son estimadores decentes del ' rendimiento / ajuste esperado ' (aunque las apuestas están apagadas con respecto a la varianza de estos estimadores).
Su situación: solo 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 usar la validación cruzada k-fold con> 10 repeticiones . Elija un valor k de 3 o 5.
Motivo del valor k: elección genérica.
Motivo del valor de repetición: 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 susceptible de plegar la variabilidad / aleatoriedad de división que presentamos.
Pensamientos adicionales:
Quizás también emplearía los métodos ' dejar p fuera ' y ' bootstrap como repetición dividida aleatoria ' (además de la validación cruzada k-fold) para la misma medida de rendimiento / ajuste para verificar si los resultados de mi método de validación cruzada k-fold se ven bien.
Aunque desea utilizar las 100 funciones, como alguien sugirió, preste atención a la multicolinealidad / correlación y tal vez reduzca la cantidad de funciones.
fuente
rms
paquetevalidate
y lascalibrate
funciones de R.