Estoy haciendo una tarea de clasificación de texto con R, y obtengo una matriz de términos de documentos con un tamaño de 22490 por 120,000 (solo 4 millones de entradas distintas de cero, menos del 1% de entradas). Ahora quiero reducir la dimensionalidad utilizando PCA (Análisis de componentes principales). Desafortunadamente, R no puede manejar esta enorme matriz, por lo que almaceno esta matriz dispersa en un archivo en el "Formato de mercado de matriz", con la esperanza de utilizar algunas otras técnicas para hacer PCA.
Entonces, ¿alguien podría darme algunas sugerencias para bibliotecas útiles (cualquiera que sea el lenguaje de programación), que podrían hacer PCA con esta matriz a gran escala con facilidad, o hacer un PCA de larga data por mí mismo, en otras palabras, calcular la matriz de covarianza al principio, y luego calcule los valores propios y los vectores propios para la matriz de covarianza .
Lo que quiero es calcular todas las PC (120,000) y elegir solo las mejores PC N, que representan una variación del 90% . Obviamente, en este caso, tengo que dar un umbral a priori para establecer algunos valores de varianza muy pequeños a 0 (en la matriz de covarianza), de lo contrario, la matriz de covarianza no será escasa y su tamaño sería de 120,000 por 120,000, que es imposible de manejar con una sola máquina. Además, las cargas (vectores propios) serán extremadamente grandes y deben almacenarse en formato disperso.
Muchas gracias por la ayuda !
Nota: Estoy usando una máquina con 24 GB de RAM y 8 núcleos de CPU.
fuente
Respuestas:
Sugiero el paquete irlba: produce prácticamente los mismos resultados que svd, pero puede definir un número menor de valores singulares para resolver. Un ejemplo, usando matrices dispersas para resolver el premio de Netflix, se puede encontrar aquí: http://bigcomputing.blogspot.de/2011/05/bryan-lewiss-vignette-on-irlba-for-svd.html
fuente
Sugiero usar SLEPc para calcular una SVD parcial. Consulte el Capítulo 4 del Manual del usuario y las páginas de manual de SVD para obtener más detalles.
fuente
Voto por mahout, que también es bueno para otras tareas de PNL / TA e implementa map / reduce.
fuente
Sugeriría usar una descomposición incremental de valores singulares, de los cuales hay muchos en la literatura. Por ejemplo:
Todos estos enfoques se reducen a lo siguiente:
fuente
Todavía puedes usar R.
Revolution R
es una compilación de R que maneja conjuntos de datos que son más grandes que la RAM. Usa la funciónprincomp
.También tiene una gama completa de funciones estadísticas especialmente diseñadas para problemas de estilo de big data que no se ajustan a la RAM, por ejemplo, regresión lineal, regresión logística, cuantiles, etc.
Puede descargar la versión académica con todas las funciones de forma gratuita, marcando la casilla "Soy un académico".
fuente