当前位置:文档之家› PCA算法的数学知识---特征值分解和奇异值分解

PCA算法的数学知识---特征值分解和奇异值分解

PCA算法的数学知识---特征值分解和奇异值分解
PCA算法的数学知识---特征值分解和奇异值分解

PCA算法的数学知识---特征值分解和奇异值分解:

1)特征值:

如果说一个向量v是方阵X的特征向量,将一定可以表示成下面的形式:

=

Xv vλ

这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式:

1

=∑

X Q Q-

其中Q是这个矩阵X的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。

首先,要明确的是,乘以一个矩阵其实就是一个线性变换,而且将一个矩阵乘以一个向量后得到的向量,其实就相当于对这个向量进行了线性变换。如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。分解得到的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)。通过特征值分解得到的前N个特征向量,就对应了这个矩阵最主要的N个变化方向。我们利用这前N个变化方向,就可以近似这个矩阵(变换)。也就是:提取这个矩阵最重要的特征。

总结一下,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可

少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r 大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解: ****T

n p n r r r r p X U V ≈∑

r 是一个远小于n 、p 的数,右边的三个矩阵相乘的结果将会是一个接近于X 的矩阵,在这儿,r 越接近于p ,则相乘的结果越接近于X 。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵X ,我们如果想要压缩空间来表示原矩阵X ,我们存下这里的三个矩阵:U 、Σ、V 就好了。

奇异值与主成分分析(PCA ):

PCA 的全部工作简单点说,就是对原始的空间中顺序地找一组相互正交的坐标轴,第一个轴是使得方差最大的,第二个轴是在与第一个轴正交的平面中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的,这样假设在N 维空间中,我们可以找到N 个这样的坐标轴,我们取前r 个去近似这个空间,这样就从一个N 维的空间压缩到r 维的空间了,但是我们选择的r 个坐标轴能够使得空间的压缩使得数据的损失最小。

假设矩阵每一行表示一个样本,每一列表示一个特征,用矩阵的语言来表示,对一个n* p 的矩阵X 进行坐标轴的变化,P 就是一个变换的矩阵,从一个p 维的空间变换到另一个p 维的空间,在空间中就会进行一些类似于旋转、拉伸的变化。

2***n p p p n p X P X =

而将一个n * p 的矩阵X 变换成一个n* r 的矩阵,这样就会使得本来有p 个特征的样本,变成了有r 个特征了(r < p),这r 个其实就是对p 个特征的一种提炼。用数学语言表示就是: 2***n p p r n r X P X =

但是这个跟奇异值分解(SVD )什么关系呢?之前谈到,SVD 得出的奇异向量也是从奇异值由大到小排列的,按PCA 的观点来看,就是方差最大的坐标轴就是第一个奇异向量,方差次大的坐标轴就是第二个奇异向量…我们回忆一下之前得到的SVD 式子: ****T n p n r r r r p X U V ≈∑

在矩阵的两边同时乘上一个矩阵V ,由于V 是一个正交的矩阵,所以V 转置乘以V 得到单位阵I ,所以可以化成后面的式子 **********T n p p r n r r r r p p r

n p p r n r r r X V U V V X V U ≈∑≈∑

将后面的式子与X * P 那个n * p 的矩阵变换为n * r 的矩阵的式子对照看看,在这里,其实V 就是P ,也就是一个变化的向量,即一组新的坐标基,也叫主成分矩阵,而**n r r r U ∑相当于原数据在新坐标基

下的坐标,叫做得分矩阵。这里是将一个n * p 的矩阵压缩到一个n * r 的矩阵,也就是对列进行压缩。

如果我们想对行进行压缩(在PCA 的观点下,对行进行压缩可以理解为,将一些相似的样本合并在一起,或者将一些没有太大价值的样本去掉)怎么办呢?同样我们写出一个通用的行压缩例子:

2***r n n p r p P X X =

这样就从一个n 行的矩阵压缩到一个r 行的矩阵了,对SVD 来说也是一样的,我们对SVD 分解的式子两边乘以U 的转置U' ****T T r n n p r r r p U X V ≈∑

