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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

特征值分解,奇异值分解svd

發布時間:2023/12/29 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 特征值分解,奇异值分解svd 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

特征值分解:

特征值分解(Eigen decomposition),又稱譜分解(Spectral decomposition)是將矩陣分解為由其特征值和特征向量表示的矩陣之積的方法。需要注意只有方陣才可以施以特征分解

N?維非零向量?v?是?N×N?的矩陣?A?的特征向量,當且僅當下式成立:

其中?λ?為一標量,稱為?v?對應的特征值。也稱?v?為特征值?λ?對應的特征向量???????。也即特征向量被施以線性變換 A 只會使向量伸長或縮短而其方向不被改變。因此這里只考慮單位特征向量。

?

假設矩陣A有n個特征無關的特征向量{V1,V?2, …V?n},對應的特征值為{λ1,λ2,…λn}。

我們將特征向量連接成一個矩陣,使得每一列是一個特征向量:V={V1, V2…V?n}。同

樣的,我們將特征值連接成一個向量λ=[λ1,λ2,…λn]。因此我們可以得到下式:

AV = Vdiag(λ)

其中diag(λ)是向量入對應的對角矩陣。

此時,矩陣A便可以分解為特征值和特征向量的乘積,稱為特征分解。

?

一般我們會把V的這n個特征向量標準化,即滿足||vi||2=1或者說viTvi=1,此時V的n個特征向量為標準正交基,滿足viTvi=I,即viT=vi-1, 也就是說V為酉矩陣

這樣我們的特征分解表達式可以寫成

?

Eigen decomposition舉例:

已知

求A的特征值及其對應的特征向量

當λ1=16.1168時,

當λ2=-1.1168時,

當λ3=0時,

最終得到,特征值為

特征向量為,

程序實現:

Python:a*v = v*d

a= np.array([[1,2,3],[4,5,6],[7,8,9]]) d,v=np.linalg.eig(a)

Matlab:a*v = v*d

a=[[1,2,3];[4,5,6];[7,8,9]] [v,d]=eig(a)

奇異值分解svd

奇異值分解(Singular Value Decomposition)是線性代數中一種重要的矩陣分解,奇異值分解則是特征分解在任意矩陣上的推廣。在信號統計、統計學等領域有重要應用。svd分解不要求矩陣必須是方陣

?

假設M是一個m×n階矩陣,其中的元素全部屬于域 K,也就是實數域或復數域。如此則存在一個分解使得

其中U是m×m階酉矩陣;Σ是半正定m×n階對角矩陣;而V*,即V的共軛轉置,是n×n階酉矩陣???????。這樣的分解就稱作M的奇異值分解。Σ對角線上的元素Σi,其中Σi即為M的奇異值。

常見的做法是為了奇異值由大而小排列。如此Σ便能由M唯一確定了。(雖然U和V仍然不能確定)

那么我們如何求出SVD分解后的U,Σ,V這三個矩陣呢?

如果我們將M的轉置和M做矩陣乘法,那么會得到n×n的一個方陣MTM。既然MTM是方陣,那么我們就可以進行特征值分解,得到的特征值和特征向量滿足下式:

這樣我們就可以得到矩陣MTM的n個特征值和對應的n個特征向量v了。將MTM的所有特征向量張成一個n×n的矩陣V,就是我們SVD公式里面的V矩陣了。一般我們將V中的每個特征向量叫做M的右奇異向量。

如果我們將M和M的轉置做矩陣乘法,那么會得到m×m的一個方陣MMT。既然MMT是方陣,那么我們就可以進行特征分解,得到的特征值和特征向量滿足下式:

這樣我們就可以得到矩陣MMT的m個特征值和對應的m個特征向量u了。將MMT的所有特征向量張成一個m×m的矩陣U,就是我們SVD公式里面的U矩陣了。一般我們將U中的每個特征向量叫做M的左奇異向量。

U和V我們都求出來了,現在就剩下奇異值矩陣Σ沒有求出了。由于Σ除了對角線上是奇異值其他位置都是0,那我們只需要求出每個奇異值σ就可以了。

我們注意到:

這樣我們可以求出我們的每個奇異值,進而求出奇異值矩陣Σ。

上面還有一個問題沒有講,就是我們說MTM的特征向量組成的就是我們SVD中的V矩陣,而MMT的特征向量組成的就是我們SVD中的U矩陣,這有什么根據嗎?這個其實很容易證明,我們以V矩陣的證明為例。

上式證明使用了:

可以看出MTM的特征向量組成的的確就是我們SVD中的V矩陣。類似的方法可以得到MMT的特征向量組成的就是我們SVD中的U矩陣。

進一步我們還可以看出我們的特征值矩陣等于奇異值矩陣的平方,也就是說特征值和奇異值滿足如下關系:

σi=sqrt(λi)

這樣也就是說,我們可以不用σi=Mvi/ui來計算奇異值,也可以通過求出MTM的特征值取平方根來求奇異值。

svd性質:

對于奇異值,它跟我們特征分解中的特征值類似,在奇異值矩陣中也是按照從大到小排列,而且奇異值的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就占了全部的奇異值之和的99%以上的比例。也就是說,我們也可以用最大的k個的奇異值和對應的左右奇異向量來近似描述矩陣。也就是說:

其中k要比n小很多,也就是一個大的矩陣A可以用三個小的矩陣Um*k,Σk*k,V*k*n來表示。如下圖所示,現在我們的矩陣A只需要灰色的部分的三個小矩陣就可以近似描述了。

由于這個重要的性質,SVD可以用于PCA降維,來做數據壓縮和去噪。也可以用于推薦算法,將用戶和喜好對應的矩陣做特征分解,進而得到隱含的用戶需求來做推薦。同時也可以用于NLP中的算法,比如潛在語義索引(LSI)。

svd舉例:

首先定義M,

利用Mvi=σiui,i=1,i=1,2求奇異值:

當然,我們也可以用σi=sqrt(λi)直接求出奇異值為sqrt(3)和1。

最終得到M的奇異值分解為:

程序實現:

Python

a=np.array([[0,1],[1,1],[1,0]]) u,s,v=np.linalg.svd(a)

Matlab:

a=[[0,1];[1,1];[1,0]] [u,s,v]=svd(a)

?

總結

以上是生活随笔為你收集整理的特征值分解,奇异值分解svd的全部內容,希望文章能夠幫你解決所遇到的問題。

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