爲什麼要用到SVD分解?
從特徵值和特徵向量說起:
首先回顧下特徵值和特徵向量的定義:其中A是一個m*m的實對稱矩陣,x是一個m維向量,則我們說λ是矩陣A的一個特徵值,而x是矩陣A的特徵值λ所對應的特徵向量。
求出特徵值和特徵向量有什麼好處呢? 就是我們可以將矩陣A特徵分解。假設我們已經求出了矩陣A的m個特徵值:,以及這m個特徵值所對應的特徵向量。若這m個特徵向量線性無關,那麼矩陣A就可以用下式的特徵分解表示:,其中是這m個特徵向量所組成的m*m維矩陣,而爲這m個特徵值爲主對角線的m*m維矩陣。
一般我們會把的這m個特徵向量標準化,即滿足 或者說,此時的m個特徵向量爲標準正交基,滿足,即, 也就是說爲酉矩陣。這樣我們的特徵分解表達式可以寫的形式。
注意要進行特徵分解,矩陣A必須爲方陣。那麼如果A不是方陣,即行和列不相同時,我們還可以對矩陣進行分解嗎?答案是SVD。
SVD(Singular Value Decomposition),矩陣的奇異值分解。分解方法如下:
若A是m*n的矩陣,則可以分解爲,(此式子就是奇異值分解)其中U=m*m,=m*n,V=n*n。
- U是標準正交矩陣。(是的特徵向量進行標準化後的結果???)。U中第i列的向量被稱爲關於的左奇異向量。U可以看作是對A的正交“輸入”或分析的基向量,這些向量是矩陣(mxm)的特徵向量。
- V是的特徵向量進行標準化後的結果,故V是標準正交矩陣。V中第i列的向量被稱爲關於的右奇異向量。U可以看作是對A的正交“輸出”的基向量,這些向量是矩陣(nxn)的特徵向量
- 是奇異值矩陣。(是m*n的非負實數對角矩陣,並且對角線上的元素是矩陣A的奇異值,非對角線上的元素爲0。一般我們的習慣是將這些奇異值按照從大到小的順序排列,即是由A唯一確定了)
什麼樣的矩陣可以進行SVD分解?
任何矩陣均有SVD分解。
將上述列表用矩陣來A表示: 矩陣A爲6行5列矩陣,對其進行奇異值分解。
對A進行SVD分解,取k=2,。
矩陣的奇異值分解意義
對於奇異值,跟我們特徵分解中的特徵值類似,在奇異值矩陣中也是按照從大到小排列,而且奇異值減少的特別快。在很多情況下前10%甚至1%的奇異值的和就佔了全部奇異值之和的99%以上。也就是說,我們可以用最大的k個的奇異值和對應的左右奇異向量來近似描述矩。如下:
什麼是奇異值?
假設A是一個m*n的矩陣,則是一個n*n的方陣,且是個對陳矩陣。
假設:的特徵值爲,......,,特徵向量爲,......,。
- 則的特徵值全部非負。即。
- ,稱爲A的奇異值。即A的奇異值爲的特徵值開根號後的結果。
- 是向量A的長度。
的兩種計算方式:
矩陣的SVD分解計算過程:
如下有一個A矩陣:
(以一個簡單的矩陣來計算推導)
特徵值分解和奇異值分解不同之處?
首先,特徵值只能作用在一個mm的正方矩陣上,而奇異值分解則可以作用在一個mn的長方矩陣上。其次,奇異值分解同時包含了旋轉、縮放和投影三種作用,式中,U和V都起到了對A旋轉的作用,而Σ起到了對A縮放的作用。特徵值分解只有縮放的效果。
參考:https://www.cnblogs.com/endlesscoding/p/10033527.html
https://blog.csdn.net/qq_40438165/article/details/102879986
https://blog.csdn.net/u014157109/article/details/93141506