轉載請聲明出處http://blog.csdn.net/zhongkejingwang/article/details/43053513算法
在網上看到有不少文章介紹SVD的,講的也都不錯,可是感受仍是有須要補充的,特別是關於矩陣和映射之間的對應關係。前段時間看了國外的一篇文章,叫A Singularly Valuable Decomposition The SVD of a Matrix,以爲分析的特別好,把矩陣和空間關係對應了起來。本文就參考了該文並結合矩陣的相關知識把SVD原理梳理一下。數據結構
SVD不只是一個數學問題,在工程應用中的不少地方都有它的身影,好比前面講的PCA,掌握了SVD原理後再去看PCA那是至關簡單的,在推薦系統方面,SVD更是名聲大噪,將它應用於推薦系統的是Netflix大獎的得到者Koren,能夠在Google上找到他寫的文章;用SVD能夠很容易獲得任意矩陣的滿秩分解,用滿秩分解能夠對數據作壓縮。能夠用SVD來證實對任意M*N的矩陣均存在以下分解:ui
這個能夠應用在數據降維壓縮上!在數據相關性特別大的狀況下存儲X和Y矩陣比存儲A矩陣佔用空間更小!lua
在開始講解SVD以前,先補充一點矩陣代數的相關知識。spa
正交矩陣是在歐幾里得空間裏的叫法,在酉空間裏叫酉矩陣,一個正交矩陣對應的變換叫正交變換,這個變換的特色是不改變向量的尺寸和向量間的夾角,那麼它究竟是個什麼樣的變換呢?看下面這張圖.net
假設二維空間中的一個向量OA,它在標準座標系也即e一、e2表示的座標是中表示爲(a,b)'(用'表示轉置),如今把它用另外一組座標e1'、e2'表示爲(a',b')',存在矩陣U使得(a',b')'=U(a,b)',則U即爲正交矩陣。從圖中能夠看到,正交變換隻是將變換向量用另外一組正交基表示,在這個過程當中並無對向量作拉伸,也不改變向量的空間位置,加入對兩個向量同時作正交變換,那麼變換先後這兩個向量的夾角顯然不會改變。上面的例子只是正交變換的一個方面,即旋轉變換,能夠把e1'、e2'座標系看作是e一、e2座標系通過旋轉某個斯塔角度獲得,怎麼樣獲得該旋轉矩陣U呢?以下blog
a'和b'其實是x在e1'和e2'軸上的投影大小,因此直接作內積可得,then開發
從圖中能夠看到get
因此數學
正交陣U行(列)向量之間都是單位正交向量。上面求得的是一個旋轉矩陣,它對向量作旋轉變換!也許你會有疑問:剛纔不是說向量空間位置不變嗎?怎麼如今又說它被旋轉了?對的,這兩個並無衝突,說空間位置不變是絕對的,可是座標是相對的,加入你站在e1上看OA,隨着e1旋轉到e1',看OA的位置就會改變。以下圖:
如圖,若是我選擇了e1'、e2'做爲新的標準座標系,那麼在新座標系中OA(原標準座標系的表示)就變成了OA',這樣看來就好像座標系不動,把OA往順時針方向旋轉了「斯塔」角度,這個操做實現起來很簡單:將變換後的向量座標仍然表示在當前座標系中。
旋轉變換是正交變換的一個方面,這個挺有用的,好比在開發中須要實現某種旋轉效果,直接能夠用旋轉變換實現。正交變換的另外一個方面是反射變換,也即e1'的方向與圖中方向相反,這個再也不討論。
總結:正交矩陣的行(列)向量都是兩兩正交的單位向量,正交矩陣對應的變換爲正交變換,它有兩種表現:旋轉和反射。正交矩陣將標準正交基映射爲標準正交基(即圖中從e一、e2到e1'、e2')
在討論SVD以前先討論矩陣的特徵值分解(EVD),在這裏,選擇一種特殊的矩陣——對稱陣(酉空間中叫hermite矩陣即厄米陣)。對稱陣有一個很優美的性質:它總能類似對角化,對稱陣不一樣特徵值對應的特徵向量兩兩正交。一個矩陣能類似對角化即說明其特徵子空間即爲其列空間,若不能對角化則其特徵子空間爲列空間的子空間。如今假設存在mxm的滿秩對稱矩陣A,它有m個不一樣的特徵值,設特徵值爲
對應的單位特徵向量爲
則有
進而
因此可獲得A的特徵值分解(因爲對稱陣特徵向量兩兩正交,因此U爲正交陣,正交陣的逆矩陣等於其轉置)
這裏假設A有m個不一樣的特徵值,實際上,只要A是對稱陣其均有如上分解。
矩陣A分解了,相應的,其對應的映射也分解爲三個映射。如今假設有x向量,用A將其變換到A的列空間中,那麼首先由U'先對x作變換:
U是正交陣U'也是正交陣,因此U'對x的變換是正交變換,它將x用新的座標系來表示,這個座標系就是A的全部正交的特徵向量構成的座標系。好比將x用A的全部特徵向量表示爲:
則經過第一個變換就能夠把x表示爲[a1 a2 ... am]':
緊接着,在新的座標系表示下,由中間那個對角矩陣對新的向量座標換,其結果就是將向量往各個軸方向拉伸或壓縮:
從上圖能夠看到,若是A不是滿秩的話,那麼就是說對角陣的對角線上元素存在0,這時候就會致使維度退化,這樣就會使映射後的向量落入m維空間的子空間中。
最後一個變換就是U對拉伸或壓縮後的向量作變換,因爲U和U'是互爲逆矩陣,因此U變換是U'變換的逆變換。
所以,從對稱陣的分解對應的映射分解來分析一個矩陣的變換特色是很是直觀的。假設對稱陣特徵值全爲1那麼顯然它就是單位陣,若是對稱陣的特徵值有個別是0其餘全是1,那麼它就是一個正交投影矩陣,它將m維向量投影到它的列空間中。
根據對稱陣A的特徵向量,若是A是2*2的,那麼就能夠在二維平面中找到這樣一個矩形,是的這個矩形通過A變換後仍是矩形:
這個矩形的選擇就是讓其邊都落在A的特徵向量方向上,若是選擇其餘矩形的話變換後的圖形就不是矩形了!
上面的特徵值分解的A矩陣是對稱陣,根據EVD能夠找到一個(超)矩形使得變換後仍是(超)矩形,也即A能夠將一組正交基映射到另外一組正交基!那麼如今來分析:對任意M*N的矩陣,可否找到一組正交基使得通過它變換後仍是正交基?答案是確定的,它就是SVD分解的精髓所在。
如今假設存在M*N矩陣A,事實上,A矩陣將n維空間中的向量映射到k(k<=m)維空間中,k=Rank(A)。如今的目標就是:在n維空間中找一組正交基,使得通過A變換後仍是正交的。假設已經找到這樣一組正交基:
則A矩陣將這組基映射爲:
若是要使他們兩兩正交,即
根據假設,存在
因此若是正交基v選擇爲A'A的特徵向量的話,因爲A'A是對稱陣,v之間兩兩正交,那麼
這樣就找到了正交基使其映射後仍是正交基了,如今,將映射後的正交基單位化:
由於
因此有
因此取單位向量
由此可得
當k < i <= m時,對u1,u2,...,uk進行擴展u(k+1),...,um,使得u1,u2,...,um爲m維空間中的一組正交基,即
一樣的,對v1,v2,...,vk進行擴展v(k+1),...,vn(這n-k個向量存在於A的零空間中,即Ax=0的解空間的基),使得v1,v2,...,vn爲n維空間中的一組正交基,即
則可獲得
繼而能夠獲得A矩陣的奇異值分解:
如今能夠來對A矩陣的映射過程進行分析了:若是在n維空間中找到一個(超)矩形,其邊都落在A'A的特徵向量的方向上,那麼通過A變換後的形狀仍然爲(超)矩形!
vi爲A'A的特徵向量,稱爲A的右奇異向量,ui=Avi實際上爲AA'的特徵向量,稱爲A的左奇異向量。下面利用SVD證實文章一開始的滿秩分解:
利用矩陣分塊乘法展開得:
能夠看到第二項爲0,有
令
則A=XY便是A的滿秩分解。
整個SVD的推導過程就是這樣,後面會介紹SVD在推薦系統中的具體應用,也就是復現Koren論文中的算法以及其推導過程。
參考文獻:A Singularly Valuable Decomposition The SVD of a Matrix