奇异值分解

奇异值分解
定理:设A为m*n阶复矩阵,则存在m阶酉阵U和n阶酉阵V,使得:
A = U*S*V’
其中S=diag(σi,σ2,……,σr),σi>0(i=1,…,r),r=rank(A)。
推论:设A为m*n阶实矩阵,则存在m阶正交阵U和n阶正交阵V,使得
A = U*S*V’
其中S=diag(σi,σ2,……,σr),σi>0(i=1,…,r),r=rank(A)。
说明:
1、 奇异值分解非常有用,对于矩阵A(m*n),存在U(m*m),V(n*n),S(m*n),满足A =U*S*V’。U和V中分别是A的奇异向量,而S是A的奇异值。AA'的正交单位特征向量组成U,特征值组成S'S,A'A的正交单位特征向量组成V,特征值(与AA'相同)组成SS'。因此,奇异值分解和特征值问题紧密联系。
2、 奇异值分解提供了一些关于A的信息,例如非零奇异值的数目(S的阶数)和A的相同,一旦秩r确定,那么U的前r列构成了A的列向量空间的正交基。

matlab奇异值分解
函数 svd
格式 s = svd (A) %返回矩阵A的奇异值向量
[U,S,V] = svd(A) %返回一个与A同大小的对角矩阵S,两个酉矩阵U和V,且满足=U*S*V'。若A为m×n阵,则U为m×m阵,V为n×n阵。奇异值在S的对角线上,非负且按降序排列
[U1,S1,V1]=svd(X,0) %产生A的“经济型”分解,只计算出矩阵U的前n列和n×n阶的S。
说明:
1.“经济型”分解节省存储空间。
2. U*S*V'=U1*S1*V1'。
以上来自互动百科。


简单地讲,如果A是实数矩阵的话,A的奇异值就是A'A矩阵的特征值的平方根,A'为A的转置矩阵。若A不是实数矩阵,A'为A的共轭转置矩阵。

来自wikipedia的解释:
奇异值分解

where U is an m×m real or complex unitary matrix, Σis an m×n diagonal matrixwith nonnegative real numbers on the diagonal, and V* (theconjugatetranspose ofV) is an n×n real or complex unitarymatrix. The diagonal entries Σi,i of Σ areknown as thesingular values ofM. The mcolumns of U and the n columns of V are calledthe left singular vectors and right singular vectorsofM, respectively.

Singular value decomposition and eigendecomposition are closely related.Namely:

  • The left singular vectors of M are eigenvectors of MM* .
  • The right singular vectors of M are eigenvectors ofM *M.
  • The non-zero singular values of Σ are the square rootsof the non-zeroeigenvalues ofM *M or MM *.


在google上找了一个关于奇异值分解比较通俗的解释,以下转自http://www.google.com.hk/ggblog/googlechinablog/2006/12/blog-post_8935.html

 
  分类的关键是计算相关性。我们首先对两个文本计算出它们的内容词,或者说实词的向量,然后求这两个向量的夹角。当这两个向量夹角为零时,新闻就相关;当它们垂直或者说正交时,新闻则无关。当然,夹角的余弦等同于向量的内积。从理论上讲,这种算法非常好。但是计算时间特别长。通常,我们要处理的文章的数量都很大,至少在百万篇以上,二次回标有非常长,比如说有五十万个词(包括人名地名产品名称等等)。如果想通过对一百万篇文章两篇两篇地成对比较,来找出所有共同主题的文章,就要比较五千亿对文章。现在的计算机一秒钟最多可以比较一千对文章,完成这一百万篇文章相关性比较就需要十五年时间。注意,要真正完成文章的分类还要反复重复上述计算。

   在文本分类中,另一种办法是利用矩阵运算中的奇异值分解(Singular Value Decomposition,简称SVD)。现在让我们来看看奇异值分解是怎么回事。首先,我们可以用一个大矩阵A来描述这一百万篇文章和五十万词的关联性。这个矩阵中,每一行对应一篇文章,每一列对应一个词。

在上面的图中,M=1,000,000,N=500,000。第 i 行,第 j 列的元素,是字典中第 j 个词在第 i篇文章中出现的加权词频(比如,TF/IDF)。读者可能已经注意到了,这个矩阵非常大,有一百万乘以五十万,即五千亿个元素。

 
  奇异值分解就是把上面这样一个大矩阵,分解成三个小矩阵相乘,如下图所示。比如把上面的例子中的矩阵分解成一个一百万乘以一百的矩阵X,一个一百乘以一百的矩阵B,和一个一百乘以五十万的矩阵Y。这三个矩阵的元素总数加起来也不过1.5亿,仅仅是原来的三千分之一。相应的存储量和计算量都会小三个数量级以上。


三个矩阵有非常清楚的物理含义。第一个矩阵X中的每一行表示意思相关的一类词,其中的每个非零元素表示这类词中每个词的重要性(或者说相关性),数值越大越相关。最后一个矩阵Y中的每一列表示同一主题一类文章,其中每个元素表示这类文章中每篇文章的相关性。中间的矩阵则表示类词和文章雷之间的相关性。因此,我们只要对关联矩阵A进行一次奇异值分解,w我们就可以同时完成了近义词分类和文章的分类。(同时得到每类文章和每类词的相关性)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章