關於SVD(Singular Value Decomposition)的那些事兒


SVD簡介

SVD不僅是一個數學問題,在機器學習領域,有相當多的應用與奇異值都可以扯上關系,比如做feature reduction的PCA,做數據壓縮(以圖像壓縮為代表)的算法,還有做搜索引擎語義層次檢索的LSI(Latent Semantic Indexing)或隱性語義分析(Latent Semantic Analysis)。另外在工程應用中的很多地方都有它的身影,例如在推薦系統方面。在2006年末,電影公司Netflix曾經舉辦一個獎金為100萬刀樂的大賽,這筆獎金會頒給比當時最好系統還要好10%的推薦系統參賽者。It is the “SVD” that the winner used。(點擊可以下載相關文獻)Yehuda Koren, “The BellKor Solution to the Netflix Grand Prize,” August 2009。

奇異值與特征值

關於特征值我們比較熟悉,因為在大學課程《線性代數》中就講到了特征值與特征向量。而對於奇異值可能會比較陌生,在講解特征值之后會詳細講解奇異值。

特征值分解和奇異值分解在機器學習領域是非常普遍的,而且兩者有着密切的關系。

特征值分解

對於一個方陣A,如果一個向量v和實數λ滿足如下關系:

Av = λv

則λ被稱為特征向量v對應方陣A的特征值,一個矩陣的一組特征向量是一組正交向量。

令AU = U∧。其中:

U = [v1 v2 ... vm],

這里假設A有m個特征值,特征值分解是將一個矩陣分解成下面的形式:

A = U∧U-1 U∧UT

其中U是這個矩陣A的特征向量組成的矩陣,由於U是正交陣,正交陣的逆矩陣等於其轉置;Σ是一個對角陣,每一個對角線上的元素就是一個特征值。

 矩陣A分解了,相應的,其對應的映射也分解為三個映射。現在假設有向量x,用A將其變換到A的列空間中,那么首先由UT先對x做變換:

U是正交陣,則UT也是正交陣,所以UTx的變換是正交變換,它將x用新的坐標系來表示,這個坐標系就是A的所有正交的特征向量構成的坐標系。比如將x用A的所有特征向量表示為:

則通過第一個變換就可以把x表示為[a1 a2 ... am]T

 

然后,在新的坐標系表示下,由中間那個對角矩陣對新的向量坐標換,其結果就是將向量往各個軸方向拉伸或壓縮:

從上圖可以看到,如果A不是滿秩的話,那么就是說對角陣的對角線上元素存在0,這時候就會導致維度退化,這樣就會使映射后的向量落入m維空間的子空間中。

最后一個變換就是U對拉伸或壓縮后的向量做變換,由於U和U-1是互為逆矩陣,所以U變換是U-1變換的逆變換。

因此,從對稱陣的分解對應的映射分解來分析一個矩陣的變換特點是非常直觀的。假設對稱陣特征值全為1那么顯然它就是單位陣,如果對稱陣的特征值有個別是0其他全是1,那么它就是一個正交投影矩陣,它將m維向量投影到它的列空間中。

特征值的幾何意義

一個矩陣其實就是一個線性變換,因為一個矩陣乘以一個向量后得到的向量,其實就相當於將這個向量進行了線性變換。例如下面的矩陣:

它對應的線性變換如圖1所示:

圖1

相當於在x軸上較原來的向量擴展了3倍。也就是說對每一個對角線上的元素將會對一個維度進行拉伸變換,當值>1時,拉伸;當值<1時,縮短。當矩陣不是對稱陣時,例如下面的矩陣M

它所描述的變換如圖2所示:

image

 

圖2 

 

這其實是在平面上對一個軸進行的拉伸變換(如藍色的箭頭所示)。在圖中,藍色的箭頭是一個最主要的變化方向(變化方向可能有不止一個),如果我們想要描述好一個變換,那我們就描述好這個變換主要的變化方向就好了。反過頭來看看之前特征值分解的式子,分解得到的Σ矩陣是一個對角陣,里面的特征值是由大到小排列的,這些特征值所對應的特征向量就是描述這個矩陣變化方向(從主要的變化到次要的變化排列)

當矩陣是高維的情況下,那么這個矩陣就是高維空間下的一個線性變換。這個線性變化可能沒法通過圖片來表示,但是可以想象,這個變換也同樣有很多的變換方向。我們通過特征值分解得到的前N個特征向量,那么就對應了這個矩陣最主要的N個變化方向。我們利用這前N個變化方向,就可以近似這個矩陣(變換)。也就是說:提取這個矩陣最重要的特征。總結一下,特征值分解可以得到特征值與特征向量,特征值表示的是這個特征到底有多重要,而特征向量表示這個特征是什么,可以將每一個特征向量理解為一個線性的子空間,我們可以利用這些線性的子空間干很多的事情。不過,特征值分解一個最大的局限就是變換的矩陣必須是方陣。

 奇異值分解

