2017-10-18 159 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是具有4個樣品3個的特徵的矩陣。結果是

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

現在我手動獲得協方差矩陣。我的嘗試是通過使用在下面的書面協方差矩陣的定義:

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

平均矩陣是[2 4 4]所以我也X-u對於每個樣品(beforecov在代碼)。然後,我爲每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);