32 votos

Cómo calcular SVD de una enorme matriz dispersa?

¿Cuál es la mejor manera para calcular la descomposición en valores singulares (SVD) de un gran positivo de la matriz (65M x 3.4 M), donde los datos son sumamente escasos?

Menos del 0,1% de la matriz es distinto de cero. Necesito una manera de que:

  • caben en la memoria (sé que los métodos en línea existe)
  • se computarán en un tiempo razonable: 3,4 días
  • será lo suficientemente preciso sin embargo la precisión no es mi principal preocupación y me gustaría ser capaz de controlar la cantidad de recursos que he puesto en él.

Sería genial tener una Haskell, Python, C#, etc. la biblioteca que implementa. No estoy utilizando mathlab o R, pero si es necesario puedo ir con R.

26voto

Boris Tsirelson Puntos 191

Si cabe en la memoria, la construcción de una matriz dispersa en R utilizando la Matriz de paquete, y tratar irlba para la enfermedad vesicular porcina. Puede especificar el número de vectores singulares que desee en el resultado, que es otra forma de limitar el cálculo.

Eso es una gran matriz, pero he tenido muy buenos resultados con este método en el pasado. irlba está bastante de estado-of-the-art. Se utiliza implícitamente reinicia Lanczos bi-diagonalización algoritmo.

Se pueden masticar a través de netflix premio conjunto de datos (480,189 filas por 17,770 columnas, 100,480,507 no-cero entradas) en milisegundos. Que conjunto de datos es ~ 200.000 veces más grande que el de Netflix conjunto de datos, por lo que tomar mucho más tiempo que eso. Podría ser razonable esperar que podía hacer el cálculo en un par de días.

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