主成分分析(Principal Component Analysis,PCA)

基础不牢,地动山摇。

在实际问题中,人们为了全面、准确地掌握样本信息,往往会用尽可能多的指标(特征)来描述样本,这会带来以下两个问题:

① 特征维度过多,会增加分析问题的难度和复杂性

② 特征之间是具有一定的相关关系的,即特征彼此之间有部分信息是重复的,这可能会影响人们对真正重要的特征的把握。

基于上面两个问题,人们就希望在定量研究中涉及的特征较少,而得到的信息量又较多,并且特征之间保持独立,不会出现信息重复。事实上,这是可以实现的,主成分分析(Principal Component Analysis,PCA)就是常用的一种方法。它利用降维的思想,将原有的多个特征通过线性变换(投影)转化成少数几个代表性较好的综合特征,这少数几个综合特征被称为主成分,它们能够反映原始特征的大部分信息,并且各个主成分之间互不相关,不会出现信息重复。

1. 主成分分析的原理

① 通过线性变换降维

假设现在有N个训练样本,每个样本都有D个属性(特征),则样本集可以表示为(x_{ij}代表第i个样本的第j维特征):

\boldsymbol{X}=\left \{ \boldsymbol{x}_1,\boldsymbol{x}_2,\cdots, \boldsymbol{x}_{N}\right \}=\begin{pmatrix} x_{11} & x_{21}& \cdots& x_{N1}\\ x_{12}& x_{22}& \cdots& x_{N2}\\ \vdots& \vdots& \ddots & \vdots\\ x_{1D}& x_{2D}& \cdots & x_{ND}\end{pmatrix}

首先,让我们通过M个线性变换,将原始的D维特征投影到M维空间中(M< D),这一步的目的是减少特征维度。将这M个线性变换的权值向量放到一个投影矩阵\boldsymbol{W}中(\boldsymbol{w}_{i}表示第i个线性变换的权值向量,w_{ij}表示\boldsymbol{w}_{i}的第j个权值):

\boldsymbol{W}=\left \{ \boldsymbol{w}_{1},\boldsymbol{w}_{2},\cdots, \boldsymbol{w}_{M}\right \}=\begin{pmatrix} w_{11} & w_{21}& \cdots& w_{M1}\\ w_{12}& w_{22}& \cdots& w_{M2}\\ \vdots & \vdots& \ddots &\vdots \\ w_{1D}& w_{2D}& \cdots& w_{MD}\end{pmatrix}

那么,单个样本在这M个线性变换上的投影结果可以表达为:

\tilde{\boldsymbol{x}_i}=\begin{pmatrix} \tilde{x_{i1}}\\ \tilde{x_{i2}}\\ \cdots\\ \tilde{x_{iM}}\end{pmatrix}=\begin{pmatrix} w_{11} & w_{21}& \cdots& w_{M1}\\ w_{12}& w_{22}& \cdots& w_{M2}\\ \vdots & \vdots& \ddots &\vdots \\ w_{1D}& w_{2D}& \cdots& w_{MD}\end{pmatrix}^{T}\begin{pmatrix} x_{i1}\\ x_{i2}\\ \cdots\\ x_{iD}\end{pmatrix}=\boldsymbol{W}^{T}\boldsymbol{x}_{i}

更进一步地,全部样本在这M个线性变换上的投影结果可以表达为:

\tilde{\boldsymbol{X}}=\left \{ \tilde{\boldsymbol{x}_1},\tilde{\boldsymbol{x}_2},\cdots, \tilde{\boldsymbol{x}_{N}}\right \}=\begin{pmatrix} \tilde{x_{11}} & \tilde{x_{21}}& \cdots& \tilde{x_{N1}}\\ \tilde{x_{12}}& \tilde{x_{22}}& \cdots& \tilde{x_{N2}}\\ \vdots& \vdots& \ddots & \vdots\\ \tilde{x_{1M}}& \tilde{x_{2M}}& \cdots & \tilde{x_{NM}}\end{pmatrix}=\left ( \boldsymbol{W}^{T}\boldsymbol{x}_{1},\boldsymbol{W}^{T}\boldsymbol{x}_{2},\cdots,\boldsymbol{W}^{T}\boldsymbol{x}_{N} \right )

通过以上介绍,我们知道了如何将原始的D维特征降到M维,这M维特征的每一维,都是由原始的D维特征通过线性组合得到的。下面我们的任务就是寻找最合适的投影矩阵\boldsymbol{W},使得到的M维特征满足主成分的要求(即能反映原始特征的大部分信息,且互不相关)。

② 通过最大化方差计算投影矩阵

让我们先考虑M=1的情况,即将原始的D维特征投影成一维的常数,这时的投影矩阵仅含有一个线性变换,它是一个D维向量,可以表示为:

\boldsymbol{W}=\boldsymbol{w}_1=\begin{pmatrix} w_{11}\\ w_{12}\\ \vdots\\ w_{1D}\end{pmatrix}

