特征值分解,奇异值分解svd
特征值分解:
特征值分解(Eigen decomposition),又稱譜分解(Spectral decomposition)是將矩陣分解為由其特征值和特征向量表示的矩陣之積的方法。需要注意只有方陣才可以施以特征值分解。
N?維非零向量?v?是?N×N?的矩陣?A?的特征向量,當(dāng)且僅當(dāng)下式成立:
其中?λ?為一標(biāo)量,稱為?v?對應(yīng)的特征值。也稱?v?為特征值?λ?對應(yīng)的特征向量???????。也即特征向量被施以線性變換 A 只會使向量伸長或縮短而其方向不被改變。因此這里只考慮單位特征向量。
?
假設(shè)矩陣A有n個特征無關(guān)的特征向量{V1,V?2, …V?n},對應(yīng)的特征值為{λ1,λ2,…λn}。
我們將特征向量連接成一個矩陣,使得每一列是一個特征向量:V={V1, V2…V?n}。同
樣的,我們將特征值連接成一個向量λ=[λ1,λ2,…λn]。因此我們可以得到下式:
AV = Vdiag(λ)
其中diag(λ)是向量入對應(yīng)的對角矩陣。
令
此時,矩陣A便可以分解為特征值和特征向量的乘積,稱為特征分解。
?
一般我們會把V的這n個特征向量標(biāo)準(zhǔn)化,即滿足||vi||2=1或者說viTvi=1,此時V的n個特征向量為標(biāo)準(zhǔn)正交基,滿足viTvi=I,即viT=vi-1, 也就是說V為酉矩陣。
這樣我們的特征分解表達(dá)式可以寫成
?
Eigen decomposition舉例:
已知
求A的特征值及其對應(yīng)的特征向量
當(dāng)λ1=16.1168時,
當(dāng)λ2=-1.1168時,
當(dāng)λ3=0時,
最終得到,特征值為
特征向量為,
程序?qū)崿F(xiàn):
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)是線性代數(shù)中一種重要的矩陣分解,奇異值分解則是特征分解在任意矩陣上的推廣。在信號統(tǒng)計、統(tǒng)計學(xué)等領(lǐng)域有重要應(yīng)用。svd分解不要求矩陣必須是方陣。
?
假設(shè)M是一個m×n階矩陣,其中的元素全部屬于域 K,也就是實(shí)數(shù)域或復(fù)數(shù)域。如此則存在一個分解使得
其中U是m×m階酉矩陣;Σ是半正定m×n階對角矩陣;而V*,即V的共軛轉(zhuǎn)置,是n×n階酉矩陣???????。這樣的分解就稱作M的奇異值分解。Σ對角線上的元素Σi,其中Σi即為M的奇異值。
常見的做法是為了奇異值由大而小排列。如此Σ便能由M唯一確定了。(雖然U和V仍然不能確定)
那么我們?nèi)绾吻蟪鯯VD分解后的U,Σ,V這三個矩陣呢?
如果我們將M的轉(zhuǎn)置和M做矩陣乘法,那么會得到n×n的一個方陣MTM。既然MTM是方陣,那么我們就可以進(jìn)行特征值分解,得到的特征值和特征向量滿足下式:
這樣我們就可以得到矩陣MTM的n個特征值和對應(yīng)的n個特征向量v了。將MTM的所有特征向量張成一個n×n的矩陣V,就是我們SVD公式里面的V矩陣了。一般我們將V中的每個特征向量叫做M的右奇異向量。
如果我們將M和M的轉(zhuǎn)置做矩陣乘法,那么會得到m×m的一個方陣MMT。既然MMT是方陣,那么我們就可以進(jìn)行特征分解,得到的特征值和特征向量滿足下式:
這樣我們就可以得到矩陣MMT的m個特征值和對應(yīng)的m個特征向量u了。將MMT的所有特征向量張成一個m×m的矩陣U,就是我們SVD公式里面的U矩陣了。一般我們將U中的每個特征向量叫做M的左奇異向量。
U和V我們都求出來了,現(xiàn)在就剩下奇異值矩陣Σ沒有求出了。由于Σ除了對角線上是奇異值其他位置都是0,那我們只需要求出每個奇異值σ就可以了。
我們注意到:
這樣我們可以求出我們的每個奇異值,進(jìn)而求出奇異值矩陣Σ。
上面還有一個問題沒有講,就是我們說MTM的特征向量組成的就是我們SVD中的V矩陣,而MMT的特征向量組成的就是我們SVD中的U矩陣,這有什么根據(jù)嗎?這個其實(shí)很容易證明,我們以V矩陣的證明為例。
上式證明使用了:
可以看出MTM的特征向量組成的的確就是我們SVD中的V矩陣。類似的方法可以得到MMT的特征向量組成的就是我們SVD中的U矩陣。
進(jìn)一步我們還可以看出我們的特征值矩陣等于奇異值矩陣的平方,也就是說特征值和奇異值滿足如下關(guān)系:
σi=sqrt(λi)
這樣也就是說,我們可以不用σi=Mvi/ui來計算奇異值,也可以通過求出MTM的特征值取平方根來求奇異值。
svd性質(zhì):
對于奇異值,它跟我們特征分解中的特征值類似,在奇異值矩陣中也是按照從大到小排列,而且奇異值的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就占了全部的奇異值之和的99%以上的比例。也就是說,我們也可以用最大的k個的奇異值和對應(yīng)的左右奇異向量來近似描述矩陣。也就是說:
其中k要比n小很多,也就是一個大的矩陣A可以用三個小的矩陣Um*k,Σk*k,V*k*n來表示。如下圖所示,現(xiàn)在我們的矩陣A只需要灰色的部分的三個小矩陣就可以近似描述了。
由于這個重要的性質(zhì),SVD可以用于PCA降維,來做數(shù)據(jù)壓縮和去噪。也可以用于推薦算法,將用戶和喜好對應(yīng)的矩陣做特征分解,進(jìn)而得到隱含的用戶需求來做推薦。同時也可以用于NLP中的算法,比如潛在語義索引(LSI)。
svd舉例:
首先定義M,
利用Mvi=σiui,i=1,i=1,2求奇異值:
當(dāng)然,我們也可以用σi=sqrt(λi)直接求出奇異值為sqrt(3)和1。
最終得到M的奇異值分解為:
程序?qū)崿F(xiàn):
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)?
總結(jié)
以上是生活随笔為你收集整理的特征值分解,奇异值分解svd的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python模拟实现链表_python实
- 下一篇: 【011】17GRE-自动根据艾宾浩斯曲