In che modo il centraggio fa la differenza nel PCA (per la decomposizione di SVD ed autovene)?


30

Qual è la differenza nel centrare (o decifrare) i tuoi dati per PCA? Ho sentito che semplifica la matematica o che impedisce al primo PC di essere dominato dai mezzi delle variabili, ma mi sento come se non fossi ancora riuscito a cogliere fermamente il concetto.

Ad esempio, la risposta principale qui In che modo il centraggio dei dati elimina l'intercettazione in regressione e PCA? descrive come il non centraggio trascinerebbe il primo PCA attraverso l'origine, piuttosto che l'asse principale della nuvola di punti. Sulla base della mia comprensione di come i PC sono ottenuti dagli autovettori della matrice di covarianza, non riesco a capire perché ciò accada.

Inoltre, i miei calcoli con e senza centratura sembrano avere poco senso.

Considera i fiori di setosa nel irisset di dati in R. Ho calcolato gli autovettori e gli autovalori della matrice di covarianza del campione come segue.

data(iris)
df <- iris[iris$Species=='setosa',1:4]
e <- eigen(cov(df))
> e
$values
[1] 0.236455690 0.036918732 0.026796399 0.009033261

$vectors
            [,1]       [,2]       [,3]        [,4]
[1,] -0.66907840  0.5978840  0.4399628 -0.03607712
[2,] -0.73414783 -0.6206734 -0.2746075 -0.01955027
[3,] -0.09654390  0.4900556 -0.8324495 -0.23990129
[4,] -0.06356359  0.1309379 -0.1950675  0.96992969

Se centro prima il set di dati, ottengo esattamente gli stessi risultati. Ciò sembra abbastanza ovvio, poiché il centraggio non cambia affatto la matrice di covarianza.

df.centered <- scale(df,scale=F,center=T)
e.centered<- eigen(cov(df.centered))
e.centered

La prcompfunzione si traduce esattamente in questa combinazione autovalore-autovettore, sia per il set di dati centrato che non centrato.

p<-prcomp(df)
p.centered <- prcomp(df.centered)
Standard deviations:
[1] 0.48626710 0.19214248 0.16369606 0.09504347

Rotation:
                     PC1        PC2        PC3         PC4
Sepal.Length -0.66907840  0.5978840  0.4399628 -0.03607712
Sepal.Width  -0.73414783 -0.6206734 -0.2746075 -0.01955027
Petal.Length -0.09654390  0.4900556 -0.8324495 -0.23990129
Petal.Width  -0.06356359  0.1309379 -0.1950675  0.96992969

Tuttavia, la prcompfunzione ha l'opzione predefinita center = TRUE. La disabilitazione di questa opzione comporta i seguenti PC per i dati non centrati ( p.centeredrimane lo stesso quando centerè impostato su false):

p.uncentered <- prcomp(df,center=F)
> p.uncentered
Standard deviations:
[1] 6.32674700 0.22455945 0.16369617 0.09766703

Rotation:
                    PC1         PC2        PC3         PC4
Sepal.Length -0.8010073  0.40303704  0.4410167  0.03811461
Sepal.Width  -0.5498408 -0.78739486 -0.2753323 -0.04331888
Petal.Length -0.2334487  0.46456598 -0.8317440 -0.19463332
Petal.Width  -0.0395488  0.04182015 -0.1946750  0.97917752

Perché è diverso dai miei calcoli di autovettori sulla matrice di covarianza dei dati non centrati? Ha a che fare con il calcolo? Ho visto menzionato che prcomputilizza qualcosa chiamato il metodo SVD piuttosto che la decomposizione degli autovalori per calcolare il PC. La funzione princomputilizza quest'ultima, ma i suoi risultati sono identici a prcomp. Il mio problema riguarda la risposta che ho descritto all'inizio di questo post?

