老妪能解PCA

来源:互联网 发布:他改变了中国淘宝评论 编辑:程序博客网 时间:2024/06/05 11:41

大白话理解PCA算法原理

现在的计算机计算能力越来越大,我们需要处理的数据也日趋复杂。复杂主要体现在数据量越来越多,而每组数据的维数也越来越高。这就出现了一种新的问题——维数灾难(Curse of Dimensionality)。人们开始寻求怎么用更少的维数来表示数据,却又不丢失重要信息。PCA(Principal Component Analysis)算法就是一种常用的降维方法。

什么是PCA

举一个例子,在我们小时候大家都会在语文课上写作文,有的同学写出的文章条理清晰,言简意赅,字数不多却能准确地表达出自己的所思所想。这样的文章一般就是贴在我们教室门口的范文。然而更多的学生的作品呢?洋洋洒洒写了好几页,东一笔西一划,啰啰嗦嗦才好不容易把自己想要表达的体现出来。这样的作文在老师批改后发回到学生手中,你也许会看到自己的长篇阔论旁边写了一个大大的红字——

数据就好像我们的一篇作文,作文的评判在于能否合理的表达你的思想,那么数据的好坏就在于能否高度的还原信息。那么维数就好比一篇作文的字数,有的人可能用几行就能说明白,有的人却要用好几页的篇幅。对于这样的作文,我们会评价作者“过于啰嗦”,不会“找重点”。就好像作文中不会出现两段同样的内容,数据的每一维也都有着不同的意义。但是如果某几维表示的意思太过相近,明明说一遍就可以记住,却偏偏不停的重复,那么我们就要去掉冗余的部分。这就是PCA算法所做的事情。

PCA的原理

我们知道数据是通过向量来表示的,比如:

x=(x1,x2,x3,...,xm)T

这个表示方法相信大家早就已经烂熟于胸,但是这样表示到底是什么意思呢? x 中每一个数字代表了什么,组合在一起又说明了什么呢?这里就要引入一下 的概念。

基的概念

正交基这个名词大家应该在高中数学就已经接触过,只是时间久了已经还给数学老师了。。。再明白一点, x 轴和 y 轴大家总应该再熟悉不过了吧,那些年解析几何的噩梦,不知道大家是否已经摆脱。 就如同盖房子需要地基一样,一个向量的表示也需要一组基。而向量中每一个具体的数字,就是在这个基向量上的投影。

举个例子,假如上面的 x 向量的 m 等于 2,即 x=(x1,x2),这样表示应该熟悉吧,注意这里 x 不是点,是一个向量,起点是(0,0),终点是(x1,x2),而基呢,就是小学生都能够画出来的平面直角坐标系啊!而(x1,x2)分别就是 x 向量在 x , y 轴上面的投影。


这里写图片描述

拓展到 m 维,那么基向量就成了(1,0,0,…,0),(0,1,0,…,0),… , (0,0,0,…,1)。当然,基向量不一定都是像我们平常画的这样横平竖直,基向量也有可能是斜的,就像(1 ,1 )同样可以是一个基向量。而我们等下会看到,数据的降维其实就是基向量的改变

协方差矩阵

还是回到作文的例子中来,我们说写一篇好的作文一定要有一个好的结构,比如要有环境描写,心理描写,人物描写等等。那么我的作文就可以写成这样的格式,第一段叙述一下环境,比如天气,温度;第二段我要写一下今天我遇到了谁,他穿了什么衣服,长得好不好看;第三段我写一下我见到这个人后的心情,是激动无比,还是感慨万千。

于是我的作文模板就出来了(天气,温度,衣着,长相,心情)。这些就是我的基向量,那么我就可以进行赋值,(晴朗,35°C,衬衫,清纯,开心)就是就着模板做出的作文。

但是我们发现,气温和天气有时候是有联系的,比如说今天是个太阳天,那么气温高的可能性就会很大,如果今天下雪,那么气温超过10°C就代表有重大冤情了。。。这就说明天气和温度的关联性很强,我们用协方差来表示。我们再来看天气和衣着,天气好了也许很穿的少一点,天气不好会穿多一些,但是爱美的女生冬天也有很多穿裙子的,还是会取决于个人喜好。所以天气和衣着有关系,只是关联性不如温度那么大。至于气温和长相,那真的是一毛钱关系都没有了。你听说过有人晴天美丽,阴天就羞于见人吗?

那么我们得到了这样一个结论,有什么用呢?我们可以删减下我们的作文,既然天气和温度基本在说同样的事情,那么我就要重新设计下天气的表示方式,能够在原来的基础上适当表示温度,就用气象来表示吧,注意:不是完全删去温度只保留天气!( 我认为这一点很重要,在我学习过程中也有困惑,就先强调下,等下会说。) 而天气和相貌没有联系,谁也推不出谁,就只能都保留。

