zoukankan      html  css  js  c++  java
  • pca算法

    来源:

    http://www.cnblogs.com/gaoshangbing/archive/2010/03/23/1692357.html

    模式识别和图像处理 

    主元分析(PCA)理论分析及应用

    (主要基于外文教程翻译)

    什么是PCA?

           PCA是Principal component analysis的缩写,中文翻译为主元分析。它是一种对数据进行分析的技术,最重要的应用是对原有数据进行简化。正如它的名字:主元分析,这样的方法能够有效的找出数据中最“主要”的元素和结构,去除噪音和冗余,将原有的复杂数据降维,揭示隐藏在复杂数据背后的简单结构。它的长处是简单,并且无參数限制,能够方便的应用与各个场合。因此应用极其广泛,从神经科学到计算机图形学都有它的用武之地。被誉为应用线形代数最价值的结果之中的一个。

           在下面的章节中,不仅有对PCA的比較直观的解释,同一时候也配有较为深入的分析。首先将从一个简单的样例開始说明PCA应用的场合以及想法的由来,进行一个比較直观的解释;然后增加数学的严格推导,引入线形代数,进行问题的求解。随后将揭示PCA与SVD(Singular Value Decomposition)之间的联系以及怎样将之应用于真实世界。最后将分析PCA理论模型的如果条件以及针对这些条件可能进行的改进。

    一个简单的模型

           在实验科学中我常遇到的情况是,使用大量的变量代表可能变化的因素,比如光谱、电压、速度等等。可是因为实验环境和观測手段的限制,实验数据往往变得极其的复杂、混乱和冗余的。怎样对数据进行分析,取得隐藏在数据背后的变量关系,是一个很困难的问题。在神经科学、气象学、海洋学等等学科实验中,如果的变量个数可能很之多,可是真正的影响因素以及它们之间的关系可能又是很之简单的。

           以下的模型取自一个物理学中的实验。它看上去比較简单,但足以说明问题。如图表 1所看到的。这是一个理想弹簧运动规律的測定实验。如果球是连接在一个无质量无摩擦的弹簧之上,从平衡位置沿 轴拉开一定的距离然后释放。

     

     

    图表 1

           对于一个具有先验知识的实验者来说,这个实验是很easy的。球的运动仅仅是在x轴向上发生,仅仅须要记录下 轴向上的运动序列并加以分析就可以。可是,在真实世界中,对于第一次实验的探索者来说(这也是实验科学中最常遇到的一种情况),是不可能进行这种如果的。那么,一般来说,必须记录下球的三维位置 。这一点能够通过在不同角度放置三个摄像机实现(如图所看到的),如果以 的频率拍摄画面,就能够得到球在空间中的运动序列。可是,因为实验的限制,这三台摄像机的角度可能比較随意,并非正交的。其实,在真实世界中也并没有所谓的 轴,每一个摄像机记录下的都是一幅二维的图像,有其自己的空间坐标系,球的空间位置是由一组二维坐标记录的: 。经过实验,系统产生了几分钟内球的位置序列。如何从这些数据中得到球是沿着某个 轴运动的规律呢?如何将实验数据中的冗余变量剔除,化归到这个潜在的 轴上呢?

           这是一个真实的实验场景,数据的噪音是必须面对的因素。在这个实验中噪音可能来自空气、摩擦、摄像机的误差以及非理想化的弹簧等等。噪音使数据变得混乱,掩盖了变量间的真实关系。怎样去除噪音是实验者每天所要面对的巨大考验。

           上面提出的两个问题就是PCA方法的目标。PCA主元分析方法是解决此类问题的一个有力的武器。下文将结合以上的样例提出解决方式,逐步叙述PCA方法的思想和求解过程。

    线形代数:基变换

           从线形代数的角度来看,PCA的目标就是使用还有一组基去又一次描写叙述得到的数据空间。而新的基要能尽量揭示原有的数据间的关系。在这个样例中,沿着某 轴上的运动是最重要的。这个维度即最重要的“主元”。PCA的目标就是找到这种“主元”,最大程度的去除冗余和噪音的干扰。

    A.    标准正交基

    为了引入推导,须要将上文的数据进行明白的定义。在上面描写叙述的实验过程中,在每个採样时间点上,每个摄像机记录了一组二维坐标 ,综合三台摄像机数据,在每个时间点上得到的位置数据相应于一个六维列向量。

    假设以 的频率拍摄10分钟,将得到 个这种向量数据。

           抽象一点来说,每个採样点数据 都是在 维向量空间(此例中 )内的一个向量,这里的 是牵涉的变量个数。由线形代数我们知道,在 维向量空间中的每个向量都是一组正交基的线形组合。最普通的一组正交基是标准正交基,实验採样的结果通常能够看作是在标准正交基下表示的。举例来说,上例中每个摄像机记录的数据坐标为 ,这种基便是 。那为什么不取 或是其它随意的基呢?原因是,这种标准正交基反映了数据的採集方式。如果採集数据点是 ,一般并不会记录 (在 基下),由于一般的观測者都是习惯于取摄像机的屏幕坐标,即向上和向右的方向作为观測的基准。也就是说,标准正交基表现了数据观測的一般方式。

           在线形代数中,这组基表示为行列向量线形无关的单位矩阵。

    B.    基变换

    从更严格的数学定义上来说,PCA回答的问题是:怎样寻找到还有一组正交基,它们是标准正交基的线性组合,并且可以最好的表示数据集?

           这里提出了PCA方法的一个最关键的如果:线性。这是一个非常强的如果条件。它使问题得到了非常大程度的简化:1)数据被限制在一个向量空间中,能被一组基表示;2)隐含的如果了数据之间的连续性关系。

           这样一来数据就能够被表示为各种基的线性组合。令 表示原数据集。 是一个 的矩阵,它的每个列向量都表示一个时间採样点上的数据 ,在上面的样例中,  表示转换以后的新的数据集表示。 是他们之间的线性转换。

                                                                                                                         (1)

    有例如以下定义:

    l         表示 的行向量。

    l         表示 的列向量(或者 )。

    l         表示 的列向量。

    公式(1)表示不同基之间的转换,在线性代数中,它有例如以下的含义:

    • 是从  的转换矩阵。
    • 几何上来说,  进行旋转和拉伸得到 
    • 的行向量, 是一组新的基,而 是原数据 在这组新的基表示下得到的又一次表示。

    以下是对最后一个含义的显式说明:

    注意到 的列向量:

    可见 表示的是  中相应列的点积,也就是相当于是在相应向量上的投影。所以, 的行向量其实就是一组新的基。它对原数据 进行又一次表示。在一些文献中,将数据 成为“源”,而将变换后的 称为“信号”。这是因为变换后的数据更能体现信号成分的原因。

    C.    问题

    在线性的如果条件下,问题转化为寻找一组变换后的基,也就是 的行向量 ,这些向量就是PCA中所谓的“主元”。问题转化为例如以下的形式:

    l         如何才干最好的表示原数据 

    l         的基如何选择才是最好的?

    解决这个问题的关键是怎样体现数据的特征。那么,什么是数据的特征,怎样体现呢?

    方差和目标

           “最好的表示”是什么意思呢?以下的章节将给出一个较为直观的解释,并添加一些额外的如果条件。在线性系统中,所谓的“混乱数据”通常包括以下的三种成分:噪音、旋转以及冗余。以下将对这三种成分做出数学上的描写叙述并针对目标作出分析。

    A.    噪音和旋转

    噪音对数据的影响是巨大的,假设不能对噪音进行区分,就不可能抽取数据中实用的信息。噪音的横梁有多种方式,最常见的定义是信噪比 (signal-to-noise ratio),或是方差比 

                                                                                                                (2)

    比較大的信噪比表示数据的精确度高,而信噪比低则说明数据中的噪音成分比較多。那么如何区分什么是信号,什么是噪音呢?这里如果,变化较大的信息被觉得是信号,变化较小的则是噪音。其实,这个标准等价于一个低通的滤波器,是一种标准的去噪准则。而变化的大小则是由方差来描写叙述的。

           它表示了採样点在平均值两側的分布,相应于图表 2(a)就是採样点云的“胖瘦”。显然的,方差较大,也就是较“宽”较“胖”的分布,表示了採样点的主要分布趋势,是主信号或主要分量;而方差较小的分布则被觉得是噪音或次要分量。

     

    图表 2:(a)摄像机A的採集数据。图中黑色垂直直线表示一组正交基的方向。 是採样点云在长线方向上分布的方差,而 是数据点在短线方向上分布的方差。(b)对 的基向量进行旋转使SNR和方差最大。

     

           如果摄像机A拍摄到的数据如图表 2(a)所看到的,圆圈代表採样点,由于运动理论上是仅仅存在于一条直线上,所以偏离直线的分布都属于噪音。此时 描写叙述的就是採样点云在某对垂直方向上的概率分布的比值。那么,最大限度的揭示原数据的结构和关系,找出某条潜在的,最优的 轴,其实等价寻找一对空间内的垂直直线(图中黑线表示,也相应于此空间的一组基),使得信噪比尽可能大的方向。easy看出,本例中潜在的 轴就是图上的较长黑线方向。那么如何寻找这样一组方向呢?直接的想法是对基向量进行旋转。如图表 2(b)所看到的,随着这对直线的转动 以及方差的变化情况。应于 最大值的一组基 ,就是最优的“主元”方向。在进行数学中求取这组基的推导之前,先介绍还有一个影响因素。

    B.    冗余

    有时在实验中引入了一些不必要的变量。可能会使两种情况:1)该变量对结果没有影响;2)该变量能够用其他变量表示,从而造成数据冗余。以下对这种冗余情况进行分析和分类。

     

    图表 3:可能冗余数据的频谱图表示。  各自是两个不同的观測变量。
    (比方样例中的  )。最佳拟合线 用虚线表示。

     

           如图表 3所看到的,它揭示了两个观測变量之间的关系。(a)图所看到的的情况是低冗余的,从统计学上说,这两个观測变量是相互独立的,它们之间的信息没有冗余。而相反的极端情况如(c),  高度相关, 全然能够用 表示。一般来说,这样的情况发生可能是由于摄像机A和摄像机B放置的位置太近或是数据被反复记录了,也可能是由于实验设计的不合理所造成的。那么对于观測者而言,这个变量的观測数据就是全然冗余的,应当去除,仅仅用一个变量就能够表示了。这也就是PCA中“降维”思想的本源。

    C.    协方差矩阵

    对于上面的简单情况,能够通过简单的线性拟合的方法来推断各观測变量之间是否出现冗余的情况,而对于复杂的情况,须要借助协方差来进行衡量和推断:

            分别表示不同的观測变量所记录的一组值,在统计学中,由协方差的性质能够得到:

    l         ,且 当且仅当观測变量  相互独立。

    l         ,当 = 

    等价的,将  写成行向量的形式:

           协方差能够表示为:

                                                                                                                 (3)

           那么,对于一组具有 个观測变量, 个採样时间点的採样数据 ,将每一个观測变量的值写为行向量,能够得到一个 的矩阵:

                                                                                                                        (4)

           接下来定义协方差矩阵例如以下:

                                                                                                                (5)

    easy发现协方差矩阵 性质例如以下:

    l         是一个 的平方对称矩阵。

    l         对角线上的元素是相应的观測变量的方差。

    l         非对角线上的元素是相应的观測变量之间的协方差。

           协方差矩阵 包括了全部观測变量之间的相关性度量。更重要的是,依据前两节的说明,这些相关性度量反映了数据的噪音和冗余的程度。

    l         在对角线上的元素越大,表明信号越强,变量的重要性越高;元素越小则表明可能是存在的噪音或是次要变量。

    l         在非对角线上的元素大小则相应于相关观測变量对之间冗余程度的大小。

    普通情况下,初始数据的协方差矩阵总是不太好的,表现为信噪比不高且变量间相关度大。PCA的目标就是通过基变换对协方差矩阵进行优化,找到相关“主元”。那么,怎样进行优化?矩阵的那些性质是须要注意的呢?

    D.    协方差矩阵的对角化

    总结上面的章节,主元分析以及协方差矩阵优化的原则是:1)最小化变量冗余,相应于协方差矩阵的非对角元素要尽量小;2)最大化信号,相应于要使协方差矩阵的对角线上的元素尽可能的大。由于协方差矩阵的每一项都是正值,最小值为0,所以优化的目标矩阵 的非对角元素应该都是0,相应于冗余最小。所以优化的目标矩阵 应该是一个对角阵。即仅仅有对角线上的元素可能是非零值。同一时候,PCA如果 所相应的一组变换基 必须是标准正交的,而优化矩阵 对角线上的元素越大,就说明信号的成分越大,换句话就是相应于越重要的“主元”。

          对于协方差矩阵进行对角化的方法非常多。依据上面的分析,最简单最直接的算法就是在多维空间内进行搜索。和图表 2(a)的样例中旋转 的方法类似:

    1)  在 维空间中进行遍历,找到一个方差最大的向量,令作 

    2)  在与 垂直的向量空间中进行遍历,找出次大的方差相应的向量,记作 

    3)  对以上过程循环,直到找出所有 的向量。它们生成的顺序也就是“主元”的排序。

    这个理论上成立的算法说明了PCA的主要思想和过程。在这中间,牵涉到两个重要的特性:a)转换基是一组标准正交基。这给PCA的求解带来了非常大的优点,它能够运用线性代数的相关理论进行高速有效的分解。这些方法将在后面提到。b)在PCA的过程中,能够同一时候得到新的基向量所相应的“主元排序”,利用这个重要性排序能够方便的对数据进行光顺、简化处理或是压缩。

    A.    PCA的如果和局限

    PCA的模型中存在诸多的如果条件,决定了它存在一定的限制,在有些场合可能会造成效果不好甚至失效。对于学习和掌握PCA来说,理解这些内容是很重要的,同一时候也有利于理解基于改进这些限制条件的PCA的一些扩展技术。

           PCA的如果条件包含:

    1.        线形性如果。

    如同文章開始的样例,PCA的内部模型是线性的。这也就决定了它能进行的主元分析之间的关系也是线性的。如今比較流行的kernel-PCA的一类方法就是使用非线性的权值对原有PCA技术的拓展。

    2.        使用中值和方差进行充分统计。

    使用中值和方差进行充分的概率分布描写叙述的模型仅仅限于指数型概率分布模型。(比如高斯分布),也就是说,假设我们考察的数据的概率分布并不满足高斯分布或是指数型的概率分布,那么PCA将会失效。在这样的模型下,不能使用方差和协方差来非常好的描写叙述噪音和冗余,对教化之后的协方差矩阵并不能得到非常合适的结果。

                  其实,去除冗余的最基础的方程是:

    当中 代表概率分布的密度函数。基于这个方程进行冗余去除的方法被称作独立主元分析(ICA)方法(Independent Component Analysis)。只是,所幸的是,依据中央极限定理,现实生活中所遇到的大部分採样数据的概率分布都是遵从高斯分布的。所以PCA仍然是一个使用于绝大部分领域的稳定且有效的算法。

    3.        慷慨差向量具有较大重要性。

    PCA方法隐含了这种如果:数据本身具有较高的信噪比,所以具有最高方差的一维向量就能够被看作是主元,而方差较小的变化则被觉得是噪音。这是因为低通滤波器的选择决定的。

    4.        主元正交。

    PCA方法如果主元向量之间都是正交的,从而能够利用线形代数的一系列有效的数学工具进行求解,大大提高了效率和应用的范围。

    PCA求解:特征根分解

           在线形代数中,PCA问题能够描写叙述成下面形式:

    寻找一组正交基组成的矩阵 ,有 ,使得 是对角阵。则P的行向量(也就是一组正交基),就是数据 的主元向量。

           对 进行推导:

           定义 ,则 是一个对称阵。对 进行对角化求取特征向量得:

           则 是一个对角阵而 则是对称阵 的特征向量排成的矩阵。

           这里要提出的一点是, 是一个 的矩阵,而它将有 个特征向量。当中 是矩阵 的秩。假设 ,则 即为退化阵。此时分解出的特征向量不能覆盖整个 空间。此时仅仅须要在保证基的正交性的前提下,在剩余的空间中随意取得 维正交向量填充 的空格就可以。它们将不正确结果造成影响。由于此时相应于这些特征向量的特征值,也就是方差值为零。

           求出特征向量矩阵后我们取 ,则 ,由线形代数可知矩阵 有性质 ,从而进行例如以下计算:

           可知此时的 就是我们须要求得变换基。至此我们能够得到PCA的结果:

    l         的主元即是 的特征向量,也就是矩阵 的行向量。

    l         矩阵 对角线上第i个元素是数据 在方向 的方差。

    我们能够得到PCA求解的一般步骤:

    1)採集数据形成 的矩阵。 为观測变量个数, 为採样点个数。

    2)在每一个观測变量(矩阵行向量)上减去该观測变量的平均值得到矩阵 

    3)对 进行特征分解,求取特征向量以及所相应的特征根。

    总结和讨论

    l         PCA技术的一大优点是对数据进行降维的处理。我们能够对新求出的“主元”向量的重要性进行排序,依据须要取前面最重要的部分,将后面的维数省去,能够达到降维从而简化模型或是对数据进行压缩的效果。同一时候最大程度的保持了原有数据的信息。
    在前文的样例中,经过PCA处理后的数据仅仅剩下了一维,也就是弹簧运动的那一维,从而去除了冗余的变量,揭示了实验数据背后的物理原理。

    l         PCA技术的一个非常大的长处是,它是全然无參数限制的。在PCA的计算过程中全然不须要人为的设定參数或是依据不论什么经验模型对计算进行干预,最后的结果仅仅与数据相关,与用户是独立的。
    可是,这一点同一时候也能够看作是缺点。假设用户对观測对象有一定的先验知识,掌握了数据的一些特征,却无法通过參数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。

     

    图表 4:黑色点表示採样数据,排列成转盘的形状。
    easy想象,该数据的主元是 或是旋转角 

    如图表 4中的样例,PCA找出的主元将是 。可是这显然不是最优和最简化的主元。 之间存在着非线性的关系。依据先验的知识可知旋转角 是最优的主元。则在这样的情况下,PCA就会失效。可是,假设增加先验的知识,对数据进行某种划归,就能够将数据转化为以 为线性的空间中。这类依据先验知识对数据预先进行非线性转换的方法就成为kernel-PCA,它扩展了PCA能够处理的问题的范围,又能够结合一些先验约束,是比較流行的方法。

    l         有时数据的分布并非满足高斯分布。如图表 5所看到的,在非高斯分布的情况下,PCA方法得出的主元可能并非最优的。在寻找主元时不能将方差作为衡量重要性的标准。要依据数据的分布情况选择合适的描写叙述全然分布的变量,然后依据概率分布式

    来计算两个向量上数据分布的相关性。等价的,保持主元间的正交如果,寻找的主元相同要使 。这一类方法被称为独立主元分解(ICA)。

     

    图表 5:数据的分布并不满足高斯分布,呈明显的十字星状。
            这样的情况下,方差最大的方向并非最优主元方向。

     

    l         PCA方法和线形代数中的神秘值分解(SVD)方法有内在的联系,一定意义上来说,PCA的解法是SVD的一种变形和弱化。对于 的矩阵 ,通过神秘值分解能够直接得到例如以下形式:

    当中 是一个 的矩阵, 是一个 的矩阵,而  的对角阵。 形式例如以下:

    当中 ,是原矩阵的神秘值。由简单推导可知,假设对神秘值分解加以约束: 的向量必须正交,则矩阵 即为PCA的特征值分解中的 ,则说明PCA并不一定须要求取 ,也能够直接对原数据矩阵 进行SVD神秘值分解就可以得到特征向量矩阵,也就是主元向量。

     

    计算机视学领域的应用

           PCA方法是一个具有非常高普适性的方法,被广泛应用于多个领域。这里要特别介绍的是它在计算机视觉领域的应用,包含怎样对图像进行处理以及在人脸识别方面的特别作用。

    1. A.    数据表示 

    假设要将PCA方法应用于视觉领域,最主要的问题就是图像的表达。假设是一幅 大小的图像,它的数据将被表达为一个 维的向量:

    在这里图像的结构将被打乱,每个像素点被看作是一维,最直接的方法就是将图像的像素一行行的头尾相接成一个一维向量。还必需要注意的是,每一维上的数据相应于相应像素的亮度、灰度或是色彩值,可是需要划归到同一纬度上。

    1. B.    模式识别 

    如果数据源是一系列的20幅图像,每幅图像都是 大小,那么它们都能够表示为一个 维的向量。将它们排成一个矩阵:

           然后对它们进行PCA处理,找出主元。

    为什么这样做呢?据人脸识别的样例来说,数据源是20幅不同的人脸图像,PCA方法的实质是寻找这些图像中的相似的维度,由于人脸的结构有极大的相似性(特别是同一个人的人脸图像),则使用PCA方法就能够非常easy的提取出人脸的内在结构,也及时所谓“模式”,假设有新的图像须要与原有图像比較,就能够在变换后的主元维度上进行比較,则可衡量新图与原有数据集的相似度怎样。

    对这种一组人脸图像进行处理,提取当中最重要的主元,就可以大致描写叙述人脸的结构信息,称作“特征脸”(EigenFace)。这就是人脸识别中的重要方法“特征脸方法”的理论依据。近些年来,基于对一般PCA方法的改进,结合ICA、kernel-PCA等方法,在主元分析中增加关于人脸图像的先验知识,则能得到更好的效果。

    1. C.    图像信息压缩 

    使用PCA方法进行图像压缩,又被称为Hotelling算法,或者Karhunen and Leove(KL)变换。这是视觉领域内图像处理的经典算法之中的一个。详细算法与上述过程同样,使用PCA方法处理一个图像序列,提取当中的主元。然后依据主元的排序去除当中次要的分量,然后变换回原空间,则图像序列由于维数减少得到非常大的压缩。比如上例中取出次要的5个维度,则图像就被压缩了1/4。可是这样的有损的压缩方法同一时候又保持了当中最“重要”的信息,是一种非常重要且有效的算法。

     

    參考文献

    [1]   Lindsay I Smith. (2002) “A tutorial on Principal Components Analysis”

    [2]   Jonathon Shlens. (2005) “A Tutorial on Principal Component Analysis”

    [3]   Will, Todd (1999) “Introduction to the Singular Value Decomposition” Davidson College. http://www.davidson.edu/academic/math/will/svd/index.html

    [4]   Bell, Anthony and Sejnowski, Terry. (1997) “The Independent Components of Natural    Scenes are EdgeFilters.” Vision Research 37(23), 3327-3338.

    [5]   T.F. Cootes and C.J.Taylor (2004) “Statistical Models of Appearance for Computer Vision”
           http://www.isbe.man.ac.uk/~bim/Models/app_models.pdf

    [6]   张翠平 苏光大 (2000)“人脸识别技术综述”《中国图像图形学报》第五卷A版第11期

    [7]   何国辉 甘俊英 (2006)“PCA类内平均脸法在人脸识别中的应用研究”《计算机应用研究》2006年第三期

    [8]   牛丽平 付仲良 魏文利 (2006)“人脸识别技术研究”《电脑开发与应用》2006年第五期

    [9]   Wikipedia “principal components analysis”词条解释 From Answers.com

  • 相关阅读:
    分布式系统简介
    java.lang.Object 之 clone() 深拷贝,浅拷贝
    粉丝裂变活动bug
    遇到的bug
    移动端fixed定位在底部,出现键盘后消失
    窗口关闭,打开新页面,刷新等总结
    input 手机数字键盘
    正则重温(学习笔记)
    input的表单验证(不断更新中~~)
    css 不大常见的属性(不断更新中...)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4094497.html
Copyright © 2011-2022 走看看