特征值分解是一個提取矩陣特征很不錯的方法,但是它只是對方陣而言的。在現實的世界中,我們看到的大部分矩陣都不是方陣,比如說有N個學生,每個學生有M科成績,這樣形成的一個NxM的矩陣就不可能是方陣,我們怎樣才能描述這樣普通的矩陣呢的重要特征呢?奇異值分解可以用來干這個事情,奇異值分解是一個能適用於任意的矩陣的一種分解的方法

A = UΣVT

假設A是一個N * M的矩陣,那么得到的U是一個NxN的方陣(里面的向量是正交的,U里面的向量稱為左奇異向量),Σ是一個NxM的矩陣(除了對角線的元素都是0,對角線上的元素稱為奇異值),V’(V的轉置)是一個NxN的矩陣,里面的向量也是正交的,V里面的向量稱為右奇異向量),如圖3所示:

圖3

奇異值與特征值的關系

現在假設存在M*N矩陣A,事實上,A矩陣將n維空間中的向量映射到k(k<=m)維空間中,k=rank(A)。現在的目標就是:在n維空間中找一組正交基,使得經過A變換后還是正交的。假設已經找到這樣一組正交基:

則A矩陣將這組基映射為:

並滿足如下關系:

所以如果正交基v選擇為ATA的特征向量的話,由於ATA是對稱陣(N * M),v之間兩兩正交,那么

 

將ATA看做一個N*M的矩陣。

因為

所以

所以取單位向量

由此可得

當k < i <= m時,對u1,u2,...,uk進行擴展uk+1,...,um,使得u1,u2,...,um為m維空間中的一組正交基,即將{u1,u2,...,uk}正交基擴展成{u1,u2,...,um},Rm空間的單位正交基。

同樣的,對v1,v2,...,vk進行擴展vk+1,...,vn(這n-k個向量存在於A的零空間中,即Ax=0的解空間的基),使得v1,v2,...,vn為n維空間中的一組正交基,即在A的零空間中選取{vk+1,vk+2,...,vn},使得Avi = 0,i > k,並取

則可得到

繼而可以得到A矩陣的奇異值分解:

這里的u就是左奇異向量,VT就是右奇異向量。奇異值σ跟特征值類似,在矩陣Σ中也是從大到小排列,而且σ的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就占了全部的奇異值之和的99%以上了。也就是說,我們也可以用前r大的奇異值來近似描述矩陣,這里定義一下部分奇異值分解

imager是一個遠小於m、n的數,這樣就可以進行壓縮矩陣。例如:m、n取32,r取2,那么相對於A所占空間大小1024,U、Σ、VT總共的空間大小為(64+64+2 = 130),獲得了幾乎10倍的壓縮比。

SVD證明滿秩分解

利用矩陣分塊乘法展開得:

可以看到第二項為0,有

 

則A=XY即是A的滿秩分解。

如何選取需要保留的奇異值

一個典型的做法就是保留矩陣中90%的能量信息:將所有的奇異值求其平方和,將奇異值的平方和累加到總值的90%為止。后邊會給出一個具體的應用例子。另一個啟發式策略就是:當矩陣有上萬個奇異值時,那么就保留前面的2000或3000個。

例如矩陣M,如下所示:

 M = [[0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5],
[0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 3],
    [0, 0, 0, 0, 4, 0, 0, 1, 0, 4, 0],
[3, 3, 4, 0, 0, 0, 0, 2, 2, 0, 0],
[5, 4, 5, 0, 0, 0, 0, 5, 5, 0, 0],
[0, 0, 0, 0, 5, 0, 1, 0, 0, 5, 0],
[4, 3, 4, 0, 0, 0, 0, 5, 5, 0, 1],
[0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4],
[0, 0, 0, 2, 0, 2, 5, 0, 0, 1, 2],
[0, 0, 0, 0, 5, 0, 0, 0, 0, 4, 0],
[1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0]]

我們利用numpy庫中的svd方法對M做奇異值分解,過程如下:

1、獲得分解后的矩陣U、Sigma、VT,即M = U * Sigma * VT。

2、計算矩陣的總能量

並求出其90%的能量數值,最終可以看出前三個元素所包含的能量就高於總能量的90%。

 關於SVD的應用在此不做詳細介紹,本篇文章只是對SVD有個大概的認識和理解,具體的算法會在以后的文章中專門給出。

參考資料

Dan Kalman, A Singularly Valuable Decomposition: The SVD of a Matrix, The College Mathematics Journal 27 (1996), 2-23. 

機器學習中的數學(5)-強大的矩陣奇異值分解(SVD)及其應用

Peter Harrington,Machine Learning in Action(機器學習實戰)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM