R中矩陣的奇異值分解SVD

2021-06-26 14:15:15 字數 1417 閱讀 7144

singular value decomposition(svd),奇異值分解是一種具有重要實際應用意義的矩陣分解方式,已經具有很廣泛的應用,如壓縮儲存,矩陣求秩,確定投影運算元等。

通常儲存矩陣值是按行或者列儲存矩陣的每乙個值,奇異值分解的結果可作為一種儲存矩陣值的另一種方式。奇異值分解將矩陣進行等價變換,將矩陣所儲存的值分散在不同的變數中,包括奇異值,左奇異向量,右奇異向量,在沒有略去部分奇異值項的條件下,可以通過特定的方式還原矩陣的全部資訊。這種方式能夠很有效地節省所需的儲存空間(記憶體空間或者磁碟空間),同時,可在精度允許範圍內略去奇異值分解結果中一些小的奇異值對應的項,這樣在滿足要求的條件下將節省更多的儲存空間。

以下例子是本人用r實現的svd分解的例項,首先利用r中的函式對給定資料進行svd分解,然後根據svd的定義用svd分解的結果還原原矩陣,同時還涉及到了略去部分小奇異值項後,原矩陣和新矩陣之間的平均絕對偏差。

本例中的資料temp.csv:

a,b,c,d

71,74,92,79

77,73,62,70

80,84,95,88

78,83,82,88

75,82,96,77

66,84,70,79

70,83,66,70

78,84,70,29

72,87,78,49

79,85,79,80

r實現svd分解的**:

inputdata 

svdresults

nv = min(nrow(inputdata), ncol(inputdata)), linpack = f)

#建立初始值為0矩陣,用來從svd的引數中還原原矩陣

svd2matrix

#可以嘗試略去一些奇異值較小的項

ignorenum

for (i in 1:(length(svdresults$d) - ignorenum))

#求平均絕對偏差,通過平均絕對偏差來衡量整體資訊的還原程度

colme

for (j in 1:length(svdresults$d))

#根據每一列總和來計算平均絕對偏差

meanme

執行結果:1).對temp.csv中的資料利用svd分解後的結果:

2).略去奇異值最小的一項(在**中修改ignorenum

SVD矩陣奇異值分解

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

矩陣奇異值分解SVD

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

奇異值分解 SVD

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