PCA和SVD
引言:在机器学习中,因为高纬空间样本具有稀疏性,导致模型比较难找到数据特征等原因。所以需要进行高维数据样本的降维,其中比较常使用的一种降维方法就是PCA。PCA主要是用于数据的降维,将高维的样本数据降维到低维。因为其在降维的过程中,综合了样本中各个特征的属性数据,所以降维后的样本数据仍然很好的保存了原始样本数据的信息,同时维度降低了(可以理解为,样本的属性减少,新的维度属性综合了之前所有样本的属性)。另一方面,与PCA紧密相关的另一个算法叫做SVD,它不仅能够用于数据的降维还可以用于去除掉样本数据中的噪声信息。
一.PCA
(一). 一个关于PCA的引例
首先,我们看这样的一个例子,图中有一个甜麦圈。
从图[1]中可以看到,在三维空间中,它可以看做是无数点堆积而成,而每一个点都可以用一个三维的向量来表示,所以在三维空间中甜麦圈它就可以由这么一个三维矩阵来描述出它的形状。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/aa9beb4fe38fd8bb53e864cd13bc01f8.png#pic_center)
这个时候,在三维空间中我们用手电去照射这个甜麦圈,可能在墙上留下不同的阴影信息,根据有的墙面阴影信息我们能很清楚的看出被投影的物体是什么,有的墙面的影子则完全不能分辨出被投影的物体。我们就可以想象!对于这样的甜麦圈,如果我们要去识别它,是否不需要利用它的三维信息,而只利用到它某些投影方向的二维信息就好了,比如说这面墙(图[2]有箭头的那面墙)的信息。这样我们不仅能很好的识别出为甜麦圈,而且还能降低甜麦圈数据的维度。
所以对于那些大数据,计算机视觉,机器学习领域的高维数据也是如此,由于各变量间存在一定的相关(线性)关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息,这就是数据降维的深层原因。
(二). PCA的样例:二维数据解释
为了方便讲解PCA的原理,这里我们先采用具有两个维度的数据。如下图所示:
这些数据服从高斯分布,落在二维的坐标轴上,这些数据就形成了一个椭圆形状的点阵。椭圆有一个长轴和一个短轴,在短轴方向上,我们可以看到数据变化较少;如果在极端的情况下,短轴就退化成一点,那么只有在长轴的方向才能够解释这些点的变化了。于是,样本数据就从二维降维到一维了。根据最大方差理论,也就是方差越大,信息量越多,(即信息量损失就最小),降维后的样本数据就越接近原始样本数据。为了将二维的数据降维到一维保存,我们就需要让样本点往样本属性间方差最大的方向投影,也就是往最能看出样本之间数据变化的方向投影。很明显图中向横轴方向的投影结果是最好的。因此横轴就是我们需要找出的投影方向。
但是在实际中遇到的数据可能并不像刚才那样就能很直接的找到投影方向。如图中所示
这些数据点向 X 1 X_{1} X1轴投影达不到很好的效果,向 X 2 X_{2} X2轴投影也不能达到很好的效果,那么我们就需要去找出更好的投影方向 Y 1 Y_{1} Y1。
那么怎么去找呢?首先要对这些样本进行数据中心化操作。
比如给定的一组样本数据,它们分别用向量 Z 1 ⃗ \vec{Z_{1}} Z1, Z 2 ⃗ \vec{Z_{2}} Z2… Z m ⃗ \vec{Z_{m}} Zm表示出来。首先求出数据的中心位于 u ⃗ \vec{u} u,然后每个向量分别减去中心向量 u ⃗ \vec{u} u,就可以把样本数据中心化,用新的向量形式 X 1 ⃗ \vec{X_{1}} X1, X 2 ⃗ \vec{X_{2}} X2… X m ⃗ \vec{X_{m}} Xm表示出来了 。
经过数据中心化后的样本集,我们可以看到如下图所示,
相当于以前的坐标轴 X 1 X_{1} X1, X 2 X_{2} X2 平移到了数据中心。接着我们就需要去找出真正的投影方向 Y 1 Y_{1} Y1.
(三). PCA的原理:关于PCA的数学求解过程
经过刚才的数据中心化,我们可以得到中心化后的样本数据矩阵 X m × n X_{m×n} Xm×n
刚才我们说过投影最好的方向是投影后越接近原始样本数据的方向,(也就是投影后原来的信息保存得更好的方向)。同时也是样本属性间方差最大的方向。
[8].样本点 x k x_{k} xk向假想的投影轴e方向投影
图中可以看到,样本点 x k x_{k} xk 向投影轴 e e e 投影后得到了 x k ′ x_{k}^{'} xk′在。这里,我们需要求出的就是这个投影轴方向 e e e。这儿的 x k x_{k} xk 和 x k ′ x_{k}^{'} xk′ 均为向量。
根据上面的投影,我们先列出这么一个公式,
投影后的样本点 x k ′ x_{k}^{'} xk′ 减去原始样本 x k x_{k} xk 的距离等于 J ( e ) J(e) J(e)这么一个函数,他的自变量就为投影轴方向 e e e。
首先我们来看一下这个公式
(1).公式中的第二行:我们对公式中的 x k ′ x_{k}^{'} xk′,用 a k a_{k} ak 乘以这个投影轴单位向量 e e e 来替换(图[8]有 a k a_{k} ak = e t e^{t} et x k x_{k} xk),其中 a k a_{k} ak 是一个标量。
(2).公式中的第三行:接着我们展开这个公式,看到第三行,首先 “第一块” 因为单位向量的模长为1,所以它模长的平方也等于1。然后看到第二块这儿, e e e 乘上 x k t x_{k}^{t} xkt可以用 a k a_{k} ak替换掉(标量的转置还是等于其本身),然后前面的和后面的相减。就可以等于第四行这个公式。
(3).公式中的第四行:又由于, a k a_{k} ak 等于 e e e 乘上 x k t x_{k}^{t} xkt,所以我们就把它代入进去替换掉 a k a_{k} ak。
然后就得到了第五行这个公式。
我们刚才说过投影方向最好的方向为保存原始信息最好的方向,在这儿也就是投影之后的点与原始样本点距离最小的方向,也就是 J ( e ) J(e) J(e) 取最小的时候。所以投影样本点 x k ′ x_{k}^{'} xk′和原始样本 x k x_{k} xk 之间的距离 J ( e ) J(e) J(e) 函数就可以用来度量这个投影的好坏。
我们可以看到什么时候 J ( e ) J(e) J(e) 取最小呢?因为后面这一块(蓝色的圈 圈出来的部分)始终为原始样本的模长之和,所以大小恒等不变。那么要 J ( e ) J(e) J(e) 取最小,前面负的这一块(红色的圈 圈出来的部分)就要最大。
我们仔细一点发现,前面这块求和后(红色的圈 圈出来的部分)的结果其实就是一个矩阵,而这个矩阵就是样本的散度矩阵。也就是等于样本特征属性数据的协方差矩阵乘上(m-1)。[m为样本的个数]
补:在机器学习模式识别中,经常需要应用到协方差矩阵和散布矩阵。如在PCA主成分分析中,需要计算样本的散度矩阵,有的论文是计算协方差矩阵。实质上二者意义差不多,散布矩阵(散度矩阵)前乘以系数1/(m-1)就可以得到协方差矩阵了。
散布矩阵的大小由特征维数d决定
在这里我们发散一下,离开PCA的主线求解,看一下这个协方差矩阵和散度矩阵的关系。我把样本矩阵、散度矩阵、样本属性的协方差矩阵的关系做了如下图:
看完了协方差矩阵和散度矩阵的关系,我们接着回到PCA的主线求解过程中来。
从图[13]中画红圈打箭头的位置,我们可以看到单位向量 e e e 乘上这个散度矩阵再乘上一个单位向量 e t e^{t} et,其实它等于的就是一个标量。那么怎么去选择这个 e e e 的方向让乘出来的标量最大呢?
现在我们的问题就变为了求解画红圈部分的最大值。因为这儿有一个限定条件, e e e 的模长等于1,所以这儿我们就可以利用 拉格朗日乘数法 列出一个新等式。
因为要取最大值,那么它的导数就为0。令导数等于0,然后求导,这个时候找出的自变量e的方向,就是投影方向。
在上图[14]中,然后我们发现,这个式子最后化成了这个样子。很明显,这个公式就是我们线性代数中求矩阵特征值和特征向量的方程。可以看出,投影方向 e e e 就为散度矩阵(协方差矩阵*(m-1))的特征向量。
这时候我们在等式左边乘上单位向量 e e e的转置 e t e^{t} et,整个公式的结果就等于了特征值。要让 e t S e e^{t}Se etSe最大,那么就去找最大特征值对应的特征向量,这样就把第一个主成分方向找出来了。同理,当然你也可以根据你降维的需要,找出剩下的投影方向。
(四). PCA的总结
如上图[15]所示,最后我们再来回顾一下PCA的思想。对于一个有 m m m 个样例, n n n 个特征属性的样本矩阵 X m × n X_{m×n} Xm×n.他的特征属性数据组成的散度矩阵(协方差矩阵*(m-1))为 C C C,从散度矩阵(协方差矩阵*(m-1))中选取 K 个特征向量组成投影矩阵 P n × k P_{n×k} Pn×k。然后将样本数据投影到这 K 维正交向量组成的 K 维空间上,样本矩阵就从 X m × n X_{m×n} Xm×n 降维到了 B m × k B_{m×k}