这样我们就得到了对行进行压缩的式子。可以看出,其实PCA 几乎可以说是对SVD 的一个包装,如果我们实现了SVD ,那也就实现了PCA 了,而且更好的地方是,有了SVD ,我们就可以得到两个方向的PCA ,如果我们对T X X 进行特征值的分解,只能得到一个方向的PCA 。

特征值分解与奇异值分解

特征值:一矩阵A作用与一向量a,结果只相当与该向量乘以一常数λ。即A*a=λa,则a 为该矩阵A的特征向量,λ为该矩阵A的特征值。 奇异值:设A为m*n阶矩阵,A H A的n个特征值的非负平方根叫作A的奇异值。记 (A) 为σ i 上一次写了关于PCA与LDA的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。在上篇文章中便是基于特征值分解的一种解释。特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中。而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景。奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。 在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI(Latent Semantic Indexing) 另外在这里抱怨一下,之前在百度里面搜索过SVD,出来的结果都是俄罗斯的一种狙击枪(AK47同时代的),是因为穿越火线这个游戏里面有一把狙击枪叫做 SVD,而在Google上面搜索的时候,出来的都是奇异值分解(英文资料为主)。想玩玩战争游戏,玩玩COD不是非常好吗,玩山寨的CS有神马意思啊。国内的网页中的话语权也被这些没有太多营养的帖子所占据。真心希望国内的气氛能够更浓一点,搞游戏的人真正是喜欢制作游戏,搞Data Mining的人是真正喜欢挖数据的,都不是仅仅为了混口饭吃,这样谈超越别人才有意义,中文文章中,能踏踏实实谈谈技术的太少了,改变这个状况,从我自己做起吧。 前面说了这么多,本文主要关注奇异值的一些特性,另外还会稍稍提及奇异值的计算,不过本文不准备在如何计算奇异值上展开太多。另外,本文里面有部分不算太深的线性代数的知识,如果完全忘记了线性代数,看本文可能会有些困难。 一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧:

奇异值分解定理

奇异值分解定理:设,则存在m 阶正交矩阵U 和n 阶正交矩阵V ,使得 ,其中为矩阵A 的全部非零奇 异值,满足0r 21>≥≥?≥≥,σσσ,前几个值比较大,它们包含了矩阵A 的大部分信息。U 的列向量(左奇异向量)是 的特征向量,V 的列向量(右奇异向量)是的特征 向量。 奇异值分解的性质: 1. 奇异值的稳定性 定理1:假设, A 和 B 的SVD 分别为和 ,其中p =min ( m , n) ,则有。 定理1表明当矩阵A 有微小扰动时,扰动前后矩阵奇异值的变化不会大于扰动矩阵的-2范数。这个性质表明,对于存在灰度变化、噪声干扰等情况的图像,通过SVD 后,图像的特征向量不会出现大的变化。这一性质放宽了对图像预处理的要求, 并使匹配结果的准确性得到了保证。 2. 奇异值的比例不变性 因此,为了消除幅度大小对特征提取的影响,所进行的归一化处理不会从本质改变奇异值的相对大小。 3. 奇异值的旋转不变性 图像奇异值特征向量不但具有正交变换、旋转、位移、镜像映射等代数和几何上的不变性,而且具有良好的稳定性和抗噪性,广泛应用于模式识别与图像分析中。对图像进行奇异值分解的目的是:得到唯一、稳定的特征描述;降低特征空间的维数;提高抵抗干扰和噪声的能力。 欧氏距离(Euclidean distance )

欧氏距离定义:欧氏距离(Euclidean distance)是一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离。欧氏距离看作信号的相似程度,距离越近就越相似。 设x,y是M× N 维的两幅图像,那么其在图像空间中可以表示为: 式中为图像x,y的第(k,l)个像素点。则图像的欧氏距离定义为 根据上述定义,一幅M×N 的图像可以看作M×N 维欧氏空间中的一点,每个坐标对应于一个像素的灰度值。 特征匹配算法 采用遍历搜索法,计算特征向量两两间的欧氏距离,确定向量之间的最近邻距离(MD)第二近邻距离(SMD),并计算二者的比值:MD/ SMD。设定阈值s,当MD/ SMD

