¿La PCA todavía se realiza mediante la descomposición propia de la matriz de covarianza cuando la dimensionalidad es mayor que el número de observaciones?

10

Tengo una matriz , que contiene mis muestras en el espacio -dimensional. Ahora deseo codificar mi propio análisis de componentes principales (PCA) en Matlab. Debo decir a primero.X N = 20 D = 100 X X 020×100XN=20D=100XX0

Leí en el código de alguien que en tales escenarios donde tenemos más dimensiones que observaciones, ya no descomponemos eigen la matriz de covarianza de . En su lugar, se descomponen Eigen- . ¿Por qué es correcto?1X01N1X0X0T

La matriz de covarianza normal es de tamaño , cada elemento del cual nos dice la covarianza entre dos dimensiones. Para mí, ni siquiera tiene las dimensiones correctas. Es matriz, entonces, ¿qué nos diría? ¿Covarianza entre dos observaciones?1D×D N×N1N1X0X0TN×N

Sibbs Gambling
fuente
La respuesta a su pregunta es en la circunstancia de que, como se desprende de la presentación de su tarea, no necesita la matriz de covarianza de las columnas por sí misma. Solo lo quería como un camino para obtener PC. ¿Derecho? Pero los mismos resultados de PCA se pueden obtener a través de eigen de X'Xy XX'(así como svd de Xy X'). Lo que se llama "cargas" en un caso se llamará "puntajes de PC" en el otro y viceversa. Debido a que ambas son solo coordenadas ( ver, por ejemplo ) y los ejes, las "dimensiones principales" son las mismas.
ttnphns
1
(cont.) Si es así y usted es libre de elegir qué descomponer, es aconsejable descomponer lo que se debe hacer más rápido / más eficientemente. Cuando n<pse necesita menos RAM y menos tiempo para descomponerse, XX'ya que es de menor tamaño.
ttnphns
@ttnphns Gran explicación. Ahora veo el punto. Sin embargo, todavía tengo problemas para pasar de eigen XX'a PC. ¿Podría, por favor, mostrarme brevemente cómo? Dado que las PC son solo vectores propios de la matriz de covarianza, intenté moverme de un origen XX'a otro de la matriz de covarianza X'X, pero fallé.
Sibbs Gambling
1
Tengo que ir. Quizás @amoeba (que es mucho más ágil en álgebra que yo) u otro lector buscará aquí pronto y lo ayudará. Salud.
ttnphns
1
@ttnphns: Hecho :)
ameba

Respuestas:

22

La matriz de covarianza es de tamaño y está dada por C = 1D×D

C=1N1X0X0.

La matriz de la que está hablando no es, por supuesto, una matriz de covarianza; se llama matriz de Gram y tiene un tamaño : G = 1N×N

G=1N1X0X0.

El análisis de componentes principales (PCA) se puede implementar a través de la descomposición propia de cualquiera de estas matrices. Estas son solo dos formas diferentes de calcular la misma cosa.

La forma más fácil y útil de ver esto es usar la descomposición de valores singulares de la matriz de datos . Al conectar esto a las expresiones para C y G , obtenemos: CX=USVCG

C=VS2N1VG=US2N1U.

Los vectores propios de la matriz de covarianza son direcciones principales. Las proyecciones de los datos en estos vectores propios son componentes principales; estas proyecciones están dadas por U S . Principales componentes escalados para unidad de longitud se dan por U . Como puede ver, los vectores propios de la matriz de Gram son exactamente estos componentes principales escalados. Y los valores propios de C y G coinciden.VUSUCG

N<DDDN<D


ameba
fuente
1
¡Gran respuesta! ¡No sabía que tenía nombre! ¡Muchas gracias! Ahora estoy seguro de usarlo para acelerar mi cálculo.
Sibbs Gambling
3
US/(n1)VUXU
Esta respuesta es más clara que muchas exposiciones que he visto en libros. Gracias.
usεr11852
Con fines puramente de referencia: creo que el artículo de Technometrics de 1969 de IJ Good " Algunas aplicaciones de la descomposición singular de una matriz " es uno de los primeros en hacer referencia a esto por completo.
usεr11852
1
@MattWenham Precisamente.
ameba