奇異值分解

奇異值分解
定理:設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我們就可以同時完成了近義詞分類和文章的分類。(同時得到每類文章和每類詞的相關性)。

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