1. 程式人生 > >矩陣的奇異值分解(SVD)(理論)

矩陣的奇異值分解(SVD)(理論)

  矩陣的奇異值分解(Singular Value Decomposition,SVD)是數值計算中的精彩之處,在其它數學領域和機器學習領域得到了廣泛的應用,如矩陣的廣義逆,主分成分析(PCA),自然語言處理(NLP)中的潛在語義索引(Latent Semantic Indexing),推薦演算法等。

  鑑於實際應用,本次分享中的數域為實數域,即我們只在實數範圍內討論。我們假定讀者具有大學線性代數的水平。那麼,矩陣的奇異值分解定理如下:

(定理)(奇異值分解定理)任意一個$m \times n$矩陣A可分解為

$$A=PDQ$$

其中P是$m \times m$正交矩陣,D是$m \times n$對角陣,Q是$n \times n$正交矩陣。

證明:矩陣$A^{T}A$是$n \times n$對稱矩陣,因為$(A^{T}A)^{T}=A^{T}(A^{T})^{T}=A^{T}A$.又因為

$$x^{T}(A^{T}A)x=(Ax)^{T}(Ax)\ge0,$$

所以$A^{T}A$是半正定矩陣,從而,$A^{T}A$的特徵值為非負數。

       假設$A^{T}A$的特徵值為$\sigma_{1}^{2},\sigma_{2}^{2},...,\sigma_{n}^{2}$,其中,$\sigma_{1}^{2},\sigma_{2}^{2},...,\sigma_{r}^{2}$都是正的,$\sigma_{r+1}^{2},\sigma_{r+2}^{2},...,\sigma_{n}^{2}$都是0,$r$為$A^{T}A$的秩。設$\{u_{1},u_{2},...,u_{n}\}$為$A^{T}A$的標準正交特徵向量集,則

$$A^{T}Au_{i}=\sigma_{i}^{2}u_{i} (i=1,2,...,n)$$

於是$(Au_{i})^{T}(Au_{i})=u_{i}^{T}(A^{T}A)u_{i}=u_{i}^{T}\sigma_{i}^{2}u_{i}=\sigma_{i}^{2}.$當$i\ge r+1$時,$\sigma_{i}=0$,從而$Au_{i}=0$.

       用$\{u_{1}^{T},u_{2}^{T},...,u_{n}^{T}\}$作為行構成一個$n\times n$矩陣$Q$.接著,定義

$$v_{i}=\sigma_{i}^{-1}Au_{i} (1\le i \le r).$$

當$1\le i,j \le r$時,$v_{i}$構成一個標準正交系,這是因為

$$v_{i}^{T}v_{j}=\sigma_{i}^{-1}(Au_{i})^{T}\sigma_{j}^{-1}(Au_{j})=(\sigma_{i}\sigma_{j})^{-1}(u_{i}^{T}A^{T}Au_{j})=(\sigma_{i}\sigma_{j})^{-1}(u_{i}^{T}\sigma_{j}^{2}u_{j})=\delta_{ij},$$

其中$\delta_{ij}$為Kronecker符號,即當$i=j$時,$\delta=1$,當$i\neq j$時,$\delta=0$.

       我們選擇額外的向量$v_{i}$使得$\{v_{1},v_{2},...,v_{m}\}$為$\mathbb{R}^{m}$的標準正交基。設P是$m\times m$矩陣,其列是$v_{1},v_{2},...,v_{m}$.設D是$m\times n$對角陣,$\sigma_{1},\sigma_{2},...\sigma_{r}$在其對角線上,其餘地方均為0.於是有

$$A=PDQ.$$

這是因為$(P^{T}AQ^{T})_{ij}=v_{i}^{T}Au_{j}$,當$j\ge r+1$時,該式為0,當$j\le r$時,該式為$v_{i}^{T}\sigma v_{j}=\sigma_{j}\delta_{ij}$,從而$P^{T}AQ^{T}=D$.又因$P,Q$為正交矩陣,因此$$A=PDQ.$$

  證畢。

  在上面證明中,我們稱實數$\sigma_{1},\sigma_{2},...,\sigma_{n}$(取非負數)為矩陣A的奇異值,它們是$A^{T}A$的特徵值的非負平方根。定理中的分解$A=PDQ$就是一個奇異值分解。由上面的證明,我們可以知道:矩陣的奇異值分解並不唯一,因為$\sigma_{1},\sigma_{2},...,\sigma_{n}$的次序及$v_{r+1},v_{r+2},...,v_{n}$的選擇並不唯一。

  在Python中的Numpy模組中,已經實現了矩陣的奇異值分解。以下為示例的應用程式碼:

 1 import numpy as np
 2 #generate a random 3*4 matrix 
 3 A =  np.random.randint(5, size=(3, 4))
 4 #parameter full_matrices: control the size of P and Q
 5 #d returns as numpy.ndarray, not matrix 
 6 P,d,Q = np.linalg.svd(A, full_matrices=True)
 7 print('A:',A)
 8 print('P:',P)
 9 #D return as diagonal 3*4 matrix