那么,单个样本\boldsymbol{w}_1上的投影结果可以表达为:

\boldsymbol{w}_1^{T}\boldsymbol{x}_{i}=\begin{pmatrix} w_{11} & w_{12}& \cdots & w_{1D}\end{pmatrix}\begin{pmatrix} x_{i1}\\ x_{i2}\\ \vdots\\ x_{iD}\end{pmatrix}=w_{11}x_{i1}+w_{12}x_{i2}+\cdots+w_{1D}x_{iD}

更进一步地,全部样本\boldsymbol{w}_1上的投影结果可以表达为:\left ( \boldsymbol{w}_1^{T}\boldsymbol{x}_{1},\boldsymbol{w}_1^{T}\boldsymbol{x}_{2},\cdots,\boldsymbol{w}_1^{T}\boldsymbol{x}_{N} \right ),即原始特征降到一维后的结果。

之前说过,主成分分析力求降维后的特征能够反映原始特征的大部分信息,那么我们如何做到这一点呢?在这里,我们用方差来量化特征反映的信息量。我们认为,样本在某个特征上尺度分得越开,特征值的方差越大,那么这个特征体现的信息量也就越多。既然这样,我们只要最大化投影结果的方差,就可以解出相应的投影矩阵了!

让我们按部就班地计算,首先计算全部样本的均值:

\bar{\boldsymbol{x}}=\frac{1}{N}\sum_{n=1}^{N}\boldsymbol{x}_n

接着可以将投影结果的方差表示为:

\frac{1}{N}\sum_{i=1}^{N}\left \{ \boldsymbol{w}_1^T\boldsymbol{x}_i -\boldsymbol{w}_1^T\bar{\boldsymbol{x}}\right \}^2=\frac{1}{N}\sum_{i=1}^{N}(\boldsymbol{w}_1^T\boldsymbol{x}_i -\boldsymbol{w}_1^T\bar{\boldsymbol{x}})(\boldsymbol{w}_1^T\boldsymbol{x}_i -\boldsymbol{w}_1^T\bar{\boldsymbol{x}})
=\frac{1}{N}\sum_{i=1}^{N}(\boldsymbol{w}_1^T\boldsymbol{x}_i\boldsymbol{w}_1^T\boldsymbol{x}_i-\boldsymbol{w}_1^T\boldsymbol{x}_i\boldsymbol{w}_1^T\bar{\boldsymbol{x}}-\boldsymbol{w}_1^T\bar{\boldsymbol{x}}\boldsymbol{w}_1^T\boldsymbol{x}_i+\boldsymbol{w}_1^T\bar{\boldsymbol{x}}\boldsymbol{w}_1^T\bar{\boldsymbol{x}})
=\frac{1}{N}\sum_{i=1}^{N}(\boldsymbol{w}_1^T\boldsymbol{x}_i\boldsymbol{x}_{i}^T\boldsymbol{w}_{1}-\boldsymbol{w}_1^T\boldsymbol{x}_i\bar{\boldsymbol{x}}^T\boldsymbol{w}_{1}-\boldsymbol{w}_1^T\bar{\boldsymbol{x}}\boldsymbol{x}_{i}^T\boldsymbol{w}_{1}+\boldsymbol{w}_1^T\bar{\boldsymbol{x}}\bar{\boldsymbol{x}}^T\boldsymbol{w}_{1})
=\frac{1}{N}\sum_{i=1}^{N}\boldsymbol{w}_{1}^T(\boldsymbol{x}_i\boldsymbol{x}_{i}^T-\boldsymbol{x}_i\bar{\boldsymbol{x}}^T-\bar{\boldsymbol{x}}\boldsymbol{x}_{i}^T+\bar{\boldsymbol{x}}\bar{\boldsymbol{x}}^T)\boldsymbol{w}_{1}
=\frac{1}{N}\sum_{i=1}^{N}\boldsymbol{w}_{1}^T(\boldsymbol{x}_{i}-\bar{\boldsymbol{x}})(\boldsymbol{x}_{i}^T-\bar{\boldsymbol{x}}^T)\boldsymbol{w}_{1}
=\frac{1}{N}\sum_{i=1}^{N}\boldsymbol{w}_{1}^T(\boldsymbol{x}_{i}-\bar{\boldsymbol{x}})(\boldsymbol{x}_{i}-\bar{\boldsymbol{x}})^T\boldsymbol{w}_{1}=\boldsymbol{w}_1^T\boldsymbol{S}\boldsymbol{w}_1

其中,\boldsymbol{S}是样本原始特征的协方差矩阵,定义为:

\boldsymbol{S}=\frac{1}{N}\sum_{i=1}^{N}(\boldsymbol{x}_{i}-\bar{\boldsymbol{x}})(\boldsymbol{x}_{i}-\bar{\boldsymbol{x}})^T

