git-svn-id: http://moon:8086/svn/matlab/trunk@91 801c6759-fa7c-4059-a304-17956f83a07c
37 lines
1.1 KiB
Plaintext
37 lines
1.1 KiB
Plaintext
function pca_eval()
|
|
|
|
close all;
|
|
|
|
Ntrain = 100;
|
|
Ndim = 2;
|
|
K = 1;
|
|
epsilon = 0.1;
|
|
|
|
x = 2*(rand(Ndim, Ntrain)-0.5)
|
|
x = 0.3*x + repmat(linspace(-0.7,0.7, Ntrain), Ndim, 1)
|
|
plot(x(1,:), x(2,:), '+'); axis([-1 1 -1 1]); grid; title('Raw data'); xlabel('x_1'); ylabel('x_2');
|
|
|
|
sigma = x * x' / size(x, 2)
|
|
[U,S,V] = svd(sigma)
|
|
xrot = U' * x;
|
|
figure;
|
|
plot(xrot(1,:), xrot(2,:), '+'); axis([-1 1 -1 1]); grid; title('Rotated data'); xlabel('x_{rot,1}'); ylabel('x_{rot,2}');
|
|
|
|
lambda = diag(S);
|
|
retained_variance = sum(lambda(1:K))./sum(lambda)
|
|
|
|
xpca = diag(sqrt(1./(lambda + epsilon))) * xrot;
|
|
figure;
|
|
plot(xpca(1,:), xpca(2,:), '+'); axis([-1 1 -1 1]); grid; title('Whitened data dim=2'); xlabel('x_{pca,1}'); ylabel('x_{pca,2}');
|
|
|
|
xtilde = zeros(size(xrot));
|
|
xtilde(1:K, :) = xrot(1:K, :);
|
|
|
|
figure;
|
|
plot(xtilde(1,:), xtilde(2,:), '+'); axis([-1 1 -1 1]); grid; title('Rotated data reduced to dim = 1'); xlabel('x_{tilde,1}'); ylabel('x_{tilde,2}');
|
|
|
|
xhat = U*xtilde;
|
|
|
|
figure;
|
|
plot(xhat(1,:), xhat(2,:), '+'); axis([-1 1 -1 1]); grid; title('Data reduced to dim = 1'); xlabel('x_{hat,1}'); ylabel('x_{hat,2}');
|