自从
上次谈了协方差矩阵
之后,感觉写这种科普性文章还不错,那我就再谈一把协方差矩阵吧。上次那篇文章在理论层次介绍了下协方差矩阵,没准很多人觉得这东西用处不大,其实协方差矩阵在好多学科里都有很重要的作用,比如多维的正态分布,再比如今天我们今天的主角——主成分分析(Principal Component Analysis,简称 PCA)。结合 PCA 相信能对协方差矩阵有个更深入的认识~
浅谈协方差矩阵
的内容,协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。协方差矩阵的主对角线上的元素是各个维度上的方差(即能量),其他元素是两两维度间的协方差(即相关性)。我们要的东西协方差矩阵都有了,先来看“降噪”,让保留下的不同维度间的相关性尽可能小,也就是说让协方差矩阵中非对角线元素都基本为零。达到这个目的的方式自然不用说,线代中讲的很明确——矩阵对角化。而对角化后得到的矩阵,其对角线上是协方差矩阵的特征值,它还有两个身份:首先,它还是各个维度上的新方差;其次,它是各个维度本身应该拥有的能量(能量的概念伴随特征值而来)。这也就是我们为何在前面称“方差”为“能量”的原因。也许第二点可能存在疑问,但我们应该注意到这个事实,通过对角化后,剩余维度间的相关性已经减到最弱,已经不会再受“噪声”的影响了,故此时拥有的能量应该比先前大了。看完了“降噪”,我们的“去冗余”还没完呢。对角化后的协方差矩阵,对角线上较小的新方差对应的就是那些该去掉的维度。所以我们只取那些含有较大能量(特征值)的维度,其余的就舍掉即可。PCA 的本质其实就是对角化协方差矩阵。
下面就让我们跟着上面的感觉来推推公式吧。假设我们有一个样本集 X,里面有 N 个样本,每个样本的维度为 d。即:
将这些样本组织成样本矩阵的形式,即每行为一个样本,每一列为一个维度,得到样本矩阵 S:$S\in\mathcal{R}^{N\times d}$。我们先将样本进行中心化,即保证每个维度的均值为零,只需让矩阵的每一列
除以
减去对应的均值即可。很多算法都会先将样本中心化,以保证所有维度上的偏移都是以零为基点的。然后,对样本矩阵计算其协方差矩阵,按照《浅谈协方差矩阵》里末尾的 update,我们知道,协方差矩阵可以简单的按下式计算得到:
下面,根据我们上文的推理,将协方差矩阵 C 对角化。注意到,这里的矩阵 C 是是对称矩阵,对称矩阵对角化就是找到一个正交矩阵 P,满足:$P^TCP=\Lambda$。具体操作是:先对 C 进行特征值分解,得到特征值矩阵(对角阵)即为$\Lambda$,得到特征向量矩阵并正交化即为$P$。显然,$P,\Lambda\in\mathcal{R}^{d\times d}$。假如我们取最大的前 p(p<d)个特征值对应的维度,那么这个 p 个特征值组成了新的对角阵$\Lambda_1\in\mathcal{R}^{p\times p}$,对应的 p 个特征向量组成了新的特征向量矩阵$P_1\in\mathcal{R}^{d\times p}$。
实际上,这个新的特征向量矩阵$P_1$就是投影矩阵,为什么这么说呢?假设 PCA 降维后的样本矩阵为$S_1$,显然,根据 PCA 的目的,$S_1$中的各个维度间的协方差基本为零,也就是说,$S_1$的协方差矩阵应该为$\Lambda_1$。即满足:
而我们又有公式:
代入可得:
由于样本矩阵$S_{N\times d}$的每一行是一个样本,特征向量矩阵$P_{1(d\times p)}$的每一列是一个特征向量。右乘$P_1$相当于每个样本以$P_1$的特征向量为基进行线性变换,得到的新样本矩阵$S_1\in\mathcal{R}^{N\times p}$中每个样本的维数变为了 p,完成了降维操作。实际上,$P_1$中的特征向量就是低维空间新的坐标系,称之为“主成分”。这就是“主成分分析”的名称由来。同时,$S_1$的协方差矩阵$\Lambda_1$为近对角阵,说明不同维度间已经基本独立,噪声和冗余的数据已经不见了。至此,整个 PCA 的过程已经结束,小小总结一下:
形成样本矩阵,样本中心化
2) 计算样本矩阵的协方差矩阵
对协方差矩阵进行特征值分解,选取最大的 p 个特征值对应的特征向量组成投影矩阵
4) 对原始样本矩阵进行投影,得到降维后的新样本矩阵
# 协方差矩阵
# matlab
# PCA
# 主成分分析