Analyse en Composante principale de MATLAB
Je suis la mise en œuvre de l'APC à l'aide des valeurs propres de décomposition pour le peu de données. Je sais matlab a l'APC de mise en œuvre, mais elle m'aide à comprendre toutes les subtilités lorsque j'écris du code.
J'ai suivi les conseils de ici, mais j'obtiens des résultats différents en comparaison à la fonction intégrée dans princomp.
Quelqu'un pourrait-il regarder et de me diriger dans la bonne direction.
Voici le 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);
OriginalL'auteur matcheek | 2010-12-09
Vous devez vous connecter pour publier un commentaire.
Voici comment j'allais le faire:
et un exemple à comparer les PRINCOMP fonction à partir de la boîte à outils de Statistiques:
Vous pourriez également être intéressé par ce poste sur l'exécution de PCA par SVD.
princomp
trie les données deCOEFF
parlatent
par défaut (réf: mathworks.com/help/stats/princomp.html)? Quelle est la différence entre votre fonction etprincomp
Je veux utiliser
coeff
etlatent
oùcoeff
est triée aveclatents
. Puis-je utiliser la fonction intégréeprincomp
ou votremyPCA
??évidemment, comme l'exemple ci-dessus, les deux fonctions produire même sortie (jusqu'à une certaine précision); les colonnes de
COEFF
(composantes principales) sont triés dans l'ordre décroissant en termes de composante de la varianceLATENT
. Vérifiez également le dernier lien mentionné ci-dessus sur la façon d'effectuer une ACP avec SVD au lieu de GIE.. Notez queprincomp
est remplacé parpca
au cours des dernières éditions (en fait, vérifier le code source pour voir qui appelle àprincomp
sont acheminés verspca
en interne).Ok, quelle est la différence b/w
pca
&princomp
et aussi dans votre fonctionmyPCA
&PCA by SVD
? Je ne suis pas en mesure de différencier b/w? Ce que mon problème est, je veux calculerpca
den
matrices de[500x3]
oùcoeff
est triée aveclatents
.L'APC, après tout, est une transformation orthogonale qui transforme les données vers un nouveau système de coordonnées (telles que les données ont variance maximale le long de la nouvelles directions dans l'ordre décroissant). Les principaux éléments (colonnes de
COEFF
de la matrice) sont les vecteurs décrivant les orientations de ce nouveau système. Maintenant, si(I,J,K)
est un set de base pour l'espace vectoriel alors il en est(a*I,b*J,c*K)
, avec un coefficient de données modifiées, les coordonnées (SCORE
de la matrice). Donc les vecteurs propres ne sont pas uniques (peut-être indépendamment l'échelle/multipliée par une constante) tant qu'ils portent sur le même sous-espace.OriginalL'auteur Amro