PCA主成分分析计算步骤

主成分分析( Principal Component Analysis , PCA )是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。计算主成分的目的是将高维数据投影到较低维空间。给定 n 个变量的 m 个观察值,形成一个 n*m 的数据矩阵, n 通常比较大。对于一个由多个变量描述的复杂事物,人们难以认识,那么是否可以抓住事物主要方面进行重点分析呢?如果事物的主要方面刚好体现在几个主要变量上,我们只需要将这几个变量分离出来,进行详细分析。但是,在一般情况下,并不能直接找出这样的关键变量。这时我们可以用原有变量的线性组合来表示事物的主要方面, PCA 就是这样一种分析方法。 PCA 的目标是寻找 r ( r

奇异值分解的一些特性以及应用小案例

第一部分:预备知识 1.1 矩阵的F-范数与矩阵迹的关系 引理:设m n A R ?∈,令()ij m n A a ?=,则2211 ||||||()()m n T T F ij i j A a tr AA tr A A === ==∑∑;其中,()tr ?定义如下: 令方阵11 12121 22212r r r r rr m m m m m m M m m m ?? ??? ?=???? ?? ,则11221 ()r rr ii i tr M m m m m ==+++=∑ ,即矩阵M 的迹。注意,()tr ?只能作用于方阵。 那么,下面来看下为什么有2211 ||||||()()m n T T F ij i j A a tr AA tr A A === ==∑∑? 首先,22 11 ||||||m n F ij i j A a === ∑∑这个等式是矩阵F-范数的定义,即一个矩阵的F-范数等于矩阵中每个元素的平方和。 其次,因11121212221 2 ()n n ij m n m m mn a a a a a a A a a a a ???????==?? ???? ,则11 2111222212m m T n n mn a a a a a a A a a a ?? ????=?? ? ? ?? ,易得2211 ()()||||||m n T T ij F i j tr AA tr A A a A ==== =∑∑。(T AA 或T A A 的第r 个对角元素等于第r 行或列元素的平方和,所有对角元素之和就是矩阵每个元素的平方和,即有上式成立。)此过程如图1和图2所示。

奇异值分解法计算广义逆

奇异值分解法计算广义逆 线性最小二乘问题的广义逆求解 (丁梁波 整理) 对于任意的n m ?方程组:b Ax = 其中?? ?? ? ?????=mn m n a a a a A 1111 ???? ? ?????=n x x x 1 ???? ? ?????=m b b b 1 如果n m =,只要n 方阵A 非奇异,就有逆阵1-A ,从而得到解b A x 1-=。然而,对于n m ≠的一般情况,A 是长方阵,就没有通常的逆阵。不过它仍然可以有相应于特定方程类型的几种形式的广义逆矩阵,其中适于任何情况的广义逆叫做Penrose 广义逆,记为+A 。于是,方程的解可以为: b A x += 由奇异值分解(SVD )可以将A 分解为: T V U A ∑= 其中U ,V 分别为m ,n 阶正交阵 ??? ?????? ? ????? ???? ?=∑001 r σσ 这样A 的广义逆+A 可表示为: T U V A 1-+∑= 其中 ?? ?? ??∑=∑- -0001 1 r ???? ??????=∑---1111r r σσ 这样我们可以看出,完成A 的奇异值分解后,求解A 的广义逆就变得很简单,从

而可以方便地求出方程组的最小二乘解。下面我们说明对矩阵进行奇异值分解的方法和步骤。 通常情况下我们考虑m>n 时矩阵A 的奇异值分解,因为当m

雅克比法求矩阵特征值特征向量

C语言课程设计报告 课程名称:计算机综合课程设计 学院:土木工程学院 设计题目:矩阵特征值分解 级别: B 学生姓名: 学号: 同组学生:无 学号:无 指导教师: 2012年 9 月 5 日 C语言课程设计任务书 (以下要求需写入设计报告书) 学生选题说明: 以所发课程设计要求为准,请同学们仔细阅读; 本任务书提供的设计案例仅供选题参考;也可自选,但难易程度需难度相当; 鼓励结合本专业(土木工程、力学)知识进行选题,编制程序解决专业实际问题。

限2人选的题目可由1-2人完成(A级);限1人选的题目只能由1人单独完成(B级);设计总体要求: 采用模块化程序设计; 鼓励可视化编程; 源程序中应有足够的注释; 学生可自行增加新功能模块(视情况可另外加分); 必须上机调试通过; 注重算法运用,优化存储效率与运算效率; 需提交源程序(含有注释)及相关文件(数据或数据库文件); (cpp文件、txt或dat文件等) 提交设计报告书,具体要求见以下说明。 设计报告格式: 目录 1.课程设计任务书(功能简介、课程设计要求); 2.系统设计(包括总体结构、模块、功能等,辅以程序设计组成框图、流程图解释); 3.模块设计(主要模块功能、源代码、注释(如函数功能、入口及出口参数说明,函数调用关系描述等); 4.调试及测试:(调试方法,测试结果的分析与讨论,截屏、正确性分析); 5.设计总结:(编程中遇到的问题及解决方法); 6.心得体会及致谢; 参考文献

1.课程设计任务书 功能简介: a)输入一个对称正方矩阵A,从文本文件读入; b)对矩阵A进行特征值分解,将分解结果:即U矩阵、S矩阵输出至文本文件; c)将最小特征值及对应的特征向量输出至文本文件; d)验证其分解结果是否正确。 提示:A=USU T,具体算法可参考相关文献。 功能说明: 矩阵特征值分解被广泛运用于土木工程问题的数值计算中,如可用于计算结构自振频率与自振周期、结构特征屈曲问题等。 注:以三阶对称矩阵为例 2.系统设计 3.模块设计 #include #include #include int main() { FILE *fp; int tezheng(double *a,int n,double *s,double *u,double eps,int itmax); //函数调用声明 int i,j,p,itmax=1000; //itmax为最大循环次数 double eps=1e-7,s[3][3],u[3][3]; //eps为元素精度,s为对角矩阵S,u为矩阵U double a[9];//a为待分解矩阵A i=tezheng(a,3,s,u,eps,1000);