这样我们的作文模板(基向量)就发生了变化,原本需要两句话来描述天气和温度,现在可以精简为一句话了。我们作文就精简了许多。

数据也是一样,PCA所做的就是判断哪些数据中会存在重复表示同一件事的情况,然后找到一个合理的新的基向量,来尽可能同时表示多维数据。那么怎么来看相关程度呢?就要运用协方差矩阵来表示。简单来说就是自己乘自己。定义:

R=xxT

当然这里有一个小的处理,协方差的定义式是:

Cov(X,Y)=E[(Xμx)(Yμy)]

如果将μxμy想办法变成零,那么这时候 Rm就是协方差矩阵。将 x 所有值减去μx,就可以做到均值为零。我们可以看出 R 矩阵是个对称矩阵 因为 xixj 的协方差和 xjxi 的协方差相等。这点很重要,因为等下会用到这个性质。对角线元素是方差,代表该维上分散程度,而 RijRji 代表 xixj 的协方差,即相关程度。

特征值与特征向量

那么我们想要什么呢?对于作文来说,我要将关联性比较强的两个元素合二为一,并且我要保留比较重要的信息。对于数据,我们可以合并下协方差较大的数据,并尽可能保留那些方差较大,即分散程度较高的数据。

我们假设 q 是一个基,q 应该是 m 维的列向量,那么向量 x 在 q 上的投影就是 A=qTx,A 的方差为

σ2=E[A2]=E[(qTx)(xTq)]=qTE[xxT]q=qTRq

这样我们就明确了我们的目标,找到一组 q,使得 QTRQ 成为一个对角矩阵,即去除了相关性,并且按照方差的大小进行排列,这样的话在对应的基向量上面数据分散程度更高。

这里写图片描述

这里看出如果以 1 为基向量,效果明显会比 2 好,因为投影更为分散。

现在介绍下特征值λ,如果Rq=λq,那么λ为特征值,q为特征向量。可以理解为 R 在 q 上的投影不改变 q 的方向,长度为λ。刚刚我们提到 R 是一个对称矩阵,这里有一个性质:对称矩阵不同特征值对应的特征向量正交。那么也就是说,我可以将 R 矩阵用矩阵 Q 变为一个对角矩阵,且对角线值为特征值。即:QTRQ=Λ。那么我要找n个基向量(n < m),只要找前 n 大的特征值,其对应特征向量就可以用来做基向量。这里说一句,我们变换的是基的个数,也就是原始向量中基的个数为 m,现在基的个数为 n,但是对于每个基向量 q 来说,q 的维数是不变的,始终为 m 维。

还记得我在合并天气和温度时标红的那句话吗?我们可以发现新的 n 个基向量并不是简单的从原 m 个基向量抽取 n 个,而是取的特征向量,实际上就是对两者的权衡得到的一个基。为什么呢?因为要避免相关性,使得 R 矩阵经过变换成为对角矩阵,也就保证了每个数据都是独立的。

有一个特殊情况,就是 R 本身就是对角矩阵,这说明什么?就是原始数据 x 中各维从一开始就是独立的,那就可以直接用特征值来找特征向量。但这种情况是意义不大的,如果都独立了,那我还删什么呢?

PCA过程

压缩数据(降维)

  1. 处理下原始数据,减去均值。
  2. 利用 x 求协方差矩阵
  3. 求出协方差矩阵的特征值和特征向量
  4. 选取前 n 大的特征值对应的特征向量,组成新的基向量组
  5. 以新的基向量组为基,得到降维后的数据。

重构数据

我们已经将数据降了维,那么我们怎么知道这样信息丢失是否严重,能不能接受这个新的数据呢?

假设Y=QX,那么QTY=QTQX=IX=X,这说明 x=mi=1yiqi。怎么理解这个式子呢?先来看 yi 是什么,是 xqi 这个基向量上的投影,那么将所有投影后的向量进行叠加,就是原始数据。

x^ 为降维后重组的数据,x^=ni=1yiqi,和上面类似,但是因为降了维,能够重构的只有 n 维,定义误差为 e=xx^,误差的来源主要就是丢失的维数,即 e=mi=n+1yiqi


这里写图片描述

从课本上选取了这张图,左边是真实数据,手写的 1 到 10,右边是压缩后重构的结果,我们发现压缩到 64 维的情况时效果已经可以达到人眼识别的程度。

总结

我们通过将数据与写作文进行类比,最终能更好的理解PCA到底在做什么。总结来说,如果一篇作文可以套用模板来写(英语作文通常不就是。。。),那么模板中每个段落该写什么就是数据的基向量,想要压缩,就是在改变基向量的数目,从而使得各段落间重复的废话减少,并且内容更为重要。如果想要重构,我们发现会因为压缩导致信息减少而产生误差。