W jaki sposób centrowanie wpływa na PCA (w przypadku SVD i rozkładu własnego)?

30

Jaką różnicę ma centrowanie (lub odznaczanie) danych w przypadku PCA? Słyszałem, że ułatwia to matematykę lub zapobiega zdominowaniu pierwszego komputera przez zmienne, ale wydaje mi się, że nie byłem jeszcze w stanie zrozumieć tej koncepcji.

Na przykład najlepsza odpowiedź tutaj W jaki sposób centrowanie danych pozbywa się przechwytywania w regresji i PCA? opisuje, w jaki sposób nie centrowanie pociągnęłoby pierwszą PCA przez początek, a nie główną oś chmury punktów. W oparciu o moje zrozumienie, w jaki sposób komputery PC są uzyskiwane z wektorów własnych macierzy kowariancji, nie rozumiem, dlaczego tak się stało.

Co więcej, moje własne obliczenia z centrowaniem i bez centrowania wydają się nie mieć sensu.

Rozważ kwiaty setosa w iriszbiorze danych w R. Obliczyłem wektory własne i wartości własne macierzy kowariancji próbki w następujący sposób.

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

Jeśli najpierw wyśrodkuję zestaw danych, otrzymam dokładnie takie same wyniki. Wydaje się to dość oczywiste, ponieważ centrowanie w ogóle nie zmienia matrycy kowariancji.

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

Ta prcompfunkcja daje dokładnie tę kombinację wartości własnej i wektora własnego, zarówno dla wyśrodkowanego, jak i niecentrowanego zestawu danych.

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

Jednak prcompfunkcja ma opcję domyślną center = TRUE. Wyłączenie tej opcji skutkuje następującymi komputerami dla niecentrowanych danych ( p.centeredpozostaje taki sam, gdy centerjest ustawiony na 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

Dlaczego różni się to od moich własnych obliczeń wektora własnego na macierzy kowariancji niecentrowanych danych? Czy ma to związek z obliczeniami? Widziałem wspomniane, że prcompdo obliczenia komputera używa raczej metody zwanej metodą SVD niż rozkładu wartości własnej. Funkcja princompwykorzystuje to drugie, ale jej wyniki są identyczne prcomp. Czy mój problem dotyczy odpowiedzi opisanej na początku tego postu?

XXX/(n1)

Zenit
źródło
5
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...Przeczytaj komentarze w odpowiedzi, do której prowadzi link. Kowariancje oznaczają centrowanie danych, PCA „na kowariancjach” = PCA na danych ześrodkowanych. Jeśli nie wyśrodkujesz oryginalnych zmiennych X, PCA na podstawie takich danych będzie = PCA na X'X/n [or n-1]macierzy. Zobacz także ważny przegląd: stats.stackexchange.com/a/22520/3277 .
ttnphns
2
through the origin, rather than the main axis of the point cloud. PCA zawsze przebija pochodzenie. Jeśli dane były wyśrodkowane, pochodzenie = środek ciężkości.
ttnphns
XX
1
S
Zobacz Analiza głównego składnika: przegląd i najnowsze osiągnięcia w celu omówienia PCA wyśrodkowanego i nieśrodkowego (które zasadniczo nie są takie same).
Yibo Yang

Odpowiedzi:

33

DataCovariance matrixEigen-decomposition,

[Wikipedia:] Aby znaleźć osie elipsy, musimy najpierw odjąć średnią każdej zmiennej od zestawu danych, aby wyśrodkować dane wokół początku. Następnie obliczamy macierz kowariancji danych ...

I masz rację, zauważając, że nie jest to bardzo dokładne sformułowanie.

XX/(n1)X

Data XMatrix XX/(n1)Eigen-decomposition,

wtedy centrowanie ma duże znaczenie i efekt opisany i zilustrowany przez @ttnphns w W jaki sposób centrowanie danych pozbywa się przechwytywania w regresji i PCA?

X

Data XSingular value decomposition.

Xsvd

ameba mówi Przywróć Monikę
źródło
1
Mam radę na twoją odpowiedź, aby uczynić czystszą logikę. Ponieważ w dwóch twoich pierwszych (własnych) przykładach mówisz o macierzy dekompozycji MSCP, X'X/(n-1)a nie o macierzy SSCP X'X- byłoby to w przykładzie svd, pokazującym równoważność, X/sqrt(n-1)zamiast dekompozycji X(jak obecnie mówisz). [Oczywiście różnica polega tylko na części skali (wartościach własnych), nie na wektorach własnych, ale wydaje mi się, że lepiej jest dydaktycznie.] Moim drugim punktem byłoby przypomnienie, że gdy tylko centrowanie Xnie ma miejsca, korekta Bessela n-1staje się niepotrzebna, njest mile widziany.
ttnphns
1
Oba dobre punkty, @ttnphns. Zastanowię się, jak włączyć je do mojej odpowiedzi: chciałem, aby odpowiedź ta była zrozumiała dla szerszego grona odbiorców, dlatego starałem się unikać wchodzenia w niepotrzebne szczegóły matematyczne.
ameba mówi Przywróć Monikę