主成分分析

主成分分析:http://blog.codinglabs.org/articles/pca-tutorial.html
主成分分析,PCA 是一种常用的数据分析方法,通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,用于高维数据的降维。

1 数据的向量表示及降维问题
在数据挖掘和机器学习中,数据用向量表示。每一条数据都是一条记录,如:(日期,浏览量,访客数,下单数,成交数,成交金额)。其中“日期”是一个记录标志而非度量值,而数据挖掘关心的大多数使度量值,因此需要忽略日期这个字段,剩下的就是一个五维向量,例如:(500,240,25,13,2312.15)T。由于习惯上使用列向量表示一条记录,并且一般没有加转置符号,所以下文说到的向量默认都是列向量。
当需要处理成千上万维的数据时,机器学习的资源消耗是不可接受的,因此必须对数据进行降维。
降维意味着信息的丢失,不过鉴于实际数据本身常常存在的相关性,我们可以想办法在降维的同时将信息的损失尽量降低。
但是,到底删除哪一列损失的信息才最小?亦或根本不是单纯删除几列,而是通过某些变换将原始数据变为更少的列但又使得丢失得信息最小?到底如何度量丢失信息得多少?如何根据原始数据决定具体的降维操作步骤?而PCA就是一种具有严格数学基础并且已被广泛采用的降维方法。

2 向量基础知识——向量的表示及基变换

(1)内积与投影
内积:内积
在这里插入图片描述
内积运算将两个向量映射为一个实数。内积的几何意义:如上图所示,向量AB可以用两条资源点发出的有向线段表示。现在从A点向B所在直线引一条垂线。垂线与B的交点叫做A在B上的投影,再设AB之间的夹角是a,则投影的适量长度为|A|cos(a),其中在这里插入图片描述是向量A的模,也就是A线段的标量长度。注意这里我们专门区分了矢量长度和标量长度,标量长度总是大于等于0,值就是线段的长度;而矢量长度可能为负,其绝对值是线段长度,而符号取决于其方向与标准方向相同或相反。
内积的另一种形式:A与B的内积等于A到B的投影长度乘以B的模。
在这里插入图片描述
当|B|=1时,那么就变成了:A与B的内积值等于A向B所在直线投影的矢量长度。
当B的模等于1时,A在B上的投影的矢量长度就是A点乘B
在这里插入图片描述

(2)基
在这里插入图片描述
如图所示,在代数表示方面,我们使用线段终点的点坐标表示向量。例如上面的向量可以表示为(3,2)。但是这里的3实际表示的是向量在X轴上的投影之是3,在Y轴上的投影值是2。也就是说,我们其实隐式引入了一个定义:**以x轴和y轴上正方向长度为1的向量为标准,向量可以用在x轴投影和在y轴的投影值表示。**注意投影是一个矢量,可以为负。
更正式的说,向量(x,y)实际上表示线性组合:在这里插入图片描述
所有二维向量都可以表示为这样的线性组合。此处(1,0)和(0,1)叫做二维空间中的一组基。

在这里插入图片描述
所以,要准确描述向量,首先要确定一组基,然后给出向量在基所在的各个直线上的投影值。
只不过我们经常默认以(1,0)和(0,1)为基,实际上任何两个线性无关的二维向量都可以成为一组基,所谓线性无关在二维平面内可以直观认为是两个不在一条直线上的向量。例如,(1,1)和(-1,1)也可以成为一组基。一般来说,我们希望基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标(投影值)了!而对于任何一个向量可以用向量除以模得到其同方向上模为1的向量。例如,上面的基可以变为在这里插入图片描述
我们想获得(3,2)在新基上的坐标,即在两个方向上的投影矢量值,那么根据内积的几何意义,我们只要分别计算(3,2)和两个基的内积,不难得到新的坐标为在这里插入图片描述
另外,我们列举的例子中基是正交的(即内积为0),但可以成为一组基的唯一要求就是线性无关,非正交的基也是可以的。不过因为正交基有较好的性质,所以一般使用的基都是正交的。

(3)基变换的矩阵表示
实际上,我们可以用矩阵相乘的形式简洁的表示这个变换:在这里插入图片描述
其中矩阵的两行分别为两个基,乘以原向量,其结果刚好为新基的坐标。可以稍微推广一下,如果我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用“基矩阵”乘以这个矩阵,就得到了所有这些向量在新基下的值。例如(1,1),(2,2),(3,3),想变换到刚才那组基上,则可以这样表示:在这里插入图片描述
于是一组向量的基变换就可以表示为矩阵的相乘。
一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果。在这里插入图片描述
其中pi是一个行向量,表示第i个基,aj是一个列向量,表示第j个原始数据记录。
特别要注意的是,这里R可以小于N,而R决定了变换后数据的维数。也就是说,我们可以将一N维数据变换到更低维度的空间中去,变换后的维度取决于基的数量
最后,上述分析同时给矩阵相乘找到了一种物理解释:**两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。**更抽象的说,一个矩阵可以表示一种线性变换。

