¿Cuáles son los pros y los contras de las diferentes técnicas de factorización matricial: rango bajo, SVD y NMF? ¿Cuáles son algunos ejemplos prácticos de cada uno?

La factorización de matriz no negativa y la descomposición de valores singulares realmente nombran grupos de algoritmos. Ambos se usan generalmente para hacer factorizaciones aproximadas de bajo rango, por lo que diría que eso no es una diferencia en la práctica. Ambos minimizan el error de mínimos cuadrados frente a la entrada.

En términos generales, pienso en NNMF como una factorización más tonta, más simple y más rápida en comparación con la SVD.

El SVD produce una factorización ‘más profunda’ en el sentido de que genera no solo una matriz U y V, sino también Sigma. Se garantiza que U y V son una base ortonormal y Sigma brinda información valiosa sobre la cantidad de información en cada dimensión de base sucesiva. No obtienes nada de eso con NNMF.

Los algoritmos de NNMF que conozco refinan iterativamente una solución. Puede tomar muchas iteraciones desde cero para llegar a una solución adecuada. Pero también puede optar por detenerse tan pronto como desee y tomar una solución, independientemente del rango elegido de factorización.

El algoritmo SVD que conozco, Lanczos, también es iterativo pero de una manera diferente. Se itera para producir una factorización sucesivamente de rango superior. Esto es genial porque puede ayudarte a elegir el rango de forma inteligente y detenerte cuando sea bueno. Pero también puede significar que el número mínimo de iteraciones que necesita es mayor.

Las variantes de NNMF que conozco son más flexibles y se pueden definir razonablemente sobre matrices de entrada dispersas sin suponer que los valores faltantes son 0. O pueden ponderar la importancia de diferentes elementos de la entrada.

El tema general representa un conjunto de datos utilizando una base. NMF y SVD son ambas instancias de esto.
Entonces, la mayor diferencia es qué tipo de base construye cada algoritmo.

En SVD, un punto de su conjunto de datos se representa como una combinación lineal de vectores en la base. Entonces puede tener coeficientes positivos y negativos y pueden tener cualquier valor. La base construida por el SVD le ayuda a reconstruir los datos minimizando el error, pero no es fácil de entender y no tiene un significado específico. Si sus datos son imágenes, una base SVD tendrá imágenes fantasmales, algunas de ellas aparecerán en negativo, algunas en positivo, etc. Eigenfaces, un algoritmo para el reconocimiento de rostros, es un buen ejemplo del uso de SVD para esto.

Para el conjunto de datos de caras de Olivetti, estos son los primeros 64 vectores de la base que usan SVD.


En la imagen puede ver cómo algunas caras son positivas y otras negativas, la primera “cara propia” es la más importante y luego se ordenan en importancia decreciente.

En NMF, obliga a los coeficientes a ser positivos. Por lo tanto, cada punto de su conjunto de datos se representa como una suma de vectores en la base multiplicada por algún coeficiente. La base construida por NMF es una descomposición de sus datos en partes pequeñas, partes que luego se pueden combinar para reconstruir sus puntos.

Echemos un vistazo a la versión NMF de la base de nuestro conjunto de datos de caras:


Verá que la mayoría de las imágenes aquí son oscuras, excepto algunas partes, esas partes son las partes pequeñas que podemos usar para reconstruir cualquier cara en nuestro conjunto de datos usando NMF.

Finalmente, agreguemos K-Means, ya que también se puede usar como un algoritmo para construir una base para representar vectores. En K-Means, la base está formada por los centroides, los centroides son el resultado de promediar puntos en el conjunto de datos, por lo que cada centroide se ve como el promedio de algunos puntos.


En K-Means, representa un punto de datos como su centroide más cercano o con la distancia a cada centroide. La base es más similar a cada punto de datos individual que el creado por NMF o SVD.

Resumiendo: Dado un conjunto de datos con puntos “m” en dimensiones “n”, hay muchos algoritmos que construyen una base de vectores “k” que luego puede usar para representar sus puntos en un espacio k-dimensional. “k” puede ser mayor o menor que “n”. Con SVD, su reconstrucción es una combinación lineal de esos vectores “k” y los coeficientes “k” para un punto pueden ser cualquier número. Con NMF sus coeficientes son números positivos y luego cada vector en la base suele ser una pequeña parte que utiliza para reconstruir sus puntos. Con K-Means, cada punto se representa como su centroide más cercano o la distancia a cada centroide y la base tiene promedios de los puntos de datos en cada grupo.

Depende de lo que hagas. La factorización matricial generalmente se considera solo como NMF o SVD, pero de hecho hay una gran cantidad de factorización matricial avanzada como se ve en esta lista:

https://sites.google.com/site/ig

En particular, uno debe darse cuenta de que si bien el NMF se usa en exceso en las ciencias, su riguroso soporte solo se está descubriendo mientras hablamos y es muy probable que aún no hayamos encontrado el mejor algoritmo para ello.

La SVD está mucho más fundamentada teóricamente, pero si su uso generalmente requiere restricciones adicionales (PCA escasa, por ejemplo), caemos en el mismo problema que la NMF, donde los algoritmos todavía están en un estado de cambio.

Otras factorizaciones matriciales como el aprendizaje de diccionarios también se encuentran en esta misma región de descubrimiento.

Para responder a su pregunta sobre los pros y los contras, realmente desea ver la estructura de todos los algoritmos actuales para las diferentes factorizaciones de marix y ver cuál se adapta mejor a su problema. Los pros y los contras solo pueden ser una cuestión de implementación algorítmica dentro de cada factorización genérica y cómo lo hace en su conjunto de datos.