如果我们事先对特征值做了中心化处理,如Z-Score标准化,使得 \bar{\boldsymbol{x}}=0,则协方差矩阵可以表示为(需要注意的是,式子中的\boldsymbol{X}已经变成中心化处理后的样本集了):

\boldsymbol{S}=\frac{1}{N}\sum_{i=1}^{N}\boldsymbol{x}_{i}\boldsymbol{x}_{i}^T=\frac{1}{N}\boldsymbol{X}\boldsymbol{X}^T

我们的目标是关于\boldsymbol{w}_1最大化投影结果的方差\boldsymbol{w}_1^T\boldsymbol{S}\boldsymbol{w}_1。显然,在最大化的过程中必须要满足一定的限制来防止\left \| \boldsymbol{w}_{1} \right \|\rightarrow \infty,我们可以强制添加限制\boldsymbol{w}_1^T\boldsymbol{w}_{1}=1,即要求特征向量垂直投影到权值向量\boldsymbol{w}_1上,这并不会对最终结果产生影响,因为我们仅仅对\boldsymbol{w}_1的方向感兴趣,并不在意它的大小,详细的解释可以参照我上一篇博客。添加限制后,我们引入拉格朗日乘数,将最大化投影方差转化为最大化下式:

\boldsymbol{w}_1^T\boldsymbol{S}\boldsymbol{w}_1+\lambda _{1}(1-\boldsymbol{w}_1^T\boldsymbol{w}_{1})

令此式关于\boldsymbol{w}_1的导数为零,求得驻点满足:\boldsymbol{S}\boldsymbol{w}_1=\lambda _{1}\boldsymbol{w}_1

很明显,这是一个特征值、特征向量的问题\boldsymbol{w}_1是协方差矩阵\boldsymbol{S}关于特征值\lambda _{1}的一个特征向量。

如果我们在式子\boldsymbol{S}\boldsymbol{w}_1=\lambda _{1}\boldsymbol{w}_1的等号两边同时左乘\boldsymbol{w}_1^T,可以得到\boldsymbol{w}_{1}^T\boldsymbol{S}\boldsymbol{w}_1=\lambda _{1}\boldsymbol{w}_{1}^T\boldsymbol{w}_1,等号左边就是投影结果的方差,也就是我们想要去最大化的东西。而等号右边,由于我们限制了\boldsymbol{w}_1^T\boldsymbol{w}_{1}=1,所以等号右边其实就是特征值\lambda _{1},即:\boldsymbol{w}_{1}^T\boldsymbol{S}\boldsymbol{w}_1=\lambda _{1}。因此,最大的投影方差其实就对应着\boldsymbol{S}矩阵的最大特征值,而此时的权值向量\boldsymbol{w}_1就是最大特征值对应的特征向量

有了上面的解释,我们可以很容易地推广到M> 1的情况:投影矩阵由协方差矩阵\boldsymbol{S}M个最大的特征值(\lambda _{1},\lambda _{2},\cdots,\lambda_M)对应的特征向量(\boldsymbol{w}_{1},\boldsymbol{w}_{2},\cdots,\boldsymbol{w}_{M})组成,即:

\boldsymbol{W}=(\boldsymbol{w}_{1},\boldsymbol{w}_{2},\cdots,\boldsymbol{w}_{M})

2. 主成分分析的计算流程

一种计算方法是人为指定主成分个数

① 给定样本集\boldsymbol{X}=\left \{ \boldsymbol{x}_1,\boldsymbol{x}_2,\cdots, \boldsymbol{x}_{N}\right \}和指定的主成分个数M

② 对样本集进行中心化(如Z-Score标准化),即令样本均值为0;

③ 计算中心化后的样本的协方差矩阵\boldsymbol{X}\boldsymbol{X}^T

④ 对协方差矩阵\boldsymbol{X}\boldsymbol{X}^T做特征值分解;

⑤ 取最大的M个特征值所对应的特征向量\boldsymbol{w}_1,\boldsymbol{w}_2,\cdots,\boldsymbol{w}_M

⑥ 输出最终的投影矩阵\boldsymbol{W}=(\boldsymbol{w}_{1},\boldsymbol{w}_{2},\cdots,\boldsymbol{w}_{M})

另一种计算方法是通过累计贡献率确定主成分个数

首先,先介绍两个概念
贡献率:第i个主成分的方差在全部方差中所占的比重:\frac{\lambda _{i}}{\sum_{k=1}^{D}\lambda_{k}},它量化的是第i个主成分能够反映原始D维特征多大的信息。

累计贡献率:前k个主成分的方差之和在全部方差中所占的比重:\frac{\sum_{i=1}^{k}\lambda_{i}}{\sum_{i=1}^{D}\lambda_{i}},它量化的是前k个主成分功能反映原始D维特征多大的信息。

我们一般取累计贡献率达到85%-95%的特征值对应的特征向量来构成投影矩阵。

参考:

《模式识别与机器学习》马春鹏 译
《图解机器学习》许永伟 译

你可能感兴趣的:(机器学习)