PCA--主成份分析
主成份分析(Principle Component Analysis)主要用来对数据进行降维。对于高维数据,处理起来比较麻烦,而且高维数据可能含有相关的维度,数据存在冗余,PCA通过把高维数据向低维映射的同时尽可能保留数据蕴含的信息,到达简化数据的目的。
假设原始数据表示为$\{{{x}_{1}},{{x}_{2}},\cdots ,{{x}_{n}}\}$共$n$个数据,${{x}_{i}}$是$d$维的,现在首先分析PCA如何将它映射到一维,再推广到多维。
为了将数据向一维映射,需要解决两个问题,一是向那个方向映射,而是确定方向后如何映射。我们倒着来,先考虑第二个问题,再来说第一个。
另外,使用PCA之前通常要对数据不同维度进行归一化,消除不同维度尺度的影响。
1、 对数据${{x}_{i}}$进行变换${{x}_{i}}^{\prime }={{x}_{i}}-m$ ,其中$m$ 为样本均值。这一步使得数据均值为$\vec{0}$ ;
2、 进一步变换${{x}_{i}}^{\prime \prime }={{{x}_{ij}}^{\prime }}/{{{\sigma }_{j}}}\;$ 其中${{\sigma }_{j}}$为数据第$j$ 维的标准差,这一步使得数据各个维度的标准差为1;
经过以上两步,样本不同维度的尺度对PCA的影响基本消除了。为何要消除不同维度影响,可以结合下文从样本方差的角度理解。(方差较低的维度会被方差较高的维度“掩盖”,但这并不能说明前者的含有信息也不如后者)。
下面所有的讨论将假设数据已经进行了归一化,均值$m=\vec{0}$,各个维度方差为1。如果没有归一化,并不影响推导结果,但推导过程稍微复杂一点点。
一、假定映射方向给定,如何映射?
向一维映射就是将原来的$d$维数据映射到一条直线上,现在假设直线的方向给定了,考虑如映射的问题,直观上将,我们首先想到是将原始数据向这个方向做垂直投影,下面将说明我们的直观感觉还是很有道理的。
以上两个图是两种不同的映射,第一个是垂直投影,第二个很奇葩,因为是我画的,但确实也是种映射好吗~哪种映射方式更好呢?这就要考虑PCA的目的了。PCA作用是通过降维来简化数据,但如果简化后的数据不能在后续分析中带来和原始数据近似的结果,那这种简化就是不可取的。所以,映射在降维要尽可能保留数据的内含信息,也就是说映射后的数据要和原始数据尽可能接近,所以可以采用最小误差作为映射的准则。
假设映射的方向表示为单位向量$e$,不失一般性,假设映射后的数据都落在了通过原点的直线上(如果该直线没有通过原点,平移一下就可以了,这并不影响直线上数据的相对位置,数据信息是等同的,直线的方向是关键,平移什么的无所谓~~大概就这个意思~~,另外在假设数据已经归一化的条件下,样本均值也在原点),那么映射后的数据可以表示为$\{{{\alpha }_{1}}e,{{\alpha }_{2}}e,\cdots ,{{\alpha }_{n}}e\}$ ,${{\alpha }_{i}}e$ 形式上仍然是$d$维的,但所有${{\alpha }_{i}}e$在一条直线上,所以映射后的数据实际上是一维的,这里仍写成$d$的表示是为了方便写出误差函数。给定了映射方向$e$,确定映射就是确定$\alpha {}_{i}$,所以误差函数写作\[\begin{align}J({{\alpha }_{1}},{{\alpha }_{2}},\cdots ,{{\alpha }_{3}})&=\sum\limits_{i=1}^{n}{{{\left\| {{\alpha }_{i}}e-{{x}_{i}} \right\|}^{2}}} \\& =\sum\limits_{i=1}^{n}{\alpha _{i}^{2}}-\sum\limits_{i=1}^{n}{2{{\alpha }_{i}}{{e}^{T}}{{x}_{i}}}+\sum\limits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}} \\\end{align}\]
目的是要使得误差函数最小。这显然是关于${{\alpha }_{i}}$的凸函数,所以对${{\alpha }_{i}}$求偏导数,令其为0,可得到解\[\begin{align}{{\alpha }_{i}}={{e}^{T}}{{x}_{i}}\end{align}\]
这说明什么呢?这说明映射后的数据点正好是原始数据点向方向$e$的垂直投影。这就解决了给定方向后如何投影的问题——垂直投影,投影后原始数据${{x}_{i}}$表示为一维的数据${{\alpha }_{i}}$。
二、向哪个方向投影?
上文解决了给定方向$e$,如何映射数据的问题,现在从两个角度讨论如何确定$e$。
角度1:最小误差准则
仍然以最小误差(1)为准则来确定$e$,不同的是现在$e$是求解变量,${{\alpha }_{i}}$ 是(3)给定的确定值。重写误差函数为(2)为 \[\begin{align}J(e) &=\sum\limits_{i=1}^{n}{\alpha _{i}^{2}}-\sum\limits_{i=1}^{n}{2{{\alpha }_{i}}{{e}^{T}}{{x}_{i}}}+\sum\limits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}} \notag\\& =\sum\limits_{i=1}^{n}{{{e}^{T}}{{x}_{i}}x_{i}^{T}e}-\sum\limits_{i=1}^{n}{2{{e}^{T}}{{x}_{i}}x_{i}^{T}e}+\sum\limits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}}\notag \\& =-\sum\limits_{i=1}^{n}{{{e}^{T}}{{x}_{i}}x_{i}^{T}e}+\sum\limits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}} \\\end{align}\]
记$S=\sum\limits_{i=1}^{n}{({{x}_{i}}-m){{({{x}_{i}}-m)}^{T}}}=\sum\limits_{i=1}^{n}{{{x}_{i}}x_{i}^{T}}$(假设样本均值为$\vec{0}$ ),称为样本的散布矩阵,它比样本的协方差矩阵就差个常数,代表样本分散程度。将散布矩阵带入(4)得到误差函数 \[\begin{align}J(e)=-{{e}^{T}}Se+\sum\limits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}}\end{align}\]
最小化$J(e)$ 等价于最小化$-{{e}^{T}}Se$,所以进一步简化(5)为\[\begin{align}J(e)=-{{e}^{T}}Se\end{align}\]
另外,由于我们规定$e$是单位向量,所以最小化(6)是含有等式约束${{e}^{T}}e=1$ 的优化问题,写出对应拉格朗日函数\[\begin{align}J(e,\lambda )=-{{e}^{T}}Se+\lambda {{e}^{T}}e\notag\end{align}\]
对$e$求偏导数并令其为0,得到 \[\begin{align}Se=\lambda e\end{align}\]
说明要求解的$e$ 正好是样本散布矩阵的特征向量,$\lambda $ 为对应的特征值。将(7)代回(6)得到\[\begin{align}J(e)=-{{e}^{T}}Se=-\lambda\notag\end{align}\]
所以要是误差函数最小,$\lambda $ 应该为最大特征值,$e$应该为散布矩阵$S$最大特征值对应的特征向量。
角度2:最大方差
现在换一个角度,来考虑映射完成后数据的方差,这方差越大越好,因为投影方式已经给定(垂直投影),那么投影后数据方差越大,就说明投影后的数据跟好地反映了原始数据的分布特性。原始数据${{x}_{i}}$投影后对应的数据为${{\alpha }_{i}}={{e}^{T}}{{x}_{i}}$ ,那么投影后数据的方差为\[\begin{align}D(e) &=\sum\limits_{i=1}^{n}{\alpha _{i}^{2}}\notag \\& =\sum\limits_{i=1}^{n}{{{e}^{T}}{{x}_{i}}x_{i}^{T}e}\notag \\& ={{e}^{T}}Se \notag\\\end{align}\]
可见最大化$D(e)$ 和最小化(5)(6)是一致的。
另外可以将(5)式$J(e)$和$D(e)$相加看看,结果为$J(e)=-{{e}^{T}}Se+\sum\limits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}}$,是原始数据的方差(假设均数据均值为$\vec{0}$ )。而$D(e)$为映射后数据的方差,$J(e)$则可以理解为映射过程对数据方差造成的损失,从这个角度也说明了最大化$D(e)$和最小化$J(e)$的等价性,一句话,映射最大程度保留数据的方差,方差就是变化,变化才体现数据的信息。
三、 总结
经过以上两步,原始数据向一维数据映射的过程就完成了。先计算散布矩阵$S$的最大特征值对于的归一化特征向量$e$,然后计算投影结果${{\alpha }_{i}}={{e}^{T}}{{x}_{i}}$。
显然,只向一维映射可能会损失数据好多的信息,这取决于数据本身的分布。一般情况下还是要多向几个维度映射一下,将原来的数据映射为3维,4维等等。具体映射到几维没有标准,映射维度越高,越能保留原始的数据形象,但也越起不到降维简化数据的目的,所以需要两者之间一个权衡~
怎么向更高维映射呢?和一维类推一下就知道,如果要映射到$p$维,这$p$个方向应该是散步矩阵最大$p$个特征值对应的特征向量所决定的方向。
记\[X=\left[ \begin{matrix}x_{1}^{T} \\x_{2}^{T} \\\vdots \\x_{n}^{T} \\\end{matrix} \right]\] ,散步矩阵前$p$个最大特征值对应的规范化特征向量为$E=\left[ \begin{matrix}{{e}_{1}}, & {{e}_{2}}, & \cdots , & {{e}_{p}} \\\end{matrix} \right]$ ,那么PCA过程可以写作 \[Y=XE\]
$Y$ 的每一行为映射后的一个数据点。
此外,$Y$可以表示为\[\begin{align}Y& =\left[ {{Y}_{1}},{{Y}_{2}},\cdots ,{{Y}_{n}} \right] \notag\\& =[X{{e}_{1}},X{{e}_{2}},\cdots ,X{{e}_{n}}] \notag\\\end{align}\]
所以\[{{Y}_{i}}=X{{e}_{i}}=X{{e}_{i1}}+X{{e}_{i2}}+\cdots +X{{e}_{in}}\]
${{Y}_{i}}$ 即是第$i$ 个主成份,它是原数据的一个线性组合。
散布矩阵的特征向量体现数据的变化方向,越大特征值对应的特征向量越体现数据的主要变化方向,所以映射后的每一维所蕴含的原始数据信息是递减的,原始数据主要信息都体现在映射后前面几个维度上,这也是映射过程依次按照特征值大小选取映射方向的原因。对于$p$的选择没有严格的金标准,但还是有一些经验法则,比如Kaiser-Harris法则建议选取大于1的特征值对应的特征向量。