任意矩陣的奇異值分解(SVD)之原理簡介

2021-09-11 17:17:43 字數 1281 閱讀 2640

奇異值分解(singular value decomposition, svd):

將矩陣分解為奇異向量(singular vector)和奇異值(singular value)。通過奇異值分解,我們會得到一些與特徵分解相同型別的資訊。然而,奇異值分解有更廣泛的應用。每個實數矩陣都有乙個奇異值分解,但不一定都有特徵分解。例如,非方陣的矩陣沒有特徵分解,這是我們只能使用奇異值分解。

將矩陣a分解成三個矩陣的乘積:a=udvt。

假設a是乙個m*n的矩陣,那麼u是乙個m*m的矩陣,d是乙個m*n的矩陣,v是乙個n*n矩陣。

這些矩陣中的每乙個經定義後都擁有特殊的結構。矩陣u和v都被定義為正交矩陣,而矩陣d被定義為對角矩陣。注意,矩陣d不一定是方陣。對角矩陣d對角線上的元素被稱為矩陣a的奇異值(singular value)。矩陣u的列向量被稱為左奇異向量(left singular vector),矩陣v的列向量被稱為右奇異向量(right singular vector)。a的左奇異向量是aat的特徵向量。a的右奇異向量是ata的特徵向量。a的非零奇異值是ata特徵值的平方根,同時也是aat特徵值的平方根。

奇異值分解(singular value decomposition)是線性代數中一種重要的矩陣分解,在訊號處理、統計學等領域有重要應用。奇異值分解能夠用於任意m*n矩陣,而特徵分解只能適用於特定型別的方陣,故奇異值分解的適用範圍更廣。

---------------------------以上內容摘自: 《深度學習中文版》 和  維基百科

(1)、對原始矩陣a(m*n)進行判斷,若m(2)、初始化臨時變數d、u、vt:d為奇異值,為n行1列;u為左奇異向量,為m行m列;vt為轉置後的右奇異向量,為n行n列;並初始化d、u、vt值均為0;

(3)、初始化臨時變數a′:a′為m行m列,並將a的值賦值給a′,a′中多餘元素賦初值為0;

(4)、由a′、d、vt開始進行基於jacobi方法的奇異值分解;

(5)、設定臨時變數w,長度為n,將a′中前n行中,每行元素的平方和賦值給w;

(6)、設定vt為單位矩陣;

(7)、迴圈計算旋轉矩陣,並更新a′、w、vt對應位置的值;最大迴圈次數為std::max(m, 30);

(8)、重置w值為a′中前n行,每行元素平方和的開方;

(9)、將w中元素按照從大到小排序,排序後的w即為d中主對角線元素值;

(10)、按照(9)中對w的排序規則對a′和vt進行排序;

(11)、計算a′中值;

(12)、最終的a′和vt即為所求的左、右奇異向量。

**:更多矩陣奇異值分解簡介及c++/opencv/eigen的三種實現見該**

SVD矩陣奇異值分解

不正之處,歡迎指正!矩陣的奇異值分解是線性代數中一種重要的矩陣分解,在訊號處理,統計學等領域中有著重要的應用。在大學裡面的線性代數的課程中一般都是會有svd分解相關的知識的。但是往往只是涉及到理論上的知識體系,並沒有多少實際應用的背景,所以結果就是學了沒多久就會忘。奇異值分解可以將乙個比較複雜的矩陣...

矩陣奇異值分解SVD

矩陣分解有兩種一種是特徵值分解,但是其針對方陣,所以提出了奇異值分解。分解過程為 u的列組成一套對a的正交 輸入 或 分析 的基向量。這些向量是 的特徵向量。v的列組成一套對a的正交 輸出 的基向量。這些向量是 的特徵向量 得到的是右奇異向量,是奇異值,u是左奇異向量,奇異值跟特徵值類似,在矩陣 中...

奇異值分解 SVD

最近不小心接觸到了svd,然後認真看下去之後發現這東西真的挺強大的,把乙個推薦問題轉化為純數學矩陣問題,看了一些部落格,把乙個寫個比較具體的博文引入進來,給自己看的,所以把覺得沒必要的就去掉了,博文下面附原始部落格位址。一 基礎知識 1.矩陣的秩 矩陣的秩是矩陣中線性無關的行或列的個數 2.對角矩陣...