Me gustaría realizar una PCA en un conjunto de datos compuesto por aproximadamente 40 000 muestras, cada muestra mostrando alrededor de 10 000 características.
El uso de la función princomp de Matlab lleva más de media hora, momento en el que elimino el proceso. Me gustaría encontrar una implementación / algoritmo que se ejecute en menos de 10 minutos. ¿Cuál sería el algoritmo más rápido? ¿Cuánto tiempo tomaría un i7 dual core / 4GB Ram?
high-dimensional
data-analysis
meloso
fuente
fuente
Respuestas:
En primer lugar, debe especificar si desea todos los componentes o los más importantes.
fuente
Supongo que solo necesita unos pocos (o unos cientos) pares de valores singulares / vectores dominantes. Entonces es mejor usar un método iterativo, que será mucho más rápido y consumirá mucha menos memoria.
En Matlab, ver
ayuda svds
fuente
Puede consultar mi respuesta en Cross Validated . No quería copiarlo aquí. Básicamente, puede usar SVD aleatorio rápido para calcular la base y los coeficientes de PCA.
fuente
Puede probar el algoritmo Fast PCA que se basa en una forma iterativa de calcular algunos vectores propios. Ver, A.Sharma y KK Paliwal, Análisis rápido de componentes principales usando análisis de punto fijo, Pattern Recognition Letters, 28, 1151-1155, 2007 .
fuente