协方差矩阵的基本概念及其在Matlab中的应用

时间:2017-10-18 11:09:55

标签: matlab covariance

我现在正在使用特征矩阵研究PCA。对于做PCA,获得协方差矩阵是必不可少的,但每次我用手获得协方差矩阵并与我的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代码中的c。然后我为每4个样本制作一个3x3矩阵并除以4(样本数)。

但代码中的结果cov_onmyowncov_onmyown=[18.5, -12, 4.5; -12, 9, 0; 4.5, 0, 9] 完全不同。

id

有谁能告诉我我的想法有什么问题?

1 个答案:

答案 0 :(得分: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);