天天看點

svd奇異值分解_SVD 奇異值分解

矩陣分解,是将一個矩陣分解成多個矩陣相乘的形式。常用的三種方法有三角分解法,QR分解法,奇異值分解法(SVD)。奇異值分解是應用廣泛的一種矩陣分解方法,任何一個矩陣都有一個SVD分解,SVD在資料壓縮、去噪、圖像進行中有重要應用。 1. 特征值分解 了解SVD,首先來看矩陣特征值分解。 特征值分解滿足條件為: 假設矩陣A為實對稱矩陣(如果一個n階矩陣A中所有元素都是實數,并且Aij=Aji,則稱A為實對稱矩陣),A可以分解為如下形式:

A=V*diag(\lambda)*V^(-1)
           

其中V是由A的特征向量構成的矩陣,diag(\lambda)是由A的特征值構成的對角陣。

svd奇異值分解_SVD 奇異值分解

SVD與特征值分解的形式類似,不同的是SVD将矩陣A分解成了U、S(Sigma)、V三個矩陣,不同的是任何矩陣都能進行特征值分解,且S矩陣不一定為方陣。 2. SVD矩陣奇異值分解 A=U.S.V^(-1)

對角矩陣S對角線上的元素稱為A的奇異值,U的列向量稱為左奇異向量,V的列向量為右奇異向量。用特征分解解釋為:

svd奇異值分解_SVD 奇異值分解

次元資訊:A(MxN), U(MxM), S(MxN), V(NxN) 3. SVD應用——壓縮

SVD在圖像中可以實作壓縮,重構圖像的效果。由于奇異值可以看作是圖像的表示标志,并且奇異值越大,它所包含的圖像資訊也就越多,是以完全可以選取較大的一些奇異值來對圖像進行重構。

原始圖像如下,shape=(1800,1200,3),過程:reshape——建構USV(分别選取120,360,600個奇異值)——圖像重組——plot

svd奇異值分解_SVD 奇異值分解

導入圖像,建構USV

svd奇異值分解_SVD 奇異值分解

重構圖像:

svd奇異值分解_SVD 奇異值分解

畫圖:

svd奇異值分解_SVD 奇異值分解

輸出結果為:

svd奇異值分解_SVD 奇異值分解

奇異值函數svd()的輸出是按照從大到小的順序排列的,并且奇異值下降很快,是以選取值比較大的前面的一些奇異值完全可以還原圖像。

4. SVD應用——降維

SVD的另一大常見應用是降維,當矩陣的列數多于行數(特征數大于觀察樣本數)時,通過一次SVD操作可以得到一個次元更小的與預測結果相關的矩陣(與原始矩陣相似)

實作:在原始矩陣上使用一次SVD操作,接着選取前k個最大奇異值,這些列可以從S(Sigma)矩陣中選擇,行可以從V^T矩陣中選擇。scipy庫與scikit-learn庫中有相應的SVD方法。建構一個列多于行的矩陣,執行一次SVD,選擇前兩個奇異值,然後這些元素再重新結合起來,得到原始矩陣的準确再現。最後計算轉換的方式有兩種。

TruncastedSVD類: n_components = 指定奇異值個數

svd奇異值分解_SVD 奇異值分解

原始的矩陣是(3,5),經過轉化得到相似矩陣(3,2)

svd奇異值分解_SVD 奇異值分解

Scipy 方法:算法流程

svd奇異值分解_SVD 奇異值分解

參考: 

1. 機器之心:https://www.jiqizhixin.com/articles/0301?from=synced&keyword=SVD

2. 部落格園:https://www.cnblogs.com/endlesscoding/p/10033527.html