日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

李宏毅线性代数笔记13:SVD分解

發布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 李宏毅线性代数笔记13:SVD分解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 SVD分解介紹

????????之前用特征值來進行對角化的時候,被對角化的矩陣一定要是方陣,但是SVD的話,非方陣也是可以的。

?矩陣Σ對角線上的元素都是大于等于0的

我們可以改變U,V的一些行和列,來達到Σ對角線上的元素越來越小

?所以rank(A)就是Σ中對角線元素不為零的數量

?如果把Σ中全零的部分抹掉,然后U和V中全零對應的行和列也去掉,那么乘積結果還是等于A

?????????如果我們多抹掉一些(比如多抹掉一行),把Σ中非零的一部分也抹掉了,結果肯定不等于A了,但是是所有rank為k-1的部分中最接近于A的,接近的意思是兩個矩陣相減的結果拉成一條向量,這個向量的norm最小

2 SVD的應用:圖像壓縮

2.1可以用小一點的維度來復原一張相似的圖

2.1 SVD分解的應用2:文檔-詞項矩陣的奇異值分解

參考了?奇異值分解的揭秘(二):降維與奇異向量的意義 - 知乎 (zhihu.com)

????????給定一個大小為7×5的矩陣A,A的前4行表示來源于CS的文檔,后3行表示來源于醫學(MD)的文檔,A的各列分別對應著5個單詞,在矩陣中,每個元素的數值表示單詞在相應文檔中出現的頻數。

?我們使用numpy 對其進行SVD分解

import numpy as np A = [[1, 1, 1, 0, 0], [2, 2, 2, 0, 0], [1, 1, 1, 0, 0], [5, 5, 5, 0, 0], [0, 0, 0, 2, 2], [0, 0, 0, 3, 3], [0, 0, 0, 1, 1]] [U, s, v] = np.linalg.svd(A) [U, s, v]''' [[-0.1796053 , 0. , 0.97298719, -0.07270854, -0.05034883,-0.10906282,-0.03635427],[-0.3592106 , 0. , 0.05552004, 0.49265053, -0.13571796,0.73897579, 0.24632526],[-0.1796053 , 0. , 0.02776002, 0.03887713, 0.98065351,0.05831569, 0.01943856],[-0.89802651, 0. , -0.22235746, -0.19029393, -0.13177375,-0.28544089,-0.09514696],[ 0. , -0.53452248, 0. , 0.71428571, 0. ,-0.42857143,-0.14285714],[ 0. , -0.80178373, 0. , -0.42857143, 0. ,0.35714286, -0.21428571],[ 0. , -0.26726124, 0. , -0.14285714, 0. ,-0.21428571,0.92857143]]),[9.64365076e+00, 5.29150262e+00, 7.52989891e-16, 0.00000000e+00,0.00000000e+00]),array([[-0.57735027, -0.57735027, -0.57735027, -0. , -0. ],[-0. , -0. , -0. , -0.70710678, -0.70710678],[ 0.81649658, -0.40824829, -0.40824829, 0. , 0. ],[ 0. , 0. , 0. , -0.70710678, 0.70710678],[ 0. , -0.70710678, 0.70710678, 0. , 0. ]])] '''

?奇異值主要是前兩項,所以我們使用前兩項的U,V矩陣和對應的奇異值對齊進行近似

U[:,:2] @ np.diag(s[:2]) @ v[:2,:] ''' array([[1., 1., 1., 0., 0.],[2., 2., 2., 0., 0.],[1., 1., 1., 0., 0.],[5., 5., 5., 0., 0.],[0., 0., 0., 2., 2.],[0., 0., 0., 3., 3.],[0., 0., 0., 1., 1.]]) '''

近似結果和原來的是一樣的?

?????????我們可以很明顯地發現,左右奇異向量u和v已經有了明顯的語義信息:第一行/列 表示的內容是CS 相關的? ,第二行/列 表示的內容是MD相關的。? ? ??

?????????此時,我們使用第一行V,第一列U和第一個奇異值就可以得到CS相關的特征矩陣;使用第二行V,第二列U和第二個奇異值就可以得到MD相關的特征矩陣

U[:,:1] @ np.diag(s[:1]) @ v[:1,:] ''' array([[1., 1., 1., 0., 0.],[2., 2., 2., 0., 0.],[1., 1., 1., 0., 0.],[5., 5., 5., 0., 0.],[0., 0., 0., 0., 0.],[0., 0., 0., 0., 0.],[0., 0., 0., 0., 0.]]) ''' U[:,1:2] @ np.diag(s[1:2]) @ v[1:2,:] ''' array([[0., 0., 0., 0., 0.],[0., 0., 0., 0., 0.],[0., 0., 0., 0., 0.],[0., 0., 0., 0., 0.],[0., 0., 0., 2., 2.],[0., 0., 0., 3., 3.],[0., 0., 0., 1., 1.]]) '''

?3 SVD求解

?這里中間的和可以消掉,是因為V和U是正交矩陣

和都是對稱矩陣,那么我們就可以對其進行特征值分解(要變成標準正交基的那種,也就是特征值分解了之后,還要對特征空間的基進行施密特正交化)

然后Σ對角線的值就是或的特征值的開方

總結

以上是生活随笔為你收集整理的李宏毅线性代数笔记13:SVD分解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。