降维算法一 : PCA (Principal Component Analysis)

PCA简介

在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。
因此需要找到一个合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息。主成分分析与因子分析就属于这类降维的方法。

在PCA中,数据从原来的坐标系转化到新的坐标系中。当然这里新的坐标系也不是随便设定的,而是应该根据数据本身的特征来设计。通常第一个新坐标轴选择的是原始数据方差最大的方向第二个坐标轴是与第一个坐标轴正交且具有最大方差的方向。这句话的意思就是,第二个选取的方向应该和第一个方向具有很弱的相关性。如果有很强的相关性的话,那么选其中一个就ok了。然后依此类推,选出后面的方向,其数目应该和原始数据的特征数目一致。
通常我们会发现,大部分的方差就集中在前面几个方向中,因此可以忽略后面的方向,达到降维的效果。
然后书上有这么一段话,介绍实现该过程的伪代码。

降维算法一 : PCA (Principal Component Analysis)_第1张图片

看不懂这里的协方差矩阵是啥,为什么是这样子的?
只好从初中数学的方差开始学习了。。。

基本统计学概念

统计学里有几个基本的概念,有均值,方差,标准差等等。比如有一个含有n个样本的集合:X={x1,...,xn} 那么,

降维算法一 : PCA (Principal Component Analysis)_第2张图片

根据以前我们所知道的, 方差是用来衡量数据的波动程度的,如果大部分数据都在均值附近,那么方差就会是很小的值。

协方差是什么

分析完了方差我们再看看啥是协方差。
方差描述的是其本身数据的情况,如果我们想知道,某2种数据之间的关系,该怎么描述呢,比如,男生帅气程度(or猥琐程度),和受女孩子欢迎程度。假设这里有样本集合f(x,y)=(xi,...,yi),x表示男生帅气指数,y表示相应的受女生欢迎指数,那么2者之间的关联程度可以这么定义:



那么从上面可知,如果结果为正值,那么说明2者是正相关,男生越帅,女生越喜欢。。(废话-.-)

协方差矩阵是什么

再看看协方差矩阵,上面提到的协方差是二维数据的情况,那么如果是多维,比如三维,x,y,z.那么两两之间的协方差就有6个,再加上自己与自己的协方差就有9个,可以画成矩阵的形式了。


PCA与协方差矩阵

讲完协方差矩阵,再回头看看PCA,PCA和这个矩阵又有啥关系呢。
PCA的理念就是将高维空间的数据映射到低维空间,降低维度之间的相关性,并且使自身维度的方差尽可能的大。那么哪种数据方式可以同时表达维度之间的相关性以及,维度本身的方差呢?就是上面提到的协方差矩阵。协方差矩阵对角线上是维度的方差其他元素是两两维度之间的协方差(即相关性)

PCA的目的之一:降低维度之间的相关性,也就说减小协方差矩阵非对角线上的值。如何减小呢?可以使协方差矩阵变成对角矩阵。对角化后的矩阵,其对角线上是协方差矩阵的特征值。这里又提到了特征值,看看它到底有啥潜在的含义。

特征值与特征向量

根据其定义Ax=cx,其中A是矩阵,c是特征值,x是特征向量;
Ax矩阵相乘的含义就是,矩阵A对向量x进行一系列的变换(旋转或者拉伸),其效果等于一个常数c乘以向量x。
通常我们求特征值和特征向量是想知道,矩阵能使哪些向量(当然是特征向量)只发生拉伸,其拉伸程度如何(特征值的大小)。这个真正的意义在于,是为了让我们看清矩阵能在哪个方向(特征向量)产生最大的变化效果。

好比以下来自书本的图片:

降维算法一 : PCA (Principal Component Analysis)_第3张图片

回头再看刚才的协方差矩阵对角化之后,得到了协方差矩阵的特征值;那么我们就能明白协方差矩阵在特征值对应的特征向量的方向上有最大的变化效果。当然这里的特征值会有多个,我们只需要取最大的几个就可以了,特征值越大,表示其在特征向量上的变化越大。我们把这几个特征值对应的特征向量的方向作为新的维度,于是,降维的目的达到了。。。