(4)协方差矩阵及优化目标
上面我们讨论了选择不同的基可以对同样一组数据给出不同的表示,而且如果基的数量少于向量本身的维数,则可以达到降维的效果。但是我们还没有回答一个最最关键的问题:如何选择基才是最优的。或者说,如果我们有一组N维向量,现在要将其降到K维(K小于N),那么我们应该如何选择K个基才能最大程度保留原有的信息?
假设我们的数据由五条记录组成,将它们表示成矩阵形式:在这里插入图片描述
其中每一列表示一条数据记录,而一行表示一个字段。首先将每个字段内所有值都减去字段均值,其结果是将每个字段都变为均值为0。所以变换后:
在这里插入图片描述
我们可以看下五条数据在平面直角坐标系内的样子:在这里插入图片描述
如果我们需要使用一维来表示这些数据,又希望尽量保留原始的信息。实际上是要在二维平面中选择一个方向,将所有数据都投影到这个方向所在直线上,用投影值表示原始记录。那么如何选择这个方向(或者说基)才能尽量保留最多的原始信息呢?一种直观的看法是:希望投影后的投影值尽可能分散。
直观目测,如果向x轴投影或者向y轴投影,本身四个各不相同的二维点投影后只剩下两个不同的值了,这是一种严重的信息丢失。但是如果向通过第一象限和第三象限的斜线投影,则五个点在投影后还是可以区分的。
下面,我们用数学方法表述这个问题。
1)方差
用数学上的方差来表述这种分散程度。此处,一个字段的方差可以看做是每个元素与字段均值的差的平方和的均值,即:
在这里插入图片描述
由于上面已经将每个字段的均值都化为0了,因此方差可以直接用每个元素的平方和除以元素个数表示:
在这里插入图片描述
于是上面的问题被形式化表述为:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大。

2)协方差
对于上面二维降成一维的问题来说,找到那个使得方差最大的方向就可以了。不过对于更高维,还有一个问题需要解决。考虑三维降到二维问题,首先找到一个方向使得投影后方差最大,继而选择第二个投影方向:从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。
数学上可以用两个字段的协方差表示其相关性,协方差的数学公式:
在这里插入图片描述
如果有A、B两个向量,“ai与其均值之差”乘以“bi与其均值之差”得到一个乘积,再对每个的乘积求和,再求出均值。
由于已经让每个字段均值为0,则:
在这里插入图片描述
可以看到,在字段均值为0的情况下,两个字段的协方差可以表示为其内积除以元素数m。
当协方差为0时,表示两个字段完全独立。为了让协方差为0,我们选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的。
至此,我们得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。

3)协方差矩阵
上面我们导出了优化目标,但是这个目标只说要什么,但根本没有说怎么做。所以我们要继续在数学上研究计算方案。我们看到,最终要达到的目的与字段内方差及字段间协方差有密切关系。因此我们希望能将两者统一表示,而两者均可以表示为内积的形式,而内积又与矩阵相乘密切相关。于是我们来了灵感:
假设我们只有a和b两个字段,那么我们将它们按行组成矩阵X:
在这里插入图片描述
然后我们用X乘以X的转置,并乘上系数1/m:
在这里插入图片描述
这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。两者被统一到了一个矩阵的。
根据矩阵相乘的运算法则,这个结论很容易被推广到一般情况:
设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设
在这里插入图片描述
则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。

4)协方差矩阵对角化
根据上述推导,我们发现要达到优化目前,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的。这样说可能还不是很明晰,我们进一步看下原矩阵X与基变换后矩阵协方差矩阵D的关系:
设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,我们推导一下D与C的关系:
在这里插入图片描述
我们要找的P不是别的,而是能让原始协方差矩阵对角化的P。换句话说,优化目标变成了寻找一个矩阵P,满足
PCPTPCPT
是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X,就使得X从N维降到了K维,并满足上述优化条件。
现在所有焦点都聚焦在了协方差矩阵对角化问题上:
协方差矩阵C是一个是对称矩阵,在线性代数上,实对称矩阵有一系列非常好的性质:
1)实对称矩阵不同特征值对应的特征向量必然正交。
2)设特征向量λ的重数为r,则必然存在r个线性无关的特征向量对应于λ,因此可以将这r个特征向量单位正交化。
由上面两条可知,一个n行n列的实对称矩阵一定可以找到**n个单位正交特征向量,**设这n个特征向量为在这里插入图片描述
我们将其按列组成矩阵:
在这里插入图片描述
则对协方差矩阵C有如下结论:
在这里插入图片描述
其中Λ为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。
到这里,我们发现我们已经找到了需要的矩阵P:
在这里插入图片描述
P是协方差矩阵的特征向量单位化,后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照Λ中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。
至此我们完成了整个PCA的数学原理讨论。在下面的一节,我们将给出PCA的一个实例。

3 算法及实例
(1)PCA算法

PCA的算法步骤:
设有m条n维数据:
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵在这里插入图片描述
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PXY=PX即为降维到k维后的数据

(2)实例
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值