3

トレーニング セットのサイズを 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

私は2つの異なる答えを得ます!「eigs」と「pcacov」のどちらを使用すればよいですか??

4

1 に答える 1

1

Matlab の組み込み関数を利用し、pca関数を直接使用するか、または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コードでは、コメントアウトされたセクションの結果を の結果の変換で上書きするためeigs、この時点で何を比較しているのかが明確ではありません。を使用する場合pcacovは、 の最初の 128 列を抽出するだけですU

于 2015-05-17T21:05:35.750 に答える