大家好,欢迎来到IT知识分享网。
设A为mn阶矩阵,A’表示A的转置矩阵,A’A的n个特征值的非负平方根叫作A的奇异值。记为σi(A)。
这几天做实验涉及到奇异值分解svd(singular value decomposition),涉及到这样的一个问题,
做PCA时候400幅图像拉成向量按列摆放,结果摆成了比如说10000400大小的矩阵,
用到svd函数进行奇异值分解找主分量,结果MATLAB提示超出内存,后来想起还有个函数叫svds,看到别人用过,以为只是一个变体,没什么区别,就用上了,结果确实在预料之中。但是今天觉得不放心,跑到变量里面看了下,发现这个大的矩阵被分解成了
三个100006,66,4006大小的矩阵的乘积,而不是普通的svd分解得到的1000010000,10000400,400400大小的矩阵乘积,把我吓了一跳,都得到预期的结果,难不成这里还出个篓子?赶紧试验,
发现任给一个MN大小的矩阵,都是被分解成了M6,66,N6大小的矩阵的乘积,为什么都会出现6呢?确实很纳闷。help svds看了一下,发现SVDS(A) 返回的就是svds返回的就是最大的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(mn),存在U(mm),V(nn),S(mn),满足A = US*V’。
U和V中分别是A的奇异向量,而S是A的奇异值。
AA’的正交单位特征向量组成U,特征值组成S’S,
A’A的正交单位特征向量组成V,特征值(与AA’相同)组成SS’。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/149278.html