10 D = np.zeros(12).reshape(3,4)
11 for i in range(len(d)):
12     D[i][i] = d[i]
13 print('D:',D)
14 print('Q:',Q)
15 #check if P*D*Q == A
16 print('P*D*Q:',np.dot(P,np.dot(D,Q)))

輸入結果如下:

  至於如何用原始演算法來實現矩陣的SVD,也是需要考慮的,有機會的話,可以交流哦~~

  本次分享到此結束,歡迎大家批評與交流~~

參考文獻:

  1. SVD 維基百科:https://en.wikipedia.org/wiki/SVD
  2. 數值分析  機械工業出版社 作者:薩奧爾(Timothy Sauer)  譯者:裴玉茹 
  3. numpy的svd實現函式: https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.svd.html
  4.  奇異值分解(SVD)原理與在降維中的應用:https://www.cnblogs.com/pinard/p/6251584.html
  5.  奇異值分解SVD應用——LSI:http://blog.csdn.net/abcjennifer/article/details/8131087
  6. 論文:CALCULATING THE SINGULAR VALUES AND PSEUDO-INVERSE OF A MATRIX, G. GOLUB AND W. KAHAN,  J. SIAM llrM,B. AfeArd.Ser. B, Vol. 2, No. 2, 1965

相關推薦

機器學習中的數學-強大的矩陣奇異分解(SVD)及其應用

版權宣告:     本文由LeftNotEasy釋出於http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html 前言: &nb

奇異的物理意義是什麼?強大的矩陣奇異分解(SVD)及其應用

強大的矩陣奇異值分解(SVD)及其應用 一、奇異值與特徵值基礎知識: 特徵值分解和奇異值分解在機器學習領域都是屬於滿地可見的方法。兩者有著很緊密的關係,我在接下來會談到,特徵值分解和奇異值分解的目的都是一樣,就是提取出一個矩陣最重要的特徵。先談談特徵值分解吧: 1)特徵值: 如果說一個向量v是方陣

強大的矩陣奇異分解(SVD)及其應用

前言:     上一次寫了關於PCA與LDA的文章,PCA的實現一般有兩種,一種是用特徵值分解去實現的,一種是用奇異值分解去實現的。在上篇文章中便是基於特徵值分解的一種解釋。特徵值和奇異值在大部分人的印象中,往往是停留在純粹的數學計算中。而且線性代數或者矩陣論裡面,也

Ubuntu下C++基於eigen庫SVD矩陣奇異分解效率分析

在優化求解問題中,經常要用到矩陣奇異值的SVD分解。奇異值分解 (singularvalue decomposition,SVD)是一種可靠地正交矩陣分解法,它比QR分解法要花上近十倍的計算時間。 使用SVD分解法的用途是解最小平方誤差法和資料壓縮。 在Ubuntu下基

矩陣奇異分解

Notations: (1)Diag(x)Diag(x)表示以向量為矩陣對角線元素構成對角陣,如Diag(a,b)=(a00b)Diag(a,b)=(a00b); (2)粗體符號表示矩陣或者向量,如xx表示向量,AA表示矩陣。 特徵值與特徵向量   

利用矩陣奇異分解對影象進行壓縮

最近學習線性代數的有關東西,在看到奇異值分解(svd)時,發現了一個在影象壓縮上的應用。 奇異值分解:線上性代數中,我們知道對任意一個矩陣都存在奇異值分解,,其中U和V是標準正交矩陣,而是一個對角矩陣,每一個對角元是該矩陣的奇異值,奇異值指的是矩陣的特徵值開根號。其具體分解形式如下: 其中 將A展開

矩陣矩陣分解—從Schur分解、特徵值分解EVD到奇異分解SVD

本篇部落格針對三種聯絡十分緊密的矩陣分解(Schur分解、特徵值分解、奇異值分解)依次介紹,它們的關係是Schur→EVD→SVDSchur\rightarrow{}EVD\rightarrow{}SVDSchur→EVD→SVD,也就是說由Schur分解可以推

矩陣奇異分解SVD理論

  矩陣的奇異值分解(Singular Value Decomposition,SVD)是數值計算中的精彩之處,在其它數學領域和機器學習領域得到了廣泛的應用,如矩陣的廣義逆,主分成分析(PCA),自然語言處理(NLP)中的潛在語義索引(Latent Semantic Indexing),推薦演算法等。   鑑

SVD分解奇異分解求旋轉矩陣

