zoukankan      html  css  js  c++  java
  • 期望,方差,均值以及均方差

      

      一组数求期望(均值),不是对每个数求均值,而是第一轮是将元素以及重复次数整理出来,
      二轮才是将求元素的均值:

    1 import numpy as np
    2 
    3 arr = np.array([1, 3, 1, 4])
    4 arr = arr.reshape(2, 2)
    5 print(arr)
    6 print(arr.mean())
    7 
    8 mean = 1*(2/4) + 3*(1/4) + 4*(1/4)
    9 print(mean)

      如上,可以看到mean的值和arr.mean是一致的。重复的元素其实只是会计算一次。概率中的讲的元素也是特征元素(重复的元素只算一个特征元素);这是按照概率定义那种方式来计算(元素*概率再求和),需要首先计算出来概率;这里关键要区别“事件”和样本;对于arr而言,它里面的元素就是样本;而概率定义中公式则是事件,即不重复的元素(1,3,4)。
      另外一种算法就是直接求和取平均值:
      

     1 import numpy as np
     2 arr = np.array([1,2,3,4])
     3 sum = 0
     4 for i in arr:
     5 sum += i
     6 mean_manual = sum / len(arr)
     7 print("manual mean: ", mean_manual)
     8 print("numpy mean: ", arr.mean())
     9 
    10 arr2 = arr.reshape(-1, 2)
    11 print("axis=1:",arr2.mean(axis=1))
    12 print("axis=0:", arr2.mean(axis=0))

    >>> output:
    manual mean: 2.5
    numpy mean: 2.5
    axis=1: [1.5 3.5]
    axis=0: [2. 3.]

    另外关于axis=0和axis=1见下面的解释。

    那么期望和均值是不是一回事呢?在有限已知的数据集内部,期望和均值在算法是一致的,但是含义不同,均值/平均值是有限集合数据(某个子集)计算值,期望真实含义是全集上面的,能够代表集合数据的值。

    方差描述的是数据的分散程度;下面是numpy计算方差以及手工计算方差:

     1 import numpy as np
     2 
     3 arr = np.array([1, 2, 3])
     4 print("mean:", arr.mean())
     5 print("arr.var: ", arr.var())
     6 
     7 sum = 0
     8 for i in arr:
     9 sum = sum + i ** 2
    10 var = (sum/len(arr) - arr.mean()) ** 2
    11 print("manual var: ", var)

    >>> output:
    mean: 2.0
    arr.var: 0.6666666666666666
    manual var: 0.666666666666667

      无论是计算方差还是计算期望,均值,对于多维数组是有三种模式:全数据计算,样本为单位计算(横向切割axis=1),特征为单位计算(纵向切割axis=0)。

      然后我们再来看一下方差的一个性质:
    D(X+Y)=D(X) + D(Y) ;
      它的证明过程相对简单:
    D(X+Y) = E{[(X+Y) - E(X+Y)]**2} =>E{[(X - E(X)) + (Y - E(Y))]**2} =>
    E(X - E(X)) **2 + E(Y - E(Y)**2 + 2E{(X-E(X))(Y-E(Y))};
      推倒到这里没有问题,但是下面写到:
    2E{(X-E(X))(Y-E(Y))}根据期望的性质4 => 2E[X-E(X)]E[Y-E(Y)]=0
      首先期望性质4是个什么鬼?X,Y相互独立的情况下=>E(XY) = E(X)E(Y);其次为什么是0?百思不得其解啊,后来想明白了:因为X - E(X)的期望/均值就是0!
      刚理解到这里的时候我还有一点困惑:那么方差公式原始不就是E{|X - E(X)|}吗?岂不是总是0,但是注意,方差原始公式可以有一个绝对值运算的哦,方差公式是E{[X - E(X)]**2}也是有一个平方的运算,所以,要明白,E(X - E(X))就是0,你想E(X)本身即是X的均值,X减去自己的均值的期望,一定是0。
      最后说一下协方差,协方差公式:
    Cov(X, Y) = E{[X - E(X)][Y - E(Y)]}
      如果X,Y相互独立,那么Cov(X, Y)的值是0;和协方差有紧密关系的是相关系数,公式:
    p = Cov(X, Y)/sqrt(D(X))sqrt(D(Y))
      那么追问一句:什么是独立?看看概率里面的定义,P(B|A) = P(B),就是A发生的对于B的发生没有影响的情况下,才叫独立。
      p(耶律喜龙)叫做相关性,相关性越大,则说明X,和Y的线性关系越紧密,举个例子用f(x) = 5X + 9来表示Y,那么p值越大说明f(x)可以越好的表达Y;反之亦然。p = 1说明完全可以表示,如果p = 0则说明f(x)完全不能表达Y;
      所以我们可以做如下推测:独立 => 不相关。因为独立Cov(X, Y) == 0,p的分子为0;所以独立必然不相关;但是不相关却不一定独立,因为仅仅是X和Y没有线性关系,并不能影响X和Y在概率上面的关系;从数学关系上面:独立=>Cov(X, Y) == 0,但是Cov(X, Y) == 0却推不出独立。
      协方差的意义通常没有相关系数大,协方差为正数,说明变化方向一致,负数则说明变化方向不一致。
      协方差在python中实现:

    1 X = np.array([1,2,3,4,5])
    2 Y = 5*X + 1
    3 print("cov:", np.cov(X, Y))
    4 print("corrcoef:", np.corrcoef(X, Y))

    >>> output:
    cov: [[ 2.5 12.5] [12.5 62.5]]
    corrcoef: [[1. 1.][1. 1.]]
      "cov:"这一行,返回的是一个协方差矩阵(其实还是对角矩阵),分别代表
      [cov(X, X),cov(X,Y)]
      [cov(Y, X), cov(Y, Y)]
      所以反对角的值是一致的(12.5);
      corrcoef则是求相关性;因为f(x)可以完全表示X,所以相关性的值是1;可以看到,这里返回的也是一个相关性矩阵,四角分别代表如下的相关性:
      [p(X, X),p(X, Y)]
      [p(Y, X), p(Y, Y)]

      再比如下面的例子:

     1 arr = []
     2 arr.append([1, 1, 63])
     3 arr.append([1, 2, 75])
     4 arr.append([1, 3, 78])
     5 
     6 arr.append([2, 1, 50])
     7 arr.append([2, 2, 56])
     8 arr.append([2, 3, 65])
     9 arr.append([3, 1, 70])
    10 arr.append([3, 2, 71])
    11 arr.append([3, 3, 80])
    12 
    13 np.cov(arr, rowvar=0)

    >>> output
    array([[ 0.75 , 0. , 0.625 ],
    [ 0. , 0.75 , 5. ],
    [ 0.625 , 5. , 100.77777778]])

    九组数据,在计算方差的时候,只要指定了rowvar值是0,则代表按照特征来进行计算协方差,于是就有了3 * 3列结果:


    参考:
    https://blog.csdn.net/baimafujinji/article/details/50372906

  • 相关阅读:
    HTTP状态码
    python 连接 MySQL 数据库
    JS事件基础和绑定
    7月13号:2D的转换和过渡,动画效果设置
    JS事件流
    7月14日:JS的基础语法
    JS对表单的操作
    7月16日:DOM总结
    DOM样式表
    7月9号
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/9943666.html
Copyright © 2011-2022 走看看