科学网

 找回密码
  注册
科学网 标签 PCA

tag 标签: PCA

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

PCA (主成分分析) 结合matlab
gosci 2016-5-14 15:01
前面讲matlab的主成分分析的公式,后面有3个博客直接讲用matlab实现的算法 一、公式部分:: MATLAB直接用样本实现主成分分析用有多种方式,但是mathwork公司推荐(1)式,因为princomp在使用时调用的是pca,两者的计算结果一样,而且pca多一项explain,更强大。 = pca(X) (1) = princomp(X) (2) 解释一: X: 就是原始数据,每列是一个变量,每行是一个个案,很方便的。 coeff:就是那个Upp转化矩阵 score:最后得出的主成分的值,每一列表示一个主成分(按第一主成分到第n主成分个排列)。 latant:是各主成分对应的特征向量。 tsquare:是Hotelling's T-squared统计量,我这个水平可以不理他。 explained:是只每一个主成分解释了百分之多少的方差,是一个列向量。 *************************** 公式(1)貌似很管用,解释还需要验证。因为经过验证公式(1)和(2)得到的数值 coeff,score,latent是一样的。 解释二: 不知道你是否调用的是MATLAB自带的princomp函数,是的话latent存放的是协方差矩阵的特征值,对应的特征向量存放在COEFF里面。 -----------对的,杨渺 = princomp(X) 解释三: ******************** 这个解释貌似正确,参考帖子 *http://www.cnblogs.com/haore147/p/3630002.html LATENT协方差矩阵的特征值。 SCORE是对主分的打分,也就是说原X矩阵在主成分空间的表示。 COEFF是X矩阵所对应的协方差阵V的所有特征向量组成的矩阵,即变换矩阵或称投影矩阵。 用你的原矩阵x*coeff(:,1:n)才是你要的的新数据,其中的n是你想降到多少维。 ************************** 通过matlab中的 =princomp(C)函数进行主成分分析后,怎样重构原来的矩阵X1? c==score*coeff'。 原始数据矩阵为c,C=zscore(c);对C进行主成分分析后,重构的矩阵 原始数据矩阵,不是zscore后的矩阵C-------- ??????什么意思?--杨渺 用你的原矩阵x*coeff(:,1:n)才是你要的的新数据,其中的n是你想降到多少维。 两者在得到主成分的那一步不同 二、三个博客部分 以下共有3篇。重点看第一篇的原理,第二篇看matlab编程,第三篇得出主成分那一步和第二篇一起参照看--- 感觉第三篇的对 ************************ ******************** http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html 主成分分析(Principal components analysis)-最大方差解释 http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020216.html 主成分分析(Principal components analysis)-最小平方误差解释 在这一篇之前的内容是《Factor Analysis》,由于非常理论,打算学完整个课程后再写。在写这篇之前,我阅读了PCA、SVD和LDA。这几个模型相近,却都有自己的特点。本篇打算先介绍PCA,至于他们之间的关系,只能是边学边体会了。PCA以前也叫做Principal factor analysis。 1. 问题 真实的训练数据总是存在各种各样的问题: 1、 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余。 2、 拿到一个数学系的本科生期末考试成绩单,里面有三列,一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩。我们知道要学好数学,需要有浓厚的兴趣,所以第二项与第一项强相关,第三项和第二项也是强相关。那是不是可以合并第一项和第二项呢? 3、 拿到一个样本,特征非常多,而样例特别少,这样用回归去直接拟合非常困难,容易过度拟合。比如北京的房价:假设房子的特征是(大小、位置、朝向、是否学区房、建造年代、是否二手、层数、所在层数),搞了这么多特征,结果只有不到十个房子的样例。要拟合房子特征-房价的这么多特征,就会造成过度拟合。 4、 这个与第二个有点类似,假设在IR中我们建立的文档-词项矩阵中,有两个词项为“learn”和“study”,在传统的向量空间模型中,认为两者独立。然而从语义的角度来讲,两者是相似的,而且两者出现频率也类似,是不是可以合成为一个特征呢? 5、 在信号传输过程中,由于信道不是理想的,信道另一端收到的信号会有噪音扰动,那么怎么滤去这些噪音呢? 回顾我们之前介绍的《模型选择和规则化》,里面谈到的特征选择的问题。但在那篇中要剔除的特征主要是和类标签无关的特征。比如“学生的名字”就和他的“成绩”无关,使用的是互信息的方法。 而这里的特征很多是和类标签有关的,但里面存在噪声或者冗余。在这种情况下,需要一种特征降维的方法来减少特征数,减少噪音和冗余,减少过度拟合的可能性。 下面探讨一种称作主成分分析(PCA)的方法来解决部分上述问题。PCA的思想是将n维特征映射到k维上(kn),这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。 2. PCA计算过程 首先介绍PCA的计算过程: 假设我们得到的2维数据如下: 行代表了样例,列代表特征,这里有10个样例,每个样例两个特征。可以这样认为,有10篇文档,x是10篇文档中“learn”出现的TF-IDF,y是10篇文档中“study”出现的TF-IDF。也可以认为有10辆汽车,x是千米/小时的速度,y是英里/小时的速度,等等。 第一步 分别求x和y的平均值,然后对于所有的样例,都减去对应的均值。这里x的均值是1.81,y的均值是1.91,那么一个样例减去均值后即为(0.69,0.49),得到 第二步 ,求特征协方差矩阵,如果数据是3维,那么协方差矩阵是 这里只有x和y,求解得 对角线上分别是x和y的方差,非对角线上是协方差。协方差大于0表示x和y若有一个增,另一个也增;小于0表示一个增,一个减;协方差为0时,两者独立。协方差绝对值越大,两者对彼此的影响越大,反之越小。 第三步 ,求协方差的特征值和特征向量,得到 上面是两个特征值,下面是对应的特征向量,特征值0.0490833989对应特征向量为 ,这里的特征向量都归一化为单位向量。 第四步 ,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。 这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是 。 第五步 ,将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为EigenVectors(n*k)。那么投影后的数据FinalData为 这里是 FinalData(10*1) = DataAdjust(10*2矩阵)×特征向量 得到结果是 这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。 上面的数据可以认为是learn和study特征融合为一个新的特征叫做LS特征,该特征基本上代表了这两个特征。 上述过程有个图描述: 正号表示预处理后的样本点,斜着的两条线就分别是正交的特征向量(由于协方差矩阵是对称的,因此其特征向量正交),最后一步的矩阵乘法就是将原始样本点分别往特征向量对应的轴上做投影。 如果取的k=2,那么结果是 这就是经过PCA处理后的样本数据,水平轴(上面举例为LS特征)基本上可以代表全部样本点。整个过程看起来就像将坐标系做了旋转,当然二维可以图形化表示,高维就不行了。上面的如果k=1,那么只会留下这里的水平轴,轴上是所有点在该轴的投影。 这样PCA的过程基本结束。在第一步减均值之后,其实应该还有一步对特征做方差归一化。比如一个特征是汽车速度(0到100),一个是汽车的座位数(2到6),显然第二个的方差比第一个小。因此,如果样本特征中存在这种情况,那么在第一步之后,求每个特征的标准差 ,然后对每个样例在该特征下的数据除以 。 归纳一下,使用我们之前熟悉的表示方法,在求协方差之前的步骤是: 其中 是样例,共m个,每个样例n个特征,也就是说 是n维向量。 是第i个样例的第j个特征。 是样例均值。 是第j个特征的标准差。 整个PCA过程貌似及其简单,就是求协方差的特征值和特征向量,然后做数据转换。但是有没有觉得很神奇,为什么求协方差的特征向量就是最理想的k维向量?其背后隐藏的意义是什么?整个PCA的意义是什么? 3. PCA理论基础 要解释为什么协方差矩阵的特征向量就是k维理想特征,我看到的有三个理论:分别是最大方差理论、最小错误理论和坐标轴相关度理论。这里简单探讨前两种,最后一种在讨论PCA意义时简单概述。 3.1 最大方差理论 在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。如前面的图,样本在横轴上的投影方差较大,在纵轴上的投影方差较小,那么认为纵轴上的投影是由噪声引起的。 因此我们认为,最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。 比如下图有5个样本点:(已经做过预处理,均值为0,特征方差归一) 下面将样本投影到某一维上,这里用一条过原点的直线表示(前处理的过程实质是将原点移到样本点的中心点)。 假设我们选择两条不同的直线做投影,那么左右两条中哪个好呢?根据我们之前的方差最大化理论,左边的好,因为投影后的样本点之间方差最大。 这里先解释一下投影的概念: 红色点表示样例 ,蓝色点表示 在u上的投影,u是直线的斜率也是直线的方向向量,而且是单位向量。蓝色点是 在u上的投影点,离原点的距离是 (即 或者 )由于这些样本点(样例)的每一维特征均值都为0,因此投影到u上的样本点(只有一个到原点的距离值)的均值仍然是0。 回到上面左右图中的左图,我们要求的是最佳的u,使得投影后的样本点方差最大。 由于投影后均值为0,因此方差为: 中间那部分很熟悉啊,不就是样本特征的协方差矩阵么( 的均值为0,一般协方差矩阵都除以m-1,这里用m)。 用 来表示 , 表示 ,那么上式写作 由于u是单位向量,即 ,上式两边都左乘u得, 即 We got it! 就是 的特征值,u是特征向量。最佳的投影直线是特征值 最大时对应的特征向量,其次是 第二大对应的特征向量,依次类推。 因此,我们只需要对协方差矩阵进行特征值分解,得到的前k大特征值对应的特征向量就是最佳的k维新特征,而且这k维新特征是正交的。得到前k个u以后,样例 通过以下变换可以得到新的样本。 其中的第j维就是 在 上的投影。 通过选取最大的k个u,使得方差较小的特征(如噪声)被丢弃。 这是其中一种对PCA的解释,第二种是错误最小化,放在下一篇介绍。 ******************************* PCA (主成分分析)详解 (写给初学者) 结合matlab 原来地址http://my.oschina.net/gujianhan/blog/225241 一、简介 PCA(Principal Components Analysis)即主成分分析,是图像处理中经常用到的降维方法,大家知道,我们在处理有关数字图像处理方面的问题时,比如经常用的图像的查询问题,在一个几万或者几百万甚至更大的数据库中查询一幅相近的图像。这时,我们通常的方法是对图像库中的图片提取响应的特征,如颜色,纹理,sift,surf,vlad等等特征,然后将其保存,建立响应的数据索引,然后对要查询的图像提取相应的特征,与数据库中的图像特征对比,找出与之最近的图片。这里,如果我们为了提高查询的准确率,通常会提取一些较为复杂的特征,如sift,surf等,一幅图像有很多个这种特征点,每个特征点又有一个相应的描述该特征点的128维的向量,设想如果一幅图像有300个这种特征点,那么该幅图像就有300*vector(128维)个,如果我们数据库中有一百万张图片,这个存储量是相当大的,建立索引也很耗时,如果我们对每个向量进行PCA处理,将其降维为64维,是不是很节约存储空间啊?对于学习图像处理的人来说,都知道PCA是降维的,但是,很多人不知道具体的原理,为此,我写这篇文章,来详细阐述一下PCA及其具体计算过程: 二、PCA详解 1、原始数据: 为了方便,我们假定数据是二维的,借助网络上的一组数据,如下: x= T y= T 2、计算协方差矩阵 什么是协方差矩阵?相信看这篇文章的人都学过数理统计,一些基本的常识都知道,但是,也许你很长时间不看了,都忘差不多了,为了方便大家更好的理解,这里先简单的回顾一下数理统计的相关知识,当然如果你知道协方差矩阵的求法你可以跳过这里。 (1)协方差矩阵: 首先我们给你一个含有n个样本的集合,依次给出数理统计中的一些相关概念: 均值: 标准差: 方差: 既然我们都有这么多描述数据之间关系的统计量,为什么我们还要用协方差呢?我们应该注意到,标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集,最简单的大家上学时免不了要统计多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解这几科成绩之间的关系,这时,我们就要用协方差,协方差就是一种用来度量两个随机变量关系的统计量,其定义为: 从协方差的定义上我们也可以看出一些显而易见的性质,如: (X的方差) 需要注意的是,协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计算 个协方差,那自然而然的我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义: 这个定义还是很容易理解的,我们可以举一个简单的三维的例子,假设数据集有 三个维度,则协方差矩阵为 可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。 (2)协方差矩阵的求法: 协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。下面我们将在matlab中用一个例子进行详细说明: 首先,随机产生一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。 MySample = fix(rand(10,3)*50) 根据公式,计算协方差需要计算均值,那是按行计算均值还是按列呢,我一开始就老是困扰这个问题。前面我们也特别强调了,协方差矩阵是计算 不同维度间 的协方差,要时刻牢记这一点。 样本矩阵的每行是一个样本,每列为一个维度 ,所以我们要 按列计算均值 。为了描述方便,我们先将三个维度的数据分别赋值: dim1 = MySample(:,1); dim2 = MySample(:,2); dim3 = MySample(:,3); 计算dim1与dim2,dim1与dim3,dim2与dim3的协方差: sum( (dim1-mean(dim1)) .* (dim2-mean(dim2)) ) / ( size(MySample,1)-1 ) % 得到 74.5333 sum( (dim1-mean(dim1)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得到 -10.0889 sum( (dim2-mean(dim2)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得到 -10***000 搞清楚了这个后面就容易多了,协方差矩阵的对角线就是各个维度上的方差,下面我们依次计算: std(dim1)^2 % 得到 108.3222 std(dim2)^2 % 得到 260.6222 std(dim3)^2 % 得到 94.1778 这样,我们就得到了计算协方差矩阵所需要的所有数据,调用Matlab自带的cov函数进行验证: cov(MySample) 可以看到跟我们计算的结果是一样的,说明我们的计算是正确的。但是通常我们不用这种方法,而是用下面简化的方法进行计算: 先让样本矩阵中心化,即每一维度减去该维度的均值,然后直接用新的到的样本矩阵乘上它的转置,然后除以(N-1)即可。其实这种方法也是由前面的公式通道而来,只不过理解起来不是很直观而已。大家可以自己写个小的矩阵看一下就明白了。其Matlab代码实现如下: X = MySample – repmat(mean(MySample),10,1); % 中心化样本矩阵 C = (X’*X)./(size(X,1)-1) (为方便对matlab不太明白的人,小小说明一下各个函数,同样,对matlab有一定基础的人直接跳过: B = repmat(A,m,n ) %% 将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成。B 的维数是 B = mean(A) 的说明: 如果你有这样一个矩阵:A = ; 用mean(A)(默认dim=1)就会求每一列的均值 ans = 3.0000 4.5000 6.0000 用mean(A,2)就会求每一行的均值 ans = 2.0000 4.0000 6.0000 6.0000 size(A,n)%% 如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的是矩阵A的行数, c=size(A,2) 该语句返回的是矩阵A的列数) 上面我们简单说了一下协方差矩阵及其求法,言归正传,我们用上面简化求法,求出样本的协方差矩阵为: 3、计算协方差矩阵的特征向量和特征值 因为协方差矩阵为方阵,我们可以计算它的特征向量和特征值,如下: = eig(cov) 我们可以看到这些矢量都是单位矢量,也就是它们的长度为1,这对PCA来说是很重要的。 4、选择成分组成模式矢量 求出协方差矩阵的特征值及特征向量之后,按照特征值由大到小进行排列,这将给出成分的重要性级别。现在,如果你喜欢,可以忽略那些重要性很小的成分,当然这会丢失一些信息,但是如果对应的特征值很小,你不会丢失很多信息。如果你已经忽略了一些成分,那么最后的数据集将有更少的维数,精确地说,如果你的原始数据是n维的,你选择了前p个主要成分,那么你现在的数据将仅有p维。现在我们要做的是组成一个模式矢量,这只是几个矢量组成的矩阵的一个有意思的名字而已,它由你保持的所有特征矢量构成,每一个特征矢量是这个矩阵的一列。 对于我们的数据集,因为有两个特征矢量,因此我们有两个选择。我们可以用两个特征矢量组成模式矢量: 我们也可以忽略其中较小特征值的一个特征矢量,从而得到如下模式矢量: 5、 得到降维后的数据----貌似不对,应该为:finaldata=rowdataAdjust*rowFeatureVector--yangmiao 其中rowFeatureVector是由模式矢量作为列组成的矩阵的转置,因此它的行就是原来的模式矢量,而且对应最大特征值的特征矢量在该矩阵的最上一行。rowdataAdjust是每一维数据减去均值后,所组成矩阵的转置,即数据项目在每一列中,每一行是一维,对我们的样本来说即是,第一行为x维上数据,第二行为y维上的数据。FinalData是最后得到的数据,数据项目在它的列中,维数沿着行。 这将给我们什么结果呢?这将仅仅给出我们选择的数据。我们的原始数据有两个轴(x和y),所以我们的原始数据按这两个轴分布。我们可以按任何两个我们喜欢的轴表示我们的数据。如果这些轴是正交的,这种表达将是最有效的,这就是特征矢量总是正交的重要性。我们已经将我们的数据从原来的xy轴表达变换为现在的单个特征矢量表达。 (说明:如果要恢复原始数据,只需逆过程计算即可,即: ) 到此为止,相信你已经掌握了PCA及其原理了 *********************** ********************** http://www.cnblogs.com/zhangchaoyang/articles/2222048.html 华夏35度 Data Mining 主成分分析PCA 降维的必要性 1.多重共线性--预测变量之间相互关联。多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯。 2.高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间,而在十维空间上只有0.02%。 3.过多的变量会妨碍查找规律的建立。 4.仅在变量层面上分析可能会忽略变量之间的潜在联系。例如几个预测变量可能落入仅反映数据某一方面特征的一个组内。 降维的目的: 1.减少预测变量的个数 2.确保这些变量是相互独立的 3.提供一个框架来解释结果 降维的方法有:主成分分析、因子分析、用户自定义复合等。 PCA(Principal Component Analysis)不仅仅是对高维数据进行降维,更重要的是经过降维去除了噪声,发现了数据中的模式。 PCA把原先的n个特征用数目更少的m个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的m个特征互不相关。从旧特征到新特征的映射捕获数据中的固有变异性。 预备知识 样本X和样本Y的协方差(Covariance): 协方差为正时说明X和Y是正相关关系,协方差为负时X和Y是负相关关系,协方差为0时X和Y相互独立。 Cov(X,X)就是X的方差(Variance). 当样本是n维数据时,它们的协方差实际上是协方差矩阵(对称方阵),方阵的边长是 。比如对于3维数据(x,y,z),计算它的协方差就是: 若 ,则称 是A的特征值,X是对应的特征向量。实际上可以这样理解:矩阵A作用在它的特征向量X上,仅仅使得X的长度发生了变化,缩放比例就是相应的特征值 。 当A是n阶可逆矩阵时,A与P -1 Ap相似,相似矩阵具有相同的特征值。 特别地,当A是对称矩阵时,A的奇异值等于A的特征值,存在正交矩阵Q(Q -1 =Q T ),使得: 对A进行 奇异值分解 就能求出所有特征值和Q矩阵。 D是由特征值组成的对角矩阵 由特征值和特征向量的定义知,Q的列向量就是A的特征向量。 Jama包 Jama 包是用于基本线性代数运算的java包,提供矩阵的cholesky分解、LUD分解、QR分解、奇异值分解,以及PCA中要用到的特征值分解,此外可以计算矩阵的乘除法、矩阵的范数和条件数、解线性方程组等。 PCA过程 1.特征中心化。即每一维的数据都减去该维的均值。 这里的“维”指的就是一个特征(或属性),变换之后每一维的均值都变成了0。 很多数据挖掘的教材上都会讲到鹫尾花的例子,本文就拿它来做计算。原始数据是150×4的矩阵A: + View Code 每一列减去该列均值后,得到矩阵B: + View Code 2.计算B的协方差矩阵C: + View Code 3.计算协方差矩阵C的特征值和特征向量。 C=V*S*V -1 S= 4.2248414     0       0       0 0          0.24224437  0        0 0          0       0.078524387 0 0          0       0        0.023681839 V= 0.36158919   0.65654382   -0.58100304   0.3172364 -0.082268924    0.72970845    0.596429220    -0.3240827 0.85657212  -0.17576972 0.  072535217    -0.47971643 0.35884438    -0.074704743    0.54904125    0.75113489 4.选取大的特征值对应的特征向量,得到新的数据集。 特征值是由大到小排列的,前两个特征值的和已经超过了所有特征值之和的97%。我们取前两个特征值对应的特征向量,得到一个4×2的矩阵M。令A' 150×2 =A 150×4 M 4×2, 这样我们就把150×4的数据A集映射成了150×2的数据集A',特征由4个减到了2个。 A'= + View Code 每个样本正好是二维的,画在平面坐标系中如图: 鹫尾花数据集共分为3类花(前50个样本为一类,中间50个样本为一类,后50个样本为一类),从上图可以看到把数据集映射到2维后分类会更容易进行,直观上看已经是线性可分的了,下面我们用 自组织映射网络 对其进行聚类。 当然我们已知了有3类,所以在设计SOFM网络时,我把竞争层节点数设为3,此时的聚类结果是前50个样本聚为一类,后100个样本聚为一类。当把竞争层节点数改为4时,仅第2类中的3个样本被误分到了第3类中,整体精度达98%!
个人分类: matlab|19 次阅读|0 个评论
matlab 主成分分析warning
热度 2 lincystar 2015-8-14 22:43
warning message: Columns of X are linearly dependent to within machine precision. Using only the first # components to compute TSQUARED. (# is a number) 翻译:X的列向量在机器精度之内是线性相关的,只使用前#列来计算TSQUARED 对warning的解释 (来自: http://stackoverflow.com/questions/27997736/matlab-warns-columns-of-x-are-linearly-dependent-to-within-machine-precision ): 问题: When I used the function princomp in Matlab to reduce the dimensions of features, it warns:Columns of X are linearly dependent to within machine precision. Using only the first 320 components to compute TSQUARED. What dose it mean? The original dimension of features is 324.I would be very grateful if somebody can answer my question. 解释: (不影响计算结果,只是对数据存在线性关系的提醒) For a more graphic interpretation of this warning imagine your data being 3-dimensional instead of 324-dimensional. These would be points in space.The output of your function princomp should be the principal axes of an ellipsoid that aligns well with your data. The equivalent warning of Using only the first 2 components would mean: Your data points lie on a plane (up to numerical error), so your ellipsoid really is a flat ellipse. As the PCA is usually used for dimensionality reduction this isn't really that worrying. It just means, that your original data is not 324-dimensional, but really only 320-dimensional, yet resides in R^324. You would get the same warning using this random data: N = 100;X = ;X_centered = bsxfun(@minus, X, mean(X)); = princomp(X_centered);plot3(X_centered(:,1), X_centered(:,2), X_centered(:,3), '.'); coeff(:,1) will be approximately and latent(1) the biggest value, as the data is spread most along the x-axis. The second vector coeff(:,2) will be approximately the vector while latent(2) will be quite a bit smaller than latent(1), as the second most important direction is the y-axis, which is not as spread out as the first direction. The rest of the vectors will be some vectors that are orthonormal to our current vectors. (In our simple case there is only the possibility of , and latent(3) will be zero, as the data is flat)
个人分类: 科研笔记|11895 次阅读|3 个评论
[转载]特征值、特征向量和PCA的概念及理解
热度 2 zhuwei3014 2014-7-26 15:38
特征值分解和主成份分析 § 协方差矩阵 协方差 (Covariance)用于衡量两个变量的总体误差。设两个随机变量X和Y的 期望值分别为E(X)和E(Y), 则其协方差定义为: 方差是协方差的一种特殊情况,即当两个变量是相同时: 协 方差从随机标量推广到随机向量,则得到 协方差矩阵 (Convariance Matrix)定义: 其中,X 是一个随机向量。显然一个随机向量的协方差矩阵是一个方阵。 § 线性变换、特征值和特征向量 线性变换 (线性映射)是在作用于两个 向量空间 之间的函数,它保持向量加法和标量乘法的运算。实际上线性变换表现出来的就是一个矩阵。 特征值和特征向量 是一体的概念: 对于一个给定的线性变换,它的特征向量 经过这个线性变换之后,得到的新向量仍然与原来的 保持在同一條直線上,但其长度也许會改变。一个特征向量的长度在该线性变换下缩放的比例称为其特征值(本征值)。 数学描述如下: 在线性变换A 的作用下,向量 仅仅在尺度上变为原来的 倍 。称 是线性变换A 的一个特征向量, 是 对应的特征值。 求解线性变换A的特征向量和特征值: 根据线性方程组理论,如果上式有非零解,则矩阵 的行列式为0: 该方程组称作矩阵的 特征多项式 ,解该方程组可以求得所有的特征值 。 矩阵A的 非零特征值最大数目是该矩阵的秩rank(A)。 对于每个特征值 都 有如下特征方程(Characteristic equation)成立: 进一步可以解得相应的特征向量x。 一个变换可由一个矩阵乘法表示,那么一个空间坐标系也可视作一个矩阵,而这个坐标系就可由这个矩阵的所有特征向量表示,用图表示的话,可以想象是一个空间张开的各个坐标角度,这一组向量可以完全表示一个矩阵表示的空间的特征,而他们的特征值就表示了各个角度上的能量。 顾名思义,特征值和特征向量表达了一个线性变换的特征。 在物理意义上,一个高维空间的线性变换可以想象是在对一个向量在各个方向上进行了不同程度的变换,而特征向量之间是 线性无关 的,它们对应了最主要的变换方向,同时特征值表达了相应的变换程度。具体的说,求特征向量,就是把矩阵A所代表的空间,进行正交分解,使得A的向量集合可以表示为每个向量a在各个特征向量上的投影长度。 我们通常求特征值和特征向量即为求出这个矩阵能使哪些向量只发生拉伸,使其发生拉伸的程度。这样做的意义在于,看清一个矩阵在哪些方面能产生最大的效果(power)。 § 特征值分解 矩阵对角化定理 (Matrix diagonalization theorem):对于 方 阵A, 如果它有N个 线性无关的特征向量,那么存在一个 特征分解 : 其中,Q是 N × N 的方阵,且其第i列 为A的 特征向量 。 是对角矩阵,其对角线上的元素为对应的特征值,即 。 对称对角化定理 (Symmetric diagonalization theorem):更进一步,如果方阵 A是 对称方阵,可得Q的 每一列都是A的 互相正交且归一化(单位长度)的特征向量,即 。 § 主成份分析 主成份分析(PCA, Principal Component Analysis)有多种推导方法,最大化方差是一种比较直观的方法。比如给出一坨数据,如果你想给出一条坐标轴可以尽量清晰的描述这些数据,即更容易把它们分类,那么直观来看,肯定会选择与数据方差最大的那条直线,才能最大化数据的差异性。 实际的做法就是将数据的高维坐标投影到这条直线,也就是向量上去,然后最大化投影后的方差。 首先定义原始数据的中心点: 定义投影向量 , 不失一般性,可以令 。 每个数据点 投 影之后的的值为 , 投影之后的方差可表示为: 其中,S是 数据的协方差矩阵。现在需要最大化投影方差 , 利用微积分中常用的求极值方法 拉格朗日乘子法 ,引入标量 变 为求下式的极值: 求导,取零,可得: 很明显上式的含义是 矩阵S的 特征向量,这就转换成一个矩阵特征值分解问题。我们将特征值从大到小排列,保留前M个特征向量,即实现了从原来N维空间到M维新空间的降维。 § 参考 PRML 12.1. Principal Component Analysis Introduction to IR 18. Dimensionality reduction and latent semantic indexing 原文摘自:http://blog.jqian.net/post/pca.html
个人分类: 博客转载|13525 次阅读|3 个评论
如何使用Canoco软件对DGGE图谱数据进行主成分PCA分析
热度 2 zhangjiachao 2013-7-23 00:59
第 1 步, DGGE 图谱数据的整理 简单明了些,将 Quantityone 或者类似软件分辨匹配后得出的 DGGE 条带的 相对百分亮度 数据整理到 excel 表格中。格式如下图,即纵向从上往下为样品编号,条带编号则在第一行从左往右,表格中填入对应条带的相对百分亮度值。 比如,条带 3 在泳道 1 中的亮度为 0.591841. 此表是本人某论文的原始数据的一部分。 第 2 步, DGGE 图谱数据的导入。 使用 Canoco 软件进行相关分析。 Canoco 在不少论坛,比如普兰塔等,都有破解版下载。 大家运行的时候只要调整下电脑系统时间到 2002 年以前即可(最新破解版似乎不需要这么麻烦了)。 Canoco 不能直接识别 excel 格式的数据。必须将 DGGE 图谱的条带数据转化为能识别的 .dta 后缀的文件才可以进行后续的 PCA 等相关分析。具体操作如下:在 excel 表格中,将条带数据连同样品编号和条带编号一起鼠标 选择 , Ctrl + C 拷贝。然后“开始” - “程序”下找到 Canoco 的子程序 WcanoImp ,这个子程序是专门导入数据的。程序会弹出如下对话框: 如果你的条带矩阵数据有很多 0 值,可以将最后的“ Save in Condensed Format ”勾上,至于为什么,没有太深究。不过不勾上,似乎不影响分析结果。 点击“ Save ”,弹出如下对话框: 这个时候,要自己选择条带数据矩阵的保存路径,并给该文件命名。如,我将此文件保存到“ PCA 教程”文件夹下,命名为 spe.dta ,注意这个“ spe.dta ”是我自己打出来的。点击“保存”,弹出如下对话框: 点击“ OK ”,系统会提示你成功生成文件。这个文件就是我们后续 PCA 分析所需要的 Canoco 软件可识别的条带组成数据。这个 spe.dta 文件就保存在 PCA 教程”文件夹下。当然,我们还可以对理化因子数据进行同样的操作。如果对物种生存环境对生物的影响方面的研究感兴趣,可以进行 RDA , CCA 等分析,这个就需要物种和环境两个数据矩阵了。 第 3 步, Canoco 软件进行 PCA 数据分析。 接下来我们就可以使用 Canoco 软件对我们的 spe.dta 文件记性 PCA 分析了。 在“开始” - “程序”下找到 Canoco for Windows 4.5 ( 当然你我版本可能不同 ) 。 Close Canoco 软件弹出的小广告。就进入 Canoco 的分析界面: 点击最左边的符号“ ​ ”,弹出如下对话框: 我们只有条带(即物种 species )数据,所以只能选择最上面的“ Only species dataavailable ”。如果你有物种数据、物种所在环境的理化参数数据或者其他辅助数据,可以选择对应的选项。不同的选项,后续的操作略有不同,可以进行不同的分析。比如,“ Species and environmental data available ”,我们可以进行计算不同环境因子对物种组成影响的 RDA , CCA 等分析。感兴趣,可以查阅下文献。 选择“下一步”: “ Browse ”,浏览选择上步生成的“ spe.dta ”数据。如下: 然后在“ Canoco solution file name ”一栏中,将“ spe.dta ”数据的保存路径复制过来。举例,我这次就将下图的蓝色选择部分复制,然后拷贝到“ Canoco solution file name ”下面,自己 再 后面键盘敲进去将来要生成的 solution 文件的名称,比如 PCA.sol ,注意后缀一定是 .sol 。 这一步比较重要。 选择“下一步”: 选择“ Linear ”线性的分析模式下的 PCA ,“下一步”: 默认,下一步: 如果你的不同条带数据差异巨大,比如,最大的 100 ,最小的 0.1 ,你可以选择开平方处理下。默认,下一步: 默认,下一步: 默认,下一步: 选择“完成”, OK , Canoco 软件分析完成了。弹出如下对话框: 在“文件名”一栏中,敲进去“ PCA.con ”。如下图。当然,名字你随便起,后缀最好是 .con 。 下面就要看分析结果和绘图了。 第 4 步, Canoco PCA 数据分析结果及绘图。 上一步在选择“保存”后,弹出如下对话框: 选择“ Analyze ”对数据进行分析 我们可以看到 PCA 的大体分析结果,如下图,我们可以看到第一轴解释了 31.3% 的物种组成变化,第二轴解释了 46.9-31.3=15.6% 的物种组成。 这个时候该绘图了!选择“ CanoDraw ”按钮,弹出如下对话框,命名 PCA.cdw 然后“保存”。然后就可以输出图了,先关掉如下的 Canoco 小广告。 我们可以看到这样的操作界面: 在“ Create ”菜单下选择“ Scatter plots ”—“ samples ”或者“ species ”,就可以得到样点或者物种组成的 PCA 图了。如下图: 这个图是最原始的图,我们可以进行相关的编辑。比如,鼠标右键,可以调整 PCA 图的轴大小。我觉得第一轴,即水平轴的右边范围太大了,可以适当缩小,由 2.5 更改为 2.2. 得出新图,如下: 我们可以用鼠标拖动上面的数字,因为有重叠之类的问题,不太好看。拖动后,如下图,这样好看一点哦。 另外,鼠标右键有几项命令,比如 zoom ,可以放大图谱,使我们看的更清晰些。我们还可以对样点的显示符号、文字及大小进行编辑。比如,本 PCA 图,样品 1-12 , ,1-24, 25-36 分别为 3 个处理。我想用不同的符号来直观的区别他们,可以,操作是这样的:按着 Ctrl 键,依次选择 13-24 号对应的圈圈符号,然后按 F5 ,就可以打开“ Properties ”对话框,可以对颜色、线条、填充及符号类型及大小进行编辑。当然,只要你选择了任何对象,都可以 F5 ,对其特性进行编辑。 修改后的 13-24 号样点的符号类型就更改为如下图: 同样的方法可以对其他的样点进行编辑,如下图所示。 如果满意,我们就可以输出图片了。“ File ”菜单下“ Export ”,大家根据需要选择输出图片的格式及分辨率 DPI 。这样就 OK 了。 最后,感谢西北农林科技大学的 李龙 博士的原始数据支持。感谢大家的支持。有问题请进入 DGGE 交流群 87203673 或者加 QQ1142553379 ,我们共同探讨。
20688 次阅读|4 个评论
保存文件与PCA联想
ldchr 2013-7-1 05:21
今天在整理电脑里的资料,突然想到一个问题。如果哪天自己的电脑被人偷了,那这些没有备份的资料,就永远都找不到了,那损失该有多大啊。 导师 在巴西电脑被偷就是很好的例子。 正让我想到最近用到的 PCA 技术。高光谱图像有很丰富的频谱信息,但事实上,大多数信息都是冗余的,也就是说,信息是大量重复或者影响不重要的。我们往往需要讲大量统计数据变换到相应的子空间上进行研究。其实,无论是处理专业数据,还是处理自己的文件、邮件或者人际关系,都必须进行大刀阔斧地降维简化,否则代价便是疯狂增长的复杂度。 所以,仅有纪念意义的文件,不能大量保存。
2719 次阅读|0 个评论
主成分分析和核函数
lijiankou 2013-6-16 22:26
主成分分析和核函数 主成分分析(PCA)的主要作用是降低数据的维度,提取其主要特征,因为现实中很多数据都是很稀疏的,通过提取主要特征过滤噪音发现其潜在的规律;核函数表示了两个数据之间的相似性。那么这两者之间存在什么样的关系?直观上理解,PCA和核侧重的是两个相反的方向,下面给出解释。 考虑下面的高斯核, ,x,y代表了两个数据点,j 代表了数据的不同特征,D是特征数 此时协方差矩阵 为对角矩阵,当 不是对角矩阵的时候,可以通过相似变换到一个对角矩阵。 由以上可知,如果 ,那么相应的维度等于0,从而可以忽略掉,因为加上一个0不会改变原来的值,我们更关心方差较小的那些特征。 另一方面,从PCA的角度考虑,如果 ,说明数据在该特征上区分度大,该特征就是数据的主要特征,我们希望保留该特征,对于方差较小的特征,即区分度不大(数据基本相似)的特征可以忽略掉。 从以上分析可以看出,PCA关注的是区分度,差异性,而Kernel关注的是相似度,PCA最希望保留的特征恰恰是kernel可以忽略的,而kernel保留的,很可能被PCA忽略掉了。 需要注意的是,我们上面考虑的是一种极端的情况,方差是无穷大,真实数据方差不会是无穷大,我们降维以后,数据的相似性也不会是0,被忽略掉的特征的相似性也不完全相同。上面的极端例子只是为了说明PCA和核函数侧重的是数据的两个方面,一个侧重差异性,另一个侧重相似性。
个人分类: 机器学习|5046 次阅读|0 个评论
[转载]Principal components analysis and Principal Component Analys
kangyu 2013-4-21 10:57
Principal Coordinates Analysis Previous Top Next Principal Coordinates Analysis (PCoA, = Multidimensional scaling, MDS) is a method to explore and to visualize similarities or dissimilarities of data. It starts with a similarity matrix or dissimilarity matrix (= distance matrix) and assigns for each item a location in a low-dimensional space, e.g. as a 3D graphics. Rational PCOA tries to find the main axes through a matrix. It is a kind of eigenanalysis (sometimes referred as singular value decomposition) and calculates a series of eigenvalues and eigenvectors. Each eigenvalue has an eigenvector, and there are as many eigenvectors and eigenvalues as there are rows in the initial matrix. Eigenvalues are usually ranked from the greatest to the least. The first eigenvalue is often called the dominant or leading eigenvalue. Using the eigenvectors we can visualize the main axes through the initial distance matrix. Eigenvalues are also often called latent values. The result is a rotation of the data matrix: it does not change the positions of points relative to each other but it just changes the coordinate systems! Interpretation By using PCoA we can visualize individual and/or group differences. Individual differences can be used to show outliers. Note: There is also a method called ' Principal Component Analysis ' (PCA, sometimes also misleadingly abbreviated as 'PCoA') which is different from PCOA. PCA is used for similarities and PCoA for dissimilaritties. However, all binary measures (Jaccard, Dice etc.) are distance measures and, therefore PCoA should be used. For details see the following box: Why does ClusterVis perform Principal Coordinates Analysis (PCoA, = 'Classical Multidimensional Scaling') instead of Principal Components Analysis (PCA)? Let's look at the differences between PCA and PCoA: Principal Components analysis (PCA) - transforms a number of possibly correlated variables (a similarity matrix!) into a smaller number of uncorrelated variables called principal components. So it reduces the dimensions of a complex data set and can be used to visulalize complex data. The first principal component accounts for as much of the variability in the data as possible, and each succeeding component accounts for as much of the remaining variability as possible. - captures as much of the variation in the data as possible - principal components are ... * summary variables * linear combinations of the original variables * uncorrelated with each other * capture as much of the original variance as possible Classical Multidimensional Scaling (CMDS) - is similar in spirit to PCA but it takes a dissimilarity as input! A dissimilarity matrix shows the distance between every possible pair of objects. - is a set of data analysis techniques that display the structure of (complex) distance-like data (a dissimilarity matrix!) in a high dimensional space into a lower dimensional space without too much loss of information. - The goal of MDS is to faithfully represent these distances with the lowest possible dimensional space. ClusterVis calculates a principal coordinate analysis (PCoA) of a distance matrix (see Gower, 1966) and calculates a centered matrix. The centered matrix is then decomposed into its component eigenvalues and eigenvectors. The eigenvectors, standardized by dividing by the square root of their corresponding eigenvalue, are output as the principal coordinate axes. This analysis is also called metric multi-dimensional scaling. It is useful for ordination of multivariate data on the basis of any distance function. References: Zuur, A.F., Leno, E.N. Smith, G.M. (2007): Statistics for Biology and Health - Analysing Ecological Data, Springer, New York. ISBN 978-0-387-45967-7 (Print), 978-0-387-45972-1 (Online). Gower, J.C. (1966): Some distance properties of latent root and vector methods used in multivariate analysis. Biometrika 53: 325-338. From: http://www.sequentix.de/gelquest/help/principal_coordinates_analysis.htm Also see: http://en.wikipedia.org/wiki/Principal_components_analysis http://en.wikipedia.org/wiki/Principal_coordinates_analysis http://en.wikipedia.org/wiki/Factor_analysis http://forrest.psych.unc.edu/teaching/p208a/mds/mds.html http://www.mathpsyc.uni-bonn.de/doc/delbeke/delbeke.htm
个人分类: Statistics|3106 次阅读|0 个评论
Unifrac软件PCA分析中unweighted和weighted说明
zczhou 2013-3-5 11:11
Unifrac PcoA 分析中 unweighted 说明,不同环境之间的差异是根据不同环境特有的分支长度来区分的。 The UniFrac Metric Calculating the UniFrac metric. The majority of options in the UniFrac interface make comparisons based on the UniFrac metric. The UniFrac metric measures the difference between two environments in terms of the branch length that is unique to one environment or the other. In the tree on the left (below), the division between the two environments (labeled red and blue) occurs very early in the tree, so that all of the branch length is unique to one environment or the other. This provides the maximum UniFrac distance possible, 1.0. In the tree on the right, every sequence in the first environment has a very similar counterpart in the other environment, so most of the branch length in the tree comes from nodes that have descendants in both environments. In the example, there is about as much branch length unique to each environment (red or blue) as shared between environments (purple), so the UniFrac value would be about 0.5. If the two environments were identical and all the same sequences were found in both, all the branch length would be shared and the UniFrac value would be 0. Weighted Unifrac Metrci 是为了区分相似或相同的序列,增加有多个序列分支的分支长度的比重 Calculating the Weighted UniFrac Metric. The UniFrac metric described above does not account for the relative abundance of sequences in the different environments because duplicate sequences contribute no additional branch length to the tree (by definition, the branch length that separates a pair of duplicate sequences is zero, because no substitutions separate them). Because the relative abundance of different kinds of bacteria can be critical for describing community changes, we have developed a variant of the algorithm, weighted UniFrac, which weights the branches based on abundance information during the calculations. Weighted UniFrac can thus detect changes in how many organisms from each lineage are present, as well as detecting changes in which organisms are present. The figure below illustrates how the Weighted algorithm works. Branch lengths are weighted by the relative abundance of sequences in the square and circle communities; square sequences are weighted twice as much as circle sequences because there are twice as many total circle sequences in the dataset. The width of branches is proportional to the degree to which each branch is weighted in the calculations and the grey branches have no weight. Branches 1 and 2 have heavy weights since the descendants are biased towards the square and circles respectively. Branch 3 contributes no value since it has an equal contribution from circle and square sequences after normalization for different sample sizes. 其中 normalized weighted 选项通过将 Unifrac distance value 除以距离比例常数 D 使不同进化速率的分类单元在计算 unifrac distance 时是按照同等的比例对待。进化快的分支 分支长度长,用 normalized weighted 方法会将长短不一的分支按照分支中个序列距离 root 的平均值按比例比较,就是去比例比较。 Normalizing Weighted UniFrac Values. If the phylogenetic tree is not ultrametric (i.e. if different sequences in the sample have evolved at different rates), comparing environments with the Cluster Environments or PCA analysis options using weighted UniFrac will place more emphasis on communities that contain taxa that have evolved more quickly. This is because these taxa contribute more branch length to the tree. In some situations, it may be desirable to normalize the branch lengths within each sample. This normalization has the effect of treating each sample equally instead of treating each unit of branch equally: the issues involved are similar to those involved in performing multivariate analyses using the correlation matrix, to treat each variable equally independent of scale, or using the covariance matrix, to take the scale into account. Normalization has the additional effect of placing all pairwise comparisons on the same scale as unweighted UniFrac (0 for identical communities, 1 for non-overlapping communities), allowing comparisons among different analyses with different samples. The scale of of the raw weighted UniFrac value (u) depends on the average distance of each sequence from the root. The normalization to correct for this effect is performed by dividing u by the distance scale factor D (see equation below), which is the average distance of each sequence from the root weighted by the number of times each sequence was observed in each community.
37686 次阅读|0 个评论
主成分分析(PCA)教程
热度 1 grating 2012-7-8 10:54
这是一篇翻译的文献,看看有需要的吗 ? 主成分分析教程 -a tutorial on principle components analysi s Lindsay I Smith, February 26, 2002 第一章 引言 本教程为读者提供主成分分析( PCA )的基本原理。 PCA 是一种统计技术,应用于人面部识别和图像压缩,是在高维数据中提取模式的一种一般技术。 开始描述 PCA 之前,本教程首先向大家介绍一些相关的数学概念,包括标准差、协方差、特征矢量和特征值。这些背景知识与 PCA 章节直接相关,熟悉的读者可以直接跳过。 贯穿全教程的一些例子用来描绘讨论过的概念。如果需要进一步的信息,可以参阅由 Howard Anton 编著, John Wiley Sons Inc 出版的“ Elementary Linear Algebra(5e) ”(线性代数基础第五版)。 这里不支持公式,怎么办呢? 还是引用我原来的文章吧, http://jacobyuan.blog.sohu.com/148317731.html
个人分类: 翻译|12424 次阅读|2 个评论
ASM/AAM形状训练
热度 2 wanglin193 2011-6-13 22:33
ASM/AAM形状训练
用上次提供的手工标定的脚本,我们已经得到了一些训练样本,接下来就该进行训练了。 AAM和ASM的形状和纹理(ASM用的是形状landmark点附近的局部纹理,AAM用的是base shape mesh内部的全部像素)训练都是独立进行的,训练的方法都是主成分分析(PCA),把形状或纹理投到训练样本撑起的子空间(subspace)中去,把人脸形状或纹理利用子空间中相对较少的维数来表达。样本在子空间中得到的坐标值,又可以称为 模型参数 。也就是说任何一个样本都能表达成用一组正交向量基的加权和的形式,这些向量基表示高维空间中的坐标轴,这些权重系数(模型参数)表示样本在坐标轴上投影得到的坐标值。PCA使用的KL变换,是一种线性变换,它把样本集合所在的高维空间坐标轴进行了平移和旋转变换,变换后,坐标原点变到样本聚类中心(这就需要样本在空间中是聚类的,比如都是正脸的形状或纹理),坐标轴的方向旋转到与聚类集合的主轴方向平行(假设样本聚类成一个高维椭球),序号在前的坐标轴的集中的能量较多,排在后面的只能表达一些噪声,通过忽略后面的表达能力较弱的坐标轴,达到降维的目的。比如68×2=136维的形状矢量,可以用较少的几十个参数来表达。PCA计算可以非常容易地用matlab的svd函数(或svds)实现,比如这样 = svds(x,s);%x是样本集合,每个样本对应一列,均值为0,s表示最大能量的s个eigenvalue Evalues=diag(S).^2;%eigenvalue,S是singular value矢量 Evectors=U; %本征矢量eigenvectors 在开始做PCA之前,来至不同图像的形状样本,都要经过一个4个参数(表示位移,平面内旋转和变比)的相似变换,变换到和它们的平均形状对齐。而这个平均形状是在变换后的样本上得到的,这是个先有鸡还是先有蛋的问题。具体做法用到迭代步骤:先给定一个平均形状的初始值,大家都向它对齐,然后计算均值,这个均值每次都要经过规范化,比如让重心为0,方差为一个固定数100,具体如下: %% aligne all shapes 形状都表达成(x1,x2,...y1,y2...)的136维的矢量 alishapes = shapeall; meanshape = alishapes(:,1); for round=1:50 %循环次数50 meanshape = norm_meanshape(meanshape); for i=1:ls %所有样本,pntnum=68 = align2shape( ,... , ones(pntnum,1) ); alishapes(:,i) = ; end meanshape = mean(alishapes,2); end 我手里有80个训练样本,最后的对齐的样本如下,红点是meanshape: PCA得到的头两个坐标轴(本征矢量)对应的本征值在方差(sqrt(engenvalue))正负3之间变化,中间那个是meanshape,也可以称为base mesh: 下面是把平均形状画在一个宽高分别为133和153像素图像上的情形,形状重心对应图像的中心点: 这个图像是AAM用来训练纹理用的,作为一个摆放不同大小的人脸样本图像的标准尺度,所有图像样本都要warp到这个平均形状内部上(上篇博客文章最后那个图),它内部对应的像素个数决定了warp和纹理子空间的计算量。 如果使用多分辨率AAM,则可以以它为基础构造图像金字塔。
个人分类: ASM/AAM|12400 次阅读|2 个评论
[转载]主元分析(PCA)理论分析及应用
热度 1 yqx1985 2010-11-25 15:12
主元分析 (PCA) 理论分析及应用 (主要基于外文教程 翻译 ) 笔者按:你是不是经常用到主成分分析呢?你是否有时候也在想,为何经过那一系列操作后数据就完成了降维而信息量又不丢失?如果想了解主成分分析的原理,那么看看这篇文章吧。 什么是 PCA? PCA 是 Principal component analysis 的 缩写,中文翻译为主元分析。它是一种对数据进行分析的技术,最重要的应用是对原有数据进行简化。正如它的名字:主元分析,这种方法可以有效的找出数据中最 主要的元素和结构,去除噪音和冗余,将原有的复杂数据降维,揭示隐藏在复杂数据背后的简单结构。它的优点是简单,而且无参数限制,可以方便的应用与各 个场合。因此应用极其广泛,从神经科学到计算机图形学都有它的用武之地。被誉为应用线形代数 最 价值的结果之一。 在以下的章节中,不仅有对 PCA 的比较直观的解释,同时也配有较为深入的分析。首先将从一个简单的例子开始说明 PCA 应用的场合以及想法的由来,进行一个比较直观的解释;然后加入数学的严格推导,引入线形代数,进行问题的求解。随后将揭示 PCA 与 SVD(Singular Value Decomposition) 之间的联系以及如何将之应用于真实世界。最后将分析 PCA 理论模型的假设条件以及针对这些条件可能进行的改进。 一个简单的模型 在 实验科学中我常遇到的情况是,使用大量的变量代表可能变化的因素,例如光谱、电压、速度等等。但是由于实验环境和观测手段的限制,实验数据往往变得极其的 复杂、混乱和冗余的。如何对数据进行分析,取得隐藏在数据背后的变量关系,是一个很困难的问题。在神经科学、气象学、海洋学等等学科实验中,假设的变量个 数可能非常之多,但是真正的影响因素以及它们之间的关系可能又是非常之简单的。 下面的模型取自一个物理学中的实验。它看上去比较简单,但足以说明问题。如 图表 1 所示。这是一个理想弹簧运动规律的测定实验。假设球是连接在一个无质量无摩擦的弹簧之上,从平衡位置沿 轴拉开一定的距离然后释放。 图表 1 对于一个具有先验知识的实验者来说,这个实验是非常容易的。球的运动只是在 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) 所示,圆圈代表采样点,因为运动理论上是只存在于一条直线上,所以偏离直线的分布都属于噪音。此时 描述的就是采样点云在某对垂直方向上的概率分布的比值。那么,最大限度的揭示原数据的结构和关系,找出某条潜在的,最优的 轴,事实上等价寻找一对空间内的垂直直线(图中黑线表示,也对应于此空间的一组基),使得信噪比尽可能大的方向。容易看出,本例中潜在的 轴就是 图上的较长黑线方向。那么怎样寻找这样一组方向呢?直接的想法是对基向量进行旋转。如 图表 2 (b) 所示,随着这对直线的转动 以及方差的变化情况。应于 最大值的一组基 ,就是最优的主元方向。在进行数学中求取这组基的推导之前,先介绍另一个影响因素。 B. 冗余 有时在实验中引入了一些不必要的变量。可能会使两种情况: 1 )该变量对结果没有影响; 2 )该变量可以用其它变量表示,从而造成数据冗余。下面对这样的冗余情况进行分析和分类。 图表 3 :可能冗余数据的频谱图表示。 和 分别是两个不同的观测变量。 (比如例子中的 , )。最佳拟合线 用虚线表示。 如 图表 3 所示,它揭示了两个观测变量之间的关系。 (a) 图所示的情况是低冗余的,从统计学上说,这两个观测变量是相互独立的,它们之间的信息没有冗余。而相反的极端情况如 (c) , 和 高度相关, 完全可以用 表示。一般来说,这种情况发生可能是因为摄像机 A 和摄像机 B 放置的位置太近或是数据被重复记录了,也可能是由于实验设计的不合理所造成的。那么对于观测者而言,这个变量的观测数据就是完全冗余的,应当去除,只用一个变量就可以表示了。这也就是 PCA 中降维思想的本源。 C. 协方差矩阵 对于上面的简单情况,可以通过简单的线性拟合的方法来判断各观测变量之间是否出现冗余的情况,而对于复杂的情况,需要借助协方差来进行衡量和判断: , 分别表示不同的观测变量所记录的一组值,在统计学中,由协方差的性质可以得到: l ,且 当且仅当观测变量 , 相互独立。 l ,当 = 。 等价的,将 , 写成行向量的形式: , 协方差可以表示为: (3) 那么,对于一组具有 个 观测变量, 个 采样时间点的采样数据 ,将每个观测变量的值写为行向量,可以得到一个 的矩阵: (4) 接下来定义协方差矩阵如下: (5) 容易发现协方差矩阵 性质如下: 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 :黑色点表示采样数据,排列成转盘的形状。 容易想象,该数据的主元是 或是旋转角 。 如 图表 4 中的例子, PCA 找出的主元将是 。但是这显然不是最优和最简化的主元。 之间存在着非线性的关系。根据先验的知识可知旋转角 是最优的主元。则在这种情况下, PCA 就会失效。但是,如果加入先验的知识,对数据进行某种划归,就可以将数据转化为以 为线性的空间中。这类根据先验知识对数据预先进行非线性转换的方法就成为 kernel -PCA ,它扩展了 PCA 能够处理的问题的范围,又可以结合一些先验约束,是比较流行的方法。 l 有时数据的分布并不是满足高斯分布。如 图表 5 所示,在非高斯分布的情况下, PCA 方法得出的主元可能并不是最优的。在寻找主元时不能将方差作为衡量重要性的标准。要根据数据的分布情况选择合适的描述完全分布的变量,然后根据概率分布式 来计算两个向量上数据分布的相关性。等价的,保持主元间的正交假设,寻找的主元同样要使 。这一类方法被称为独立主元分解 (ICA) 。 图表 5 :数据的分布并不满足高斯分布,呈明显的十字星状。 这种情况下,方差最大的方向并不是最优主元方向。 l PCA 方法和线形代数中的奇异值分解 (SVD) 方法有内在的联系,一定意义上来说, PCA 的解法是 SVD 的一种变形和弱化。对于 的矩阵 ,通过奇异值分解可以直接得到如下形式: 其中 是一个 的矩阵, 是一个 的矩阵,而 是 的对角阵。 形式如下: 其中 ,是原矩阵的奇异值。由简单推导可知,如果对奇异值分解加以约束: 的向量必须正交,则矩阵 即为 PCA 的特征值分解中的 ,则说明 PCA 并不一定需要求取 ,也可以直接对原数据矩阵 进行 SVD 奇异值分解即可得到特征向量矩阵,也就是主元向量。 计算机视学领域的应用 PCA 方法是一个具有很高普适性的方法,被广泛应用于多个领域。这里要特别介绍的是它在计算机视觉领域的应用,包括如何对图像进行处理以及在人脸识别方面的特别作用。 A. 数据表示 如果要将 PCA 方法应用于视觉领域,最基本的问题就是图像的表达。如果是一幅 大小的图像,它的数据将被表达为一个 维的向量: 在这里图像的结构将被打乱,每一个像素点被看作是一维,最直接的方法就是将图像的像素 一 行行的头尾相接成一个一维向量。还必须要注意的是,每一维上的数据对应于对应像素的亮度、灰度或是色彩值,但是需要划归到同一纬度上。 B. 模式识别 假设数据源是一系列的 20 幅图像,每幅图像都是 大小,那么它们都可以表示为一个 维的向量。将它们排成一个矩阵: 然后对它们进行 PCA 处理,找出主元。 为什么这样做呢?据人脸识别的例子来说,数据源是 20 幅不同的人脸图像, PCA 方法的实质是寻找这些图像中的相似的维度,因为人脸的结构有极大的相似性(特别是同一个人的人脸图像),则使用 PCA 方法就可以很容易的提取出人脸的内在结构,也及时所谓模式,如果有新的图像需要与原有图像比较,就可以在变换后的主元维度上进行比较,则可衡量新图与原有数据集的相似度如何。 对这样的一组人脸图像进行处理,提取其中最重要的主元,即可大致描述人脸的结构信息,称作特征脸 ( EigenFace ) 。这就是人脸识别中的重要方法特征脸方法的理论根据。近些年来,基于对一般 PCA 方法的改进,结合 ICA 、 kernel -PCA 等方法,在主元分析中加入关于人脸图像的先验知识,则能得到更好的效果。 C. 图像信息压缩 使用 PCA 方法进行图像压缩,又被称为 Hotelling 算法,或者 Karhunen and Leove (KL) 变换。这是视觉领域内图像处理的经典算法之一。具体算法与上述过程相同,使用 PCA 方法处理一个图像序列,提取其中的主元。然后根据主元的排序去除其中次要的分量,然后变换回原空间,则图像序列因为维数降低得到很大的压缩。例如上例中取出次要的 5 个维度,则图像就被压缩了 1/4 。但是这种有损的压缩方法同时又保持了其中最重要的信息,是一种非常重要且有效的算法。 参考文献 Lindsay I Smith. (2002) A tutorial on Principal Components Analysis Jonathon Shlens . (2005) A Tutorial on Principal Component Analysis ?Will, Todd (1999) Introduction to the Singular Value Decomposition Davidson College. http://www.davidson.edu/academic/math/will/svd/index.html Bell, Anthony and Sejnowski , Terry. (1997) The Independent Components of Natural Scenes are EdgeFilters . Vision Research 37(23), 3327-3338. 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 张翠平 苏光大 (2000) 人脸识别技术综述《中国图像图形学报》第五卷 A 版第 11 期 何国辉 甘俊英 (2006) PCA 类内平均脸法在人脸识别中的应用研究《计算机应用研究》 2006 年第三期 牛丽平 付仲良 魏文利 (2006) 人脸识别技术研究《电脑开发与应用》 2006 年第五期 Wikipedia principal components analysis 词条解释 From Answers. com 全文转自: http://www.cad.zju.edu.cn/home/chenlu/pca.htm
个人分类: 计算化学|8543 次阅读|1 个评论
PCA 主成分分析
petrelli 2010-9-2 16:21
因为没有涉及到PCA的应用, 所以之前一直对它半熟不熟,即使能用也没搞清楚原因. 今天认真看了 http://www.cs.otago.ac.nz/cosc453/student_tutorials/principal_components.pdf 的介绍, 基本明白了. 举一个例子, given an data matrix , 得到d个维度各自的均值 ,然后求得 的covariance matrix , 在covariance matrix 与变量的取样 相乘时, 确实可以放映出x_1在d个维度上的取值.(d个维度相当于d个坐标,其中的原点是各个维度上变量的经验均值 )
个人分类: 生活点滴|6886 次阅读|2 个评论
数码相机中的人脸检测
wanglin193 2010-8-15 00:57
市场上许多数码相机带有“人脸识别”功能,拍照的时候通过定位人脸进行准确聚焦。它的工作原理就是实时人脸检测(Face detection)技术,把它称为人脸识别其实是不准确的。检测或者定位是指在一个图像中找到人脸的位置,而识别(Recognition)是要指出这人是张三还是李四。识别是检测的后续步骤,只有当人脸正确定位后,识别才能进行。 在1990年代之前,很多人脸检测的方法是通过提取图像中脸的明显轮廓,比如鼻子眼睛和下巴的轮廓来进行的。比如先对图像进行边缘提取,根据人脸形状为椭圆这一先验知识找到脸部轮廓;或者通过对图像水平和垂直方向的灰度值进行累加(称为积分投影),在一维投影曲线上判断眼睛或者嘴的位置。在人们用计算机进行人脸检测的早期阶段,这样的思路是比较普遍,它看起来和一个普通人对“在图像中怎样找到人脸?”的回答一致:“先找眼睛鼻子或者嘴巴的轮廓......”。也许也有人会回答:“先根据皮肤颜色......”。实际上,形状轮廓,或者肤色都不是很好的检测线索。对于复杂的图像通过设置简单的阈值提取轮廓,很难奏效;而肤色也容易和图像背景颜色相混淆,更何况颜色信息在黑白图像中根本不存在。 进入90年代,随着计算机处理能力不断增强,进行图像处理运算的门槛大大降低了。人们在一台普通的PC上也可以进行人脸检测和识别算法的研究,大量人脸识别和检测的相关算法涌现出来。人脸检测方法也从之前的基于形状轮廓的思路,转向基于图像的方法。 数字图像处理通常把一个图像表达成矩阵的形式,一幅黑白图像矩阵中每个元素(称为像素)用8Bit(可表达0~255)的整数表示图像亮度。这样的矩阵也可以看做一个3维曲面,如下图。一个8Bit黑白图像一般称为灰度图像,彩色图像则是由3层分别表示红黄蓝的8Bit图像(一个像素24Bit)叠加而成的。一个64×64的人脸图像矩阵,它所能提供的全部信息都包含在这个矩阵里,不会更多(实际上它也可能是有冗余的),所以利用图像的信息进行人脸检测是当前最常规的方法。 人脸检测的基本方法是用一个一系列小窗口扫描照片,窗口的尺寸可视实际人脸的大小选择,比如{16,20,24,32,..., 120} 。扫描窗口,这可以说是人脸图像或者其他目标检测的基本的工作方式,只有这样才能覆盖可能出现在不同位置、不同大小的人脸。对窗口中的图像块提取一系列特征,当这些特征表现出的统计信息满足条件,才判断这个图像为人脸图像。这是模式识别(Pattern recognition)领域的一个典型的两类(“人脸”和“非人脸”)分类问题。 MIT媒体试验室 的Turk和Pentland在基于图像的人脸检测和识别方面做出了开创性的工作。1991年他们发表基于主成份分析(PCA)的方法。他们把人脸图像二维矩阵每行首尾相接组成一个向量,这个向量可以看做是高维空间中的一个点。比如16×16的一个灰度图像,可以看成是256维空间中的一个点。大量的人脸图像在这样的空间中应该是聚在一起的,叫做聚类(俗称扎堆)。一个“非人脸”图像离开这个“堆”则比较远。这样扎堆的人脸与非人脸图像的边界并不光滑,所以一般通过降低维数(高维空间投影到低维子空间,PCA就是干这个的)的方法去除噪声,另一方面在低维空间的计算量也会大大减小。作为人脸判断的依据,“远”和“近”是相对的概念,可以转化为某种概率表达,比如高斯分布的形式,但作为最终判断Yes或No是需要一个阈值,它要在正确率和错检率之间取得平衡。这样的阈值的选取非常微妙,在图像处理和模式识别领域里是避免不了的。所以有人说,无论多么好的算法,归根结底都是trade-off(权衡)。 基于PCA的方法,需要先对扫描窗口进行 归一化 ,变成长度一致的矢量,再通过一个变换矩阵进行 投影 ,变到低维子空间。这样的矩阵乘法,其实是由一系列矢量内积运算组成的,简单说,就象一个2维矢量(4,9)投影到x坐标轴(1,0),只要做内积即可:4*1+9*0=4。这样的简单的步骤,对于大量扫描窗口来说,计算量还是很大的。这对数码相机的系统(比如Arm系统或者加上图像处理DSP芯片)来说,负担太重,几乎无法做到实时处理。 另外,检测算法的缺陷也导致无法有很好的鲁棒性(robustness)。把图像窗口矩阵简单地首尾相接,实际上忽视了人脸在空间上的连续性,而仅仅是把图像看成一个矢量,没有更充分地利用人脸的先验知识,比如眼睛区域的总是比脸部颜色深一些。 真正突破性的进展出现在2001年,P. Viola和M.J. Jones发表的会议论文,提出了基于“积分图像”和AdaBoost训练的著名方法,才使得实时人脸检测变成可能。这篇文章几乎可以说是具有划时代的意义,可以毫不夸张地说,现在市场上几乎所有的人脸算法都是以它为基础的。我在一段很长的时间里所做的工作都和它有关。以后有空我们再来谈它吧,今天就到这里。 相关文献: 基于PCA方法在 这里 可以查到,第一篇就是M. Turk, A. Pentland, Eigenfaces for Recognition。 Viola-Jones论文 Robust Real-time Object Detection
个人分类: 人脸检测|12711 次阅读|4 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-29 18:06

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部