參考文獻:http://igl.ethz.ch/projects/ARAP/svd_rot.pdf 一 問題描述 假設P={p1,p2,...,pn}和Q={q1,q2,...,qn}是兩組Rd空間中的對應點集,現在想要根據這個兩個點集的資料來計算出它們之間的剛性轉置

矩陣分解奇異分解SVD詳解

SVD分解 SVD分解是淺層語義分析(LSA)的數學基礎,本文是我的LSA學習筆記的一部分,之所以單獨拿出來,是因為SVD可以說是LSA的基礎,要理解LSA必須瞭解SVD,因此將LSA筆記的SVD一節單獨作為一篇文章。本節討論SVD分解相關數學問題,一個分為3個部分,第

矩陣matrix角度討論PCAPrincipal Component Analysis 主成分分析SVDSingular Value Decomposition 奇異分解相關原理

0. 引言 本文主要的目的在於討論PAC降維和SVD特徵提取原理,圍繞這一主題,在文章的開頭從涉及的相關矩陣原理切入,逐步深入討論,希望能夠學習這一領域問題的讀者朋友有幫助。 這裡推薦Mit的Gilbert Strang教授的線性代數課程,講的非常好,循循善誘,深入淺出。 Relevant Link:&

機器學習實戰精讀--------奇異分解SVD

svd 奇異值分解奇異值分解(SVD):是一種強大的降維工具,通過利用SVD來逼近矩陣並從中提取重要特征,通過保留矩陣80%~ 90%的能量,就能得到重要的特征並去掉噪聲SVD分解會降低程序的速度,大型系統中SVD每天運行一次或者頻率更低,並且還要離線進行。隱性語義索引(LST):試圖繞過自然語言理解,用統計

SVD奇異分解小結

注:奇異值分解在資料降維中有較多的應用,這是把它的原理簡單總結一下,並個圖片壓縮的例子,最後做一個簡單的分析,希望能夠給大家帶來幫助。 1、特徵值分解(EVD) 實對稱矩陣 在理角奇異值分解之前,需要先回顧一下特徵值分解,如果矩陣\(A\)是一個\(m\times m\)的實對稱矩陣(即\(A

奇異分解SVD,Singular value decomposition

   5、python程式碼(PCA案例) #-*- coding:utf-8-*- from numpy import * import numpy as np import cv2 import matplotlib.pyplot as plt

奇異分解SVD原理

  奇異值分解是一個有著很明顯的物理意義的一種方法,它可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。就像是描述一個人一樣,給別人描述說這個人長得濃眉大眼,方臉,絡腮鬍,而且帶個黑框的眼鏡,這樣寥寥的幾個特徵,就讓別人腦海裡面就有一個較為清楚

機器學習實戰——SVD奇異分解

與PCA一樣的學習過程,在學習SVD時同樣補習了很多的基礎知識,現在已經大致知道了PCA的應用原理,SVD個人感覺相對要難一點,但主要步驟還是能勉強理解,所以這裡將書本上的知識和個人的理解做一個記錄。主要關於(SVD原理、降維公式、重構原矩陣、SVD的兩個實際應用),當然矩陣

線性代數基礎矩陣、範數、正交、特徵值分解奇異分解、跡運算

目錄 基礎概念 矩陣轉置 對角矩陣 線性相關 範數 正交 特徵值分解 奇異值分解 跡運算 行列式 如果這篇文章對你有一點小小的幫助,請給個關注喔~我會非常開心的~ 基礎概念 標量:一個標量就是一個單獨的數字 向量:一個向量就是一列數字 矩

機器學習實戰Machine Learning in Action學習筆記————10.奇異分解(SVD)原理、基於協同過濾的推薦引擎、資料降維

關鍵字:SVD、奇異值分解、降維、基於協同過濾的推薦引擎作者:米倉山下時間:2018-11-3機器學習實戰(Machine Learning in Action,@author: Peter Harrington)原始碼下載地址:https://www.manning.com/books/machine-le

機器學習實戰Machine Learning in Action學習筆記————10.奇異分解(SVD)原理、基於協同過濾的推薦引擎、數據降維

www 實現 由於 就是 計算 學習筆記 圖片 blob 標示 關鍵字:SVD、奇異值分解、降維、基於協同過濾的推薦引擎作者:米倉山下時間:2018-11-3機器學習實戰(Machine Learning in Action,@author: Peter Harringto

機器學習筆記——基於奇異分解SVD的影象壓縮PIL

此指令碼的作用是圖片壓縮(清晰度尚可的情況下,可達到8倍以上的壓縮比),是SVD的一個應用實踐,涉及PIL、numpy庫。 (python中處理圖片的庫比較多,比如PIL、OpenCV、matplot