我现在正在使用特征矩阵研究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;
CCD_ 1是具有3个特征的4个样本的矩阵。结果是
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(样本数)。
但代码中的结果CCD_ 5和CCD_。
cov_onmyown=[18.5, -12, 4.5;
-12, 9, 0;
4.5, 0, 9]
有人能告诉我我的想法出了什么问题吗?
来自帮助文本:
cov(X) or cov(X,Y) normalizes by (N-1) if N>1
因此,要获得与冠状病毒相同的结果,请使用
cov_onmyown=(summat(:,:,1)+summat(:,:,2)+summat(:,:,3)+summat(:,:,4))/(4 - 1);