奇異值分解(SVD)原理與在降維中的應用(轉(zhuǎn)載)

轉(zhuǎn)載自https://www.cnblogs.com/pinard/p/6251584.html

奇異值分解(Singular Value Decomposition铸敏,以下簡稱SVD)是在機器學習領域廣泛應用的算法扯夭,它不光可以用于降維算法中的特征分解,還可以用于推薦系統(tǒng)毕箍,以及自然語言處理等領域。是很多機器學習算法的基石。本文就對SVD的原理做一個總結氯夷,并討論在在PCA降維算法中是如何運用運用SVD的捍掺。

1. 回顧特征值和特征向量

    我們首先回顧下特征值和特征向量的定義如下:

Ax=λxAx=λx

其中A是一個n×nn×n的矩陣撼短,xx是一個nn維向量,則我們說λλ是矩陣A的一個特征值挺勿,而xx是矩陣A的特征值λλ所對應的特征向量曲横。

求出特征值和特征向量有什么好處呢? 就是我們可以將矩陣A特征分解不瓶。如果我們求出了矩陣A的nn個特征值λ1≤λ2≤...≤λnλ1≤λ2≤...≤λn,以及這nn個特征值所對應的特征向量{w1,w2,...wn}{w1,w2,...wn}禾嫉,那么矩陣A就可以用下式的特征分解表示:

A=WΣW?1A=WΣW?1

其中W是這nn個特征向量所張成的n×nn×n維矩陣,而ΣΣ為這n個特征值為主對角線的n×nn×n維矩陣蚊丐。

一般我們會把W的這nn個特征向量標準化熙参,即滿足||wi||2=1||wi||2=1, 或者說wTiwi=1wiTwi=1,此時W的nn個特征向量為標準正交基麦备,滿足WTW=IWTW=I孽椰,即WT=W?1WT=W?1, 也就是說W為酉矩陣昭娩。

    這樣我們的特征分解表達式可以寫成

A=WΣWTA=WΣWT

    注意到要進行特征分解,矩陣A必須為方陣黍匾。那么如果A不是方陣栏渺,即行和列不相同時,我們還可以對矩陣進行分解嗎膀捷?答案是可以迈嘹,此時我們的SVD登場了。

2. ?SVD的定義

SVD也是對矩陣進行分解全庸,但是和特征分解不同秀仲,SVD并不要求要分解的矩陣為方陣。假設我們的矩陣A是一個m×nm×n的矩陣壶笼,那么我們定義矩陣A的SVD為:

A=UΣVTA=UΣVT

其中U是一個m×mm×m的矩陣神僵,ΣΣ是一個m×nm×n的矩陣,除了主對角線上的元素以外全為0覆劈,主對角線上的每個元素都稱為奇異值保礼,V是一個n×nn×n的矩陣。U和V都是酉矩陣责语,即滿足UTU=I,VTV=IUTU=I,VTV=I炮障。下圖可以很形象的看出上面SVD的定義:

那么我們?nèi)绾吻蟪鯯VD分解后的U,Σ,VU,Σ,V這三個矩陣呢?

如果我們將A的轉(zhuǎn)置和A做矩陣乘法坤候,那么會得到n×nn×n的一個方陣ATAATA胁赢。既然ATAATA是方陣,那么我們就可以進行特征分解白筹,得到的特征值和特征向量滿足下式:

(ATA)vi=λivi(ATA)vi=λivi

這樣我們就可以得到矩陣ATAATA的n個特征值和對應的n個特征向量vv了智末。將ATAATA的所有特征向量張成一個n×nn×n的矩陣V,就是我們SVD公式里面的V矩陣了徒河。一般我們將V中的每個特征向量叫做A的右奇異向量系馆。

如果我們將A和A的轉(zhuǎn)置做矩陣乘法,那么會得到m×mm×m的一個方陣AATAAT顽照。既然AATAAT是方陣由蘑,那么我們就可以進行特征分解,得到的特征值和特征向量滿足下式:

(AAT)ui=λiui(AAT)ui=λiui

這樣我們就可以得到矩陣AATAAT的m個特征值和對應的m個特征向量uu了代兵。將AATAAT的所有特征向量張成一個m×mm×m的矩陣U纵穿,就是我們SVD公式里面的U矩陣了。一般我們將U中的每個特征向量叫做A的左奇異向量奢人。

U和V我們都求出來了,現(xiàn)在就剩下奇異值矩陣ΣΣ沒有求出了淆院。由于ΣΣ除了對角線上是奇異值其他位置都是0何乎,那我們只需要求出每個奇異值σσ就可以了句惯。

    我們注意到:

A=UΣVT?AV=UΣVTV?AV=UΣ?Avi=σiui?σi=Avi/uiA=UΣVT?AV=UΣVTV?AV=UΣ?Avi=σiui?σi=Avi/ui

這樣我們可以求出我們的每個奇異值,進而求出奇異值矩陣ΣΣ支救。

上面還有一個問題沒有講抢野,就是我們說ATAATA的特征向量組成的就是我們SVD中的V矩陣,而AATAAT的特征向量組成的就是我們SVD中的U矩陣各墨,這有什么根據(jù)嗎指孤?這個其實很容易證明,我們以V矩陣的證明為例贬堵。

A=UΣVT?AT=VΣUT?ATA=VΣUTUΣVT=VΣ2VTA=UΣVT?AT=VΣUT?ATA=VΣUTUΣVT=VΣ2VT

上式證明使用了:UTU=I,ΣT=Σ恃轩。UTU=I,ΣT=Σ±枳觯可以看出ATAATA的特征向量組成的的確就是我們SVD中的V矩陣叉跛。類似的方法可以得到AATAAT的特征向量組成的就是我們SVD中的U矩陣。

    進一步我們還可以看出我們的特征值矩陣等于奇異值矩陣的平方蒸殿,也就是說特征值和奇異值滿足如下關系:

σi=λi??√σi=λi

這樣也就是說筷厘,我們可以不用σi=Avi/uiσi=Avi/ui來計算奇異值,也可以通過求出ATAATA的特征值取平方根來求奇異值宏所。

3. SVD計算舉例

    這里我們用一個簡單的例子來說明矩陣是如何進行奇異值分解的酥艳。我們的矩陣A定義為:

A=???011110???A=(011110)

我們首先求出ATAATA和AATAAT

ATA=(011110)???011110???=(2112)ATA=(011110)(011110)=(2112)

AAT=???011110???(011110)=???110121011???AAT=(011110)(011110)=(110121011)

進而求出ATAATA的特征值和特征向量:

λ1=3;v1=(1/2–√1/2–√);λ2=1;v2=(?1/2–√1/2–√)λ1=3;v1=(1/21/2);λ2=1;v2=(?1/21/2)

接著求AATAAT的特征值和特征向量:

λ1=3;u1=???1/6–√2/6–√1/6–√???;λ2=1;u2=???1/2–√0?1/2–√???;λ3=0;u3=???1/3–√?1/3–√1/3–√???λ1=3;u1=(1/62/61/6);λ2=1;u2=(1/20?1/2);λ3=0;u3=(1/3?1/31/3)

利用Avi=σiui,i=1,2Avi=σiui,i=1,2求奇異值:

???011110???(1/2–√1/2–√)=σ1???1/6–√2/6–√1/6–√????σ1=3–√(011110)(1/21/2)=σ1(1/62/61/6)?σ1=3

???011110???(?1/2–√1/2–√)=σ2???1/2–√0?1/2–√????σ2=1(011110)(?1/21/2)=σ2(1/20?1/2)?σ2=1

當然,我們也可以用σi=λi??√σi=λi直接求出奇異值為3–√3和1.

?最終得到A的奇異值分解為:

A=UΣVT=???1/6–√2/6–√1/6–√1/2–√0?1/2–√1/3–√?1/3–√1/3–√??????3–√00010???(1/2–√?1/2–√1/2–√1/2–√)A=UΣVT=(1/61/21/32/60?1/31/6?1/21/3)(300100)(1/21/2?1/21/2)

4. SVD的一些性質(zhì)

    上面幾節(jié)我們對SVD的定義和計算做了詳細的描述,似乎看不出我們費這么大的力氣做SVD有什么好處。那么SVD有什么重要的性質(zhì)值得我們注意呢寡键?

    對于奇異值,它跟我們特征分解中的特征值類似蕾哟,在奇異值矩陣中也是按照從大到小排列,而且奇異值的減少特別的快承冰,在很多情況下,前10%甚至1%的奇異值的和就占了全部的奇異值之和的99%以上的比例。也就是說劲厌,我們也可以用最大的k個的奇異值和對應的左右奇異向量來近似描述矩陣。也就是說:

Am×n=Um×mΣm×nVTn×n≈Um×kΣk×kVTk×nAm×n=Um×mΣm×nVn×nT≈Um×kΣk×kVk×nT

其中k要比n小很多听隐,也就是一個大的矩陣A可以用三個小的矩陣Um×k,Σk×k,VTk×nUm×k,Σk×k,Vk×nT來表示补鼻。如下圖所示,現(xiàn)在我們的矩陣A只需要灰色的部分的三個小矩陣就可以近似描述了雅任。

    由于這個重要的性質(zhì)风范,SVD可以用于PCA降維,來做數(shù)據(jù)壓縮和去噪沪么。也可以用于推薦算法硼婿,將用戶和喜好對應的矩陣做特征分解,進而得到隱含的用戶需求來做推薦禽车。同時也可以用于NLP中的算法寇漫,比如潛在語義索引(LSI)刊殉。下面我們就對SVD用于PCA降維做一個介紹。

