样本协方差矩阵的定义与计算
定义
协方差矩阵是用来衡量一组随机变量之间的线性关系的矩阵。我们都知道,对于$n$个随机变量$X_1,X_2,...,X_n$,总体协方差矩阵定义为:
$ \left[ \begin{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} \right] $
其中
$ \begin{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$。我们知道样本对总体方差的无偏估计为:
$ \begin{gather} \begin{aligned} &\hat{\sigma}_i^2 = \frac{1}{m-1}\sum\limits_{j=1}^m(x_i^j-\overline {x_i})^2\\ &\overline {x_i} = \frac{1}{m}\sum\limits_{j=1}^mx_i^j \end{aligned}\label{}\end{gather} $
样本对总体协方差的无偏估计也是类似的:
$ \begin{gather} \begin{aligned} &\hat{Cov}(x_i,x_j) = \frac{1}{m-1}\sum\limits_{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[ \begin{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}\right] $
其中每行为某次抽样获得的$n$个随机变量的样本值,每列为某个随机变量在$m$次抽样种获得的样本值。
首先计算所有随机变量的均值,获得向量:
$ \begin{aligned} \mu = \frac{1}{m}\sum\limits_{i=1}^mA_{i:} \end{aligned} $
然后对$A$和$\mu$做差(向量广播到矩阵后做差),获得所有样本减去均值后的矩阵
$ B= \left[ \begin{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}\right] $
最后计算$B^TB$再除以$m-1$获得协方差矩阵。为了便于理解理解,下面列出$B^TB$:
$ B^TB= \left[ \begin{matrix} \left[ \begin{matrix} x_1^1- \overline{x_1}\\x_2^1- \overline{x_2}\\\vdots\\x_n^1- \overline{x_n} \end{matrix} \right] \left[ \begin{matrix} x_1^2- \overline{x_1}\\x_2^2- \overline{x_2}\\\vdots\\x_n^2- \overline{x_n} \end{matrix} \right] \dots \left[ \begin{matrix} x_1^m- \overline{x_1}\\x_2^m- \overline{x_2}\\\vdots\\x_n^m- \overline{x_n} \end{matrix} \right] \end{matrix}\right] \left[ \begin{matrix} \left[x_1^1 - \overline{x_1}\right.&x_2^1 - \overline{x_2}&\dots&\left.x_n^1- \overline{x_n}\right]\\ \left[x_1^2 - \overline{x_1}\right.&x_2^2 - \overline{x_2}&\dots&\left.x_n^2- \overline{x_n}\right]\\ & &\vdots& \\ \left[x_1^m - \overline{x_1}\right.&x_2^m - \overline{x_2}&\dots&\left.x_n^m- \overline{x_n}\right]\\ \end{matrix}\right] $
矩阵内部的括号表示某次抽样。以上这些操作用Python的numpy库都是很容易实现的。
实际上,$B^TB$就是$n$个随机变量抽样$m$次获得的$n$个$m$维向量标准化后两两内积所形成的$n$维格拉姆矩阵。