美文网首页
协方差的意义

协方差的意义

作者: 不爱吃饭的小孩怎么办 | 来源:发表于2019-07-31 09:20 被阅读0次

    什么是协方差,为什么有些地方会用到协方差。

    核心意义:度量各个维度偏离其均值的程度。协方差的值如果为正值,则说明两者是正相关的(从协方差可以引出“相关系数”的定义),结果为负值就说明负相关的,如果为0,也是就是统计上说的“相互独立”。

    正相关和负相关的直观理解:


    正相关

    特点:当 X, Y 的联合分布像上图那样时,我们可以看出,大致上有: X 越大 Y 也越大, X 越小 Y 也越小,这种情况,我们称为“正相关”。

    负相关.png

    特点:当X, Y 的联合分布像上图那样时,我们可以看出,大致上有:X 越大Y 反而越小,X 越小 Y 反而越大,这种情况,我们称为“负相关”。

    不相关

    特点:当X, Y 的联合分布像上图那样时,我们可以看出:既不是X 越大Y 也越大,也不是 X 越大 Y 反而越小,这种情况我们称为“不相关”。

    怎样将这3种相关情况,用一个简单的数字表达出来呢?
    在图中的区域(1)中,有 X>EX ,Y-EY>0 ,所以(X-EX)(Y-EY)>0;
    在图中的区域(2)中,有 X<EX ,Y-EY>0 ,所以(X-EX)(Y-EY)<0;
    在图中的区域(3)中,有 X<EX ,Y-EY<0 ,所以(X-EX)(Y-EY)>0;
    在图中的区域(4)中,有 X>EX ,Y-EY<0 ,所以(X-EX)(Y-EY)<0。

    重点解释:所谓正相关。只是说某种分布主要覆盖区域(1)与区域(3),例如99.7%数据是这种特性,极少数据覆盖区域(2)与区域(4)
    同理,所谓负相关,应该是某种分布主要覆盖(2)、(4),极小部分覆盖(1)、(3)。
    所谓不相关,等于(1)(2)(3)(4)分布都差不多。

    数值绝对值大小,应该表示这种相关性的强烈程度。

    从公式上看:

    方差

    上图是方差的公式,用以度量各个维度偏离其均值的程度。

    协方差

    协方差公式由方差的公式推广而来,用于描述维度之间的线性相关性。

    从协方差的定义上我们也可以看出一些显而易见的性质,如:


    image
    image

    具体如何计算?
    例如有如下数据:


    image.png

    每一列表示一个维度,每一行表示一个样本。
    如何计算协方差?当然,我们有api,如果不使用api,是否能自己写?我们按照公式,写了如下测试程序:

    def means(listx):
        sumx = 0
        num = 0
        for val in listx:
            sumx += val
            num += 1
        return float(sumx)/float(num)
    
    def cov(x,y,x_mean,y_mean):
        N = len(x)
        sumt = 0.0
        for i in range(N):
            sumt += (float(x[i]) - x_mean)*(float(y[i]) - y_mean)
        return sumt/(N - 1)
    
    
    x = [10,15,23,11,42,9,11,8,11,21]
    y = [15,46,21,9,45,48,21,5,12,20]
    z = [29,13,30,35,11,5,14,15,21,25]
    
    N = len(x)
    
    x_mean = means(x)
    y_mean = means(y)
    z_mean = means(z)
    
    print('维度之间的协方差')
    print('cov(x,y) = ', cov(x,y,x_mean,y_mean))
    print('cov(x,z) = ', cov(x,z,x_mean,z_mean))
    print('cov(y,z) = ', cov(y,z,y_mean,z_mean))
    #维度之间的协方差
    #cov(x,y) =  74.53333333333335
    #cov(x,z) =  -10.088888888888889
    #cov(y,z) =  -106.4
    
    print('cov(x,x) = ', cov(x,x,x_mean,x_mean))
    print('cov(y,y) = ', cov(y,y,y_mean,y_mean))
    print('cov(z,z) = ', cov(z,z,z_mean,z_mean))
    #cov(x,x) =  108.32222222222221
    #cov(y,y) =  260.6222222222222
    #cov(z,z) =  94.17777777777778
    

    计算出维度之间的协方差,我们就可以组织协方差矩阵。协方差矩阵可以快速定位维度之间的协方差。

    上述解释详见下面文章:
    终于明白协方差的意义了

    相关文章

      网友评论

          本文标题:协方差的意义

          本文链接:https://www.haomeiwen.com/subject/bpnarctx.html