La PCA viene ancora eseguita tramite la composizione elettronica della matrice di covarianza quando la dimensionalità è maggiore del numero di osservazioni?


10

Ho una matrice , contenente i miei campioni nello spazio dimensionale . Ora desidero codificare la mia analisi dei componenti principali (PCA) in Matlab. Ho avvilire a prima.X N = 20 D = 100 X X 020×100XN=20D=100XX0

Ho letto dal codice di qualcuno che in tali scenari in cui abbiamo più dimensioni delle osservazioni, non si scompone più l' della matrice di covarianza di . Invece, abbiamo Eigen-decompongono . Perché è corretto?1X01N-1X0X0T

La normale matrice di covarianza è di dimensioni , ciascun elemento ci dice la covarianza tra due dimensioni. Per me, non ha nemmeno le dimensioni corrette! È la matrice , quindi cosa ci dirà? Covarianza tra due osservazioni ?!1D×D N×N1N-1X0X0TN×N


La risposta alla tua domanda è nella circostanza che, come risulta dalla tua proposta, non hai bisogno della matrice di covarianza delle colonne per sé. Lo volevi solo come percorso per ottenere PC. Giusto? Ma gli stessi risultati della PCA possono essere ottenuti tramite automa di X'Xe XX'(così come svd di Xe X'). Ciò che viene chiamato "caricamenti" in un caso verrà chiamato "punteggi PC" nell'altro e viceversa. Poiché entrambi sono solo coordinate ( vedi, ad esempio ) e gli assi, le "dimensioni principali" sono le stesse.
ttnphns,

1
(cont.) Se è così e sei libero di scegliere quale scomporre, è saggio scomporre ciò che deve fare più velocemente / in modo più efficiente. Quando n<prichiede meno RAM e meno tempo per decomporsi XX'poiché ha dimensioni inferiori.
ttnphns,

@ttnphns Ottima spiegazione. Vedo il punto ora. Tuttavia, ho ancora problemi che vanno da eigen XX'al PC. Potresti per favore mostrarmi brevemente come? Dato che i PC sono solo autovettori della matrice di covarianza, ho tentato di spostarmi da autovelo XX'a autovene della matrice di covarianza X'X, ma non ci sono riuscito.
Sibbs Gioco d'azzardo il

1
Devo andare. Forse @amoeba (che è molto più agile in algebra di me) o un altro lettore guarderà presto qui e ti aiuterà. Saluti.
ttnphns,

1
@ttnphns: Fatto :)
amoeba,

Risposte:


22

La matrice di covarianza ha dimensioni ed è data daC = 1D×D

C=1N-1X0X0.

La matrice di cui stai parlando non è ovviamente una matrice di covarianza; si chiama matrice Gram ed è di dimensioni :G = 1N×N

sol=1N-1X0X0.

L'analisi dei componenti principali (PCA) può essere implementata tramite la composizione elettronica di una di queste matrici. Questi sono solo due modi diversi per calcolare la stessa cosa.

Il modo più semplice e utile per vederlo è utilizzare la scomposizione del valore singolare della matrice di dati . Inserendolo nelle espressioni per e , otteniamo:C G CX=USVCsol

C=VS2N-1Vsol=US2N-1U.

Gli autovettori della matrice di covarianza sono le direzioni principali. Le proiezioni dei dati su questi autovettori sono componenti principali; queste proiezioni sono fornite da . Componenti principali scalati per unità di lunghezza sono date da . Come vedi, gli autovettori della matrice Gram sono esattamente questi componenti principali in scala. E gli autovalori di e coincidono.VUSUCsol

Il motivo per cui potresti vedere che è consigliabile utilizzare la matrice Gram se è perché sarà di dimensioni inferiori, rispetto alla matrice di covarianza, e quindi sarà più veloce da calcolare e più veloce da comporre. In effetti, se la tua dimensionalità è troppo alta, non c'è modo di memorizzare la matrice di covarianza in memoria, quindi operare su una matrice di Grammo è l'unico modo per fare PCA. Ma per gestibile si può ancora usare eigendecomposition della matrice di covarianza, se si preferisce, anche se .N<DDDN<D



1
Bella risposta! Non sapevo che avesse un nome! Molte grazie! Ora sono fiducioso di usarlo per accelerare il mio calcolo.
Sibbs Gioco d'azzardo il

3
La mia risposta presuppone che quello che vuoi ottenere sia , e forse anche . Se anche voi volete ottenere , allora si può calcolare tramite dopo aver ottenuto . In effetti, se la tua dimensionalità è troppo elevata, non c'è modo di memorizzare la matrice di covarianza in memoria, quindi operare su una matrice Gram è l'unico modo per fare PCA. US/(n-1)VUXU
amoeba,

Questa risposta è più chiara che molte esposizioni che ho visto nei libri. Grazie.
usεr11852,

Per scopi puramente indicativi: penso che il documento Technometrics del 1969 di IJ Good " Alcune applicazioni della decomposizione singolare di una matrice " sia uno dei primi a fare prima riferimento completo a questo.
usεr11852,

1
@MattWenham Precisely.
amoeba,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.