zoukankan      html  css  js  c++  java
  • python cov()

    在PCA中涉及到了方差var和协方差cov,下面详细了解这两个函数的用法。numpy中var和cov函数求法和MATLAB中var和cov函数求法类似。

    首先均值,样本方差,样本协方差公式分别为

                                           

    其中样本方差公式中为什么除的n-1而不是n,样本协方差同样除的是n-1而不是n,请看此处:http://blog.csdn.net/maoersong/article/details/21819957,如果除的是n,那么求的方差就不是随机抽取变量组成样本的方差,而是整个空间的方差。

    下面就介绍MATLAB中var和cov函数的用法

    以下内容转载出处:http://blog.sina.com.cn/s/blog_9e67285801010twv.html

    函数名称:cov

    函数功能: 求协方差矩阵

    函数用法: cov(X)      % cov(X,0) = cov(X)

               cov(X,Y)    % X,Y必须是各维数都相同的矩阵
               cov(X,1)    % 除以N而不是N-1                   
               cov(X,Y,1)  % 除以N而不是N-1 
    详细描述:
    ......................................................................
    if X is a vector向量,cov(X)输出的是这个向量的方差

    例:

    >> A = [4 1 3];
    >> AA = cov(A)

    AA =

        2.3333

    >> a = mean(A)

    a =

        2.6667

    >> AAA = 1/3*((4-a)^2+(1-a)^2+(3-a)^2)

    AAA =

        1.5556

    >> AAAA= 1/2*((4-a)^2+(1-a)^2+(3-a)^2)            %同样,这个方差不是真正意义的方差,而是对样本统计方差的一个无偏估计值

    AAAA =

        2.3333

    ..............................................................................

       对于矩阵来说,matlab把每行看做一个观察值,把每列当做一个变量,也就是说对于一个4*3的矩阵求协方差矩阵,matlab会认为存在三个变量,即会求出一个3*3的协方差矩阵。
        其中,对角线元素为对应变量的方差无偏估计值,其他位置为对应变量间的 协方差无偏估计值(即除的是N-1)

    .......................................................................
    例1:
    >> X = [1 5 6; 4 3 9 ; 4 2 9; 4 7 2]

    X =

         1     5     6
         4     3     9
         4     2     9
         4     7     2

    >> Y = cov(X)

    Y =

        2.2500   -0.7500    0.5000
       -0.7500    4.9167   -7.1667
        0.5000   -7.1667   11.0000

    为探究过程,以Y(1,1)和Y(1,2)为例进行验证

    >> x=X(:,1);
    >> sum((x-3.25).^2)/3

    ans =

        2.2500

    >> y = X (:,2);

    >>  aa = x'*y/3  

    aa =

       -0.7500

    ......................................................

    对于cov(X,Y)

    X、Y必须是各维数都相等的矩阵,其功能是把X中所有元素看做一个变量的样本,Y中所有元素看做另外一个变量的样本,把矩阵中每个对应位置看做一个联合观察值

    函数实现的是求出两个变量的协方差矩阵

    例2:

    >> X

    X =

         1     5     6
         4     3     9
         4     2     9
         4     7     2
    >> Y = [1 6 7; 7 5 9 ; 1 6 4 ; 2 9 2]

    Y =

         1     6     7
         7     5     9
         1     6     4
         2     9     2
    >> cov(X,Y)

    ans =

        6.9697    4.4242
        4.4242    8.4470

    现在用(1,1)和(1,2)位置验证

    >> sum(sum((X-mean(mean(X))).^2))/11  %把X中每个元素都看做一个变量的样本,求其方差的无偏估计值

    ans =

        6.9697

    >>  sum(sum((X-mean(mean(X))).*(Y-mean(mean(Y)))))/11  %把X、Y矩阵对应位置元素看做一个联合样本,根据公式E[(X-EX)*(Y-EY)]求协方差

    ans =

        4.4242

    .....................................................................................

    cov(X,1)  和  cov(X,Y,1) 与之前的求解过程一致,不同的是,其求出的是协方差,而不是样本的协方差无偏估计值,即其除以的是N 而不是N-1

    例3:

    >> cov(X,1)

    ans =

        1.6875   -0.5625    0.3750
       -0.5625    3.6875   -5.3750
        0.3750   -5.3750    8.2500

    >> x=X(:,1);
    sum((x-3.25).^2)/4  %不同之处

    ans =

        1.6875

    >>  y = X (:,2);
    >> y = y - 4.25;
    >> aa = x'*y/4  %不同之处

    aa =

       -0.5625

    例4:


    X =

         1     5     6
         4     3     9
         4     2     9
         4     7     2
    >> Y = [1 6 7; 7 5 9 ; 1 6 4 ; 2 9 2]

    Y =

         1     6     7
         7     5     9
         1     6     4
         2     9     2

    >> cov(X,Y)

    ans =

        6.9697    4.4242
        4.4242    8.4470

    >> a =cov(X,Y,1)

    a =

        6.3889    4.0556
        4.0556    7.7431

    >> a.*12/11              %看出来了吧

    ans =

        6.9697    4.4242
        4.4242    8.4470

             协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。理解协方差矩阵的关键就在于牢记它计算的是不同维度之间的协方差,而不是不同样本之间,拿到一个样本矩阵,我们最先要明确的就是一行是一个样本还是一个维度,心中明确这个整个计算过程就会顺流而下,这么一来就不会迷茫了~
  • 相关阅读:
    VBS与JS变量共享与互操作
    VBA之MSForms.DataObject对象
    VBA编程的工程性规划
    WSF脚本详解:JS和VBS互调用
    HTA程序:VBS/JS脚本GUI
    Python字符串格式化
    Python __builtins__模块拾穗
    Java高级特性 第6节 注解初识
    Java高级特性 第5节 序列化和、反射机制
    Java高级特性 第4节 输入输出流
  • 原文地址:https://www.cnblogs.com/smuxiaolei/p/7385252.html
Copyright © 2011-2022 走看看