title: Principal Component Analysis in MATLAB
body: <p>I'm implementing PCA using eigenvalue decomposition for sparse data. I know matlab has PCA implemented, but it helps me understand all the technicalities when I write code.
  I've been following the guidance from <a href="http://books.google.com/books?id=bXzAlkODwa8C&amp;lpg=PA647&amp;dq=eigenvalue%20decomposition&amp;pg=PA647#v=onepage&amp;q&amp;f=false" rel="noreferrer">here</a>, but I'm getting different results in comparison to built-in function princomp. </p>
  
  <p>Could anybody look at it and point me in the right direction.</p>
  
  <p>Here's the code:</p>
  
  <pre><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) &lt; 0.00001
    Ev(:,i) = zeros(size(Ev,1),1);
   else
    proper = proper+1;
   end;
  end;
  
  Ev = Ev(:,1:nimages);
  </code></pre>