奇異值分解在矩陣理論中非常重要,也有很多實際運用,比如推薦系統,利用滿秩分解還能節約儲存空間。
在介紹原理之前,先說一下一些概念:
1 酉(you,三聲,我都不知道這個字怎麼讀,哈哈)矩陣。
如果n階復矩陣a滿足:
則稱之為酉矩陣,是不是和正交矩陣的定義很相似,ah
指的是a的共軛對稱,如果a是實矩陣,則就是轉置,其實我們基本遇到的就是實矩陣。
2 定義:設aϵ
cm∗n
,如果存在非實數
σ 和非零向量uϵ
cn,v
ϵcm 使得au
=σv,
ahv=
σu,則稱
σ 為a的奇異值,u和v分別對應於奇異值
σ 的有奇異向量和左奇異向量。
由上式可得:ah
au=σ
ahv=
σ2u,
aahv
=σau
=σ2v
. 我們可以看出特徵值與奇異值的關係是:矩陣與矩陣共軛轉置的乘積構成的矩陣的特徵值的開方就是原矩陣的奇異值。
有如下定理(內容來自教材書,附有證明)
接下來,我想實現以下svd演算法。
給出乙個特殊的例子(例子也是書上的)
a=[0
1;-1
0;02;1
0];a_t=a'*a%特殊之處在於a_t就是乙個對角矩陣,可以直接知道奇異值和特徵向量,從而知道u
a_t1=diag((sqrt(diag(a_t))).^(-1))
u=eye(size(a,2))
v1=a*u*a_t1%由u得到v1
v2=null(v1','r')%v1與v2是正交的
v_2=sqrt(sum(v2.^2))
v_2_1=repmat(v_2,size(v2,1),1)
v_2_2=vpa(v2./v_2_1,4)
v=vpa(cat(2,v1,v_2_2),4)
m=size(a,1)-size(a_t,1)
n=size(a_t,2)
a=vpa(v*cat(1,sqrt(a_t),zeros(m,n))*u',4)%矩陣恢復
需要注意的是v1
與v2 是正交的,所以求解v1
x=0 就可以得出v2
,這在證明裡可以體現出來。
如有錯誤,歡迎指出。
奇異值分解 SVD
最近不小心接觸到了svd,然後認真看下去之後發現這東西真的挺強大的,把乙個推薦問題轉化為純數學矩陣問題,看了一些部落格,把乙個寫個比較具體的博文引入進來,給自己看的,所以把覺得沒必要的就去掉了,博文下面附原始部落格位址。一 基礎知識 1.矩陣的秩 矩陣的秩是矩陣中線性無關的行或列的個數 2.對角矩陣...
SVD奇異值分解
原文出處 今天我們來講講奇異值分解和它的一些有意思的應用。奇異值分解是乙個非常,非常,非常大的話題,它的英文是 singular value decomposition,一般簡稱為 svd。下面先給出它大概的意思 對於任意乙個 m n 的矩陣 m 不妨假設 m n 它可以被分解為 m udv t 其...
奇異值分解(SVD)
svd是singular value decomposition的縮寫,是去除冗餘 資訊提取和資料約簡的強大工具。若a為p q實數矩陣,則存在p階正交矩陣u和q階正交矩陣v,使得 a u v 上式就是奇異值分解,其中p q矩陣 中,i,i 元素 i 0,i 1,2,3,min p,q 其他元素均為0...