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}$,所以误差函数写作[egin{align}J({{alpha }_{1}},{{alpha }_{2}},cdots ,{{alpha }_{3}})&=sumlimits_{i=1}^{n}{{{left| {{alpha }_{i}}e-{{x}_{i}} ight|}^{2}}} \& =sumlimits_{i=1}^{n}{alpha _{i}^{2}}-sumlimits_{i=1}^{n}{2{{alpha }_{i}}{{e}^{T}}{{x}_{i}}}+sumlimits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}} \end{align}]

目的是要使得误差函数最小。这显然是关于${{alpha }_{i}}$的凸函数,所以对${{alpha }_{i}}$求偏导数,令其为0,可得到解[egin{align}{{alpha }_{i}}={{e}^{T}}{{x}_{i}}end{align}]

这说明什么呢?这说明映射后的数据点正好是原始数据点向方向$e$的垂直投影。这就解决了给定方向后如何投影的问题——垂直投影,投影后原始数据${{x}_{i}}$表示为一维的数据${{alpha }_{i}}$。

二、向哪个方向投影?

上文解决了给定方向$e$,如何映射数据的问题,现在从两个角度讨论如何确定$e$。

角度1:最小误差准则

仍然以最小误差(1)为准则来确定$e$,不同的是现在$e$是求解变量,${{alpha }_{i}}$ 是(3)给定的确定值。重写误差函数为(2)为 [egin{align}J(e) &=sumlimits_{i=1}^{n}{alpha _{i}^{2}}-sumlimits_{i=1}^{n}{2{{alpha }_{i}}{{e}^{T}}{{x}_{i}}}+sumlimits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}} otag\& =sumlimits_{i=1}^{n}{{{e}^{T}}{{x}_{i}}x_{i}^{T}e}-sumlimits_{i=1}^{n}{2{{e}^{T}}{{x}_{i}}x_{i}^{T}e}+sumlimits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}} otag \& =-sumlimits_{i=1}^{n}{{{e}^{T}}{{x}_{i}}x_{i}^{T}e}+sumlimits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}} \end{align}]

记$S=sumlimits_{i=1}^{n}{({{x}_{i}}-m){{({{x}_{i}}-m)}^{T}}}=sumlimits_{i=1}^{n}{{{x}_{i}}x_{i}^{T}}$(假设样本均值为$vec{0}$ ),称为样本的散布矩阵,它比样本的协方差矩阵就差个常数,代表样本分散程度。将散布矩阵带入(4)得到误差函数 [egin{align}J(e)=-{{e}^{T}}Se+sumlimits_{i=1}^{n}{x_{i}^{T}{{x}_{i}}}end{align}]

最小化$J(e)$ 等价于最小化$-{{e}^{T}}Se$,所以进一步简化(5)为[egin{align}J(e)=-{{e}^{T}}Seend{align}]

另外,由于我们规定$e$是单位向量,所以最小化(6)是含有等式约束${{e}^{T}}e=1$ 的优化问题,写出对应拉格朗日函数[egin{align}J(e,lambda )=-{{e}^{T}}Se+lambda {{e}^{T}}e otagend{align}]

对$e$求偏导数并令其为0,得到 [egin{align}Se=lambda eend{align}]

说明要求解的$e$ 正好是样本散布矩阵的特征向量,$lambda $ 为对应的特征值。将(7)代回(6)得到[egin{align}J(e)=-{{e}^{T}}Se=-lambda otagend{align}]

所以要是误差函数最小,$lambda $ 应该为最大特征值,$e$应该为散布矩阵$S$最大特征值对应的特征向量。

角度2:最大方差

现在换一个角度,来考虑映射完成后数据的方差,这方差越大越好,因为投影方式已经给定(垂直投影),那么投影后数据方差越大,就说明投影后的数据跟好地反映了原始数据的分布特性。原始数据${{x}_{i}}$投影后对应的数据为${{alpha }_{i}}={{e}^{T}}{{x}_{i}}$ ,那么投影后数据的方差为[egin{align}D(e) &=sumlimits_{i=1}^{n}{alpha _{i}^{2}} otag \& =sumlimits_{i=1}^{n}{{{e}^{T}}{{x}_{i}}x_{i}^{T}e} otag \& ={{e}^{T}}Se otag\end{align}]

可见最大化$D(e)$ 和最小化(5)(6)是一致的。

另外可以将(5)式$J(e)$和$D(e)$相加看看,结果为$J(e)=-{{e}^{T}}Se+sumlimits_{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[ egin{matrix}x_{1}^{T}  \x_{2}^{T}  \vdots   \x_{n}^{T}  \end{matrix} ight]] ,散步矩阵前$p$个最大特征值对应的规范化特征向量为$E=left[ egin{matrix}{{e}_{1}}, & {{e}_{2}}, & cdots , & {{e}_{p}}  \end{matrix} ight]$ ,那么PCA过程可以写作 [Y=XE]

$Y$ 的每一行为映射后的一个数据点。

此外,$Y$可以表示为[egin{align}Y& =left[ {{Y}_{1}},{{Y}_{2}},cdots ,{{Y}_{n}} ight] otag\& =[X{{e}_{1}},X{{e}_{2}},cdots ,X{{e}_{n}}] otag\end{align}]

所以[{{Y}_{i}}=X{{e}_{i}}=X{{e}_{i1}}+X{{e}_{i2}}+cdots +X{{e}_{in}}]

${{Y}_{i}}$ 即是第$i$ 个主成份,它是原数据的一个线性组合。

散布矩阵的特征向量体现数据的变化方向,越大特征值对应的特征向量越体现数据的主要变化方向,所以映射后的每一维所蕴含的原始数据信息是递减的,原始数据主要信息都体现在映射后前面几个维度上,这也是映射过程依次按照特征值大小选取映射方向的原因。对于$p$的选择没有严格的金标准,但还是有一些经验法则,比如Kaiser-Harris法则建议选取大于1的特征值对应的特征向量。

原文地址:https://www.cnblogs.com/dreamvibe/p/4379279.html