PCA算法详解

主成分分析法 主成分分析(Principal Component Analysis,简称PCA)方法是目前应用很广泛的一种代数特征提取方法,可以说是常用的一种基于变量协方差矩阵对样本中的信息进行处理、压缩和抽提的有效方法,主要通过K-L(Karhunen-Loeve)变换展开式从人脸数据库中提取人脸的主要特征[i],构成特征脸空间,在识别时将待测试的人脸图像投影到特征脸空间,得到一组投影系数,与数据库中各个人脸图像进行比对识别。这种方法保留了原向量在与其协方差矩阵最大特征值相对应的特征向量方向上的投影,即主分量(Principal Components),因此被称为主成分分析。由于PCA方法在进行降维处理和人脸特征提取方面的有效性,在人脸识别领域得到了广泛的应用。它的核心思想是:利用较少数据的特征对样本进行描述以达到降低特征空间维数的目的,根据样本点在多维空间的位置分布,以样本点在空间中变化最大方向,即方差最大方向,作为差别矢量来实现数据的特征提取。利用K-L变换抽取人脸的主要成分,利用特征脸法进行人脸识别的过程由训练阶段和识别阶段两个阶段组成。 3.1.1 K-L变换概述 K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换。它是建立在统计特性基础上的一种变换,它的突出优点是它能去相关性,而且是均方误差(Mean Square Error,MSE)意义下的最佳变换。 K-L变换的基本思想是在一个新的特征空间中将样本数据沿其特征矢量用对齐的方式进行旋转变换。这个变换有效地克服了样本数据向量间的相关性,从而去除那些只带有较少信息的数据以达到降低特征空间维数的目的。经过以上K-L 变换得到的特征是原图像向量的正交分解,其图像信息的总能量不变,不损失任何信息。在这个互相正交、可测量的特征空间中进行图像的特征提取可以有效地利用图像之间的差异,提取有效信息。K-L特征空间中,较大特征值所对应的特征向量体现原图像的总体趋势以及低频分量,较小特征值所对应特征向量体现原图像的细节变化以及高频分量所以人们用PCA法提取图像总体特征,其目的是用较少数量的特征对样本进行描述,同时又能保留所需要的识别信息。在人脸图像

