我在Matlab上使用了一个函数:
[V,D] = eig(C);
Run Code Online (Sandbox Code Playgroud)
我看到V和D总是按升序排序.它是否总是那样,或者我应该在获得V和D价值后对它们进行排序?
我正在尝试使用PCA对我的数据进行princomp(x)标准化.
数据是<16 x 1036800 double>.这运行我们的内存,除了这是一台新计算机,计算机拥有24GB的RAM用于数据挖掘,这是太过预期.MATLAB甚至列出了内存检查中可用的24GB.
MATLAB在执行PCA时实际上是否内存不足,还是MATLAB没有使用RAM来充分发挥它的潜力?任何信息或想法都会有所帮助.(我可能需要增加虚拟内存,但假设24GB已经足够了.)
我正在使用特征值分解为稀疏数据实现PCA.我知道matlab实现了PCA,但它帮助我理解编写代码时的所有技术细节.我一直在遵循这里的指导,但与内置函数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 …Run Code Online (Sandbox Code Playgroud)