美文网首页数学
协方差矩阵的理解

协方差矩阵的理解

作者: FlowerFace | 来源:发表于2018-12-13 06:56 被阅读0次

    1. 写在前面

      为了便于理解和验证,可以参考一下,http://www.ab126.com/shuxue/2788.html所提供的协方差的在线计算器。

    2. 均值,方差

      统计里最基本的概念就是样本的均值,方差,或者再加个标准差。假定有一个含有n个样本的集合X={X1,…,Xn},依次给出这些概念的公式描述:

    均值\,\,\,\,\overline{X}=\sum_{i=1}^{n}{(X_i - \overline{X})^2}
      很显然,均值描述的是样本集合的中间点,它告诉我们的信息是很有限的。
    标准差\,\,\,\,s=\sqrt{\frac {\sum_{i=1}^{n}{(X_i - \overline{X})^2}} {n}}
      而标准差给我们描述的则是样本集合的各个样本点到均值的距离之平均。以这两个集合为例,[0,8,12,20]和[8,9,11,12],两个集合的均值都是10,但显然两个集合差别是很大的,计算两者的标准差,前者是8.3,后者是1.8,显然后者较为集中,故其标准差小一些,标准差描述的就是这种“散布度”。

    方差\,\,\,\,D(X)=\frac {\sum_{i=1}^{n}{(X_i - \overline{X})^2}}{n-1}
      看出方差与标准差关系没有?
      为什么除以n-1而不是除以n? 这个称为贝塞尔修正。在统计学中样本的均差多是除以自由度(n-1),它的意思是样本能自由选择的程度,当选到只剩一个时,它不可能再有自由了,所以自由度是(n-1)。这样能使我们以较小的样本集更好的逼近总体的标准差,即统计上所谓的“无偏估计”。

      下面采用Python演算一下:
      参考:https://blog.csdn.net/lyl771857509/article/details/79439184

    > import numpy as np
    > x=[1,2,3,4]
    > print(np.cov(x))</pre>
    

    显示结果: 1.6666666666666665

    计算步骤:
    求和: \sum=1+2+3+4=10
    平均值: \overline{X}=2.5

    求\sum_{i=1}^{n}{(X_i - \overline{X})^2}
    =(1-2.5)^2 + (2-2.5)^2 + (3-2.5)^2 + (4-2.5)^2
    =2.25 + 0.25 + 0.25 + 2.25
    =5

    方差:\frac {5}{4-1}=\frac {5}{3}=1.66667

    3. 协方差

      上面几个统计量看似已经描述的差不多了,但我们应该注意到,标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集,这个时候怎么办?
      协方差该出场了!
      协方差可以通俗的理解为:两个变量在变化过程中是同方向变化?还是反方向变化?同向或反向程度如何?

    • 你变大,同时我也变大,说明两个变量是同向变化的,这时协方差就是正的。
    • 你变大,同时我变小,说明两个变量是反向变化的,这时协方差就是负的。
        从数值来看,协方差的数值越大,两个变量同向程度也就越大。反之亦然。
      cov(X,Y)=\frac {\sum_{i=1}^{n}{(X_i - \overline{X})} {(Y_i - \overline{Y})} }{n-1}

    换种说法:
      协方差是度量各个维度偏离其均值的程度。协方差的值如果为正值,则说明两者是正相关的,结果为负值就说明负相关的,如果为0,也是就是统计上说的“相互独立”。
    与方差对比:
      方差是用来度量单个变量“自身变异”大小的总体参数,方差越大表明该变量的变异越大
      协方差是用来度量两个变量之间“协同变异”大小的总体参数,即二个变量相互影响大小的参数,协方差的绝对值越大,则二个变量相互影响越大。

      采用协方差在线计算器练习一下:
        输入值 X=1 ,5 ,6
        输入值 Y=4, 2, 9

    数目输入 3
    X 平均值 4
    Y 平均值 5
    协方差(X,Y) 4

    计算步骤:

    总和(X) =1 + 5 + 6 = 12
    X平均值 = 4
    总和(Y) =4 + 2 + 9 = 15
    Y平均值 = 5
    协方差(X,Y) = 总和(xi - x平均值)(yi - y平均值)/(采样大小 -1)
    = (1-4)
    (4-5)+(5-4)(2-5)+(6-4)(9-5))/2
    = 4

    4. 矩阵维数

      在分析协方差矩阵之前有必要搞清矩阵维数的概念!以女孩子找对象为例,一般关心几个点
    \begin{bmatrix} 脸 & 钱 & 车 & 房 & 家境\\ \end{bmatrix}
    这里是5个维数。如果同时有几个男孩子备选,则会形成多个行,有对比才有会伤害。

    \begin{bmatrix} 脸_{张三}&钱_{张三}&车_{张三}&房_{张三}&家境_{张三}\\ 脸_{李四}&钱_{李四}&车_{李四}&房_{李四}&家境_{李四}\\ 脸_{王二}&钱_{王二}&车_{王二}&房_{王二}&家境_{王二}\\ \end{bmatrix}
      可以这样形象理解:在女孩心中,多个男孩形成一个个行向量,即多个样本。
      另外,再回忆一下系数矩阵的来历。含有n个未知量,由m个方程组成线性方程组的一般形式为:
    \begin{equation} \begin{cases} a_{11}x_{1}+a_{12}x_{2}+\cdots +a_{1n}x_{n}=b_{1} \\ a_{21}x_{1}+a_{22}x_{2}+\cdots +a_{2n}x_{n}=b_{2} \\ \cdots \cdots \\ a_{m1}x_{1}+a_{m2}x_{2}+\cdots +a_{mn}x_{n}=b_{m} \\ \end{cases} \end{equation}
    将系数按它们的位置排列形成一个表格:
    \begin{bmatrix} a_{11} & \cdots & a_{1n}\\ \vdots & \ddots & \vdots\\ a_{m1} & \cdots & a_{mn} \end{bmatrix}
    这个表格就是方程组的系数矩阵,它的维数是由未知量个数即n来决定的。
      下面介绍的协方差矩阵仅与维数有关,和样本数量无关。

    5. 协方差矩阵

      
    X=(X_{1},X_{2},...,X_{n})^T为n维随机变量,称矩阵
    C=(C_{ij})_{n\times n}=X_{n\times n}^{}=\begin{bmatrix} c_{11} & \cdots & c_{1n}\\ \vdots & \ddots & \vdots\\ c_{n1} & \cdots & c_{nn} \end{bmatrix}
    为n维随机变量X的协方差矩阵(covariance matrix),也记为D(X),其中
    c_{ij}=Cov(X_{i},X_{j})\:\:\:\:i,j=1,2,...,n

      为了简易起见,先举一个简单的三变量的例子,假设数据集有{x,y,z}三个维度,

    X_{m\times 3}^{}=\begin{bmatrix} x_{1} &y_{1} & z_{1}\\ \vdots& \vdots & \vdots\\ x_{m} & y_{m} & z_{m} \end{bmatrix}

    则协方差矩阵为:

    C=\begin{bmatrix} cov(x,x) & cov(x,y) & cov(x,z)\\ cov(y,x) & cov(y,y) & cov(y,z)\\ cov(z,x) & cov(z,y) & cov(z,z) \end{bmatrix}
    更进一步:
    矩阵
    X_{m\times n}^{}=\begin{bmatrix} a_{11} & \cdots & a_{1n}\\ \vdots & \ddots & \vdots\\ a_{m1} & \cdots & a_{mn} \end{bmatrix}
    其协方差矩阵为
    D(X)=\begin{bmatrix} cov(c_{1},c_{1}) &\cdots& cov(c_{1},c_{n})\\ \vdots & \ddots & \vdots\\ cov(c_{n},c_{1}) & \cdots & cov(c_{n},c_{n}) \end{bmatrix}
    还是有点抽象???
    那就结合实例来理解,可能更方便一些。
    假定有下列矩阵:
    A=\begin{bmatrix} 1 & 4 & 4 &4\\ 5 & 3 & 2&7\\ 6 & 9 & 9&2\\ \end{bmatrix}=\begin{bmatrix} a_{1} a_{2} a_{3} a_{4} \end{bmatrix}

    我们来计算一下协方差矩阵。

    X=np.array([[1,4,4,4] ,[5,3,2,7 ],[6,9,9,2]])
    print(np.cov(X, rowvar=False))
    

    对于矩阵来说,matlab把每行看做一个观察值,把每列当做一个变量,也就是说对于一个4×3的矩阵求协方差矩阵,matlab会认为存在三个变量,即会求出一个3×3的协方差矩阵。

    而Python-NumPy的cov情况略有不同,它默认将每一行视为一个独立的变量,所以在上面的例子中,采用rowvar=False使其视每列为一个变量。

    结果如下:
    \begin{bmatrix} 7.& 4.5&4.&-0.5\\ 4.5 & 10.33333333 & 11.5 & -7.16666667\\ 4.& 11.5 & 13. & -8.5 \\ -0.5& -7.16666667 & -8.5 & 6.33333333 \end{bmatrix}
    可以看出

    • 协方差矩阵满足A=A^T,是个对称的方阵
    • 协方差矩阵对角线上的因子其实就是变量的方差:

    验算一下:
    cov(a_{1},a_{2})
    输入值 X= [1, 5, 6]
    输入值 Y= [4 ,3 , 9]

    总和(X) =1 + 5 + 6 = 12
    X平均值 = 4
    总和(Y) =4 + 3 + 9 = 16
    Y平均值 = 5.333
    协方差(X,Y) = 总和(xi - x平均值)(yi - y平均值)/(采样大小 -1)
    = (1-4)
    (4-5.333)+(5-4)(3-5.333)+(6-4)(9-5.333))/2
    = 4.5

    再验算一下:
    cov(a_{2},a_{4})
    输入值 X= [4 ,3 , 9]
    输入值 Y= [4 ,7 , 2]

    总和(X) =4 + 3 + 9 = 16
    X平均值 = 5.333
    总和(Y) =4 + 7 + 2 = 13
    Y平均值 = 4.333
    协方差(X,Y) = 总和(xi - x平均值)(yi - y平均值)/(采样大小 -1)
    = (4-5.333)
    (4-4.333)+(3-5.333)(7-4.333)+(9-5.333)(2-4.333))/2
    = -7.167

    相关文章

      网友评论

        本文标题:协方差矩阵的理解

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