方差、协方差和相关系数
一直没明白,方差、协方差以及相关系数这几个概念的含义及其在统计学中作用和计算方法,这里简单做一个记录和梳理。
1、概念
方差(Variance) ,表征统计量(随机变量)对均值的误差(偏离度或离散度),方差越小离散度越小,统计量越接近统计平均值。
协方差(Covariance) 表征统计量(随机变量)不同维度之间的误差,衡量该量不同维度之间的相关性。
相关系数(Coefficient) ,统计学上常用是皮尔森相关系数(Pearson correlation coefficient),定义为两个维度(特征)之间的协方差和标准差之比,用于度量两个维度之间的(线性)相关程度,其值介于\([-1,1]\)之间。
当协方差为正时,两个维度呈正相关(同增同减);当协方差为负时,两个维度负相关(一增一减)。将所有将所有维度之间的协方差关系以矩阵的形式表现,即为协方差矩阵。
几点说明:
- 无论是方差、协方差还是相关系数,针对的对象始终是随机变量的各个维度,而非针对样本。所以在实际使用时,切记注意目标矩阵中,哪些是特征,哪些是样本。
- 方差,是协方差的一个特例,即两个维度相同时的情况。
- 协方差,反映随机变量各个维度之间的统计特性。如果协方差趋近于 \(0\) ,则该随机变量的 \(x_i\) 维度和 \(x_j\) 维度相关性很弱。极端情况下,协方差为 $ 0 $,则这两个维度无关。
- 协方差矩阵是一个方阵,其大小由随机变量的维度决定。如果该随机变量维度为 $ N $ ,则协方差矩阵的大小为 \((N \times N )\) 。
- 相关系数,也可以看成协方差:一种剔除了两个变量量纲影响、标准化后的特殊协方差(其值为\([-1,1]\)之间)。
另外提一下 标准差(Standard Deviation) 。标准差定义为方差的算术平方根(习惯使用\(\sigma\)表示),由于方差在量纲上与被测物理量不同,因此,标准差可以消除量纲带来的差异。
2、数学定义
设样本集 \(S\) 由 \(m\) 个 \(n\) 维随机变量构成, \(S = \{ s_1,s_2,\cdots,s_m \}\) ,其中 \(s_k=[x_{k1}, x_{k2},...,x_{kn}]\) \(\; (1\le k \le m)\) 。则样本矩阵为: \[ S =\begin{bmatrix} S_{1} \\ S_{2} \\ \vdots \\ S_{m} \\ \end{bmatrix} =\begin{bmatrix} x_{11} &x_{12} & \cdots\ &x_{1n} \\ x_{21} &x_{22} & \cdots\ &x_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m1} &x_{m2} & \cdots\ &x_{mn} \\ \end{bmatrix} =\begin{bmatrix} X_{1}& X_{2}& \cdots & X_{n} \\ \end{bmatrix} \] 注意:\(m\)是样本数,\(n\)是随机变量的维度(特征),\(S_k\)为行向量,针对行(样本),\(X_k\)为列向量,针对列(特征)。第1下标表示样本编号,第2个下标表示维度编号,例如\(x_{34}\)表示第\(3\)个样本的第\(4\)个维度。
- 方差:(针对维度,纵向) \[ Var(S)=\begin{bmatrix} Var(X_{1})& Var(X_{2})& \cdots & Var(X_{n})\\\\ \end{bmatrix} =\begin{bmatrix} \sigma^{2}(X_{1})& \sigma^{2}(X_{2})& \cdots & \sigma^{2}(X_{n})\\ \end{bmatrix} \] 其中: \[ Var(X_{i})=\sigma^{2}(X_{i})=\frac{1}{m-1} {(X_{i}-\overline X_{i})^{T} \cdot {(X_{i}-\overline X_{i})}}\;\;\;\;\; (1\le i \le n) \]
使用统计学符号表示 \[ Var(X_{i})=\sigma^{2}(X_{i})=E \left ( [X-E(X)]^T [X-E(X)] \right ) \]
- 协方差:(同样针对维度)
\[ Cov(S) =\begin{bmatrix} Cov(X_{1},X_{1}) &Cov(X_{1},X_{2}) & \cdots\ &Cov(X_{1},X_{n})\\ Cov(X_{2},X_{1}) &Cov(X_{2},X_{2}) & \cdots\ &Cov(X_{2},X_{n})\\ \vdots & \vdots & \ddots & \vdots \\ Cov(X_{n},X_{1}) &Cov(X_{n},X_{2}) & \cdots\ &Cov(X_{n},X_{n})\\ \end{bmatrix} \] 其中: \[ Cov(X_{i},X_{j})=\frac{1}{m-1}{(X_{i} - \overline X_{i})^{T} \cdot { (X_{j}-\overline X_{j})}}\ \ \ \ \ (1\le i,j \le n) \] 使用统计学符号表示 \[ Cov(X_{i},X_{j})=E \left ([X_{i} - E(X_{i})]^{T} [X_{j} - E(X_{j})] \right )\;\;\;\;\; (1\le i,j \le n) \]
当\(i=j\)时,即协方差矩阵的对角矩阵,就是方差。
- (Pearson)相关系数:
考虑样本矩阵\(S\)由各列向量构成:\(S=[X_1,X_2,\cdots,X_n]\) ,则各列标准差 \(\sigma=[\sigma_{X_1},\sigma_{X_2},\cdots,\sigma_{X_n}]\), 记 \(\sigma_S \equiv \sigma^T \cdot \sigma\),同时记 \(\sigma_{X_i,X_j} \equiv \sigma_{X_i}\cdot \sigma_{X_j}\),则: \[ \sigma_S \equiv \sigma^T \cdot \sigma =\begin{bmatrix} \sigma_{X_1} \cdot \sigma_{X_1} & \sigma_{X_1} \cdot \sigma_{X_2}& \cdots& \sigma_{X_1} \cdot \sigma_{X_n} \\ \sigma_{X_2} \cdot \sigma_{X_1} & \sigma_{X_2} \cdot \sigma_{X_2}& \cdots& \sigma_{X_2} \cdot \sigma_{X_n} \\ \vdots & \vdots & \ddots & \vdots \\ \sigma_{X_n} \cdot \sigma_{X_1} & \sigma_{X_n} \cdot \sigma_{X_2}& \cdots& \sigma_{X_n} \cdot \sigma_{X_n} \\ \end{bmatrix} =\begin{bmatrix} \sigma_{X_{1},X_{1}} &\sigma_{X_{1},X_{2}} & \cdots\ &\sigma_{X_{1},X_{n}}\\ \sigma_{X_{2},X_{1}} &\sigma_{X_{2},X_{2}} & \cdots\ &\sigma_{X_{2},X_{n}}\\ \vdots & \vdots & \ddots & \vdots \\ \sigma_{X_{n},X_{1}} &\sigma_{X_{n},X_{2}} & \cdots\ &\sigma_{X_{n},X_{n}}\\ \end{bmatrix} \]
对样本空间\(S\),其相关系数矩阵\(\rho\)定义为: \[ \rho = \frac{Cov(S)}{\sigma_{S}} =\frac{Cov(S)}{\sigma^T \cdot \sigma} \] 代入协方差矩阵和\(\sigma_S\): \[ \begin{align*} \rho &=\frac{\begin{bmatrix} Cov(X_{1},X_{1}) &Cov(X_{1},X_{2}) & \cdots\ &Cov(X_{1},X_{n})\\ Cov(X_{2},X_{1}) &Cov(X_{2},X_{2}) & \cdots\ &Cov(X_{2},X_{n})\\ \vdots & \vdots & \ddots & \vdots \\ Cov(X_{n},X_{1}) &Cov(X_{n},X_{2}) & \cdots\ &Cov(X_{n},X_{n})\\ \end{bmatrix} }{\begin{bmatrix} \sigma_{X_{1},X_{1}} &\sigma_{X_{1},X_{2}} & \cdots\ &\sigma_{X_{1},X_{n}}\\ \sigma_{X_{2},X_{1}} &\sigma_{X_{2},X_{2}} & \cdots\ &\sigma_{X_{2},X_{n}}\\ \vdots & \vdots & \ddots & \vdots \\ \sigma_{X_{n},X_{1}} &\sigma_{X_{n},X_{2}} & \cdots\ &\sigma_{X_{n},X_{n}}\\ \end{bmatrix} } \end{align*} \] 上述矩阵除法,指的是对应元素相除。其中: \[ \rho_{X_{i},X_{j}} = \frac{Cov(X_{i},X_{j})}{\sigma_{X{i},X_{j}}} = \frac{Cov(X_{i},X_{j})}{\sigma_{X{i}} \cdot \sigma_{X_{j}}} \] 完整表达式: \[ \rho = \begin{bmatrix} \rho_{X_{1},X_{1}} &\rho_{X_{1},X_{2}} & \cdots\ &\rho_{X_{1},X_{n}}\\ \rho_{X_{2},X_{1}} &\rho_{X_{2},X_{2}} & \cdots\ &\rho_{X_{2},X_{n}}\\ \vdots & \vdots & \ddots & \vdots \\ \rho_{X_{n},X_{1}} &\rho_{X_{n},X_{2}} & \cdots\ &\rho_{X_{n},X_{n}}\\ \end{bmatrix} =\begin{bmatrix} \frac{Cov(X_{1},X_{1})}{\sigma_{X_{1}} \cdot \sigma_{X_{1}}} &\frac{Cov(X_{1},X_{2})}{\sigma_{X_{1}} \cdot \sigma_{X_{2}}} & \cdots\ &\frac{Cov(X_{1},X_{n})}{\sigma_{X_{1}} \cdot \sigma_{X_{n}}}\\ \frac{Cov(X_{2},X_{1})}{\sigma_{X_{2}} \cdot \sigma_{X_{1}}} &\frac{Cov(X_{2},X_{2})}{\sigma_{X_{2}} \cdot \sigma_{X_{2}}} & \cdots\ &\frac{Cov(X_{2},X_{n})}{\sigma_{X_{2}} \cdot \sigma_{X_{n}}}\\ \vdots & \vdots & \ddots & \vdots \\ \frac{Cov(X_{n},X_{1})}{\sigma_{X_{n}} \cdot \sigma_{X_{1}}} &\frac{Cov(X_{n},X_{2})}{\sigma_{X_{n}} \cdot \sigma_{X_{2}}} & \cdots\ &\frac{Cov(X_{n},X_{n})}{\sigma_{X_{n}} \cdot \sigma_{X_{n}}}\\ \end{bmatrix} \] 由\(Cov(X_i,X_i)=\sigma^2_{X_i}\)可得,相关系数矩阵\(\rho\)对角线元素的值均为\(1\)。
3、协方差矩阵的计算
1) \(2\)维随机变量的协方差矩阵
设\(4\)个二维随机变量样本,\(S = \{ s_1,s_2,s_3,s_4 \}\),其中:\(s_1=(1,2)\),\(s_2=(3,6)\),\(s_3=(4,2)\),\(s_4=(5,2)\)。矩阵表示为:
\[ S=\begin{bmatrix} s_1 \\ s_2 \\ s_3 \\ s_4 \end{bmatrix} =\begin{bmatrix} 1 & 2 \\ 3 & 6 \\ 4 & 2 \\ 5 & 2 \end{bmatrix} =\begin{bmatrix} X_1 & X_2 \\ \end{bmatrix} \]
二维随机变量的两个特征分别用\(X_1\),\(X_2\): \[ X_1=\begin{bmatrix} 1 \\ 3 \\ 4 \\ 5 \end{bmatrix}, \ \ \ X_2=\begin{bmatrix} 2 \\ 6 \\ 2 \\ 2 \end{bmatrix} \]
(1) 手算
两个特征的平均值分别为:\(\overline X_1=3.25\),\(\overline X_2=3\)。
\(Cov(X_1,X_1)=\frac{1}{4-1}[(1-3.25)^2+(3-3.25)^2+(4-3.25)^2+(5-3.25)^2]=2.9167\)
\(Cov(X_1,X_2)=\frac{1}{4-1}[(1-3.25)(2-3)+(3-3.25)(6-3)+(4-3.25)(2-3)+(5-3.25)(2-3)]=-0.3333\)
\(Cov(X_2,X_1)=\frac{1}{4-1}[(2-3)(1-3.25)+(6-3)(3-3.25)+(2-3)(4-3.25)+(2-3)(5-3.25)]=-0.3333\)
\(Cov(X_2,X_2)=\frac{1}{4-1}[(2-3)^2+(6-3)^2+(2-3)^2+(2-3)^2]=4\)
所以,协方差矩阵 \(Cov(S)=\begin{bmatrix} 2.9167 & -0.3333 \\ -0.3333 & 4.000 \end{bmatrix}\)
(2) numpy
计算
numpy
中,使用np.cov
用来计算协方差,函数原型: 1
numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)
variable
:变量,也就是特征
observation
:观测,也就是样本
参数说明:
m
:一维向量或者二维矩阵,当m
为一个向量时,它相当于一个1行n列的矩阵,最终输出的协方差矩阵为 \(1 \times 1\) 的矩阵(也就是一个标量)。当m
是一个二维矩阵时,它的每一行表示一个特征(numpy
文档称之为variable
),每一列表示一个样本(observation
)。y
和m
一样,可以是一维向量,也可以是二维矩阵。y
相当于给m
添加了若干个新行,也就是m=np.hstack(m,y)
。y
的列数必须和m
一致,否则没法把m
和y
的行拼起来。这个参数基本可以不用。rowvar
:默认值为True
,用来描述矩阵m
和y
使用行作为特征,还是列作为特征。默认情况下,矩阵的行对应特征,列对应样本。由于在机器学习中,习惯上行表示样本,列表示特征,因此在计算时需要将rowvar
置为False
。bias
:默认值False
,表示在计算协方差时是否为有偏估计,True
表示有偏估计,分母为N(N表示样本数,也就是观测个数);默认情况下,表示分母为N-1
的无偏估计。一般来说,无偏估计要优于有偏估计。关于有偏估计和无偏估计的问题,详见这篇文章ddof
:表示自由度,当此值不为None
,分母为N-ddof
,同时bias
参数失效。fweights
:一个一维整型数组,表示每个观测出现的次数。提供此参数的目的是,防止m矩阵过大。aweights
:一个一维浮点数组,表示每个观测的权重。权重大表明这个观测准确,权重小表明这个权重不太重要。
1 | import numpy as np |
2) \(n\)维随机变量的协方差矩阵
1 | import numpy as np |
4、方差的计算
方差的计算实际上用的是协方差计算取对角矩阵方法,但是内置的np.var
函数有个坑,默认参数计算的是有偏估计(ddof
=0),如果计算无偏估计,那么需要ddof=1
。
首先还是二维情况:
1 | t1 |
再来多维情况:
1 | t2 |
5、相关系数的计算
计算过程基本类似,按照公式来:
1 | t3=t2.copy() |
6. 各维度相互独立(也称独立变量)的协方差
机器学习中,经常采用主成分分析(PCA)和独立成分分析(ICA)方法进行数据预处理。使用PCA方法的目的,是为了降低运算量而对原始数据进行降维处理;使用ICA方法的目的,则主要是去除不相关的噪声和干扰。无论是PCA还是ICA,协方差矩阵都是一个重要衡量工具。理想情况下,当协方差矩阵退化为纯对角矩阵时,各个维度之间相互独立,即独立变量情况,这种情况属于珍稀品种,比较少见,以下为推导。
根据协方差公式,利用矩阵的结合律和转置性质:
\[ \begin{align*} Cov(X_{i},X_{j})&=E \left ([X_{i} - E(X_{i})]^{T} [X_{j} - E(X_{j})] \right ) \\ &= E \left ([X_{i} - E(X_{i})]^{T} X_{j} - [X_{i} - E(X_{i})]^{T} E(X_{j}) \right )\\ &= E \left ([X^T_{i} - E(X_{i})] X_{j} - [X^T_{i} - E(X_{i})] E(X_{j}) \right ) \\ &= E \left (X^T_{i} X_{j} - E(X_{i}) X_{j} - X^T_{i} E(X_{j}) + E(X_{i}) E(X_{j}) \right ) \\ &= E (X^T_{i} X_{j})- E(X_{i}) E(X_{j}) - E(X^T_{i}) E(X_{j}) + E(X_{i}) E(X_{j}) \\ &= E (X^T_{i} X_{j}) - E(X^T_{i}) E(X_{j}) \\ &= E (X^T_{i} X_{j}) - E(X_{i}) E(X_{j}) \end{align*} \]
由于 \(X_{i}, X_{j}\) 独立时:\(E(X^T_{i} X_{j})=E(X^T_{i})E(X_{j})=E(X_{i})E(X_{j})\) (证明请参考其他资料)。故 \(Cov(X_{i},X_{j})=0\) 。
这时,协方差矩阵就变成一个对角矩阵了:
\[ Cov(X)=\begin{bmatrix} Cov(X_{1},X_{1}) & 0\\ 0 & Cov(X_{n},X_{n}) \end{bmatrix} \]
如果觉得符号比较乱,可以简单的令 $ A=X_{i}, B=X_{j} $,上述公式可以写为:
\[ Cov(A,B)=E \left ([A - E(B)]^{T} [B - E(B)] \right ) = E (A^T B) - E(A) E(B) \]
推导中应用的矩阵性质:
矩阵转置性质:$ (A+B)^{T} = A^T + B^T $
矩阵乘法分配率:$ (A+B)C = AC + BC $
矩阵转置的期望值(\(E(A^T)\) 实数)与其本身期望值(\(E(A)\))相等:$ E(A^T) = E(A) $ 。
期望值(实数)的期望值仍然是一个实数:$ E[E(A)] = E(A) $
随机变量和的期望值(实数)等于期望值的和:$ E[A+B] = E(A) + E(B) $
7、协方差矩阵的应用
参见:主成分分析与独立成分分析