学习自感谢!
学习自感谢!
PCA是一种常用的数据分析方法。**PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。**这样做的好处是数据的主要信息还能保留下来,同时数据的维度降低了,并且变换后的维度两两不相关。
为什么需要PCA?
我们知道维数越大通常越难处理,在机器学习中,得到的数据维数通常都很高,处理起来比较麻烦,资源消耗很大,因此对数据进行降维处理是很必要的。
但是降维就意味着信息丢失吗?多少是有一点的。但是总有一些情况,让我们能够在信息损失相对较少的同时完成降维。比如:
1.如果某两个特征之间存在关联。举个比较极端的的例子,一个正方形的边长和它的面积,各属于两个特征,但是知道了边长面积肯定是确定的,那么就可以直接丢掉一列(边长或面积)。
2.如果某个维度存在并没有什么价值。这里举个比较经典的例子,就是电视转播球赛,把现场的三维转成平面的二维呈现在你眼前,减少了一维但是对于观众来说,并无太大影响。
3…
通过减少冗余信息,降低了维度,让数据处理更加容易,而有大部分有价值的信息都保留下来。而到底哪些信息是重要的?哪些可以删去?在这里需要注意,**降维并不是简单的删除某个维度,大部分情况下,降维的同时基也改变了。**那么如何选择新的基就是PCA需要解决的问题。
理论基础
向量的表示及基变换
内积与投影
两个维数相同的向量的内积被定义为:
内积运算将两个向量映射为一个实数。下面我们来分析内积的几何意义。
假设A和B是两个n维向量,我们知道n维向量等价表示为n维空间中的一条从原点发射的有向线段,假设A,B都是2维向量,,则在二维平面上A和B可以用两条发自原点的有向线段表示。
现在我们从A点向B所在直线引一条垂线。我们知道垂线与B的交点叫做A在B上的投影,再设AB的夹角为,则投影的矢量长度为 .
到这里我们还看不出内积这东西有什么关系,不过我们将内积表示为另一种我们熟悉的形式:
A与B的内积等于A到B的投影长度乘以B的模。再进一步,我们取B的模为1,那么有。
由此可以得出,**设向量B的模为1,则A与B的内积等于A向B所在直线投影的矢量长度。**这就是内积的集合解释。
基
上文说过,一个二维向量可以对应笛卡尔直角座标系除法的一个有向线段。例如,
在代数表示方面,我们经常用线段终点的点座标来表示向量,例如上图可以表示为(3,2)。但是仅仅一个(3,2)是无法精确的表示一个向量的。我们仔细看一下,这里的3实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2。也就是说我们其实隐式引入了一个定义:以x轴和y轴上正方向长度为1的向量为标准。那么一个向量(3,2)实际是说在x轴投影为3而y轴的投影为2。注意投影是一个矢量,所以可以为负。
更正式的说,向量(x,y)实际上表示线性组合:此处(1,0),(0,1)就是二维空间中的基。
所以,要准确描述向量,首先是要确定一组基,然后给出在基所在的各个直线上的投影。
在笛卡尔直角座标系中,我们通常是默认选择(1,0)和(0,1)的,实际上任何两个线性无关的二维向量都可以作为基,所谓的线性无关在二维平面上可以认为是不共线的向量。
例如,(1,1)和(-1,1)也可以成为一组基。一般来说我们希望基的模式1,因为从内积的意义可以看到,如果基的模是1,那么可以方便的用向量的点乘而直接获得其在新基上的座标了!(前面说过当模为1,点乘就代表向量A在向量B上的投影)实际上,对应任何一个向量我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。例如,上面的基可以变为
,和
现在,我们想获得(3,2)在新基上的座标,即在两个方向上的投影矢量值,那么根据内积的几何意义,我们只要分别计算(3,2)和两个基的内积,不难得到新的座标为。下图给出了新的基以及(3,2)在新基上座标值的示意图:
另外这里要注意的是,我们列举的例子中基是正交的(即内积为0,或直观说相互垂直),但可以成为一组基的唯一要求就是线性无关,非正交的基也是可以的。不过因为正交基有较好的性质,所以一般使用的基都是正交的。
基变换的矩阵表示
下面我们找一种简便的方式来表示基变换。还是拿上面的例子,想一下,将(3,2)变换为新基上的座标,就是用(3,2)与第一个基做内积运算,作为第一个新的座标分量,然后用(3,2)与第二个基做内积运算,作为第二个新座标的分量。实际上,我们可以用矩阵相乘的形式简洁的表示这个变换:
其中矩阵的两行分别为两个基,乘以原向量,其结果刚好为新基的座标。可以稍微推广一下,如果我们有m个二维向量,只要将二维向量按列排列成一个两行m列矩阵,然后用基矩阵乘以这个矩阵,就得到了所有这些向量在新基下的值。例如(1,1),(2,2),(3,3),想变换到刚才那组基上,则可以这样表示:
一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵相乘AB,就是变换结果。其中AB的第m列为B中第m列经新基变换后的结果
**特别需要注意的是,这里R可以小于N,而R决定了变换后数据的维数。**也就是说我们可以将N维的数据变换到更低维的空间中去,变换后的维度取决于我们使用的基的数量。因此这就矩阵相乘的也可以表示降维变换
最后,上述分析同时给矩阵相乘找到一个物理解释:**两个矩阵相乘的意义是将右边矩阵的每一列列向量变换到左边矩阵的每一个行向量为基所表示的空间中去。**所以我们说一个矩阵可以表示一个线性变换。
协方差矩阵及优化目标
上面我们说过选择不同的基可以对同样的数据给出不同的表示,而且如果**基向量的个数小于数据的维数就达到了降维的效果。**那么如何选择才是最优的?或者说我们有一组N维的向量,现在要将其降到K维,如何选择K个基才能最大程度的保留信息?
这里存在两个说法:
1.最近重构性。样本点到这个超平面的距离都足够近
2.最大可分性。样本点在这个超平面的投影尽可能的分开
下面我们以一个例子展开。假设我们的数据由五条记录组成,将他们表示成矩阵,
其中每列为一个数据记录,而一行为一个字段。我们首先将每个字段内所有值都减去字段均值(也就是行的均值),其结果就是每一维度的均值都变为0(这样是为了求方差变得简单,后面看到便会理解)。
我们看到上面数据,第一行均值为2,第二行均值为3,所以得到:
我们可以看下五条数据在平面直角座标系内的样子:
现在问题来了:如果我们必须使用一维来表示这些数据,又希望尽量保留原始的信息,你要如何选择?
通过上面的基变换的讨论我们知道,这里其实就是要在二维空间中选择一个方向,然后将所有向量都投影到这个基上,我们就得到了降维后的数据。那么如何选择这个方向才能保留更多的保留原始信息呢?
以上图为例,可以看出如果向x轴投影,那么最左边的两个点会重叠在一起,中间的两个点也会重叠在一起,于是本身四个各不相同的二维点投影后只剩下两个不同的值了,这是一种严重的信息丢失,同理,如果向y轴投影最上面的两个点和分布在x轴上的两个点也会重叠。所以看来x和y轴都不是最好的投影选择。我们直观目测,如果向通过第一象限和第三象限的斜线投影,则五个点在投影后还是可以区分的。
下面,我们用数学方法表述这个问题。
方差
现在我们希望投影后投影值尽可能的分散,而这种分散程度可以用数学上的方差来表达。此处一个维度的方差可以看做是每个元素与字段均值的差的平方和的均值。即:
由于上面我们已经将每个字段的均值都化为0了,因此方差可以直接用每个元素的平方和除以元素个数表示:
于是上面的问题被形式化表述为:寻找一个一维基,使得所有数据变换为这个基上的座标表示后,方差值最大。
协方差
对于上面二维降到一维我们找到一个使得方差最大的方向就可以了。考虑三维降为二维的问题。与之前相同,首先我们希望找一个方向使得投影后的方差最大,但这只完成了第一个方向的选择,我们还要选择第二个方向。如果我们还是单纯的只选择方差最大的方向,很明显,这个方向与第一个方向“几乎重叠”,这样的维度是无用的,所以我们还需要增加其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望他们之间存在线性相关性的,因为相关性意味着两个字段不完全独立,那么肯定存在重复表示的信息。
数学上我们使用两个字段的协方差表示其相关性,由于已经让每个字段均值为0,则:
可以看到,在字段均值为0的情况下,两个字段的内积可以简单的表示为内积除以元素数m。
当协方差为0时,表示两个字段完全独立。为了让协方差为0我们选择第二个基时只能在与第一个基正交的方向上选择,且方差较大。
综上,我们降维问题的优化目标为:将一组N维向量降为K维(默认K<=N ),其目标是选择K个单位正交基,使得原数据变换到正交基上后,各个字段相互之间的协方差为0,且字段的方差尽可能大。(在正交约数下取K个最大的方差)
协方差矩阵
我们看到,最终要达到的目的与字段内方差及字段间协方差有密切关系。因此我们希望能将两者统一表示,仔细观察发现,两者均可以表示为内积的形式,而内积又与矩阵相乘密切相关。于是我们来了灵感:
假设我们只有a和b两个字段,那么我们将它们按行组成矩阵X:
然后我们用X乘以X的转置,并乘上系数1/m:
这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。两者被统一到了一个矩阵的。
根据矩阵相乘的运算法则,这个结论很容易被推广到一般情况:
设我们有m个n维的数据记录,将其按列排成的矩阵X,设,则C是一个对称矩阵。其对角线分别为各个字段的方差,其余的表示字段间的协方差。
协方差对角化
根据上面的讨论我们发现,要达到上述的优化目标,等价于将协方差矩阵对角化.即除对角线外的其他元素化为0,并且对角线上将元素按从大到小排列,然后取最大的K个就达到了我们的目的。
PS:关于为什么要将协方差矩阵对角化,稍后我会有更严谨的数学推导。这里我们可以先分析下,前面我们说过要保证找K个单位正交基,同时要保证方差尽可能大。那么我们对协方差矩阵就行对角化,使得只有对角线不为0,其余为0。根据协方差矩阵的性质,对角线全部为方差,其余都为协方差,此时将其对角化就可以得到每个字段全部正交,并按照从大到小排列就可得到方差最大的K个。
我们进一步看一下原矩阵与基变换后矩阵协方差矩阵的关系:
设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵。设$ Y = PX$,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,我们推导下D和C的关系:
所以这里我们要找的P不是别的,而是能让原始协方差矩阵对角化的P。换句话说优化目标变为寻找一个矩阵P,满足是一个对角矩阵,并且对角元素按照从大到小排列,那么P的前K行就是要寻找的基,用p的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述的条件
现在所有问题都变成了协方差矩阵的对角化问题,由上文我们知道协方差矩阵是一个对称矩阵,实对称矩阵有一些性质:
1)实对称矩阵不同特征值对应的特征向量必然正交。
2)设特征向量λ重数为r,则必然存在r个线性无关的特征向量对应于λ,因此可以将这r个特征向量单位正交化。
也就是说,实对称矩阵一定可以找到n个单位正交向量,设这n个特征向量为,我们将其按列组成矩阵:
则对协方差矩阵C有如下结论:
其中为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。
到这里,我们发现我们已经找到了需要的矩阵P:
P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。
严谨的数学推导
不知道大家是否还记得我们上面所说的降维时超平面应该具备的两个性质:
1.最近重构性。样本点到这个超平面的距离都足够近,最小投影距离。
2.最大可分性:样本点在这个超平面上的投影尽可能的分开。
比较有意思的是无论是基于最近重构性还是最大可分性我们最后得到的是一个等价推导。
最近重构性
我们先看第一种推导,即样本点到超平面的距离足够近。
假设m个n维数据已经进行了中心化, .经过投影变换后的新座标系为,其中w是标准正交基,即
若丢弃新座标系中的部分座标,将其降维n’维,则设新的座标系为,样本点在n’维座标系中的投影为,其中是在低位座标系里的第j维座标。
如果我们用来恢复原始数据,则可以得到恢复数据其中,W为标准正交基组成的矩阵。
现在我们考虑整个样本集,我们希望所有的样本到这个超平面的距离足够近,即最小化:
将这个式子整理得到:
其中第(1)步用到了,第(2)步用到了平方和展开,第(3)步用到了矩阵转置公式和,第(4)步用到了,第(5)步就是合并同类项,第(6)步用到了和矩阵的迹,第(7)步将代数和表达为矩阵形式。
要最小化上式,注意到就是我们上述说的协方差矩阵,给定数据它就是一个常数,W的每一个向量是标准正交基。所以等价于最小化
** 这个最小化比较简单,这是个有等式约束条件的最小值,这里可以采用拉格朗日乘子法**得到:
对W求导有$ -XX^TW+\lambda W=0$,整理得到:
通过上面可以看出,W为的n’个特征向量组成的矩阵.而为的对应特征值组成的矩阵,特征值在主对角线,其余为0。
最大可分性
现在我们来看看基于最大投影方差的推导。
对于任意一个样本,其在新的座标系中的投影为,在新的座标系中样本点的方差为,要使所有的样本的投影方差最大,也就是最大化的迹,即:
到这里我们可以发现上式与基于最近重构性的推导是完全等价的了。
PCA算法流程
设有m条n维数据
(1)将原始数据排成n行m列矩阵X
(2)将X的每一行(代表一个维度)进行零均值化,即减去这一行的均值利于计算方差和协方差
(3)求出协方差矩阵
(4)求出协方差矩阵的特征值及对应的特征向量
(5)将特征值按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
(6)即为降维到k维后的数据
核化线性降维(KPCA)
线性降维方法假设从高维空间到低维空间的函数映射是线性的,然而在不少现实任务中可能需要非线性映射才能找到恰当的低维嵌入。
PCA是线性的,其对于非线性数据往往显得无能为力,而KPCA能够挖掘到数据中蕴含的非线性信息。
核主成分分析是基于核技巧对线性降维方法进行“核化”。这里就要用到核函数了,请看我的这片博客
KPCA的主要过程是:
1.首先将原始数据非线性映射到高维空间
2.再把第一步的数据从高维空间投影降维到需要的维数d’
可以看到KPCA只比PCA多了一步低维到高维的映射,降维的操作是一样的。所以最终KPCA最终投影到高维空间的超平面也应满足PCA中的最近重构性和最大可分性。
家丁我们将在高维特征空间中把数据投影到由确定的超平面上,即PCA要求解:
其中是样本点在高维特征空间中的像,则
其中 假定是由原始属性空间中的样本点通过映射产生,即若能被显示的表示出来则通过将样本映射至高维空间,再在特征空间中实施PCA即可。
上面(2)式变为
一般情况下我们不清楚的具体样子,因此引入核函数(其实核函数本质上就是简化低维非线性可分映射到高维线性可分后的内积计算)。
将(4)、(5)式带入(3)式化简得:
其中为对应的核矩阵,,显然上式是一个特征值分解问题,取K最大的d’个特征值对应的矩阵向量即可.
对新样本其投影后的第j(j = 1,2,…d’)维座标为:
其中已经规范化,是的第j个分量。由(7)可以看出,KPCA需要对所有样本求和,因此它的计算开销较大。