2017-10-18 158 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);