La implementación SVD de Mahout (originalmente del descomponedor) se ejecuta en Hadoop y se escala linealmente con el número de filas de la matriz de entrada (el doble del número de nodos de Hadoop, maneja una matriz con el doble del número de filas, para un resultado de rango fijo que desee) y no tiene limitaciones de memoria con respecto a este tamaño de fila (si no tiene un clúster grande, solo tardará más en ejecutarse).
Como menciona Yura, actualmente hay un artefacto de implementación (es decir, pereza del desarrollador) que conduce a una restricción en el producto del número de columnas * rango deseado <RAM disponible (dividido por 8), porque los vectores base de Lanczos se mantienen en memoria para convertirse en vectores propios al final del día.
Para corpus de texto (tamaño de vocabulario <1MM más o menos, por ejemplo), esto significa que en hardware básico todavía puede obtener 300-400 vectores singulares bien, pero para hacer grandes gráficos grandes (wikipedia, gráficos de redes sociales, web), esto no No lo cortes.
No es difícil modificar la implementación de Mahout para almacenar los vectores básicos (densos) en el disco, y luego hacer la creación de vectores propios (el último paso de Lanczos) pieza por pieza, con solo un par de vectores en la memoria a la vez. Hay un boleto abierto de JIRA para esto (https://issues.apache.org/jira/b…), y si alguien más no llega a enviar un parche, pasaré unas horas y lo haré Real Pronto ahora
- ¿Cómo se puede utilizar una matriz laplaciana gráfica para resolver el corte normalizado de una gráfica?
- ¿Cuál es una buena manera de entender cuál es el producto interior hermitiano para un espacio vectorial complejo?
- ¿Cómo se puede aplicar el álgebra lineal en la investigación de operaciones?
- ¿Qué tan importante es el álgebra lineal en informática, es decir, cómo se interrelacionan los dos?
- ¿Cuál es la importancia de S en la reconstrucción de las relaciones de coseno de fila de M en B = U * S con M = U * S * V ‘(SVD)?