關於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。html

奇異值與特徵值

關於特徵值咱們比較熟悉,由於在大學課程《線性代數》中就講到了特徵值與特徵向量。而對於奇異值可能會比較陌生,在講解特徵值以後會詳細講解奇異值。算法

特徵值分解和奇異值分解在機器學習領域是很是廣泛的,並且二者有着密切的關係。app

特徵值分解

對於一個方陣A,若是一個向量v和實數λ知足以下關係:機器學習

Av = λvpost

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

令AU = U∧。其中:搜索引擎

U = [v1 v2 ... vm],lua

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

A = U∧U-1 U∧UT
spa

其中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作奇異值分解,過程以下:

一、得到分解後的矩陣U、Sigma、VT,即M = U * Sigma * VT。

二、計算矩陣的總能量

並求出其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(機器學習實戰)

相關文章
相關標籤/搜索