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}');