2017-10-18 103 views
0

私は現在、固有行列を使ってPCAを研究しています。 PCAを行うためには、共分散行列を求めることは不可欠ですが、私が手で共分散行列を求め、Matlabの結果と比較するたびに、それらは完全に異なります。共分散行列の基本概念とMatlabでの使用方法

以下は、共分散行列を取得する簡単なコードです。

x=[-4 9 5;3 3 5;1 3 -1;8 1 7]; 
c=cov(x); 
M=[2 4 4]; 
beforecov=x-repmat(M,4,1); 
summat=zeros(3,3,4); 
for i=1:4 
    summat(:,:,i)= beforecov(i,:)'*beforecov(i,:); 
end 
cov_onmyown=(summat(:,:,1)+summat(:,:,2)+summat(:,:,3)+summat(:,:,4))/4; 

xは、3つの特徴を有する4つのサンプルを有するマトリックスである。結果は

c=[24.667 -16 6; 
    -16  12 0; 
    6  0 12] 

です。これで、手動で共分散行列を取得しました。私は何をしようとしたが、以下に書かれている共分散行列の定義を使用することである:

COV[X]=E[(X-u)(X-u)'] 

平均行列は私は各サンプル(コードでbeforecov)用X-u[2 4 4]あります。次に、4つのサンプルごとに3x3のマトリックスを作成し、4(サンプル数)で割った。

しかし、コード内のccov_onmyownの結果はまったく異なります。

cov_onmyown=[18.5, -12, 4.5; 
      -12,  9, 0; 
      4.5,  0, 9] 

私の考えに間違っていますか?

答えて

0

ヘルプテキストから:

cov(X) or cov(X,Y) normalizes by (N-1) if N>1 

だから、COVの使用と同じ結果を得るために

cov_onmyown=(summat(:,:,1)+summat(:,:,2)+summat(:,:,3)+summat(:,:,4))/(4 - 1); 
関連する問題