Principal Component Analysis in MATLAB
Ich bin Implementierung von PCA mittels Eigenwert-ZERLEGUNG für dünnbesetzte Daten. Ich kenne matlab hat PCA durchgeführt, aber es hilft mir zu verstehen, all die Technik, wenn ich code schreiben.
Ich habe nach der Anleitung von hier, aber ich bin immer unterschiedliche Ergebnisse im Vergleich zur built-in-Funktion princomp.
Könnte jemand schaut Sie an und zeigen Sie mich in die richtige Richtung.
Hier der code:
function [mu, Ev, Val ] = pca(data)
% mu - mean image
% Ev - matrix whose columns are the eigenvectors corresponding to the eigen
% values Val
% Val - eigenvalues
if nargin ~= 1
error ('usage: [mu,E,Values] = pca_q1(data)');
end
mu = mean(data)';
nimages = size(data,2);
for i = 1:nimages
data(:,i) = data(:,i)-mu(i);
end
L = data'*data;
[Ev, Vals] = eig(L);
[Ev,Vals] = sort(Ev,Vals);
% computing eigenvector of the real covariance matrix
Ev = data * Ev;
Val = diag(Vals);
Vals = Vals / (nimages - 1);
% normalize Ev to unit length
proper = 0;
for i = 1:nimages
Ev(:,i) = Ev(:,1)/norm(Ev(:,i));
if Vals(i) < 0.00001
Ev(:,i) = zeros(size(Ev,1),1);
else
proper = proper+1;
end;
end;
Ev = Ev(:,1:nimages);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, wie ich es tun würde:
sowie ein Beispiel zum Vergleich mit der Funktion PRINCOMP aus der Statistik-Toolbox:
Sie könnten auch interessiert sein in diesem post über die Durchführung PCA von SVD.
princomp
sortiert die Daten vonCOEFF
durchlatent
standardmäßig (ref: mathworks.com/help/stats/princomp.html)? Was ist der Unterschied zwischen deiner Funktion undprincomp
coeff
undlatent
wocoeff
sortiert mitlatents
. Darf ich die built-in Funktionprincomp
oder IhremyPCA
??COEFF
(principal components) werden sortiert in absteigender Reihenfolge in Bezug auf die Varianz der BauteileLATENT
. Überprüfen Sie auch die letzten genannten link über die Durchführung von PCA mittels SVD statt EIG.. Beachten Sie, dassprincomp
wird ersetzt mitpca
- Funktion in den letzten Editionen (in der Tat prüfen Sie den Quellcode, um zu sehen, dass Anrufe zuprincomp
weitergeleitet werden, umpca
intern).pca
&princomp
und auch in Ihrer FunktionmyPCA
&PCA by SVD
? Ich bin nicht in der Lage zu unterscheiden, b/w Sie? Was mein problem ist, ich möchte berechnenpca
vonn
Matrizen der[500x3]
wocoeff
sortiert mitlatents
.pca
Funktion, Sie werden kommen sortiert wie beschrieben. Wie ich schon sagte, wenn Sie sich den Quellcode ansehen (edit princomp.m
), es ist einfach die Weiterleitung des Aufrufs anpca()
...pca
&princomp
. M ich Recht ? und was habe ich geprüft,pca
==princomp
aber ~=myPCA
. Y . ?EV
ist ein Eigenvektor, dann istlambda*EV
für jede Konstantelambda
. Jetzt, daEIG
Funktion gibt immer normierte einheitsvektoren, wir sind Links mit einem beliebigen Zeichen (lambda=-1
oderlambda=+1
). Siehe diesen Beitrag für mehr Informationen: stackoverflow.com/a/18152804/97160 (auch checkout die dort genannten links in den Kommentaren)COEFF
matrix) sind die Vektoren, die beschreiben die Richtungen von diesem neuen system. Nun, wenn(I,J,K)
ist eine basis für den Vektorraum ist, dann ist(a*I,b*J,c*K)
eine entsprechend geänderte Daten Koordinaten (SCORE
matrix). So Eigenvektoren sind nicht eindeutig (können unabhängig voneinander skaliert/multipliziert mit einer Konstanten) so lange, wie Sie Spannweite den gleichen Unterraum.HMMs
undstatistics
möchte ich der Bahn meine Daten mitHMM
aber der gaussfunktionen, meine Daten sind zu nah, wie ich bekommenmcr
nach dem training0.89
, wie kann ich den extrahieren-Funktionen meiner 3-D Trajektorien der Länge[501x3]
oder gelten einige statistische Auswertung-Methode auf, die. Ich bewarb michPCA
mit den entsprechenden Winkeln, aber es gibt mcr von0.88
.