EDIT: il problema è stato risolto dall'utile @ttnphns. Vedi il suo commento qui sotto, su questa domanda: cosa significa calcolare gli autovettori di una matrice di covarianza se i dati non sono stati centrati per primi? e in questa risposta: https://stats.stackexchange.com/a/22520/3277 . In breve: una matrice di covarianza implica implicitamente già il centraggio dei dati. PCA utilizza la composizione SVD o eigend dei dati centrati e la matrice di covarianza è quindi uguale a .XX'X/(n-1)


5
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...Si prega di leggere i commenti nella risposta a cui si collega. Le covarianze implicano la centratura dei dati, l'APC "sulle covarianze" = l'APC sui dati centrati. Se non centrate le variabili originali X, il PCA basato su tali dati sarà = PCA sulla X'X/n [or n-1]matrice. Vedi anche una panoramica importante: stats.stackexchange.com/a/22520/3277 .
ttnphns

2
through the origin, rather than the main axis of the point cloud. PCA perfora sempre l'origine. Se i dati erano centrati, origine = centroide.
ttnphns

Grazie, la panoramica mi ha aiutato a chiarire le cose. Quindi è semplicemente un problema di convenzioni di denominazione? Ho ipotizzato che il PCA fosse un calcolo basato sulla matrice di covarianza, mentre generalmente è definito come un calcolo eseguito su un set di dati centrato (dove è la matrice di covarianza). Sembra però una convenzione confusa. cont. X'X
Zenit

1
Molte fonti sottolineano l'importanza di centrare i dati e poi spiegano come gli autovettori della matrice di covarianza siano di interesse, apparentemente ignorando il fatto che è già implicitamente centrato. Anche la voce PCA su Wikipedia non fa questa distinzione: per trovare gli assi dell'ellisse, dobbiamo prima sottrarre la media di ogni variabile dal set di dati per centrare i dati intorno all'origine. Quindi, calcoliamo la matrice di covarianza dei dati e calcoliamo gli autovalori e gli autovettori corrispondenti di questa matrice di covarianza. S
Zenit

Vedi Analisi delle componenti principali: una recensione e recenti sviluppi per una discussione di PCA centrato e non centrato (che generalmente non sono gli stessi).
Yibo Yang

Risposte:


33

Dun'tun'Matrice di covarianzaEigen-decomposition,

[Wikipedia:] Per trovare gli assi dell'ellisse, dobbiamo prima sottrarre la media di ogni variabile dal set di dati per centrare i dati attorno all'origine. Quindi, calcoliamo la matrice di covarianza dei dati ...

E quindi hai ragione a osservare che questa non è una formulazione molto accurata.

XX/(n-1)X

Dati XMatrice XX/(n-1)Eigen-decomposizione,

allora il centraggio conta molto e l'effetto è descritto e illustrato da @ttnphns in In che modo il centraggio dei dati elimina l'intercettazione in regressione e PCA?

X

Dati XScomposizione di un valore singolo.

Xsvd


1
Ho un consiglio per la tua risposta per rendere una logica più pulita. Dato che nei tuoi primi due esempi (eigen) stai parlando della matrice MSCP di decomposizione X'X/(n-1)e non della matrice SSCP X'X- sarebbe nell'esempio svd, che mostra l'equivalenza, decomporsi X/sqrt(n-1)invece di X(come parli attualmente). [Naturalmente la differenza è solo nella parte in scala (autovalori) e non in autovettori, ma è meglio didatticamente, penso.] Il mio secondo punto sarebbe ricordare che non appena il centraggio di Xnon ha luogo, la correzione di Bessel n-1diventa superflua, nè benvenuto.
ttnphns

1
Entrambi i punti positivi, @ttnphns. Penserò a come inserirli nella mia risposta: volevo che questa risposta fosse comprensibile da un pubblico più ampio e quindi ho cercato di evitare di entrare in inutili dettagli matematici.
ameba dice di ripristinare Monica
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.