【发布时间】:2011-05-23 01:46:09
【问题描述】:
我正在使用稀疏数据的特征值分解来实现 PCA。我知道 matlab 已经实现了 PCA,但它可以帮助我在编写代码时理解所有技术细节。 我一直在遵循here 的指导,但与内置函数 princomp 相比,我得到了不同的结果。
谁能看看它并指出正确的方向。
代码如下:
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) < 0.00001
Ev(:,i) = zeros(size(Ev,1),1);
else
proper = proper+1;
end;
end;
Ev = Ev(:,1:nimages);
【问题讨论】:
标签: matlab machine-learning computer-vision octave pca