2016-06-09 18 views
0

Nächstes Spiel ich bekommen kann, ist laufen:Unterschied in den Ergebnissen Matlab, wenn PCA mit() und PCACOV()

data=rand(100,10); % data set 
    [W,pc] = pca(cov(data)); 

dann tun demean nicht

data2=data 
    [W2, EvalueMatrix2] = eig(cov(data2)); 
    [W3, EvalueMatrix3] = svd(cov(data2)); 

In diesem Fall W2 und W3 zustimmen und W ist die transpose von ihnen?

Noch nicht klar, warum W sollte die Transponierte der beiden anderen sein?

Als zusätzliche Kontrolle I pcacov verwenden:

[W4, EvalueMatrix4] = pcacov(cov(data2)); 

Wieder stimmt sie mit WE und W3 aber ist die transponierte W?

+3

vielleicht 'pca' berechnet die Eigenvektoren der Kovarianzmatrix? [http://math.stackexchange.com/questions/3869/what-is-the-intuitive-relationship-between-svd-and-pca](http://math.stackexchange.com/questions/3869/what- is-the-intuitive-relation-zwischen-svd-and-pca) – shamalaia

+0

Hast du 'eig' oder' svd' versucht? – Dan

+0

Es der Link oben sagt, dass pca zentriert die Daten und verwendet SVD (so einige Unterschiede zu PCA Ergebnis erwartet werden könnte, aber diese Ergebnisse sind völlig anders?). Es besagt auch, dass die Eingabe durch eine n * p Matrix erfolgen sollte, wobei n die Beobachtung und p die Variablen sind, die nicht die Verwendung einer Kovarianzmatrix vorschlagen? – Bazman

Antwort

2

Die Ergebnisse sind unterschiedlich, da Sie den Mittelwert jeder Zeile der Datenmatrix subtrahieren. Je nachdem, wie Sie Dinge berechnen, entsprechen die Zeilen der Datenmatrix den Datenpunkten und die Spalten den Dimensionen (so funktioniert auch die Funktion pca()). Bei dieser Einstellung sollten Sie den Mittelwert von jeder Spalte und nicht von der Zeile subtrahieren. Dies entspricht dem "Zentrieren" der Daten; der Mittelwert entlang jeder Dimension wird auf Null gesetzt. Sobald Sie dies tun, sollten die Ergebnisse pca() entsprechen, bis zu Zeichenflips.

Bearbeiten, um editierte Frage zu bearbeiten: Zentrierung Problem sieht jetzt ok. Wenn Sie die Eigenwertzerlegung in der Kovarianzmatrix ausführen, müssen Sie die Eigenvektoren nach absteigenden Eigenwerten sortieren. Dies sollte der Ausgabe von pcacov() entsprechen. Wenn Sie pca() aufrufen, müssen Sie die Datenmatrix und nicht die Kovarianzmatrix übergeben.

+0

Ich merke, dass es überladen wurde, also habe ich es vereinfacht. Mir erscheint immer noch seltsam, dass pca (cov (Daten)) und pcacpv (cov (Daten)) unterschiedlich sein sollten. – Bazman

+0

Bearbeitete die Antwort, um dieses zu adressieren – user20160