机器视觉中,常用到协方差相关的知识,特别是基于统计框架下的机器学习算法,几乎无处不在的用到它,因此了解协方差是再基础不过的了。这里推荐一个很不错的基础教程:协方差的意义和计算公式
-
均值和方差
引入协方差之前,先简单回顾下概率统计中的两个重要基础概念:均值和方差。均值,顾名思义就是一堆样本的平均值,方差就是样本和均值的平均偏差。对于给定的n个样本,那么样本集的均值和方差可以分别这样来定义:
名称 | 公式 | 解释 |
均值 | X¯=∑ni=1XinX¯=∑i=1nXin | 样本的平均值,即样本的中心点,例如{1 2,3,4}的均值是2.5 |
标准差 | S=∑ni=1(Xi−X¯)2n−1−−−−−−−−−√S=∑i=1n(Xi−X¯)2n−1 | 样本点到中心点的平均距离,所以这里做了平方再开方。注意这里采用了除以n-1,目的是为了用更少的样本就可以趋近于总体的标准差。例如{1 2,3,4}的标准差 |
方差 | S2=∑ni=1(Xi−X¯)2n−1S2=∑i=1n(Xi−X¯)2n−1 | 样本点到中心点的平均距离的平方,用平方是为了方便计算,因为是一一对应的正相关关系,所以意义和标准差一样,免去了开放带来的复杂计算。 |
均值(中心点)和方差的图示如下所示:
-
协方差和相关系数
方差描述的是一维数据上的统计量。而在实际中,还会考察两个统计量之间的相关性,例如人的身高和两手撑开的长度是否由相关性?男人越坏是不是女人就越爱?那这个时候就可以用协方差来刻画了。
以男人越坏女人越爱为例,假设采访了二十对情侣,得到下面的数据:
男人坏的程度 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
女人爱的程度 | 2.58 | 3.39 | 3.75 | 4.80 | 4.93 | 5.91 | 5.68 | 6.26 | 6.64 | 7.13 | 8.36 | 8.57 | 9.04 | 9.14 | 10.35 | 10.62 | 10.85 | 11.51 | 11.90 | 12.07 |
我们画个二维点图,很容易发现,他们是线性相关的,如下图所示:
直观上,如果男人坏的程度和女人爱的程度如果是成正比例的话,就是说如果男人越坏女人越爱男人,那么我们就认为他们是正相关的,如果是反比例的话,就是说男人越坏女人越不爱男人,那么我们就认为他们是负相关的。如果女人爱不爱男人和男人坏不坏没有任何毛关系的话,那么我们就是他们两个变量是毫无关系的,我们也认为他们是独立的,因为互不搭杠嘛。那怎么来描述正相关呢?我们可以这么想,如果两个变量偏离中心点的变化量越一致,那么我们就可以认为他们越正相关的;同样地如果两个变量偏离中心点的变化量刚好相反,那么就是负相关了。根据这个思想我们可以仿照方差来定义协方差:
名称 | 公式 | 解释 |
方差 | var(X)=∑ni=1(Xi−X¯)2n−1var(X)=∑i=1n(Xi−X¯)2n−1 | 样本点到中心点的平均距离的平方,用平方是为了方便计算,因为是一一对应的正相关关系,所以意义和标准差一样,免去了开放带来的复杂计算。 |
协方差 | cov(X,Y)=∑ni=1(Xi−X¯)(Yi−Y¯)n−1cov(X,Y)=∑i=1n(Xi−X¯)(Yi−Y¯)n−1 | 两个样本的相关性刻画 |
从定义不难发现,当两个变量正相关性很强的时候,那么其协方差就越大,当两个变量负相关越强,那么其协方差是负数且很小;当两个变量关系不大的时候,那么他们协方差趋于0,越接近独立。根据上面表格的数据,我们计算相应的协方差,其结果为:33.2500,为正,说明是正相关的。需要注意的是,协方差的定义是没有将数据进行归一化的,即两个变量的数据如果尺度不一样,就会导致其中的变量影响大于另外一个变量,例如一个变量的取值范围为0.1-1,另一个变量取值范围为100-1000,这样后者在计算中起到决定作用,而前者影响则微乎其微,导致协方差不能反应相关性的强弱程度。下面的这段代码解释了这种情况:
value = []; for w = 0:5:50 x = 1:50; y = roundn(0.1*x+2+w*rand(1,size(x,2)),-2); plot(x,y,'bo'); value = [value sum((x(1,:)-mean(x(1,:))).*(y(1,:)-mean(y(1,:))))/(size(x,2))]; value = roundn(value,-2); end
结果为:
随着噪声的增加,协方差并不能刻画相关性的强弱。其实是因为数据没有归一化而导致的结果,这就引入了相关系数的定义,如下:
coef(X,Y)=∑ni=1(Xi−X¯)(Yi−Y¯)n−1∑ni=1(Xi−X¯)2n−1√∑ni=1(Yi−Y¯)2n−1√coef(X,Y)=∑i=1n(Xi−X¯)(Yi−Y¯)n−1∑i=1n(Xi−X¯)2n−1∑i=1n(Yi−Y¯)2n−1
coef(X,Y)=∑ni=1(Xi−X¯)(Yi−Y¯)∑ni=1(Xi−X¯)2√∑ni=1(Yi−Y¯)2√coef(X,Y)=∑i=1n(Xi−X¯)(Yi−Y¯)∑i=1n(Xi−X¯)2∑i=1n(Yi−Y¯)2
再来看下上面的例子用相关系数得到的结果
代码如下:
value = []; coef = []; for w = 0:5:50 x = 1:50; y = x+w*rand(1,size(x,2)); plot(x,y,'bo'); coef = [coef sum((x(1,:)-mean(x(1,:))).*(y(1,:)-mean(y(1,:))))/(std(x)*std(y)*(size(x,2)))]; coef = roundn(coef,-2); end
结果为:
由此可见随着噪声的增加,相关性会降低,而相关系数的值也会趋于0.相关性越强,则相关系数的值会越大。
从定义可知,协方差和相关系数具有交换性,即
cov(X,Y)=cov(Y,X)cov(X,Y)=cov(Y,X)
coef(X,Y)=coef(Y,X)coef(X,Y)=coef(Y,X)
当两个变量相同时,协方差等于方差,即
cov(X,Y)=s2,ifX=Ycov(X,Y)=s2,ifX=Y
实际上,如果数据归一化后,得到的协方差,是具有相关系数相同的性质,也可以用来刻画相关性的强弱。
3、协方差矩阵
当一个样本含有很多变量的时候,如何刻画两两样本之间的相关性呢?需要使用协方差矩阵来表示,就是用一个矩阵把两两变量之间的协方差存储起来而已,由于协方差具有交换性,只需
要计算上三角或下三角的协方差即可,计算量为n!(n−2)!∗2n!(n−2)!∗2 ,协方差矩阵定义如下:
C=⎡⎣⎢⎢c11⋮cn1⋯⋱⋯c1n⋮cnn⎤⎦⎥⎥C=[c11⋯c1n⋮⋱⋮cn1⋯cnn]
其中ci,j=cov(Xi,Yj)ci,j=cov(Xi,Yj)。显而易见地协方差矩阵是一个对角矩阵 ,因此是一个正定矩阵,通常也可逆;对角线上的元素是各个维度上方差。
因此:协方差矩阵是维度之间的协方差构成的矩阵,而不是样本个数构成的,因此拿到样本时,需要搞清楚维度是行还是列。
关于协方差矩阵的示例和意义,请参考资料:协方差矩阵的实例与意义
4、参考文献