协方差&协方差矩阵【matlab实例】

来源:互联网 发布:软件维护招标评分标准 编辑:程序博客网 时间:2024/04/19 10:55

协方差矩阵

协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计算n!(n2)!2个协方差,那自然而然我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义:

Cnn=(ci,j,ci,j=cov(Dimi,Dimj))

这个定义还是很容易理解的,我们可以举一个三维的例子,假设数据集有三个维度,则协方差矩阵为:


这里写图片描述

必须要明确一点,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。以下的演示将使用Matlab,为了说明计算原理,不直接调用Matlab的cov函数:

首先,随机生成一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。

>> mySample=fix(rand(10,3)*50)mySample =    40     7    32    45    48     1     6    47    42    45    24    46    31    40    33     4     7    37    13    21    37    27    45    19    47    39    32    48    47     8

根据公式,计算协方差需要计算均值,前面特别强调了,协方差矩阵是计算不同维度之间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列是一个维度,因此我们要按列计算均值。为了描述方便,我们先将三个维度的数据分别赋值:

>> dim1=mySample(:,1)dim1 =    40    45     6    45    31     4    13    27    47    48>> dim2=mySample(:,2)dim2 =     7    48    47    24    40     7    21    45    39    47>> dim3=mySample(:,3)dim3 =    32     1    42    46    33    37    37    19    32     8

计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:

>> cov12=sum((dim1-mean(dim1)).*(dim2-mean(dim2)))/(size(mySample,1)-1)cov12 =    78>> cov13=sum((dim1-mean(dim1)).*(dim3-mean(dim3)))/(size(mySample,1)-1)cov13 = -120.2444>> cov13=sum((dim1-mean(dim1)).*(dim3-mean(dim3)))/(size(mySample,1)-1)cov13 = -120.2444>> cov13=sum((dim1-mean(dim1)).*(dim3-mean(dim3)))/(size(mySample,1)-1)cov13 = -120.2444>> cov23=sum((dim2-mean(dim2)).*(dim3-mean(dim3)))/(size(mySample,1)-1)cov23 = -126.9444

协方差矩阵的对角线上的元素就是各个维度的方差,下面我们依次计算这些方差:

>> var1=std(dim1)^2var1 =  301.1556>> var2=std(dim2)^2var2 =  268.9444>> var3=std(dim3)^2var3 =  216.0111

这样,我们就得到了计算协方差矩阵所需要的所有数据,可以调用Matlab的cov函数直接得到协方差矩阵:

>> cov(mySample)ans =  301.1556   78.0000 -120.2444   78.0000  268.9444 -126.9444 -120.2444 -126.9444  216.0111

计算的结果,和之前的数据填入矩阵后的结果完全相同。

0 0
原创粉丝点击