PCA算法详解——化繁为简

目录

一、前言

一、什么是PCA?

二、PCA原理

1.通俗的认知

2.其他视角

三、算法实现


一、前言

       老鹰是一个三维立体实物,而图片是二维的,但我们能一眼识别出上图是一只老鹰而非鹌鹑,可见对于某些高维的数据,我们可以在低维空间下识其概貌,对其有个清晰的认知。然而,当我们沿老鹰翅尖拍摄一张照片,我们可能并不能很容易地看出这是一只老鹰。归其原因,拍摄的角度不同,导致最终的结果不同,在第一种情况下,图片保留了鹰的大翅膀等特征,所以我们易于识别,而第二张图片展现的鹰的特征较少,所以我们难以识别。在数据挖掘中,有时候数据的维度过高可能导致计算更为复杂,我们希望能有一种方法将高维空间中的数据映射到低维空间中,但同时保留原始数据体现的信息,PCA便是其中常见的一种方法。

一、什么是PCA?

        主成分分析(PCA),一种无监督算法,即它不需要依靠任何类别标签的信息,是一种常用的线性降维方法。该算法的目标是通过某种线性投影,将原本高维空间中的一些数据,映射到更低维度的空间中,并在所投影的维度上满足:1.尽可能保留原始数据的信息。2.新维度下变量间两两各不相关。

在线性回归模型中,一般要求特征之间线性相关性较低且特征数少于样本数,否则容易导致参数估计值方差增大及过拟合等问题。而一旦特征数多于样本数时,我们一般会选择增加样本数及减少无关特征等途径来提高回归算法的性能,然而前者可能会增加采样成本而且在实际情况下常常难以实现;后者在实际执行过程中可能无法很快判断并剔除无关或相关性低的特征。而主成分分析算法在这个时候并能充分发挥其作用,高维转低维、新维度下各特征线性无关等优良特性恰好满足我们的需求,所以当数据特征数过多时,我们一般会考虑用PCA对其降维以减少后续回归模型的计算量并提升模型的性能。

二、PCA原理

1.通俗的认知

PCA最直观的认知是旋转坐标轴,使得在新坐标体系下,变量间两两各不相关。当数据点在某几个维度下的坐标值较为接近(方差较小),那么可以认为这几个维度对于数据特征的体现并没有太大帮助,想象数据某个特征的属性值均相等,那么这个特征对于区分数据并没有太大用处,我们完全可以将其剔除,从而实现维度减少,即降维的目的。

上图中蓝色的小点是随机生成的二维空间下带有一定相关性的数据点,我们的目的是将坐标轴旋转,使得各个数据点在新坐标的某条轴上的投影尽可能分散。

观察上图,我们可以用方差来定义信息量的大小(也可以称为主成分贡献率),方差越大代表投影后的数据点分散得越开即信息量越大。图中将数据点投影到x轴要比投影到y轴更优,但仍然不是最优选择,注意图中虚线,将数据点投影到虚线上后的方差显然要比投影到x,y轴更大,我们的目标即是寻找到这么一种映射P,将原始坐标轴旋转,使得新坐标空间下数据点在某几个维度上的投影的方差尽可能大并剔除差距不大的维度,即使得高维空间下的数据点X投影到低维空间上。 

回到正题,我们直接展开求解,为方便计算,首先将所有数据中心化处理(方便协方差矩阵的表示),即将原坐标轴圆点偏移到数据中心点(图中红点),不妨以X(X_1,X_2,X_3,...X_n)代表中心化后的数据点,P代表原始坐标空间所执行的某种旋转,Y代表新坐标空间下的数据点,有:

Y=PX

我们要求新坐标空间下的数据点各维度之间线性无关,即Y的协方差矩阵为对角矩阵,Y的协方差矩阵可表示如下:

\frac{YY^T}{n-1}=\frac{PX(PX)^T}{n-1}=\frac{PXX^TP}{n-1}