基于奇异值分解计算MIMO信道容量

基于奇异值分解计算MIMO 信道容量 摘要 无线MIMO 技术是未来无线通信系统中实现高数据速率传输、改善传输质量、提高系统容量的重要途径,它被认为是现代通信技术中的重大突破之一,受到了广泛的研究与关注。信道容量是信道的一个参数,反映了信道所能传输的最大信息量。因此研究MIMO 的信道容量具有巨大的指导意义。本文利用矩阵理论的相关知识,首先建立了MIMO 信道模型,利用信息论理论和奇异值分解的理论详细推导出MIMO 信道容量,并得出重要结论。 关键词: MIMO ;信道容量;奇异值分解 一、 引言 MIMO 系统是能够有效提高无线频谱利用率最重要的方案之一。MIMO 系统使用多根发射天线、多根接收天线, 在系统容量、频谱效率、发射机和接收机的设计上都与传统的单发单收系统有很大差别。然而,MIMO 无线系统大容量的实现和其它性能的提高极大地依赖于MIMO 无线信道的特性,MIMO 无线通信的难点也正在于信道的处理。矩阵理论在通信,自动控制等工程领域里应用广泛,将矩阵理论与无线信道的研究是一个很好的切入点。目前,MIMO 技术的信道容量和空时编码,空时复用等技术都离不开矩阵理论的应用。 二、 奇异值分解的概念 下面介绍一下矩阵奇异值分解的理论。 首先,给出奇异值的概念。 设,m n H r A C A A ?∈的特征值为 121n 0r r λλλλλ+≥≥≥>===…… (2.1) 则称1,2,...,)i i r σ= =为矩阵A 的正奇异值。 进而,奇异值分解理论可以阐述为: 对任意矩阵m n r A C ?∈,12,,...,r σσσ是A 的r 个正奇异值,则存在m 阶酉矩阵U 及n 阶酉矩阵V ,使得 D 0V 00A U ??= ??? (2.2) 其中12D=diag ,,...,),r δδδ(而i δ满足||(1,2,...,)i i i r δσ==的复数。 三、 MIMO 信道模型的建立 为了描述MIMO 信道,考虑考虑基站(BS)天线数R n ,移动台(MS)天线数为T n 的两个均匀线性天线阵列,假定天线为全向辐射天线。每个符号周期内,移动台天线阵列上的发射信号为 12()[(),(),...,()]T n s t s t s t s t =,其中()m s t 表示第m 个天线元上的发射信号。同样地,基站天线阵列上的

奇异值分解

地球物理系反演报告 实验一奇异值分解计算广义逆G+ 专业:地球物理学 姓名: 学号: 指导教师:邵广周

实验一 奇异值分解计算广义逆G + 一、基本原理 对于任意的n m ?方程组:b Ax = 其中??????????=mn m n a a a a A 1 111 ?? ?? ? ?????=n x x x 1 ??????????=m b b b 1 如果n m =,只要n 方阵A 非奇异,就有逆阵1-A ,从而得到解b A x 1-=。然而,对于n m ≠的一般情况,A 是长方阵,就没有通常的逆阵。不过它仍然可以有相应于特定方程类型的几种形式的广义逆矩阵,其中适于任何情况的广义逆叫做Penrose 广义逆,记为+A 。于是,方程的解可以为: b A x += 由奇异值分解(SVD )可以将A 分解为: T V U A ∑= 其中U ,V 分别为m ,n 阶正交阵 ? ????????? ????? ???? ?=∑00 1 r σσ 这样A 的广义逆+A 可表示为: T U V A 1-+∑= 其中 ??????∑=∑--0001 1 r ????????? ?=∑---1111r r σσ

这样我们可以看出,完成A 的奇异值分解后,求解A 的广义逆就变得很简单,从而可以方便地求出方程组的最小二乘解。下面我们说明对矩阵进行奇异值分解的方法和步骤。 通常情况下我们考虑m>n 时矩阵A 的奇异值分解,因为当m

python实验报告(经过pca算法)

#-*-coding:utf-8-*- """ Created on Fri923:15:472017 @author """ #-*-coding:utf-8-*- """ Created on Tue May3020:31:022017 @author: """ import pandas as pd import numpy as np from sklearn.preprocessing import Imputer from sklearn.cross_validation import train_test_split from sklearn import svm from sklearn import cross_validation from sklearn.decomposition import PCA from sklearn.lda import LDA def loadData(filePath): fr=open(filePath,'r+') lines=fr.readlines() Data=[] label=[] for line in lines: items=line.strip().split(",") label.append(items[0]) Data.append([float(items[i])for i in range(1,len(items))]) return Data,label if__name__=='__main__': x1_train,y1_train=loadData('C:\Users\Administrator\SPECTF.train') x_test,y_test=loadData('C:\Users\Administrator\SPECTF.test') x_train=[] y_train=[] for i in range(23,37): x_train.append(x1_train[i]) y_train.append(y1_train[i]) for i in range(173,187): x_train.append(x1_train[i]) y_train.append(y1_train[i])

基于奇异值分解的MVDR谱估计

现代信号处理 学号: 小组组长: 小组成员及分工: 任课教师: 教师所在学院:信息工程学院

2015年11月 论文题目 基于奇异值分解的MVDR方法及其在信号频率估计领域的 应用 摘要:本文主要是介绍和验证MVDR的算法,此算法应用于信号频率估计的领域中。我们通过使用经典的MVDR算法验证算法的可行性,再通过引用了奇异值分解的思想对MVDR方法进行了改进,在验证这种改进思想的方法可行性时,我们发现基于这种奇异值分解的MVDR方法在信号频率估计上具有提高检测精度的特性,这也说明了这种思想在应用信号频率估计时是可行的。 关键词:MVDR算法奇异值分解信号频率估计

论文题目(English) MVDR method based on singular value decomposition and its application in signal frequency estimation Abstract:In this paper, the algorithm of MVDR is introduced, and the algorithm is applied to the field of signal frequency estimation. By using the classical MVDR algorithm to verify the feasibility of the algorithm, and then through the use of the idea of singular value decomposition to improve the MVDR method, in the verification of the feasibility of the method, we found that the MVDR method based on the singular value decomposition has the characteristics of improving the detection accuracy in signal frequency estimation. It also shows that this idea is feasible in the application of signal frequency estimation. Key words: MVDR method Singular value decomposition Signal frequency estimation

人脸识别PCA算法matlab实现及详细步骤讲解

%FaceRec.m %PCA人脸识别修订版,识别率88% %calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5 a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); %imshow(a); b=a(1:112*92);%b是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上 到下,从左到右 b=double(b); allsamples=[allsamples;b];%allsamples是一个M*N矩阵,allsamples中每一行数 据代表一张图片,其中M=200 end end samplemean=mean(allsamples);%平均图片,1×N for i=1:200xmean(i,:)=allsamples(i,:)-samplemean;%xmean是一个M×N矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片” end; %获取特征值及特征向量 sigma=xmean*xmean';%M*M阶矩阵 [v d]=eig(sigma); d1=diag(d); %按特征值大小以降序排列 dsort=flipud(d1); vsort=fliplr(v); %以下选择90%的能量 dsum=sum(dsort); dsum_extract=0; p=0; while(dsum_extract/dsum<0.9) p=p+1; dsum_extract=sum(dsort(1:p)); end i=1; %(训练阶段)计算特征脸形成的坐标系 base=xmean'*vsort(:,1:p)*diag(dsort(1:p).^(-1/2)); %base是N×p阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) %详见《基于PCA的人脸识别算法研究》p31 %xmean'*vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程 %while(i<=p&&dsort(i)>0) %base(:,i)=dsort(i)^(-1/2)*xmean'*vsort(:,i);%base是N×p阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) %详见《基于PCA的人脸识别算法研究》p31 %i=i+1;%xmean'*vsort(:,i)是小矩阵的特征向量向大矩阵特 征向量转换的过程 %end %以下两行add by gongxun将训练样本对坐标系上进行投影,得到一个M*p阶矩阵allcoor allcoor=allsamples*base;%allcoor里面是每张训练人脸图片在M*p子空间中的一个点,即在子空间中的组合系数, accu=0;%下面的人脸识别过程中就是利用这些组合系数来进行识别

