Sí, se puede actualizar una descomposición SVD después de agregar una nueva fila a la matriz existente.
En general, esta formulación del problema " agregar uno a " se conoce como actualizaciones de rango uno . El enlace MathOverflow proporcionado por @amoeba sobre " actualizaciones eficientes de rango dos de una descomposición de valores propios " es un gran primer paso si desea comenzar a profundizar en el asunto; El primer artículo proporciona una solución explícita a su pregunta específica. Solo para aclarar lo que significan el rango uno y el rango dos para que no se confunda, si su nueva es tal que:UN∗
UN∗= A - u vT
Donde y v son vectores, entonces se refiere a esto como una actualización de rango uno (o perturbación ). La base de esta actualización está dictada por la fórmula de Sherman-Morrison. . Si la perturbación es más de un rango, es decir.
A ∗ = A - U V Ttuv
UN∗= A - UVT
la fórmula Woodbury entra en juego. Si ve estas fórmulas, notará que hay mucha inversión inversa. No resuelve estos directamente. Como ya resolvió gran parte de sus subsistemas (es decir, ya tiene cierta descomposición calculada), los utiliza para obtener estimaciones más rápidas y / o más estables. (Es por eso que la gente todavía investiga este campo). He usado el libro " Estadísticas computacionales " de JE Gentle como referencia; Creo Chapt. 5 El álgebra lineal numérica lo configurará correctamente. (El súper clásico: " Álgebra matricial desde la perspectiva de un estadístico " de Harville desafortunadamente no toca en absoluto las actualizaciones de rango).
Mirando hacia el lado de las estadísticas / aplicaciones, las actualizaciones de rango uno son comunes en los sistemas de recomendación porque uno puede tener miles de entradas de clientes y volver a calcular el SVD (o cualquier descomposición dada) cada vez que un nuevo usuario se registra o un nuevo producto es agregado o eliminado es bastante derrochador (si no inalcanzable). Por lo general, las matrices del sistema de recomendación son escasas y esto hace que los algoritmos sean aún más eficientes. Un primer artículo accesible es el manuscrito " Revisiones rápidas de SVD en línea para sistemas de recomendación livianos " de M. Brand. Yendo a matrices densas, creo que mirar los documentos del Reconocimiento de patrones y el Procesamiento de imágenes puede llevarlo bastante lejos a conseguir un algoritmo real para usar. Por ejemplo los papeles:
- Aprendizaje incremental de componentes principales bidireccionales para reconocimiento facial (2009) por Ren y Dai,
- Sobre el aprendizaje subespacial incremental y robusto (2003) por Li et al.
- Extracción de bases secuenciales de Karhunen-Loeve y su aplicación a imágenes (2000) por Levey y Lindenbaum.
- Aprendizaje incremental para el seguimiento visual robusto (2007) por Ross et al.
todos parecen estar abordando el mismo problema en su núcleo; Están llegando nuevas características y necesitamos actualizar nuestra representación en consecuencia rápidamente . Observe que estas matrices no son simétricas ni cuadradas. Otro trabajo de M. Brand también puede abordar este problema (ver el documento " Modificaciones rápidas de bajo rango de la descomposición del valor singular delgado (2006) ", esto también se menciona en el enlace MO que aparece al principio de la publicación). muchos buenos trabajos sobre el tema, pero la mayoría tienden a ser muy matemáticos (por ejemplo, el trabajo de Benaych-Georgesa y Nadakuditi sobre " Los valores singulares y los vectores de perturbaciones de bajo rango de grandes matrices aleatorias rectangulares (2012) ") y no creo que ayuden a encontrar una solución pronto. Le sugiero que mantenga su enfoque en la literatura de Procesamiento de imágenes.
Lamentablemente, no he encontrado ninguna implementación de R para las rutinas de actualizaciones de rango uno. La respuesta sobre "¿ Implementación SVD actualizable en Python, C o Fortran? " De Computational Science SE ofrece varias implementaciones de MATLAB y C ++ que es posible que desee considerar. Por lo general, la implementación de R, Python, etc. son envoltorios alrededor de implementaciones de C, C ++ o FORTRAN.
rank 1 updates
. Las rápidas revisiones SVD en línea para sistemas de recomendación livianos de Brand son un primer artículo accesible. Desafortunadamente, no he visto algo para SVD ya implementado en R. Las actualizaciones de Cholesky existen (updown
desdeMatrix
) gracias a CHOLMOD. La escasez de su matriz realmente hará una diferencia en su solución final; ¿Asumes una matriz densa o escasa?