奇异值分解及其matlab函数svds

参考自:MATLAB中的svd与svds(转)_haoliyan123_新浪博客

设A为m*n阶矩阵,A'表示A的转置矩阵,A'*A的n个特征值的非负平方根叫作A的奇异值。记为σi(A)。

这几天做实验涉及到奇异值分解svd(singular value decomposition),涉及到这样的一个问题,

做PCA时候400幅图像拉成向量按列摆放,结果摆成了比如说10000*400大小的矩阵,

用到svd函数进行奇异值分解找主分量,结果MATLAB提示超出内存,后来想起还有个函数叫svds,看到别人用过,以为只是一个变体,没什么区别,就用上了,结果确实在预料之中。但是今天觉得不放心,跑到变量里面看了下,发现这个大的矩阵被分解成了

三个10000*6,6*6,400*6大小的矩阵的乘积,而不是普通的svd分解得到的10000*10000,10000*400,400*400大小的矩阵乘积,把我吓了一跳,都得到预期的结果,难不成这里还出个篓子?赶紧试验,

发现任给一个M*N大小的矩阵,都是被分解成了M*6,6*6,N*6大小的矩阵的乘积,为什么都会出现6呢?确实很纳闷。help svds看了一下,发现svds(A) 返回的就是最大的6个特征值及其对应的特征行向量和特征列向量,

还好,我们实验中是在svds得到列向量中再取前5个最大的列向量,这个与普通的svd得到的结果是一致的,虚惊一场。。。还得到了一些别的,比如

改变这个默认的设置,

比如用[u,d,v]=svds(A,10)将得到最大10个特征值及其对应的最大特征行向量和特征列向量,

[u,d,v]=svds(A,10,0)将得到最小10个特征值及其对应的特征行向量和特征列向量,

[u,d,v]=svds(A,10,2)将得到与2最接近10个特征值及其对应的特征行向量和特征列向量。

总之,相比svd,svds的可定制性更强。

奇异值分解非常有用,所谓奇异值分解,即对于矩阵A(m*n),存在U(m*m),V(n*n),S(m*n),满足A = U*S*V’。也就是说,可将矩阵A分解为矩阵U,V,S的乘积。

U和V中分别是A的奇异向量,而S是A的奇异值。

AA'的正交单位特征向量组成U,特征值组成S'S,

A'A的正交单位特征向量组成V,特征值(与AA'相同)组成SS'。因此,奇异值分解和特征值问题紧密联系

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一前言 特征值 奇异值 二奇异值计算 三PCA 1)数据的向量表示及降维问题 2)向量的表示及基变换 3)基向量 ...
    Arya鑫阅读 10,661评论 2 43
  • 原文在此,仅仅将原文的Matlab代码改为Python3版本。 特征值与特征向量的几何意义 矩阵的乘法是什么,别只...
    粗识名姓阅读 14,953评论 0 24
  • 一.判别分析降维 LDA降维和PCA的不同是LDA是有监督的降维,其原理是将特征映射到低维上,原始数据的类别也...
    wlj1107阅读 12,010评论 0 4
  • 在虎三的老家,饭店打包剩菜叫做“折菜”。一盘剩菜,甚至几盘剩菜折叠在一个袋子里,顾名思义:“折菜”。时尚点叫做:“...
    耿卮言阅读 2,419评论 4 26
  • 你有压力吗?你觉得压力大吗?在这个生活节奏越来越快的世界里,压力已经成了全球性的流行疾病。这种疾病正蔓延到...
    章安阅读 329评论 0 0