Skip to content

Instantly share code, notes, and snippets.

@lailsonbm
Created April 14, 2011 00:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lailsonbm/918714 to your computer and use it in GitHub Desktop.
Save lailsonbm/918714 to your computer and use it in GitHub Desktop.
Implementação do PCA em Matlab
2.8811 3.8030 3.6851 -0.6650 -0.7844 5.5984 4.0082 11.3941 12.8090 6.8662 13.0082 14.9611 12.9753 16.8402 18.4373 15.4916 18.2839 17.7676 13.2586 18.4653 21.4630 21.2120 20.7231 27.3713 27.2953 28.4909 24.7253 27.9318 31.7255 33.3350 31.6846 28.0678 33.5385 28.7205 33.0673 36.6693 40.3373 40.1095 37.8455 41.5675
-0.8295 5.7179 6.8797 6.6415 2.8888 4.5474 3.4669 9.8442 11.8284 13.1371 10.5828 11.9887 8.4888 16.9971 13.5039 12.0567 19.9965 19.6259 21.8249 16.8495 21.7323 22.6428 18.2281 22.0732 21.7529 27.1667 23.8338 30.9620 31.2658 27.9003 29.9790 32.9481 35.3437 34.0963 34.7474 33.2604 35.5642 39.1380 41.8441 41.2086
27.6206 22.3949 21.6693 24.9538 27.6558 21.9238 23.8172 14.0761 11.6784 15.0261 12.4040 10.0239 13.8877 5.1849 6.4755 9.5962 2.0588 2.6873 4.3864 4.1228 -1.4304 -1.8854 1.5431 -5.9036 -5.6258 -10.2574 -5.2343 -12.5028 -15.4342 -14.2414 -14.5077 -13.9850 -19.5770 -15.2535 -18.8234 -20.3689 -24.6045 -26.9329 -27.1967 -29.4217
2.9505 -1.1003 -2.0154 -4.8776 -2.2707 0.9905 0.6564 1.2343 0.7984 -4.2832 1.8302 2.1840 3.3084 -0.0963 3.5214 2.5051 -1.2398 -1.3341 -6.0542 1.1426 -0.2676 -1.0953 1.7285 3.6074 3.7840 0.7366 0.5004 -2.3738 0.0534 3.5882 0.9473 -3.7028 -1.6059 -4.0708 -1.5069 2.0704 2.9762 0.2556 -3.2628 -0.2122
% Implementacao baseada no codigo de Jon Shlens,
% disponivel em www.snl.salk.edu/~shlens/pca.pdf
% Gera os dados para o toyproblem
x = [0:1:39];
y = [0:1:39];
% Adiciona ruido aos dados
x = x + (rand(size(x)) - 0.5) * 10;
y = y + (rand(size(y)) - 0.5) * 10;
% Plota os dados para visualizacao
plot(x, y, '+');
% Compila a matriz de dados
X = [x ; y];
% Calculando a media e centralizando os dados
media = mean(X,2);
Xc = X - repmat(media, 1, 40);
% Obtem a matriz de covariancia
covariancia = 1/39 * Xc * Xc';
% Decomposicao
[PC, V] = eig(covariancia);
% Selecao dos PCs e montagem da matriz de projecao
V = diag(V);
[~, rindices] = sort(-1*V);
V = V(rindices);
PC = PC(:,rindices);
% Projetando os dados
Y = PC'*Xc;
% Plota os dados projetados para visualizacao
plot(Y(1,:), Y(2,:), '+');
axis([-35 35 -20 20]);
@humbertosampaio
Copy link

cara o que o seu "rindices" representa no código? e por que vc multiplica ele pelos autovetres e autovalores depois? e pq, mesmo depois de multiplicar ele por V (linha 31), vc nao faz mais nada com o V? da pra tirar essas dúvidas minhas? obg :D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment