22 votos

PCA y validación cruzada k-fold en el paquete caret de R

Acabo de volver a ver una clase del curso de Machine Learning en Coursera. En la sección donde el profesor habla de PCA para el pre-procesamiento de datos en aplicaciones de aprendizaje supervisado, dice que PCA sólo debe realizarse en los datos de entrenamiento y luego el mapeo se utiliza para transformar la validación cruzada y conjuntos de prueba. Véase también El PCA y la división tren/prueba .

Sin embargo, en el caret R, los datos de entrenamiento que se introducen en el paquete train() ya está procesada por PCA. Así, cuando el algoritmo realiza la validación cruzada k-fold, el conjunto de validación cruzada ya ha sido procesado con PCA a través de preProcess() y predict() y de hecho se utiliza en el "ajuste" del PCA.

¿Es correcta mi interpretación de la situación? Es decir, ¿el procedimiento de caret para la validación cruzada con PCA (o, de hecho, con cualquier método de reescalado/centrado) es "erróneo" porque el preprocesamiento de los datos se realiza tanto en el conjunto de validación cruzada como en el conjunto de entrenamiento? Y si es así, ¿qué impacto tendría esto en los resultados?

25voto

Boris Tsirelson Puntos 191

No preprocese los datos antes de ejecutar la función train Función Utilice la función preProcess argumento para la función de entrenamiento, y el preprocesamiento se aplicará a cada iteración de remuestreo.

Por ejemplo no haz esto:

library(caret)
dat <- iris
pp <- preProcess(dat[,-5], method="pca")
dat[,-5] <- predict(pp, dat[,-5])
knnFit1 <- train(Species~., dat, method = "knn", preProcess=c("pca"), 
    trControl = trainControl(method = "cv"))

¡Hazlo!

dat <- iris
knnFit2 <- train(Species~., dat, method = "knn", preProcess=c("pca"), 
    trControl = trainControl(method = "cv"))

19voto

VarLogRant Puntos 284

No vi la conferencia, así que no puedo comentar lo que se dijo.

Mi $0.02: Si desea obtener buenas estimaciones de rendimiento utilizando remuestreo, usted realmente debe hacer todas las operaciones durante el remuestreo en lugar de antes. Esto es realmente cierto de la selección de características [1], así como las operaciones no triviales como PCA. Si añade incertidumbre a los resultados, inclúyalo en el remuestreo.

Piense en la regresión de componentes principales: PCA seguido de regresión lineal sobre algunos de los componentes. PCA estima parámetros (con ruido) y también hay que elegir el número de componentes (valores diferentes darán resultados diferentes => más ruido).

Digamos que utilizamos un CV de 10 pliegues con el esquema 1:

conduct PCA
pick the number of components
for each fold:
   split data
   fit linear regression on the 90% used for training
   predict the 10% held out
end:

o esquema 2:

for each fold:
   split data
   conduct PCA on the 90% used for training
   pick the number of components
   fit linear regression
   predict the 10% held out
end:

Debe quedar claro que el segundo enfoque debe producir estimaciones de error que reflejen la incertidumbre causada por el ACP, la selección del número de componentes y la regresión lineal. En efecto, el CV del primer esquema no tiene ni idea de lo que le ha precedido.

Soy culpable de no hacer siempre todas las operaciones con remuestreo, pero sólo cuando no me importan realmente las estimaciones de rendimiento (lo que no es habitual).

¿Hay mucha diferencia entre los dos sistemas? Depende de los datos y del preprocesamiento. Si sólo está centrando y escalando, probablemente no. Si tiene muchos datos, probablemente no. A medida que se reduce el tamaño del conjunto de entrenamiento, aumenta el riesgo de obtener estimaciones deficientes, especialmente si n es cercano a p.

Puedo decir con certeza por experiencia que no incluir la selección supervisada de características dentro del remuestreo es una muy mala idea (sin grandes conjuntos de entrenamiento). No veo por qué el preprocesamiento sería inmune a esto (hasta cierto punto).

@mchangun: Creo que el número de componentes es un parámetro de ajuste y probablemente querrías elegirlo usando estimaciones de rendimiento que sean generalizables. Usted podría elegir automáticamente K tal que al menos X% de la varianza se explica e incluir ese proceso dentro de remuestreo por lo que tenemos en cuenta el ruido en ese proceso.

Max

[1] Ambroise, C., & McLachlan, G. (2002). Selection bias in gene extraction on the basis of microarray gene-expression data. Actas de la Academia Nacional de Ciencias, 99(10), 6562-6566.

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