Aquí están mis 2ct sobre el tema
La quimiometría conferencia donde por primera vez me enteré de la PCA, se utiliza la solución de (2), pero no fue numéricamente orientado, y mi numerics conferencia fue solo una introducción y no hablar de enfermedad vesicular porcina, tan lejos como puedo recordar.
Si entiendo Holmes: Rápido de enfermedad vesicular porcina para los Grandes Matrices correctamente, su idea ha sido utilizada para obtener un cálculo rápido de la enfermedad vesicular porcina de largo matrices.
Eso significaría que un buen SVD aplicación internamente podemos seguir (2) si se encuentra apto matrices (no sé si todavía hay mejores posibilidades). Esto significaría que para una implementación de alto nivel es mejor utilizar la enfermedad vesicular porcina (1) y dejar que el BLAS cuidar el algoritmo que se utiliza internamente.
-
Rápida práctico de verificación: OpenBLAS de la enfermedad vesicular porcina parece no hacer esta distinción, en una matriz de 5e4 x 100, svd (X, nu = 0)
toma mediana de 3,5 s, mientras que svd (crossprod (X), nu = 0)
lleva 54 ms (llamado a partir de R microbenchmark
).
La cuadratura de los autovalores de curso es rápido, y hasta que los resultados de ambas llamadas son equvalent.
timing <- microbenchmark (svd (X, nu = 0), svd (crossprod (X), nu = 0), times = 10)
timing
# Unit: milliseconds
# expr min lq median uq max neval
# svd(X, nu = 0) 3383.77710 3422.68455 3507.2597 3542.91083 3724.24130 10
# svd(crossprod(X), nu = 0) 48.49297 50.16464 53.6881 56.28776 59.21218 10
actualización: echa un vistazo a Wu, W.; Massart, D. & de Jong, S.: El kernel PCA algoritmos para muchas de datos. Parte I: Teoría y algoritmos , la Quimiometría Inteligentes y Sistemas de Laboratorio , 36, 165 - 172 (1997). DOI: http://dx.doi.org/10.1016/S0169-7439(97)00010-5
En este documento se analizan numérico y computacional de las propiedades de los 4 diferentes algoritmos para la PCA: SVD, eigen descomposición (EVD), NIPALS y el PODER.
Están relacionadas como sigue:
computes on extract all PCs at once sequential extraction
X SVD NIPALS
X'X EVD POWER
El contexto del trabajo son distintos $\mathbf X^{(30 \times 500)}$, y trabajan en $\mathbf{XX'}$ (kernel PCA) - este es justo el contrario situación como la que usted pregunta. Para responder a su pregunta acerca de la matriz de comportamiento, que es necesario cambiar el significado de "kernel" y "clásica".
No es de extrañar, EVD y de enfermedad vesicular porcina el cambio de lugares, dependiendo de si la clásica o el kernel que se utilizan los algoritmos. En el contexto de esta pregunta, esto significa que uno o el otro puede ser mejor dependiendo de la forma de la matriz.
Pero a partir de su discusión de los "clásicos" de enfermedad vesicular porcina y la EVD es claro que la descomposición de la $\mathbf{X'X}$ es muy usual para calcular el PCA. Sin embargo, no especifican que SVD, se utiliza el algoritmo para que cumplan con el uso de Matlab svd ()
función.
> sessionInfo ()
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 LC_MONETARY=de_DE.UTF-8
[6] LC_MESSAGES=de_DE.UTF-8 LC_PAPER=de_DE.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] microbenchmark_1.3-0
loaded via a namespace (and not attached):
[1] tools_3.0.2
$ dpkg --list libopenblas*
[...]
ii libopenblas-base 0.1alpha2.2-3 Optimized BLAS (linear algebra) library based on GotoBLAS2
ii libopenblas-dev 0.1alpha2.2-3 Optimized BLAS (linear algebra) library based on GotoBLAS2