SVD:singular valuedecomposition 奇异值分解
本文总结自网络,详情见最后的参考链接:
奇异值分解可以实现降维的作用,例如讲A分成X*B*Y三部分:
如图所示,A元素个数是100万乘以50万,总共5千亿。
而存储X,B,Y三个矩阵只需要1.5个亿个元素,是原来的三千分之一,相应的存储量和计算量都小了三个数量级。
假设M是n*n的奇异矩阵(奇异矩阵和非奇异矩阵必须在是方阵的前提下,上图中奇异值分解的矩阵A可以不是方阵),那么必须有r ( M ) < n,也就是M中有冗余的信息,我们考虑消除这些冗余信息,这就是奇异值分解的动机。
假如有一个实例,描述了100万篇文章和50万个词的相关性(例如定义每一篇文章i和每一个词的相关性为该词j在该文章中出现的次数k),我们用矩阵A来描述此相关性,Aij即上文中的k。
然后进行奇异矩阵分解:A = X*B*Y
如上图所示,所得到的三个矩阵有很清楚的实际含义。
第一个矩阵X的每一列代表一个主题,其中每个元素代表该文章和该主题的相关性,此主题是抽象出来的,可能与现实生活中的主题(如体育,新闻,音乐)概念不同。
第三个矩阵Y 的每一行代表一个关键字,其中每个元素代表该词和该关键字的相关性,此关键字也是抽象的关键字,可能不是现实生活中的字或者词。
第二个矩阵 B 表示的是文章主题和关键字的相关性,矩阵B可以化简为对角矩阵,即给每一个主题找到直接对应的关键字;若矩阵B不为对角矩阵,那么该主题可能是多个关键字意义的加权组合。
A = X*B*Y
B可以是一个对角矩阵,那么对角上的元素就是奇异值。可以通过SVD对图像进行降噪,如下图:
首先对该图进行存储,设存储于矩阵A中。
然后对A进行SVD分解,分解得到:A = X*B*Y;
B为对角矩阵,对角线元素为σ1 = 14.15,σ2 = 4.67,σ3 = 3.00,σ4 = 0.21,σ5 = 0.19,...,σ15 = 0.05
前三个奇异值比其他的大很多,说明其中包括了绝大部分信息。如果我们只要前三个。
即优化B为:
σ1 0 0 0 … 0
0σ2 0 0 … 0
0 0σ3 0 … 0
0 00 0 0 … 0
…
0 00 0 0 … 0
从而实现了图像的降噪:
由上图可以看出,降噪后并没有完全去掉噪声。
参考链接:
http://www.bfcat.com/index.php/2012/03/svd-tutorial/
http://blog.csdn.net/abcjennifer/article/details/8131087
原文:http://blog.csdn.net/shuimu12345678/article/details/19609909