并行计算奇异值分解

并行计算奇异值分解--Jacobi旋转 鉴于矩阵的奇异值分解SVD在工程领域的广泛应用(如数据压缩、噪声去除、数值分析等等,包括在NLP领域的潜在语义索引LSI核心操作也是SVD),今天就详细介绍一种SVD的实现方法--Jacobi旋转法。跟其它SVD算法相比,Jacobi法精度高,虽然速度慢,但容易并行实现。 一些链接 https://www.doczj.com/doc/6f1578515.html,/Article/CDMD-10285-1012286387.htm并行JACOBI方法求解矩阵奇异值的研究。本文呈现的代码就是依据这篇论文写出来的。 https://www.doczj.com/doc/6f1578515.html,/javanumerics/jama/ Jama包是用于基本线性代数运算的java包,提供矩阵的cholesky 分解、LUD分解、QR分解、奇异值分解,以及PCA中要用到的特征值分解,此外可以计算矩阵的乘除法、矩阵的范数和条件数、解线性方程组等。 http://users.telenet.be/https://www.doczj.com/doc/6f1578515.html,rmuseau/SVD.htm在线SVD运算器。 http://www.bluebit.gr/matrix-calculator/ bluebit在线矩阵运算器,提供矩阵的各种运算。 https://www.doczj.com/doc/6f1578515.html,/Projects/Matrix/C++ Matrix library提供矩阵的加减乘除、求行列式、LU分解、求逆、求转置。本文的头两段程序就引用了这里面的matrix.h。 基于双边Jacobi旋转的奇异值分解算法 V是A的右奇异向量,也是的特征向量; U是A的左奇异向量,也是的特征向量。 特别地,当A是对称矩阵的时候,=,即U=V,U的列向量不仅是的特征向量,也是A 的特征向量。这一点在主成分分析中会用到。 对于正定的对称矩阵,奇异值等于特征值,奇异向量等于特征向量。 U、V都是正交矩阵,满足矩阵的转置即为矩阵的逆。 双边Jacobi方法本来是用来求解对称矩阵的特征值和特征向量的,由于就是对称矩阵,求出的特征向量就求出了A的右奇异值,的特征值开方后就是A的奇异值。 一个Jacobi旋转矩阵J形如:

人脸识别PCA算法matlab实现及详细步骤讲解

% FaceRec.m % PCA 人脸识别修订版,识别率88% % calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5 a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); % imshow(a); b=a(1:112*92); % b 是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上 到下,从左到右 b=double(b); allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数 据代表一张图片,其中M=200 end end samplemean=mean(allsamples); % 平均图片,1 × N for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean 是一个M × N 矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片” end; % 获取特征值及特征向量 sigma=xmean*xmean'; % M * M 阶矩阵 [v d]=eig(sigma); d1=diag(d); % 按特征值大小以降序排列 dsort = flipud(d1); vsort = fliplr(v); %以下选择90%的能量 dsum = sum(dsort); dsum_extract = 0; p = 0; while( dsum_extract/dsum < 0.9) p = p + 1; dsum_extract = sum(dsort(1:p)); end i=1; % (训练阶段)计算特征脸形成的坐标系 base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2)); % base 是N×p 阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) % 详见《基于PCA 的人脸识别算法研究》p31 % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程 %while (i<=p && dsort(i)>0) % base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base 是N×p 阶矩阵,除以dsort(i)^(1/2) 是对人脸图像的标准化(使其方差为1) % 详见《基于PCA 的人脸识别算法研究》p31 % i = i + 1; % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特 征向量转换的过程 %end % 以下两行add by gongxun 将训练样本对坐标系上进行投影,得到一个M*p 阶矩阵allcoor allcoor = allsamples * base; % allcoor 里面是每张训练人脸图片在M*p 子空间中的一个点,即在子空间中的组合系数, accu = 0; % 下面的人脸识别过程中就是利用这些组合系数来进行识别

