奇異值分解(singular value decomposition)是機器學習領域廣泛應用的演算法,可以用於降維,推薦系統,自然語言處理等領域。
基本公式:
如上u,v是酉矩陣,酉矩陣定義為:
ax=λx(式-1)
如上式,a為n階矩陣,x為非零向量,λ為常數,則稱λ為a的特徵值,x為a的特徵向量
對於多個λ特徵值,則有乙個特徵向量矩陣,得到如下公式
如果不太了解特徵值和特徵向量概念,可以看如下鏈結,還有乙個例子,一看便一目了然
v又叫做右奇異矩陣,v實際上為矩陣
證明:上式證明使用了
將上式-3中,將左右同時乘以v矩陣,則有
上式是不是很熟悉了,參考式-2,證明了v為所有特徵向量構成的矩陣,
u又叫左奇異矩陣,u實際上為
這裡參考了
對於奇異值,它跟我們特徵分解中的特徵值類似,在奇異值矩陣中也是按照從大到小排列,而且奇異值的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就佔了全部的奇異值之和的99%以上的比例。也就是說,我們也可以用最大的k個的奇異值和對應的左右奇異向量來近似描述矩陣。也就是說:
其中k要比n小很多,也就是乙個大的矩陣a可以用三個小的矩陣
來表示。如下圖所示,現在我們的矩陣a只需要灰色的部分的三個小矩陣就可以近似描述了。
由於這個重要的性質,svd可以用於pca降維,來做資料壓縮和去噪。也可以用於推薦演算法,將使用者和喜好對應的矩陣做特徵分解,進而得到隱含的使用者需求來做推薦。同時也可以用於nlp中的演算法,比如潛在語義索引(lsi)。
這段參考:
結果如下:u是乙個4行4列的矩陣,vt是2行2列的矩陣,sigma維度為2行2列,這裡理解是只顯示了對角線的值,非對角線上都為0。(根據svd公式應該是4行2列,後兩行為0來理解了)。from numpy import *
arr = array([ [1,2],[3,4],[5,6],[7,8] ])
u,sigma,vt = linalg.svd(arr)
print('u=')
print(u)
print('sigma=')
print(sigma)
print('sigma的維度')
print(sigma.shape)
print('vt=')
print(vt)
注意:在sigma中第乙個奇異值為14.2690955,遠大於後面的數,實際在在工程中,有這麼乙個事實:前10%或前1%的奇異值之和便很接近所有奇異值之和了,因此,選取某個數目r的奇異值就好了,這意味著資料集中僅有r個重要特徵,其餘的都是雜訊和冗餘,這便實現了乙個降維去噪的過程。
按下面的方式降維,假設奇異值只取第乙個14.2690995,則vt一篇文件中只以第乙個單詞,作為文件的代表。進而可以依次來計算相似度進行分類,
描述的可能不是太詳細,可以看看這篇文章:
奇異值分解 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...