意义和公式的协方差
概率统计研究孩子知道,在最重要的概念的统计是样品平均值,方差,或带有标准偏差一起。首先,我们会给您一个含n采集样本,叙述,这些高中学过数学的孩子都应该知道吧,一带而过。
均值:
标准差:
方差:
非常显然,均值描写叙述的是样本集合的中间点,它告诉我们的信息是非常有限的。
而标准差给我们描写叙述的则是样本集合的各个样本点到均值的距离之平均。以这两个集合为例。[0,8,12,20]和[8,9,11,12],两个集合的均值都是10,但显然两个集合区别是非常大的,计算两者的标准差,前者是8.3,后者是1.8。显然后者较为集中,故其标准差小一些,标准差描写叙述的就是这样的“散布度”。
之所以除以n-1而不是除以n,是由于这样能使我们以较小的样本集更好的逼近整体的标准差。即统计上所谓的“无偏预计”。
而方差则不过标准差的平方。
为什么须要协方差?
上面几个统计量看似已经描写叙述的差点儿相同了。但我们应该注意到,标准差和方差通常是用来描写叙述一维数据的,但现实生活我们经常遇到含有多维数据的数据集,最简单的大家上学时免不了要统计多个学科的考试成绩。面对这种数据集,我们当然能够依照每一维独立的计算其方差,可是通常我们还想了解很多其它,比方,一个男孩子的猥琐程度跟他受女孩子欢迎程度是否存在一些联系啊,嘿嘿~协方差就是这样一种用来度量两个随机变量关系的统计量。我们能够仿照方差的定义:
来度量各个维度偏离其均值的程度,标准差能够这么来定义:
协方差的结果有什么意义呢?假设结果为正值,则说明两者是正相关的(从协方差能够引出“相关系数”的定义),也就是说一个人越猥琐就越受女孩子欢迎,嘿嘿。那必须的~结果为负值就说明负相关的,越猥琐女孩子越讨厌,可能吗?假设为0。也是就是统计上说的“相互独立”。
从协方差的定义上我们也能够看出一些显而易见的性质,如:
协方差多了就是协方差矩阵
上一节提到的猥琐和受欢迎的问题是典型二维问题,而协方差也仅仅能处理二维问题,那维数多了自然就须要计算多个协方差,比方n维的数据集就须要计算
个协方差。那自然而然的我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义:
这个定义还是非常easy理解的,我们能够举一个简单的三维的样例,如果数据集有三个维度,则协方差矩阵为
可见,协方差矩阵是一个对称的矩阵,并且对角线是各个维度上的方差。
Matlab协方差实战 上面涉及的内容都比較easy,协方差矩阵似乎也非常简单。但实战起来就非常easy让人迷茫了。必需要明白一点,协方差矩阵计算的是不同维度之间的协方差。而不是不相同本之间的。这个我将结合以下的样例说明,以下的演示将使用Matlab,为了说明计算原理,不直接调用Matlab的cov函数(蓝色部分为Matlab代码)。 首先,随机产生一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。
依据公式,计算协方差须要计算均值,那是按行计算均值还是按列呢,我一開始就老是困扰这个问题。前面我们也特别强调了。协方差矩阵是计算不同维度间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列为一个维度,所以我们要按列计算均值。为了描写叙述方便。我们先将三个维度的数据分别赋值: |
|||||
23 |
dim1 = MySample(:,1);dim2 = MySample(:,2);dim3 = MySample(:,3); |
计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:
123 |
sum( (dim1-mean(dim1)) .* (dim2-mean(dim2)) ) / ( size(MySample,1)-1 ) % 得到 74.5333sum( (dim1-mean(dim1)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得到 -10.0889sum( (dim2-mean(dim2)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得到 -106.4000 |
搞清楚了这个后面就easy多了。协方差矩阵的对角线就是各个维度上的方差,以下我们依次计算:
123 |
std(dim1)^2 % 得到 108.3222std(dim2)^2 % 得到 260.6222std(dim3)^2 % 得到 94.1778 |
这样,我们就得到了计算协方差矩阵所须要的全部数据,调用Matlab自带的cov函数进行验证:
1 |
cov(MySample) |
把我们计算的数据对号入座,是不是一摸一样?
Update:今天突然发现,原来协方差矩阵还能够这样计算,先让样本矩阵中心化。即每一维度减去该维度的均值,使每一维度上的均值为0,然后直接用新的到的样本矩阵乘上它的转置。然后除以(N-1)就可以。事实上这样的方法也是由前面的公式通道而来,仅仅只是理解起来不是非常直观,但在抽象的公式推导时还是非经常常使用的!
相同给出Matlab代码实现:
12 |
X = MySample - repmat(mean(MySample),10,1); % 中心化样本矩阵,使各维度均值为0C = (X'*X)./(size(X,1)-1); |
总结
理解协方差矩阵的关键就在于牢记它计算的是不同维度之间的协方差,而不是不相同本之间,拿到一个样本矩阵。我们最先要明白的就是一行是一个样本还是一个维度。心中明白这个整个计算过程就会顺流而下。这么一来就不会迷茫了~