奇异值分解和图像主分量复原_20180129

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

奇异值分解(SVD)和图像矩阵的分解测试

· SVD简单介绍

在很多情况下,数据的绝大部分信息往往集中在很小一部分数据上,我们知道线性代数中有很多矩阵的分解技术可以将矩阵表示成易于处理或是表达简化的形式。最常见的一就种是SVD(Singular Value Decomposition)算法。

SVD将数据分解成三个矩阵U,S,VT,这里得到的S是一个对角阵,其中对角元素为奇异值,它代表着矩阵的重要特征,从左上角到右下角重要程度递减。因为奇异值往往对应着矩阵中隐含的重要信息,而且奇异值大小与重要性正相关。

优点:简化数据,优化数据的表达形式。

缺点:难于计算。

关于奇异值分解的定义和相关推导,推荐参考这篇文章,介绍的非常清晰易懂:机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用

故公式什么的这里就不列出了,理解了理论后,我们来小小测试一下,以体会其强大之处。

· matlab测试图像SVD

这里使用的是matlab函数svd():[U,S,V]=svd(A);

输出结果:图像大小为256x256,奇异值有256个,结果可见前50个特征就基本涵盖了原图所有信息。

理解PCA和SVD

发表于 2015-12-04 | 分类于数学杂谈| | 阅读次数 4136

By Z.H. Fu

切问录

摘要

本文主要从分解形式上讲述了PCA(Principal Component Analysis,主成分分析)和SVD(Singular Value Decomposition奇异值分解)的目的和方法,对于两种方法都给出了一种直观的理解。简单起见,本文不给出具体的应用实例。 ## PCA 主成分分析(PCA)常用于提取一系列多维样本的共同特征。那么,怎么理解特征?我们假设每个样本是由一系列的特征线性组合而成的,PCA的目的就是去找到这些特征,然后将每一个样本表示为这些特征的组合,实际上PCA找到了样本空间中的一组基,将每一个样本表示为这组基的线性组合,因此,每一个基就是一个特征。那么,特征需要满足哪些性质呢?其实就一点,特征之间的关系应该越少越好。用基来描述就是

这应该是一组正交基。下面我们来看该怎么构造这组基。

我们假设我们的样本矩阵为A m×n Am×n每一行为一个样本,共m个样本,每一列是一个特征,共n个特征。我们来看怎么刻画特征不相关这个事情。我们可以看两个随机变量不相关是怎么刻画的,两个随机变量不相关,即他们的协方差为0,即:

cov(X,Y)=E([X−E[X]][Y−E[Y])=0cov(X,Y)=E([X−E[X]][Y−E[Y])=0

这启发我们,能不能通过某个线性变换,将样本矩阵变换为一个新矩阵,让新矩阵的每一列不相关,那么为了表示矩阵每一列不相关这个事,我们要先做一个简化,先来考虑均值为0的两个随机变量X,Y X,Y,那么他们的协方差可表示为:

cov(X,Y)=E([X−0][Y−0])=E(XY)cov(X,Y)=E([X−0][Y−0])=E(XY)

即点乘为0,因此我们先求出每一列的均值并将均值归为0(即每一列的所有元素减去当前列的均值)。这样矩阵A通过某个线性变换得出的新矩阵B的每一列都正交,用矩阵表示即为:

B T B=D BTB=D

其中,D是一个对角阵。那么我们假设这个变换是AM=B AM=B,将这个带入得:

(AM)T(AM)=DM T A T AM=DA T A=(M T)−1DM−1(AM)T(AM)=DMTATAM=DATA=(MT)−1DM−1

而我们知道A T A ATA是一个对角阵,那么它的特征值分解A T A=VDV−1ATA=VDV−1中的V是正交单位阵,那么有V T=V−1VT=V−1,那么这个V就满足我们对M的要求。所以,我们对矩阵A做PCA的步骤就是:

1.将A的每一列按均值做归一化,使归一化后的A的每一列均值为0;

2.求出A T A ATA的特征值

D=diag{λ1,λ2,⋯,λn}D=diag{λ1,λ2,⋯,λn}和特征矩阵V; 3.令矩阵B=AV B=AV。

这个矩阵B就是我们需要的新矩阵,它的每一列均值为0,且每一列正交,而A=BV T A=BVT其中,V T VT的每一行就是我们想要的特征,B的每一行就是特征的组合系数。

SVD

SVD(Singular Value Decomposition奇异值分解)是一种矩阵分解的方法,目的很明确,就是将矩阵A分解为三个矩阵UΣV T UΣVT的乘积的形式,我们不妨接着PCA的步骤往下做。我们有A=BV T A=BVT,我们将B写成归一化的形式,其拆开成B=UΣB=UΣ,其中U的每一列是单位向量,而Σ=diag{σ1,σ2,⋯,σn}Σ=diag{σ1,σ2,⋯,σn}则是B中每个向量的模长且σ1>σ2>⋯>σnσ1>σ2>⋯>σn。而B中每一列的模长为Av i Avi,由于v i vi是A T A ATA的特征向量,对应特征值为λiλi,那么Av i Avi平方为

(Av i)T Av i=(Av i)T Av i=v Ti A T Av i=v Ti A T Av i=v Tiλi v i=λi v Ti v i=λi(Avi)TAvi=(Avi)TAvi=viTATAvi=viTATAvi=viTλivi=

λiviTvi=λi

所以有|Av i|=λi−−√|Avi|=λi,所以将B写成B=UΣB=UΣ的形式后,U是正交矩阵,而ΣΣ是一个对角阵,其每一个元素σi=λi−−√σi=λi。我们再来看SVD的图示:

从图中看出,中间的奇异值矩阵由大到小排列,越后面的值对结果的影响越小,因此,如果只保留较大的奇异值和其对应的U、V中的向量,对于矩阵压缩则能起到很好的作用。在该例子中,m>n m>n,能通过

相关文档
最新文档