即我们希望各维度之间线性无关——Y的协方差矩阵PXX^TP^T为对角矩阵,而XX^TX的协方差矩阵,是一个实对称矩阵,故我们可以将其对角化:

XX^T=QDQ^T

其中D是个对角矩阵(对角线上的元素即为协方差矩阵的特征值),Q是个正交矩阵(即特征值对应的特征向量),代入原式得:

YY^T=PQDQ^TP^T=(PQ)D(PQ)^T

要使得YY^T仍为对角矩阵,最简便的方法便是令PQ为单位矩阵,即:P=Q^-1=Q^T,此时,我们有:

YY^T=D

由于主对角线上的元素为X的协方差矩阵的特征值,对应着Y各维度变量的方差(信息量大小),我们希望它越大越好,所以在实际使用中,我们常将特征值从大到小排列,然后选取排名靠前的几个使用,其对应的特征向量也即我们的主成分,对应着新坐标空间下各维度的投影向量。

2.其他视角

从另一种视角来审视这个问题,见下图:

X_i是原坐标空间下中心化后的一个数据点,主成分分析的目的即是寻找到一个向量e,将数据点X_i投影到向量e上,为尽可能保存原始数据信息,我们希望投影前后数据点间的距离尽可能近,下面展开分析。

对于投影向量e,我们只考虑其方向,为使计算方便,不妨设\left \| e \right \|=1,则X_i投影后的点的模为:

\left \| X_i' \right \|=d_i=e^T*X_i=X_i^T*e

优化的目标即为:

\begin{align} J(e)&=\sum_{i=1}^{n}{\left | \left | X_i'-X_i \right | \right |^2}\\ &=\sum_{i=1}^{n}{(X_i'-X_i)^T(X_i'-X_i)}\\ &=\sum_{i=1}^{n}{(X_i'^TX_i'-X_i'^TX_i-X_i^TX_i'+X_i^TX_i)}\\ &=\sum_{i=1}^{n}{(d_i^2-d_ie^TX_i-d_iX_i^Te+\left | \left | X_i \right | \right |^2)}\\ &=\sum_{i=1}^{n}{-d_i^2}+\sum_{i=1}^{n}{\left | \left | X_i \right | \right |^2}\\ &=-\sum_{i=1}^{n}{e^TX_iX_i^Te}+\sum_{i=1}^{n}{\left | \left | X_i \right | \right |^2} \end{align}

我们的目标是求\min_{e}{J(e)},观察等式(6),最小化J(e)即寻找\max_{e}{\sum_{i=1}^{n}{e^TX_iX_i^Te}},不妨设S=\sum_{i=1}^{n}{X_iX_i^T},实际上S即为X的协方差矩阵,我们的目标函数即为:

 \max_e{e^TSe} \qquad s.t.\ \left | \left | e \right | \right |=1

 带有约束条件的求极值问题一般采用拉格朗日优化法,令Z=e^TSe-\lambda (e^Te-1),应有:

\frac{\partial u}{\partial e}=2Se-2\lambda e=0

Se=\lambda e,显然,又是一个矩阵分解问题,\lambda即为S的特征值,e为对应的特征向量,每个向量对应着一个新的维度,与第一种解法一致。

三、算法实现

从第二章我们基本能够得到主成分分析的一般步骤:给定样本,先将其中心化,然后求中心化后样本的协方差矩阵,将其特征值分解,得到特征值(其实就是信息保留量,特征值越大代表该方向投影保留的信息越大)及对应的特征向量(投影方向,也可称为成分),然后用特征向量代码实现如下:

 

也可以直接使用sklearn库,如下:

 两者结果一致,另外需要说明的是,从信息占比中可以看出,前两个成本基本包括了原样本100%的信息,在这种情况下,第三个成分并没有什么意义,可以忽略,降维后的结果如下:

 可以发现,投影后第三个维度几乎没有任何实际意义。

PCA的介绍到此为止,本人也是属于学习阶段,只是将学习过程中自我的理解进行整理,如有不妥之处还望指出,有问题欢迎评论区交流,小姜顿首。

  • 29
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值