在MATLAB,pcacov或eigs中,我应该使用哪一个PCA进行降维?

时间:2015-05-17 18:38:04

标签: matlab pca dimensionality-reduction

我试图将训练集尺寸从1296 * 70000减少到128 * 70000。 我写了下面的代码:

A=DicH;
[M N]=size(A);
mu=mean(A,2);%mean of columns

Phi=zeros(M,N);
C=zeros(M,M);
for j=1:N
    Phi(:,j)=A(:,j)-mu;
    c=Phi(:,j)*(Phi(:,j))';
    C=C+c;
end

C=C/N;%Covariance Dictionary
[V,landa] = eigs(C,128);%Eigen Vectors & Eigen Values
E=V'*Phi;%Reduced Dic
%*******************Using Pcacov*****************
%S=zeros(M,1);
%[U,landa] = pcacov(C);%Eigen Vectors & Eigen Values
% for k=1:128;
%     S=V(:,k)+S;
%     U(:,k)=S;
% end
%E=U'*Phi;%Reduced Dic

我得到两个不同的答案!我应该使用哪一个" eigs"或" pcacov" ??

1 个答案:

答案 0 :(得分:1)

如果要将pca与{{1 }}。

现在回答你的问题,两者都返回相同的特征向量,但不是以相同的顺序。请参阅以下示例:

cov

在您的代码中,您使用eigs结果的转换覆盖已注释掉部分中pcaconv的结果,因此目前尚不清楚您在比较的内容。使用>> load hald >> covx = cov(ingredients); >> [COEFF,latent] = pcacov(covx) COEFF = -0.0678 -0.6460 0.5673 0.5062 -0.6785 -0.0200 -0.5440 0.4933 0.0290 0.7553 0.4036 0.5156 0.7309 -0.1085 -0.4684 0.4844 latent = 517.7969 67.4964 12.4054 0.2372 >> [V, D] = eigs(covx) V = 0.5062 0.5673 0.6460 -0.0678 0.4933 -0.5440 0.0200 -0.6785 0.5156 0.4036 -0.7553 0.0290 0.4844 -0.4684 0.1085 0.7309 D = 0.2372 0 0 0 0 12.4054 0 0 0 0 67.4964 0 0 0 0 517.7969 >> 时,您只需要提取pcavconv的第128列。