5. SVD用于PCA

主成分分析(PCA)原理總結中州胳,我們講到要用PCA降維记焊,需要找到樣本協(xié)方差矩陣XTXXTX的最大的d個特征向量,然后用這最大的d個特征向量張成的矩陣來做低維投影降維栓撞”槟ぃ可以看出,在這個過程中需要先求出協(xié)方差矩陣XTXXTX瓤湘,當樣本數(shù)多樣本特征數(shù)也多的時候瓢颅,這個計算量是很大的。

注意到我們的SVD也可以得到協(xié)方差矩陣XTXXTX最大的d個特征向量張成的矩陣岭粤,但是SVD有個好處惜索,有一些SVD的實現(xiàn)算法可以不求先求出協(xié)方差矩陣XTXXTX,也能求出我們的右奇異矩陣VV剃浇。也就是說巾兆,我們的PCA算法可以不用做特征分解,而是做SVD來完成虎囚。這個方法在樣本量很大的時候很有效角塑。實際上,scikit-learn的PCA算法的背后真正的實現(xiàn)就是用的SVD淘讥,而不是我們我們認為的暴力特征分解圃伶。

    另一方面,注意到PCA僅僅使用了我們SVD的右奇異矩陣蒲列,沒有使用左奇異矩陣窒朋,那么左奇異矩陣有什么用呢?

假設我們的樣本是m×nm×n的矩陣X蝗岖,如果我們通過SVD找到了矩陣XXTXXT最大的d個特征向量張成的m×dm×d維矩陣U侥猩,則我們?nèi)绻M行如下處理:

X′d×n=UTd×mXm×nXd×n′=Ud×mTXm×n

可以得到一個d×nd×n的矩陣X‘,這個矩陣和我們原來的m×nm×n維樣本矩陣X相比,行數(shù)從m減到了k抵赢,可見對行數(shù)進行了壓縮欺劳。也就是說,左奇異矩陣可以用于行數(shù)的壓縮铅鲤。相對的划提,右奇異矩陣可以用于列數(shù)即特征維度的壓縮,也就是我們的PCA降維邢享。

6. SVD小結

    SVD作為一個很基本的算法鹏往,在很多機器學習算法中都有它的身影,特別是在現(xiàn)在的大數(shù)據(jù)時代骇塘,由于SVD可以實現(xiàn)并行化掸犬,因此更是大展身手袜漩。SVD的原理不難,只要有基本的線性代數(shù)知識就可以理解湾碎,實現(xiàn)也很簡單因此值得仔細的研究。當然奠货,SVD的缺點是分解出的矩陣解釋性往往不強介褥,有點黑盒子的味道,不過這不影響它的使用递惋。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柔滔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子萍虽,更是在濱河造成了極大的恐慌睛廊,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杉编,死亡現(xiàn)場離奇詭異超全,居然都是意外死亡,警方通過查閱死者的電腦和手機邓馒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門嘶朱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人光酣,你說我怎么就攤上這事疏遏。” “怎么了救军?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵财异,是天一觀的道長。 經(jīng)常有香客問我唱遭,道長戳寸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任胆萧,我火速辦了婚禮庆揩,結果婚禮上,老公的妹妹穿的比我還像新娘跌穗。我一直安慰自己订晌,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布蚌吸。 她就那樣靜靜地躺著锈拨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羹唠。 梳的紋絲不亂的頭發(fā)上奕枢,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天娄昆,我揣著相機與錄音,去河邊找鬼缝彬。 笑死萌焰,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谷浅。 我是一名探鬼主播扒俯,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼一疯!你這毒婦竟也來了撼玄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤墩邀,失蹤者是張志新(化名)和其女友劉穎掌猛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眉睹,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡荔茬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辣往。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兔院。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖站削,靈堂內(nèi)的尸體忽然破棺而出坊萝,到底是詐尸還是另有隱情,我是刑警寧澤许起,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布十偶,位于F島的核電站,受9級特大地震影響园细,放射性物質(zhì)發(fā)生泄漏惦积。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一猛频、第九天 我趴在偏房一處隱蔽的房頂上張望狮崩。 院中可真熱鬧,春花似錦鹿寻、人聲如沸睦柴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坦敌。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狱窘,已是汗流浹背杜顺。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蘸炸,地道東北人躬络。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像搭儒,于是被迫代替她去往敵國和親洗鸵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容