主成分分析-PCA-A tutorial on PCA by Lindsay I. Smith

原文:http://www.cnblogs.com/pangxiaodong/archive/2011/10/15/2212786.html

0. 简述

    以下几个章节,记录阅读A tutorial on PCA by Lindsay I. Smith (PDF) 这篇教程的一些重点,尤其是PCA计算的几个步骤。

1. 引入

    PCA是人脸识别和图像压缩领域的有用的统计技术,是一个在高维数据中发现模式的通用技术。

2. 数学背景

2.1 统计

2.1.1 标准差 Stand Deviation

    集合X的均值的计算公式如下: 
    
     集合X的标准方差的计算公式如下: 
    
     这里说明一点,标准方差这里面除的是(n-1)而不是n。解释起来有点复杂,如果集合X是一个样本集合,那么除以n-1的话,得到的方差更接近与全体集合的方差,如果集合X就是全体集合,那么就要使用n。关于这个问题,可以参见http://mathcentral.uregina.ca/RR/database/RR.09.95/weston2.html

2.1.2 方差 Deviation

    方差就是标准差的平方,实际上,标准差的作用是可以将数值化的小一些,尤其是计算量会小一些,尽量减少数值溢出的机会。
    

2.1.3 协方差 Covariance

    协方差的计算公式如下:
    
    前面的均值和标准差,一个是算一维数据的平均值,一个是算一维数据的离散程度。这里的协方差是衡量维数据之间关系的。根据公式可以看出,计算的是X维与Y维数据的关系。

    对于协方差来说,计算结果的符号比计算结果的数值更有意义。如果随着X的样本值与Y的样本值是一起增加或者一起减少的(或者至少大部分情况是这样),那么协方差的结果是正数。如果X的样本值在增加的时候,Y的样本值在减少(或者至少大部分情况是这样),那么协方差的结果是负数。实际上就是,当协方差为正数时,X与Y是正向关系,协方差为负数时,X与Y是负向关系,协方差为零时,X与Y是独立的。

   比如:对于学习成绩和学习时间这两维数据,就很可能成正向关系,对于学习成绩和身高这两维数据,就很可能是独立的。

2.1.4 协方差矩阵Covariance Matrix

    协方差的计算是针对两维的,对于n维的数据集,可以计算C(n,2)种协方差。 n维数据的协方差矩阵的定义如下:
   
    Dim(x)表示第x维。

    对于三维(x,y,z),其协方差矩阵如下:
    
    注意两点:第一矩阵是一个对称矩阵,第二矩阵的主对角线元素是每一位的方差。

2.2 矩阵代数(线性代数)

2.2.1 特征向量

    
    在第一个例子中,结果向量不是原始向量的整数倍,在第二个例子中,结果向量正好是原始向量的4倍。上面2*2的矩阵可以看做一个转移矩阵。如果你将这个矩阵放到一个向量的左边相乘,那么结果是这个向量被转移后的位置。

    特征向量的定义源于转移矩阵。想象一个转移矩阵把向量映射到y=x这条直线,如果一个向量本身就在y=x这条直线上,那么它映射到它自己。这个向量就是转移矩阵的一个特征向量。上面的(3,2)通过转移矩阵的映射后,仍旧在(3,2)这个放心上,只是大小变化了,因此(3,2)就是这个转移矩阵的一个特征向量。

    特征向量具有什么样的性质?特征向量只能在方阵中找到。而且并不是所有的方阵都有特征向量,并且如果一个n*n的方阵有特征向量,那么就有n个特征向量。一个矩阵的所有特征向量是正交的,即特征向量之间的点积为0,垂直的。一般情况,我们会选择长度为1的特征向量。如下:
    

2.2.2 特征值 Eigenvalues

    特征值与特征向量紧密联系。一个特征向量的特征值就是这个特征向量经过其转移矩阵转化后,得到的特征向量数值上面的倍数。例如前面例子中(3,2)经过转以后为4*(3,2),因此4就是这个特征向量(3,2)的特征值。