PCA算法的数学知识---特征值分解和奇异值分解

PCA算法的数学知识---特征值分解和奇异值分解: 1)特征值: 如果说一个向量v是方阵X的特征向量,将一定可以表示成下面的形式: = Xv vλ 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 1 =∑ X Q Q- 其中Q是这个矩阵X的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。 首先,要明确的是,乘以一个矩阵其实就是一个线性变换,而且将一个矩阵乘以一个向量后得到的向量,其实就相当于对这个向量进行了线性变换。如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。分解得到的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)。通过特征值分解得到的前N个特征向量,就对应了这个矩阵最主要的N个变化方向。我们利用这前N个变化方向,就可以近似这个矩阵(变换)。也就是:提取这个矩阵最重要的特征。 总结一下,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可

少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r 大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解: ****T n p n r r r r p X U V ≈∑ r 是一个远小于n 、p 的数,右边的三个矩阵相乘的结果将会是一个接近于X 的矩阵,在这儿,r 越接近于p ,则相乘的结果越接近于X 。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵X ,我们如果想要压缩空间来表示原矩阵X ,我们存下这里的三个矩阵:U 、Σ、V 就好了。 奇异值与主成分分析(PCA ): PCA 的全部工作简单点说,就是对原始的空间中顺序地找一组相互正交的坐标轴,第一个轴是使得方差最大的,第二个轴是在与第一个轴正交的平面中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的,这样假设在N 维空间中,我们可以找到N 个这样的坐标轴,我们取前r 个去近似这个空间,这样就从一个N 维的空间压缩到r 维的空间了,但是我们选择的r 个坐标轴能够使得空间的压缩使得数据的损失最小。 假设矩阵每一行表示一个样本,每一列表示一个特征,用矩阵的语言来表示,对一个n* p 的矩阵X 进行坐标轴的变化,P 就是一个变换的矩阵,从一个p 维的空间变换到另一个p 维的空间,在空间中就会进行一些类似于旋转、拉伸的变化。

奇异值分解及其应用

奇异值分解及其应用 This model paper was revised by the Standardization Office on December 10, 2020

PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中。而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景。奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。 在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI(Latent Semantic Indexing) 奇异值与特征值基础知识 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来说明一下。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 它其实对应的线性变换是下面的形式:

经典的PCA和LDA算法介绍

LDA: LDA的全称是Linear Discriminant Analysis(线性判别分析),是一种supervised learning。有些资料上也称为是Fisher’s Linear Discriminant,因为它被Ronald Fisher发明自1936年,Discriminant这次词我个人的理解是,一个模型,不需要去通过概率的方法来训练、预测数据,比如说各种贝叶斯方法,就需要获取数据的先验、后验概率等等。LDA 是在目前机器学习、数据挖掘领域经典且热门的一个算法,据我所知,百度的商务搜索部里面就用了不少这方面的算法。 LDA的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近。要说明白LDA,首先得弄明白线性分类器(Linear Classifier):因为LDA是一种线性分类器。对于K-分类的一个分类问题,会有K个线性函数: 当满足条件:对于所有的j,都有Yk > Yj,的时候,我们就说x属于类别k。对于每一个分类,都有一个公式去算一个分值,在所有的公式得到的分值中,找一个最大的,就是所属的分类了。 上式实际上就是一种投影,是将一个高维的点投影到一条高维的直线上,LDA最求的目标是,给出一个标注了类别的数据集,投影到了一条直线之后,能够使得点尽量的按类别区分开,当k=2即二分类问题的时候,如下图所示: 红色的方形的点为0类的原始点、蓝色的方形点为1类的原始点,经过原点的那条线就是投影的直线,从图上可以清楚的看到,红色的点和蓝色的点被原点明显的分开了,这个数

相关主题
文本预览
相关文档 最新文档