Description of demo_unsupervised_PCA_FactorAnalysis.m

Demonstrates usage of PCA on synthetic data and shows Factor Analysis and PCA on a real dataset

Contents

Principle Component Analysis on Synthetic Data

clear all
close all
f=1;

Generate synthetic data

x1 = randn(500,1);
x1 = x1-mean(x1);
x2 = randn*x1 + randn(500,1);
x2 = x2-mean(x2);

figure(f);clf;hold on;f=f+1;
plot(x1,x2,'.');
title('Mean-Adjusted Data');
xl = xlim;
yl = ylim;
xl(1) = min(xl(1),yl(1));
xl(2) = max(xl(2),yl(2));
xlim(xl);
ylim(yl);

X = [x1 x2];
[n,p] = size(X);

C = (1/n)*X'*X;
[U,S,V] = svd(C);

Plot Principal Components

m1 = V(2,1)/V(1,1);
m2 = V(2,2)/V(1,2);
h1 = plot([xl(1) xl(2)],[xl(1)*m1 xl(2)*m1],'r');
h2 = plot([xl(1) xl(2)],[xl(1)*m2 xl(2)*m2],'g');
legend([h1 h2],'PC1','PC2');

Plot Projected Data

Xp = X*V;
figure(f);clf;hold on; f=f+1;
plot(Xp(:,1),Xp(:,2),'.');
title('Rotated Data');
h3 = hline(0,'r');
h4 = vline(0,'g');
legend([h3 h4],'PC1','PC2');

PCA & Factor Analysis on 9-D quality of life ratings for U.S. Cities

 load cities.mat
 X = ratings;

% Reduce to 2-dimensions with PCA
options = struct('maxComponents',2);
model = ml_unsupervised_dimRedPCA(X,options);
Xreduced = model.reduceFunc(model,X);
figure(f);f=f+1;
plot(Xreduced(:,1),Xreduced(:,2),'.');
title('PCA Projection onto 2-dimensions of cities data');
gname(names)

% Reduce to 2-dimensions with FA
options = struct('nComponents',2);
model = ml_unsupervised_dimRedFA(X,options);
Xreduced = model.reduceFunc(model,X);
figure(f);f=f+1;
plot(Xreduced(:,1),Xreduced(:,2),'.');
title('FA Projection onto 2-dimensions of cities data');
gname(names)
Number of Components selected: 2
Variance explained by basis: 0.51