El algoritmo PCA más rápido para datos de alta dimensión


11

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?


Sí, tienes razón, debería ser más preciso. Tarda más de media hora, luego decidí matar el proceso. Tengo que hacer esto al menos diez veces, sería bueno tener algo que funcione en menos de 10 minutos
Suave

¿Qué tan escasa es tu matriz?
Arnold Neumaier

El porcentaje de ceros en la matriz está por encima del 80%
suave

Echa un vistazo a kernal-PCA también.
meawoppl

Respuestas:


11

En primer lugar, debe especificar si desea todos los componentes o los más importantes.

ARN×MNM

CRM×MO(NM2)O(M3)O(2M2)1.5A .

AA

C


2

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


Sí, parece que los métodos iterativos son mucho más rápidos si solo necesito los primeros cien componentes.
suave

En lo que respecta a los svds, traté de poner mi matriz en un formato escaso y modificar la función princomp para poner svds en lugar de svd, y para mi sorpresa, me llevó mucho más tiempo en una matriz 2000 * 4000 (180 s en lugar de 15 s ) Extraño ...
suave

1
No es necesario cambiar al formato disperso. Además, debe reducir la cantidad de vectores singulares que desea calcular. Para calcular el svd completo, svds no es adecuado.
Arnold Neumaier

2
También son notables para los modos dominantes los métodos svd aleatorios más nuevos, como en stanford.edu/group/mmds/slides2010/Martinsson.pdf
Nick Alger


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.