El artículo de Wikipedia sobre análisis de componentes principales establece que
Existen algoritmos eficientes para calcular la SVD de sin tener que formar la matriz , por lo que calcular la SVD es ahora la forma estándar de calcular un análisis de componentes principales a partir de una matriz de datos, a menos que solo se requiera un puñado de componentes.
¿Podría alguien decirme cuáles son los algoritmos eficientes de los que habla el artículo? No hay referencia dada (URL o cita a un artículo que propone esta forma de cálculo sería bueno).
pca
algorithms
svd
numerics
svd
fuente
fuente
Respuestas:
El principal caballo de trabajo detrás del cálculo de SVD es el algoritmo QR . Habiendo dicho que hay muchos algoritmos diferentes para el cálculo de la descomposición de valor singular de un genérico -by- N matriz A . Un gran esquema sobre el problema disponible aquí (de la documentación del MKL de Intel ) es el siguiente:M N A
Como puede ver, dependiendo de su caso de uso, existen diferentes enfoques (las convenciones de nomenclatura de rutina se pueden encontrar aquí ). Esto se debe a que, por ejemplo, hay formas matriciales en las que una reducción de Householder puede ser más costosa que una rotación de Givens (por nombrar dos formas "obvias" de obtener QR). Una referencia estándar sobre el tema son los cálculos matriciales de Golub y Van Loan (sugeriría usar al menos la 3a edición). También he encontrado Å. Los métodos numéricos de Björck para problemas de mínimos cuadrados son un recurso muy bueno al respecto; Si bien SVD no es el foco principal del libro, ayuda a contextualizar el uso.
Si tengo que darle un consejo general al respecto , no intente escribir sus propios algoritmos SVD a menos que ya haya tomado con éxito un par de clases sobre álgebra lineal numérica y sepa lo que está haciendo. Sé que suena contra-intuitivo, pero realmente, hay una tonelada de cosas que pueden salir mal y terminas con (en el mejor de los casos) implementaciones subóptimas (si no está mal). Hay algunas suites gratuitas muy buenas sobre el tema (por ejemplo , Eigen , Armadillo y Trilinos, por nombrar algunas).
fuente
svds
) van tan lejos como simplemente usar su función SVD truncada como envoltorio para sus rutinas truncadas de eigendecomposition (eigs
).