样本协方差矩阵的定义与计算

定义

  协方差矩阵是用来衡量一组随机变量之间的线性关系的矩阵。我们都知道,对于$n$个随机变量$X_1,X_2,...,X_n$,总体协方差矩阵定义为:

$ left[ egin{matrix} D(X_1)&Cov(X_1,X_2)&dots&Cov(X_1,X_n)\ Cov(X_2,X_1)&D(X_2)&dots&Cov(X_2,X_n)\ & &vdots& \ Cov(X_n,X_1)&Cov(X_n,X_2)&dots&D(X_n)\ end{matrix} ight] $

  其中

$ egin{aligned} &D (X_i) = E(X_i^2)-E(X_i)^2\ &Cov(X_i,X_j) = E(X_iX_j)-E(X_i)E(X_j) end{aligned} $

  但是对于给定样本,怎么算样本协方差矩阵呢?

  假设我们对以上$n$个随机变量同时进行独立抽样$m$次,定义第$j$次抽样获得的$n$个样本值为$x_1^j,x_2^j,...,x_n^j$。我们知道样本对总体方差的无偏估计为:

$ egin{gather} egin{aligned} &hat{sigma}_i^2 =  frac{1}{m-1}sumlimits_{j=1}^m(x_i^j-overline {x_i})^2\  &overline {x_i} =  frac{1}{m}sumlimits_{j=1}^mx_i^j end{aligned}label{}end{gather} $

  样本对总体协方差的无偏估计也是类似的:

$ egin{gather} egin{aligned} &hat{Cov}(x_i,x_j) =  frac{1}{m-1}sumlimits_{k=1}^m(x_i^k-overline {x_i})(x_j^k-overline {x_j}) \ end{aligned}label{} end{gather} $

  所以样本协方差矩阵就是由$(1),(2)$两个估计量组成的。根据定义,样本协方差矩阵是能计算了,但是这样一个一个算的话时间复杂度是很高的。下面记录直接对矩阵进行的样本协方差矩阵的计算。

计算

  对于$n$个随机变量$X_1,X_2,...,X_n$,同时进行$m$次独立抽样,将获得的样本值排列为矩阵:

$ A = left[ egin{matrix} x_1^1&x_2^1&dots&x_n^1\ x_1^2&x_2^2&dots&x_n^2\ & &vdots& \ x_1^m&x_2^m&dots&x_n^m\ end{matrix} ight] $

  其中每行为某次抽样获得的$n$个随机变量的样本值,每列为某个随机变量在$m$次抽样种获得的样本值。

  首先计算所有随机变量的均值,获得向量:

$ egin{aligned} mu = frac{1}{m}sumlimits_{i=1}^mA_{i:} end{aligned} $

  然后对$A$和$mu$做差(向量广播到矩阵后做差),获得所有样本减去均值后的矩阵

$ B= left[ egin{matrix} x_1^1 - overline{x_1}&x_2^1 - overline{x_2}&dots&x_n^1- overline{x_n}\ x_1^2 - overline{x_1}&x_2^2 - overline{x_2}&dots&x_n^2- overline{x_n}\ & &vdots& \ x_1^m - overline{x_1}&x_2^m - overline{x_2}&dots&x_n^m- overline{x_n}\ end{matrix} ight] $

  最后计算$B^TB$再除以$m-1$获得协方差矩阵。为了便于理解理解,下面列出$B^TB$:

$ B^TB= left[ egin{matrix} left[ egin{matrix} x_1^1- overline{x_1}\x_2^1- overline{x_2}\vdots\x_n^1- overline{x_n} end{matrix} ight] left[ egin{matrix} x_1^2- overline{x_1}\x_2^2- overline{x_2}\vdots\x_n^2- overline{x_n} end{matrix} ight] dots left[ egin{matrix} x_1^m- overline{x_1}\x_2^m- overline{x_2}\vdots\x_n^m- overline{x_n} end{matrix} ight] end{matrix} ight] left[ egin{matrix} left[x_1^1 - overline{x_1} ight.&x_2^1 - overline{x_2}&dots&left.x_n^1- overline{x_n} ight]\ left[x_1^2 - overline{x_1} ight.&x_2^2 - overline{x_2}&dots&left.x_n^2- overline{x_n} ight]\ & &vdots& \ left[x_1^m - overline{x_1} ight.&x_2^m - overline{x_2}&dots&left.x_n^m- overline{x_n} ight]\ end{matrix} ight] $

  矩阵内部的括号表示某次抽样。以上这些操作用Python的numpy库都是很容易实现的。

  实际上,$B^TB$就是$n$个随机变量抽样$m$次获得的$n$个$m$维向量标准化后两两内积所形成的$n$维格拉姆矩阵。

原文地址:https://www.cnblogs.com/qizhou/p/13495598.html