老妪能解PCA
来源:互联网 发布:他改变了中国淘宝评论 编辑:程序博客网 时间:2024/06/05 11:41
大白话理解PCA算法原理
现在的计算机计算能力越来越大,我们需要处理的数据也日趋复杂。复杂主要体现在数据量越来越多,而每组数据的维数也越来越高。这就出现了一种新的问题——维数灾难(Curse of Dimensionality)。人们开始寻求怎么用更少的维数来表示数据,却又不丢失重要信息。PCA(Principal Component Analysis)算法就是一种常用的降维方法。
什么是PCA
举一个例子,在我们小时候大家都会在语文课上写作文,有的同学写出的文章条理清晰,言简意赅,字数不多却能准确地表达出自己的所思所想。这样的文章一般就是贴在我们教室门口的范文。然而更多的学生的作品呢?洋洋洒洒写了好几页,东一笔西一划,啰啰嗦嗦才好不容易把自己想要表达的体现出来。这样的作文在老师批改后发回到学生手中,你也许会看到自己的长篇阔论旁边写了一个大大的红字—— 删 !
数据就好像我们的一篇作文,作文的评判在于能否合理的表达你的思想,那么数据的好坏就在于能否高度的还原信息。那么维数就好比一篇作文的字数,有的人可能用几行就能说明白,有的人却要用好几页的篇幅。对于这样的作文,我们会评价作者“过于啰嗦”,不会“找重点”。就好像作文中不会出现两段同样的内容,数据的每一维也都有着不同的意义。但是如果某几维表示的意思太过相近,明明说一遍就可以记住,却偏偏不停的重复,那么我们就要去掉冗余的部分。这就是PCA算法所做的事情。
PCA的原理
我们知道数据是通过向量来表示的,比如:
这个表示方法相信大家早就已经烂熟于胸,但是这样表示到底是什么意思呢? x 中每一个数字代表了什么,组合在一起又说明了什么呢?这里就要引入一下 基 的概念。
基的概念
正交基这个名词大家应该在高中数学就已经接触过,只是时间久了已经还给数学老师了。。。再明白一点, x 轴和 y 轴大家总应该再熟悉不过了吧,那些年解析几何的噩梦,不知道大家是否已经摆脱。 就如同盖房子需要地基一样,一个向量的表示也需要一组基。而向量中每一个具体的数字,就是在这个基向量上的投影。
举个例子,假如上面的 x 向量的 m 等于 2,即
拓展到 m 维,那么基向量就成了(1,0,0,…,0),(0,1,0,…,0),… , (0,0,0,…,1)。当然,基向量不一定都是像我们平常画的这样横平竖直,基向量也有可能是斜的,就像(1 ,1 )同样可以是一个基向量。而我们等下会看到,数据的降维其实就是基向量的改变。
协方差矩阵
还是回到作文的例子中来,我们说写一篇好的作文一定要有一个好的结构,比如要有环境描写,心理描写,人物描写等等。那么我的作文就可以写成这样的格式,第一段叙述一下环境,比如天气,温度;第二段我要写一下今天我遇到了谁,他穿了什么衣服,长得好不好看;第三段我写一下我见到这个人后的心情,是激动无比,还是感慨万千。
于是我的作文模板就出来了(天气,温度,衣着,长相,心情)。这些就是我的基向量,那么我就可以进行赋值,(晴朗,35°C,衬衫,清纯,开心)就是就着模板做出的作文。
但是我们发现,气温和天气有时候是有联系的,比如说今天是个太阳天,那么气温高的可能性就会很大,如果今天下雪,那么气温超过10°C就代表有重大冤情了。。。这就说明天气和温度的关联性很强,我们用协方差来表示。我们再来看天气和衣着,天气好了也许很穿的少一点,天气不好会穿多一些,但是爱美的女生冬天也有很多穿裙子的,还是会取决于个人喜好。所以天气和衣着有关系,只是关联性不如温度那么大。至于气温和长相,那真的是一毛钱关系都没有了。你听说过有人晴天美丽,阴天就羞于见人吗?
那么我们得到了这样一个结论,有什么用呢?我们可以删减下我们的作文,既然天气和温度基本在说同样的事情,那么我就要重新设计下天气的表示方式,能够在原来的基础上适当表示温度,就用气象来表示吧,注意:不是完全删去温度只保留天气!( 我认为这一点很重要,在我学习过程中也有困惑,就先强调下,等下会说。) 而天气和相貌没有联系,谁也推不出谁,就只能都保留。
这样我们的作文模板(基向量)就发生了变化,原本需要两句话来描述天气和温度,现在可以精简为一句话了。我们作文就精简了许多。
数据也是一样,PCA所做的就是判断哪些数据中会存在重复表示同一件事的情况,然后找到一个合理的新的基向量,来尽可能同时表示多维数据。那么怎么来看相关程度呢?就要运用协方差矩阵来表示。简单来说就是自己乘自己。定义:
当然这里有一个小的处理,协方差的定义式是:
如果将
特征值与特征向量
那么我们想要什么呢?对于作文来说,我要将关联性比较强的两个元素合二为一,并且我要保留比较重要的信息。对于数据,我们可以合并下协方差较大的数据,并尽可能保留那些方差较大,即分散程度较高的数据。
我们假设 q 是一个基,q 应该是 m 维的列向量,那么向量 x 在 q 上的投影就是
这样我们就明确了我们的目标,找到一组 q,使得
这里看出如果以 1 为基向量,效果明显会比 2 好,因为投影更为分散。
现在介绍下特征值
还记得我在合并天气和温度时标红的那句话吗?我们可以发现新的 n 个基向量并不是简单的从原 m 个基向量抽取 n 个,而是取的特征向量,实际上就是对两者的权衡得到的一个基。为什么呢?因为要避免相关性,使得 R 矩阵经过变换成为对角矩阵,也就保证了每个数据都是独立的。
有一个特殊情况,就是 R 本身就是对角矩阵,这说明什么?就是原始数据 x 中各维从一开始就是独立的,那就可以直接用特征值来找特征向量。但这种情况是意义不大的,如果都独立了,那我还删什么呢?
PCA过程
压缩数据(降维)
- 处理下原始数据,减去均值。
- 利用 x 求协方差矩阵
- 求出协方差矩阵的特征值和特征向量
- 选取前 n 大的特征值对应的特征向量,组成新的基向量组
- 以新的基向量组为基,得到降维后的数据。
重构数据
我们已经将数据降了维,那么我们怎么知道这样信息丢失是否严重,能不能接受这个新的数据呢?
假设
令
从课本上选取了这张图,左边是真实数据,手写的 1 到 10,右边是压缩后重构的结果,我们发现压缩到 64 维的情况时效果已经可以达到人眼识别的程度。
总结
我们通过将数据与写作文进行类比,最终能更好的理解PCA到底在做什么。总结来说,如果一篇作文可以套用模板来写(英语作文通常不就是。。。),那么模板中每个段落该写什么就是数据的基向量,想要压缩,就是在改变基向量的数目,从而使得各段落间重复的废话减少,并且内容更为重要。如果想要重构,我们发现会因为压缩导致信息减少而产生误差。