在 MATLAB、pcacov 或 eigs 中使用 PCA 进行降维应该使用哪一个?
Which one should I use for dimension reduction with PCA in MATLAB, pcacov or eigs?
我正在尝试将我的训练集维度从 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" 哪一个?
你应该利用 Matlab 中的内置函数,直接使用 pca
函数,如果你想比较 eigs
甚至 cov
函数 pcaconv
。
现在回答你的问题,两个 return 相同的特征向量但顺序不同。请参阅以下示例:
>> 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
>>
在您的代码中,您使用 eigs
结果的转换覆盖注释掉部分中 pcavconv
的结果,因此目前尚不清楚您在比较什么。使用pcacov
时,只需要提取U
的前128列即可。
我正在尝试将我的训练集维度从 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" 哪一个?
你应该利用 Matlab 中的内置函数,直接使用 pca
函数,如果你想比较 eigs
甚至 cov
函数 pcaconv
。
现在回答你的问题,两个 return 相同的特征向量但顺序不同。请参阅以下示例:
>> 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
>>
在您的代码中,您使用 eigs
结果的转换覆盖注释掉部分中 pcavconv
的结果,因此目前尚不清楚您在比较什么。使用pcacov
时,只需要提取U
的前128列即可。