数据降维

   为了说明什么是数据的主成分,先从数据降维说起。数据降维是怎么回事儿?假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用三个维度,而事实上,这些点的分布仅仅是在一个二维的平面上,那么,问题出在哪里?如果你再仔细想想,能不能把x,y,z坐标系旋转一下,使数据所在平面与x,y平面重合?这就对了!如果把旋转后的坐标系记为x',y',z',那么这组数据的表示只用x'和y'两个维度表示即可!当然了,如果想恢复原来的表示方式,那就得把这两个坐标之间的变换矩阵存下来。这样就能把数据维度降下来了!但是,我们要看到这个过程的本质,如果把这些数据按行或者按列排成一个矩阵,那么这个矩阵的秩就是2!这些数据之间是有相关性的,这些数据构成的过原点的向量的最大线性无关组包含2个向量,这就是为什么一开始就假设平面过原点的原因!那么如果平面不过原点呢?这就是数据中心化的缘故!将坐标原点平移到数据中心,这样原本不相关的数据在这个新坐标系中就有相关性了!有趣的是,三点一定共面,也就是说三维空间中任意三点中心化后都是线性相关的,一般来讲n维空间中的n个点一定能在一个n-1维子空间中分析!
   上一段文字中,认为把数据降维后并没有丢弃任何东西,因为这些数据在平面以外的第三个维度的分量都为0。现在,假设这些数据在z'轴有一个很小的抖动,那么我们仍然用上述的二维表示这些数据,理由是我们可以认为这两个轴的信息是数据的主成分,而这些信息对于我们的分析已经足够了,z'轴上的抖动很有可能是噪声,也就是说本来这组数据是有相关性的,噪声的引入,导致了数据不完全相关,但是,这些数据在z'轴上的分布与原点构成的夹角非常小,也就是说在z'轴上有很大的相关性,综合这些考虑,就可以认为数据在x',y' 轴上的投影构成了数据的主成分!
  特征选择的问题,其实就是要剔除的特征主要是和类标签无关的特征。而这里的特征很多是和类标签有关的,但里面存在噪声或者冗余。在这种情况下,需要一种特征降维的方法来减少特征数,减少噪音和冗余,减少过度拟合的可能性。
  PCA的思想是将n维特征映射到k维上(k

PCA实例

现在假设有一组数据如下:
降维算法一 : PCA (Principal Component Analysis)_第4张图片

行代表了样例,列代表特征,这里有10个样例,每个样例两个特征。可以这样认为,有10篇文档,x是10篇文档中“learn”出现的TF-IDF,y是10篇文档中“study”出现的TF-IDF。
** 第一步**,分别求x和y的平均值,然后对于所有的样例,都减去对应的均值。这里x的均值是1.81,y的均值是1.91,那么一个样例减去均值后即为(0.69,0.49),得到

降维算法一 : PCA (Principal Component Analysis)_第5张图片

第二步,求特征协方差矩阵,如果数据是3维,那么协方差矩阵是:

这里只有x和y,求解得:

对角线上分别是x和y的方差,非对角线上是协方差。协方差是衡量两个变量同时变化的变化程度。协方差大于0表示x和y若一个增,另一个也增;小于0表示一个增,一个减。如果x和y是统计独立的,那么二者之间的协方差就是0;但是协方差是0,并不能说明x和y是独立的。协方差绝对值越大,两者对彼此的影响越大,反之越小。协方差是没有单位的量,因此,如果同样的两个变量所采用的量纲发生变化,它们的协方差也会产生树枝上的变化。

第三步,求协方差的特征值和特征向量,得到

降维算法一 : PCA (Principal Component Analysis)_第6张图片

上面是两个特征值,下面是对应的特征向量,特征值0.0490833989对应特征向量为第一条向量,这里的特征向量都归一化为单位向量。

第四步,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是(-0.677873399, -0.735178656)T。
第五步,将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(mn),协方差矩阵是nn,选取的k个特征向量组成的矩阵为EigenVectors(nk)。那么投影后的数据FinalData为FinalData(101) = DataAdjust(10*2矩阵) x 特征向(-0.677873399, -0.735178656)T 得到的结果是

降维算法一 : PCA (Principal Component Analysis)_第7张图片

这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。
 上面的数据可以认为是learn和study特征融合为一个新的特征叫做LS特征,该特征基本上代表了这两个特征。上述过程如下图2描述:

降维算法一 : PCA (Principal Component Analysis)_第8张图片

  正号表示预处理后的样本点,斜着的两条线就分别是正交的特征向量(由于协方差矩阵是对称的,因此其特征向量正交),最后一步的矩阵乘法就是将原始样本点分别往特征向量对应的轴上做投影。
  整个PCA过程貌似及其简单,就是求协方差的特征值和特征向量,然后做数据转换。但是有没有觉得很神奇,为什么求协方差的特征向量就是最理想的k维向量?其背后隐藏的意义是什么?整个PCA的意义是什么?

PCA推导

先看下面这幅图:


降维算法一 : PCA (Principal Component Analysis)_第9张图片

先假定只有二维,即只有两个变量,它们由横坐标和纵坐标所代表;因此每个观测值都有相应于这两个坐标轴的两个坐标值;如果这些数据形成一个椭圆形状的点阵,那么这个椭圆有一个长轴和一个短轴。在短轴方向上,数据变化很少;在极端的情况,短轴如果退化成一点,那只有在长轴的方向才能够解释这些点的变化了;这样,由二维到一维的降维就自然完成了。
上图中,u1就是主成分方向,然后在二维空间中取和u1方向正交的方向,就是u2的方向。则n个数据在u1轴的离散程度最大(方差最大),数据在u1上的投影代表了原始数据的绝大部分信息,即使不考虑u2,信息损失也不多。而且,u1、u2不相关。只考虑u1时,二维降为一维。
椭圆的长短轴相差得越大,降维也越有道理。

最大方差理论

在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。如前面的图,样本在u1上的投影方差较大,在u2上的投影方差较小,那么可认为u2上的投影是由噪声引起的。
因此我们认为,最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。
比如我们将下图中的5个点投影到某一维上,这里用一条过原点的直线表示(数据已经中心化):

降维算法一 : PCA (Principal Component Analysis)_第10张图片

假设我们选择两条不同的直线做投影,那么左右两条中哪个好呢?根据我们之前的方差最大化理论,左边的好,因为投影后的样本点之间方差最大(也可以说是投影的绝对值之和最大)。
计算投影的方法见下图5:


降维算法一 : PCA (Principal Component Analysis)_第11张图片

图中,红色点表示样例x(i),蓝色点表示在u上的投影,u是直线的斜率也是直线的方向向量,而且是单位向量。蓝色点是x(i)在u上的投影点,离原点的距离是i,u> (即xTu x(i)T或者uTx uTx(i))。

最小二乘法

我们使用最小二乘法来确定各个主轴(主成分)的方向
对给定的一组数据(下面的阐述中,向量一般均指列向量):

其数据中心位于:

数据中心化(将坐标原点移到样本点的中心点):

中心化后的数据在第一主轴u1方向上分布散的最开,也就是说在u1方向上的投影的绝对值之和最大(也可以说方差最大),计算投影的方法上面已经阐述,就是将x与u1做内积,由于只需要求u1的方向,所以设u1也是单位向量。

在这里,也就是最大化下式:

由矩阵代数相关知识可知,可以对绝对值符号项进行平方处理,比较方便。所以进而就是最大化下式:

两个向量做内积,可以转化成矩阵乘法:

所以目标函数可以表示为:

括号里面就是矩阵乘法表示向量内积,由于列向量转置以后是行向量,行向量乘以列向量得到一个数,一个数的转置还是其本身,所以又可以将目标函数化为:

去括号:
又由于u1和i无关,可以拿到求和符外面,上式化简为:

学过矩阵代数的同学可能已经发现了,上式括号里面求和后的结果,就相当于一个大矩阵乘以自身的转置,其中,这个大矩阵的形式如下:
降维算法一 : PCA (Principal Component Analysis)_第12张图片

X矩阵的第i列就是xi

于是有:
所以目标函数最终化为:

其中的 u1TXXTu1就是一个二次型,
我们假设的XXT某一特征值为λ,对应的特征向量为ξ,有

降维算法一 : PCA (Principal Component Analysis)_第13张图片

所以λ >= 0 , XXT半正定的对称矩阵, u1TXXTu1半正定阵的二次型,由矩阵代数知识得出,目标函数存在最大值!
下面我们求解最大值、取得最大值时u1的方向这两个问题。
先解决第一个问题,对于向量x的二范数平方为:


同样,目标函数也可以表示成映射后的向量的二范数平方:

把二次型化成一个范数的形式,由于u1取单位向量,最大化目标函数的基本问题也就转化为:对一个矩阵,它对一个向量做变换,变换前后的向量的模长伸缩尺度如何才能最大?我们有矩阵代数中的定理知,向量经矩阵映射前后的向量长度之比的最大值就是这个矩阵的最大奇异值,即:

式中,σ1是矩阵A的最大奇异值(亦是矩阵A的二范数),它等于 AAT(或ATA)的最大特征值开平方。
针对本问题来说,XXT是半正定对称阵,也就意味着它的特征值都大于等于0,且不同特征值对应的特征向量是正交的,构成所在空间的一组单位正交基。

再解决第二个问题,对一般情况,设对称阵

的n个特征值分别为:
相应的单位特征向量为:
任取一个向量x,用特征向量构成的空间中的这组基表示为:

则:
降维算法一 : PCA (Principal Component Analysis)_第14张图片

所以:

针对第二个问题,我们取上式中的

,目标函数
取得最大值,也就是
最大特征值时,对应的特征向量的方向,就是第一主成分u1的方向!(第二主成分的方向为XX T的第二大特征值对应的特征向量的方向,以此类推)。
证明完毕。
主成分所占整个信息的百分比可用下式计算:

式中分母为XX T所有奇异值平方和,分子为所选取的前k大奇异值平方和。
有些研究工作表明,所选的主轴总长度占所有主轴长度之和的大约85% 即可,其实,这只是一个大体的说法,具体选多少个,要看实际情况而定。

参考资料

[1]From 主成分分析(PCA)原理详解
[2]From 机器学习实战-PCA主成分分析、降维

你可能感兴趣的:(降维算法一 : PCA (Principal Component Analysis))