|
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 here, but I'm getting different results in comparison to built-in function princomp. Could anybody look at it and point me in the right direction. Here's the code:
|
|
From 'nimages = size(data,2);', it seems that each column is an example in your case. So basically your data is DxN where D is the number of features and N is the number of examples. In this case, first off, your data mean 'mu' would be mu = mean(data,2) or mu = mean(data'). You seem to be wanting to be using the latter but the transpose is outside (you used mean(data)'). Once you have the mean, you should just be doing data(:,i) = data(:,i)-mu to center each data point (or use a 'repmat' with mu if you want a one-liner). You are using mu(i) which again isn't right. Also, you use data'data for covariance which (assuming columns are examples) is NxN. You should use datadata'/(N-1) which is how the covariance is defined. Or use the 'cov' function from matlab. |
How is the data matrix stored ? Is each row a different data point and each column a feature/pixel value ? Or is each column a different data point ?