3. 主成分分析,Principal Component Analysis,PCA

    PCA是一种在数据中识别模式,通过它们的相似和不同来解释数据的方法。当存在大量高维数据的时候,PCA是一种分析数据强有力的工具。下面说明其计算过程。
    第一步,获取数据,下图中的Data为原始数据,一共有两个维度。


    下图是原始数据在二维坐标上面的散点图:

    

     第二步,减去平均值,对于原始数据Data中的每一维数据分别求平均值,并减去平均值,得到DataAdjust。

     第三步,计算DataAdjust的协方差矩阵
    
    第四步,计算协方差矩阵的特征向量和特征值,选取特征向量

   
    
    注意,此处的特征向量是单位特征向量,即长度为1的向量。

   下图中,展示了数据和特征向量的关系:

    

    两个特征向量是垂直的,更重要的是,其中一个特征向量很好展示了两个数据集合的相关性,另一个特征向量给出了一个弱一些的模式。通过协方差矩阵的特征向量,我们可以得到可以刻画数据的直线。剩下的步骤就是转化这些数据,使得他们可以被这些直线压缩了。

    上面的例子中,特征值较大的那个特征向量是这个数据集的主要成分(principle component)。通常来说,当从协方差矩阵计算出特征向量之后,下一步就是通过特征值,对特征向量进行从大到小的排序,这将给出成分意义的顺序。成分的特征值越小,其包含的信息量也就越少,因此可以适当选择。

    十分重要的是,如果数据中有n维,计算出n个特征向量和特征值,选择前p个特征向量,然后最终的数据集合只有p维。上面的例子中得到两个特征向量,那么我们可以选取这两个特征向量或者只选取其中特征值最大的那一个特征向量。选取的特征向量命名为FeatureVector。 
    

    第五步,也是最后一步,得到新的数据集

    FeatureVector的一列是一个特征向量。RowFeatureVector的一行是一个特征向量。RowDataAdjust是减去平均值以后的数据,以行的形式展示,实际上一列是一个数据样本。FinalData是新的数据集,一列是一个数据样本。投影矩阵式k*n的,数据矩阵是n*n的,每个一列一个样本即n*n=(n*1,n*1,...,n*1),每个数据单独投影后,就是k*1的一个样本。
    
    FinalData中,行是维度,列是数据样本。前面的例子中,如果选择一个,那么FeatureVector是2*1的,RowFeatureVector是1*2的,结果FinalData也是1*2的,因此,FinalData中只有一个维度,两个数据。

    找回原来数据的方法:
    

    对于使用了所有特征向量得到的新的数据集,转化回去之后,与原来的数据集完全一样,这里就不转化了。

    下面例子里面选用两个特征向量里面特征值最大的那个特征向量,转化回去后的数据集形式:

    
    从上图可以发现,协方差矩阵的主特征向量附近数据点都被保留了,其他特征向量上的点被丢弃了。

 4. 在计算机视觉方面的应用

 4.1 图形表示

    一个N乘N的图像,可以看成一个长度为N*N的一维向量。

    
    前N个元素是图像的第一行,接下来的N个元素是图像的第二行,依次类推。元素之是图像的强度值,可能是一个灰度值。

4.2 使用PCA寻找模式

    假设有20个图像,每个图像都是N个像素乘N个像素的。对于每个图像,我们建立一个图像向量,就像4.1节描述的一样。然后我们把所有的图像方阵一个大的图像-矩阵中:

    

    这就是PCA分析的一个起点。一旦我们使用了PCA,那么为什么说这会有用呢?比如我们要进行面部识别,我们的原始图像是人脸的图像。然后,给出一个新的图像,需要判断这个图像中人脸是原始图像中的哪一个人脸。计算视觉的方法是计算新的图像和原始图像之间的差异,并非是根据原始坐标,而是根据PCA分析后的新的坐标。PCA可以通过训练语料找到图像中那些比较重要的能够反映人脸图像之间差异的信息,忽略那些次要的信息,这样起到降维和提升效果的作用。

    结果证明这些坐标是的人脸识别很有效,因为PCA分析能够依据原始图像的区别和相似来给出原始图像。PCA分析识别出了数据中的统计模式。因为原始数据有N^2维,我们会得到N^2个特征向量,我们会忽略一些特征值较小的特征向量,这样识别效果会更好。

4.3 PCA用于图像压缩

    使用PCA进行图像压缩也被称为Hotelling或者Karhunen和Leove(KL),转移。

    如果我们有20个图像,每个N^2个像素,我们可以产生N^2个向量,每个向量20维。每一个向量由20个图像的同一个像素点的强度值组成。现在我们在这个数据集合上进行PCA。我们将得到20维特征向量。为了压缩数据,我们然后选择20个特征向量中的15个。这样我们得到的final data sest只有15维,剩下了原来1/4的空间,当原始数据被重新构建的时候,一些信息被球丢掉了。这样的压缩技术,很导致压缩图像不能完全恢复原来一摸一样的图像,或者更糟糕。

posted @ 2014-12-26 22:29  止战  阅读(335)  评论(0)    收藏  举报