矩陣奇異值分解(SVD)及其應(yīng)用(PCA)

一前言

特征值

奇異值

二奇異值計算

三PCA

1)數(shù)據(jù)的向量表示及降維問題

2)向量的表示及基變換

3)基向量

4)協(xié)方差矩陣及優(yōu)化目標

5)方差

6)協(xié)方差

7)協(xié)方差矩陣

8)協(xié)方差矩陣對角劃

? ?


一前言:

PCA的實現(xiàn)一般有兩種:

一種是用特征值分解去實現(xiàn)的,一種是用奇異值分解去實現(xiàn)的。

特征值分解和奇異值分解的目的都是一樣,就是提取出一個矩陣最重要的特征。

奇異值分解是一個有著很明顯的物理意義的一種方法:

它可以將一個比較復(fù)雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。

就像是描述一個人一樣,給別人描述說這個人長得濃眉大眼,方臉,絡(luò)腮胡,而且?guī)€黑框的眼鏡,這樣寥寥的幾個特征,就讓別人腦海里面就有一個較為清楚的認識,實際上,人臉上的特征是有著無數(shù)種的,之所以能這么描述,是因為人天生就有著非常好的抽取重要特征的能力,讓機器學(xué)會抽取重要的特征,SVD是一個重要的方法。


特征值:

如果說一個向量v是方陣A的特征向量,將一定可以表示成下面的形式:

這時候λ就被稱為特征值v對應(yīng)的特征向量,一個矩陣的一組特征向量是一組正交向量。特征值分解是將一個矩陣分解成下面的形式:

其中Q是這個矩陣A的特征向量組成的矩陣,Σ是一個對角陣,每一個對角線上的元素就是一個特征值。

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

比如說下面的一個矩陣:

它其實對應(yīng)的線性變換是下面的形式:

因為這個矩陣M乘以一個向量(x,y)的結(jié)果是:

上面的矩陣是對稱的,所以這個變換是一個對x,y軸的方向一個拉伸變換(每一個對角線上的元素將會對一個維度進行拉伸變換,當值>1時,是拉長,當值<1時時縮短),當矩陣不是對稱的時候,假如說矩陣是下面的樣子:

它所描述的變換是下面的樣子:

這其實是在平面上對一個軸進行的拉伸變換(如藍色的箭頭所示)。

在圖中,藍色的箭頭是一個最主要的變化方向(變化方向可能有不止一個),如果我們想要描述好一個變換,那我們就描述好這個變換主要的變化方向就好了

反過頭來看看之前特征值分解的式子,分解得到的Σ矩陣是一個對角陣,里面的特征值是由大到小排列的,這些特征值所對應(yīng)的特征向量就是描述這個矩陣變化方向從主要的變化到次要的變化排列

當矩陣是高維的情況下,那么這個矩陣就是高維空間下的一個線性變換,這個線性變化可能沒法通過圖片來表示,但是可以想象,這個變換也同樣有很多的變換方向,我們通過特征值分解得到的前N個特征向量,那么就對應(yīng)了這個矩陣最主要的N個變化方向。我們利用這前N個變化方向,就可以近似這個矩陣(變換)。

也就是之前說的:提取這個矩陣最重要的特征。總結(jié)一下,特征值分解可以得到特征值與特征向量,特征值表示的是這個特征到底有多重要,而特征向量表示這個特征是什么,可以將每一個特征向量理解為一個線性的子空間,我們可以利用這些線性的子空間干很多的事情。不過,特征值分解也有很多的局限,比如說變換的矩陣必須是方陣。


奇異值:

下面談?wù)勂娈愔捣纸狻?b>特征值分解是一個提取矩陣特征很不錯的方法,但是它只是對方陣而言的,在現(xiàn)實的世界中,我們看到的大部分矩陣都不是方陣,比如說有N個學(xué)生,每個學(xué)生有M科成績,這樣形成的一個N * M的矩陣就不可能是方陣,我們怎樣才能描述這樣普通的矩陣呢的重要特征呢?奇異值分解可以用來干這個事情。

奇異值分解是一個能適用于任意的矩陣的一種分解的方法

假設(shè)A是一個N * M的矩陣,那么得到的U是一個M * M的方陣(里面的向量是正交的,U里面的向量稱為左奇異向量),Σ是一個N * M的矩陣(除了對角線的元素都是0,對角線上的元素稱為奇異值),V’(V的轉(zhuǎn)置)是一個N * N的矩陣,里面的向量也是正交的,V里面的向量稱為右奇異向量),從圖片來反映幾個相乘的矩陣的大小可得下面的圖片

那么奇異值和特征值是怎么對應(yīng)起來的呢?首先,我們將一個矩陣A的轉(zhuǎn)置 * A,將會得到一個方陣,我們用這個方陣求特征值可以得到:

這里得到的v,就是我們上面的右奇異向量。此外我們還可以得到:

這里的σ就是上面說的奇異值,u就是上面說的左奇異向量。

奇異值σ跟特征值類似,在矩陣Σ中也是從大到小排列,而且σ的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就占了全部的奇異值之和的99%以上了

也就是說,我們也可以用前r大的奇異值來近似描述矩陣,這里定義一下部分奇異值分解

r是一個遠小于m、n的數(shù),這樣矩陣的乘法看起來像是下面的樣子:

右邊的三個矩陣相乘的結(jié)果將會是一個接近于A的矩陣,在這兒,r越接近于n,則相乘的結(jié)果越接近于A。而這三個矩陣的面積之和(在存儲觀點來說,矩陣面積越小,存儲量就越小)要遠遠小于原始的矩陣A,我們?nèi)绻胍獕嚎s空間來表示原矩陣A,我們存下這里的三個矩陣:U、Σ、V就好了。


二、奇異值的計算:

奇異值的計算是一個難題,是一個O(N^3)的算法。在單機的情況下當然是沒問題的,matlab在一秒鐘內(nèi)就可以算出1000 * 1000的矩陣的所有奇異值,但是當矩陣的規(guī)模增長的時候,計算的復(fù)雜度呈3次方增長,就需要并行計算參與了。Google的吳軍老師在數(shù)學(xué)之美系列談到SVD的時候,說起Google實現(xiàn)了SVD的并行化算法,說這是對人類的一個貢獻,但是也沒有給出具體的計算規(guī)模,也沒有給出太多有價值的信息。

其實SVD還是可以用并行的方式去實現(xiàn)的,在解大規(guī)模的矩陣的時候,一般使用迭代的方法,當矩陣的規(guī)模很大(比如說上億)的時候,迭代的次數(shù)也可能會上億次,如果使用Map-Reduce框架去解,則每次Map-Reduce完成的時候,都會涉及到寫文件、讀文件的操作。個人猜測Google云計算體系中除了Map-Reduce以外應(yīng)該還有類似于MPI的計算模型,也就是節(jié)點之間是保持通信,數(shù)據(jù)是常駐在內(nèi)存中的,這種計算模型比Map-Reduce在解決迭代次數(shù)非常多的時候,要快了很多倍。

Lanczos迭代就是一種解對稱方陣部分特征值的方法(之前談到了,解A’* A得到的對稱方陣的特征值就是解A的右奇異向量),是將一個對稱的方程化為一個三對角矩陣再進行求解。按網(wǎng)上的一些文獻來看,Google應(yīng)該是用這種方法去做的奇異值分解的。請見Wikipedia上面的一些引用的論文,如果理解了那些論文,也“幾乎”可以做出一個SVD了。

由于奇異值的計算是一個很枯燥,純數(shù)學(xué)的過程,而且前人的研究成果(論文中)幾乎已經(jīng)把整個程序的流程圖給出來了。更多的關(guān)于奇異值計算的部分,將在后面的參考文獻中給出,這里不再深入,我還是focus在奇異值的應(yīng)用中去。


三、PCA

PCA(Principal Component Analysis)是一種常用的數(shù)據(jù)分析方法。PCA通過線性變換將原始數(shù)據(jù)變換為一組各維度線性無關(guān)的表示,可用于提取數(shù)據(jù)的主要特征分量,常用于高維數(shù)據(jù)的降維。網(wǎng)上關(guān)于PCA的文章有很多,但是大多數(shù)只描述了PCA的分析過程,而沒有講述其中的原理。這篇文章的目的是介紹PCA的基本數(shù)學(xué)原理,幫助讀者了解PCA的工作機制是什么。

1)數(shù)據(jù)的向量表示及降維問題

一般情況下,在數(shù)據(jù)挖掘和機器學(xué)習(xí)中,數(shù)據(jù)被表示為向量。例如某個淘寶店2012年全年的流量及交易情況可以看成一組記錄的集合,其中每一天的數(shù)據(jù)是一條記錄,格式如下:

(日期, 瀏覽量, 訪客數(shù), 下單數(shù), 成交數(shù), 成交金額)

其中“日期”是一個記錄標志而非度量值,而數(shù)據(jù)挖掘關(guān)心的大多是度量值,因此如果我們忽略日期這個字段后,我們得到一組記錄,每條記錄可以被表示為一個五維向量,其中一條看起來大約是這個樣子:

注意這里我用了轉(zhuǎn)置,因為習(xí)慣上使用列向量表示一條記錄(后面會看到原因),本文后面也會遵循這個準則。不過為了方便有時我會省略轉(zhuǎn)置符號,但我們說到向量默認都是指列向量。

我們當然可以對這一組五維向量進行分析和挖掘,不過我們知道,很多機器學(xué)習(xí)算法的復(fù)雜度和數(shù)據(jù)的維數(shù)有著密切關(guān)系,甚至與維數(shù)呈指數(shù)級關(guān)聯(lián)。當然,這里區(qū)區(qū)五維的數(shù)據(jù),也許還無所謂,但是實際機器學(xué)習(xí)中處理成千上萬甚至幾十萬維的情況也并不罕見,在這種情況下,機器學(xué)習(xí)的資源消耗是不可接受的,因此我們必須對數(shù)據(jù)進行降維。

降維當然意味著信息的丟失,不過鑒于實際數(shù)據(jù)本身常常存在的相關(guān)性,我們可以想辦法在降維的同時將信息的損失盡量降低。

舉個例子,假如某學(xué)籍數(shù)據(jù)有兩列M和F,其中M列的取值是如何此學(xué)生為男性取值1,為女性取值0;而F列是學(xué)生為女性取值1,男性取值0。此時如果我們統(tǒng)計全部學(xué)籍數(shù)據(jù),會發(fā)現(xiàn)對于任何一條記錄來說,當M為1時F必定為0,反之當M為0時F必定為1。在這種情況下,我們將M或F去掉實際上沒有任何信息的損失,因為只要保留一列就可以完全還原另一列。

當然上面是一個極端的情況,在現(xiàn)實中也許不會出現(xiàn),不過類似的情況還是很常見的。例如上面淘寶店鋪的數(shù)據(jù),從經(jīng)驗我們可以知道,“瀏覽量”和“訪客數(shù)”往往具有較強的相關(guān)關(guān)系,而“下單數(shù)”和“成交數(shù)”也具有較強的相關(guān)關(guān)系。這里我們非正式的使用“相關(guān)關(guān)系”這個詞,可以直觀理解為“當某一天這個店鋪的瀏覽量較高(或較低)時,我們應(yīng)該很大程度上認為這天的訪客數(shù)也較高(或較低)”。后面的章節(jié)中我們會給出相關(guān)性的嚴格數(shù)學(xué)定義。

這種情況表明,如果我們刪除瀏覽量或訪客數(shù)其中一個指標,我們應(yīng)該期待并不會丟失太多信息。因此我們可以刪除一個,以降低機器學(xué)習(xí)算法的復(fù)雜度。

上面給出的是降維的樸素思想描述,可以有助于直觀理解降維的動機和可行性,但并不具有操作指導(dǎo)意義。例如,我們到底刪除哪一列損失的信息才最小?亦或根本不是單純刪除幾列,而是通過某些變換將原始數(shù)據(jù)變?yōu)楦俚牧械质沟脕G失的信息最小?到底如何度量丟失信息的多少?如何根據(jù)原始數(shù)據(jù)決定具體的降維操作步驟?

要回答上面的問題,就要對降維問題進行數(shù)學(xué)化和形式化的討論。而PCA是一種具有嚴格數(shù)學(xué)基礎(chǔ)并且已被廣泛采用的降維方法。下面我不會直接描述PCA,而是通過逐步分析問題,讓我們一起重新“發(fā)明”一遍PCA。

2)向量的表示及基變換

既然我們面對的數(shù)據(jù)被抽象為一組向量,那么下面有必要研究一些向量的數(shù)學(xué)性質(zhì)。而這些數(shù)學(xué)性質(zhì)將成為后續(xù)導(dǎo)出PCA的理論基礎(chǔ)。

內(nèi)積與投影

下面先來看一個高中就學(xué)過的向量運算:

內(nèi)積。兩個維數(shù)相同的向量的內(nèi)積被定義為:

內(nèi)積運算將兩個向量映射為一個實數(shù)。其計算方式非常容易理解,但是其意義并不明顯。下面我們分析內(nèi)積的幾何意義。假設(shè)A和B是兩個n維向量,我們知道n維向量可以等價表示為n維空間中的一條從原點發(fā)射的有向線段,為了簡單起見我們假設(shè)A和B均為二維向量,則

則在二維平面上A和B可以用兩條發(fā)自原點的有向線段表示,見下圖:

好,現(xiàn)在我們從A點向B所在直線引一條垂線。我們知道垂線與B的交點叫做A在B上的投影,再設(shè)A與B的夾角是a,則投影的矢量長度為:

其中,向量A的模,也就是A線段的標量長度為:

注意這里我們專門區(qū)分了矢量長度和標量長度,標量長度總是大于等于0,值就是線段的長度;而矢量長度可能為負,其絕對值是線段長度,而符號取決于其方向與標準方向相同或相反。

到這里還是看不出內(nèi)積和這東西有什么關(guān)系,不過如果我們將內(nèi)積表示為另一種我們熟悉的形式:

現(xiàn)在事情似乎是有點眉目了:A與B的內(nèi)積等于A到B的投影長度乘以B的模。再進一步,如果我們假設(shè)B的模為1,

也就是說,設(shè)向量B的模為1,則A與B的內(nèi)積值等于A向B所在直線投影的矢量長度!這就是內(nèi)積的一種幾何解釋,也是我們得到的第一個重要結(jié)論。在后面的推導(dǎo)中,將反復(fù)使用這個結(jié)論。

3)基

下面我們繼續(xù)在二維空間內(nèi)討論向量。上文說過,一個二維向量可以對應(yīng)二維笛卡爾直角坐標系中從原點出發(fā)的一個有向線段。例如下面這個向量:

在代數(shù)表示方面,我們經(jīng)常用線段終點的點坐標表示向量,例如上面的向量可以表示為(3,2),這是我們再熟悉不過的向量表示。

不過我們常常忽略,只有一個(3,2)本身是不能夠精確表示一個向量的。我們仔細看一下,這里的3實際表示的是向量在x軸上的投影值是3,在y軸上的投影值是2。也就是說我們其實隱式引入了一個定義:以x軸和y軸上正方向長度為1的向量為標準。那么一個向量(3,2)實際是說在x軸投影為3而y軸的投影為2。注意投影是一個矢量,所以可以為負。

更正式的說,向量(x,y)實際上表示線性組合:

不難證明所有二維向量都可以表示為這樣的線性組合。此處(1,0)和(0,1)叫做二維空間中的一組基。

所以,要準確描述向量,首先要確定一組基,然后給出在基所在的各個直線上的投影值,就可以了。只不過我們經(jīng)常省略第一步,而默認以(1,0)和(0,1)為基。

我們之所以默認選擇(1,0)和(0,1)為基,當然是比較方便,因為它們分別是x和y軸正方向上的單位向量,因此就使得二維平面上點坐標和向量一一對應(yīng),非常方便。但實際上任何兩個線性無關(guān)的二維向量都可以成為一組基,所謂線性無關(guān)在二維平面內(nèi)可以直觀認為是兩個不在一條直線上的向量。

例如,(1,1)和(-1,1)也可以成為一組基。一般來說,我們希望基的模是1,因為從內(nèi)積的意義可以看到,如果基的模是1,那么就可以方便的用向量點乘基而直接獲得其在新基上的坐標了!實際上,對應(yīng)任何一個向量我們總可以找到其同方向上模為1的向量,只要讓兩個分量分別除以模就好了。

現(xiàn)在,我們想獲得(3,2)在新基上的坐標,即在兩個方向上的投影矢量值,那么根據(jù)內(nèi)積的幾何意義,我們只要分別計算(3,2)和兩個基的內(nèi)積,不難得到新的坐標為

下圖給出了新的基以及(3,2)在新基上坐標值的示意圖:

另外這里要注意的是,我們列舉的例子中基是正交的(即內(nèi)積為0,或直觀說相互垂直),但可以成為一組基的唯一要求就是線性無關(guān),非正交的基也是可以的。不過因為正交基有較好的性質(zhì),所以一般使用的基都是正交的。

4)基變換的矩陣表示

下面我們找一種簡便的方式來表示基變換。還是拿上面的例子,想一下,將(3,2)變換為新基上的坐標,就是用(3,2)與第一個基做內(nèi)積運算,作為第一個新的坐標分量,然后用(3,2)與第二個基做內(nèi)積運算,作為第二個新坐標的分量。實際上,我們可以用矩陣相乘的形式簡潔的表示這個變換:

太漂亮了!其中矩陣的兩行分別為兩個基,乘以原向量,其結(jié)果剛好為新基的坐標。可以稍微推廣一下,如果我們有m個二維向量,只要將二維向量按列排成一個兩行m列矩陣,然后用“基矩陣”乘以這個矩陣,就得到了所有這些向量在新基下的值。例如(1,1),(2,2),(3,3),想變換到剛才那組基上,則可以這樣表示:

一般的,如果我們有M個N維向量,想將其變換為由R個N維向量表示的新空間中,那么首先將R個基按行組成矩陣A,然后將向量按列組成矩陣B,那么兩矩陣的乘積AB就是變換結(jié)果,其中AB的第m列為A中第m列變換后的結(jié)果

數(shù)學(xué)表示為:

其中Pi是一個行向量,表示第i個基,aj是一個列向量,表示第j個原始數(shù)據(jù)記錄。

特別要注意的是,這里R可以小于N,而R決定了變換后數(shù)據(jù)的維數(shù)。也就是說,我們可以將一N維數(shù)據(jù)變換到更低維度的空間中去,變換后的維度取決于基的數(shù)量。因此這種矩陣相乘的表示也可以表示降維變換。

最后,上述分析同時給矩陣相乘找到了一種物理解釋:

兩個矩陣相乘的意義是將右邊矩陣中的每一列列向量變換到左邊矩陣中每一行行向量為基所表示的空間中去

更抽象的說,一個矩陣可以表示一種線性變換。很多同學(xué)在學(xué)線性代數(shù)時對矩陣相乘的方法感到奇怪,但是如果明白了矩陣相乘的物理意義,其合理性就一目了然了。

4)協(xié)方差矩陣及優(yōu)化目標

上面我們討論了選擇不同的基可以對同樣一組數(shù)據(jù)給出不同的表示,而且如果基的數(shù)量少于向量本身的維數(shù),則可以達到降維的效果。

但是我們還沒有回答一個最最關(guān)鍵的問題:

如何選擇基才是最優(yōu)的。或者說,如果我們有一組N維向量,現(xiàn)在要將其降到K維(K小于N),那么我們應(yīng)該如何選擇K個基才能最大程度保留原有的信息?

要完全數(shù)學(xué)化這個問題非常繁雜,這里我們用一種非形式化的直觀方法來看這個問題。

為了避免過于抽象的討論,我們?nèi)砸砸粋€具體的例子展開。假設(shè)我們的數(shù)據(jù)由五條記錄組成,將它們表示成矩陣形式:

其中每一列為一條數(shù)據(jù)記錄,而一行為一個字段。為了后續(xù)處理方便,我們首先將每個字段內(nèi)所有值都減去字段均值,其結(jié)果是將每個字段都變?yōu)榫禐?(這樣做的道理和好處后面會看到)。

我們看上面的數(shù)據(jù),第一個字段均值為2,第二個字段均值為3,所以變換后:

我們可以看下五條數(shù)據(jù)在平面直角坐標系內(nèi)的樣子:

現(xiàn)在問題來了:如果我們必須使用一維來表示這些數(shù)據(jù),又希望盡量保留原始的信息,你要如何選擇?

通過上一節(jié)對基變換的討論我們知道,這個問題實際上是要在二維平面中選擇一個方向,將所有數(shù)據(jù)都投影到這個方向所在直線上,用投影值表示原始記錄。這是一個實際的二維降到一維的問題。

那么如何選擇這個方向(或者說基)才能盡量保留最多的原始信息呢?一種直觀的看法是:

希望投影后的投影值盡可能分散。

以上圖為例,可以看出如果向x軸投影,那么最左邊的兩個點會重疊在一起,中間的兩個點也會重疊在一起,于是本身四個各不相同的二維點投影后只剩下兩個不同的值了,這是一種嚴重的信息丟失,同理,如果向y軸投影最上面的兩個點和分布在x軸上的兩個點也會重疊。所以看來x和y軸都不是最好的投影選擇。我們直觀目測,如果向通過第一象限和第三象限的斜線投影,則五個點在投影后還是可以區(qū)分的。

下面,我們用數(shù)學(xué)方法表述這個問題。

5)方差

上文說到,我們希望投影后投影值盡可能分散,而這種分散程度,可以用數(shù)學(xué)上的方差來表述。此處,一個字段的方差可以看做是每個元素與字段均值的差的平方和的均值,即:

由于上面我們已經(jīng)將每個字段的均值都化為0了,因此方差可以直接用每個元素的平方和除以元素個數(shù)表示:

于是上面的問題被形式化表述為:

尋找一個一維基,使得所有數(shù)據(jù)變換為這個基上的坐標表示后,方差值最大。

6)協(xié)方差

對于上面二維降成一維的問題來說,找到那個使得方差最大的方向就可以了。不過對于更高維,還有一個問題需要解決。考慮三維降到二維問題。與之前相同,首先我們希望找到一個方向使得投影后方差最大,這樣就完成了第一個方向的選擇,繼而我們選擇第二個投影方向。

如果我們還是單純只選擇方差最大的方向,很明顯,這個方向與第一個方向應(yīng)該是“幾乎重合在一起”,顯然這樣的維度是沒有用的,因此,應(yīng)該有其他約束條件。從直觀上說,讓兩個字段盡可能表示更多的原始信息,我們是不希望它們之間存在(線性)相關(guān)性的,因為相關(guān)性意味著兩個字段不是完全獨立,必然存在重復(fù)表示的信息。

數(shù)學(xué)上可以用兩個字段的協(xié)方差表示其相關(guān)性,由于已經(jīng)讓每個字段均值為0,則:?

可以看到,在字段均值為0的情況下,兩個字段的協(xié)方差簡潔的表示為其內(nèi)積除以元素數(shù)m。

當協(xié)方差為0時,表示兩個字段完全獨立。為了讓協(xié)方差為0,我們選擇第二個基時只能在與第一個基正交的方向上選擇。因此最終選擇的兩個方向一定是正交的。

至此,我們得到了降維問題的優(yōu)化目標:

將一組N維向量降為K維(K大于0,小于N),其目標是選擇K個單位(模為1)正交基,使得原始數(shù)據(jù)變換到這組基上后,各字段兩兩間協(xié)方差為0,而字段的方差則盡可能大(在正交的約束下,取最大的K個方差)

7)協(xié)方差矩陣

上面我們導(dǎo)出了優(yōu)化目標,但是這個目標似乎不能直接作為操作指南(或者說算法),因為它只說要什么,但根本沒有說怎么做。所以我們要繼續(xù)在數(shù)學(xué)上研究計算方案。

我們看到,最終要達到的目的與字段內(nèi)方差及字段間協(xié)方差有密切關(guān)系。因此我們希望能將兩者統(tǒng)一表示,仔細觀察發(fā)現(xiàn),兩者均可以表示為內(nèi)積的形式,而內(nèi)積又與矩陣相乘密切相關(guān)。于是我們來了靈感:

假設(shè)我們只有a和b兩個字段,那么我們將它們按行組成矩陣X:


然后我們用X乘以X的轉(zhuǎn)置,并乘上系數(shù)1/m:

奇跡出現(xiàn)了!

這個矩陣對角線上的兩個元素分別是兩個字段的方差,而其它元素是a和b的協(xié)方差。兩者被統(tǒng)一到了一個矩陣的。

根據(jù)矩陣相乘的運算法則,這個結(jié)論很容易被推廣到一般情況

設(shè)我們有m個n維數(shù)據(jù)記錄,將其按列排成n乘m的矩陣X,設(shè)

則C是一個對稱矩陣,其對角線分別個各個字段的方差,而第i行j列和j行i列元素相同,表示i和j兩個字段的協(xié)方差

7)協(xié)方差矩陣對角化

根據(jù)上述推導(dǎo),我們發(fā)現(xiàn)要達到優(yōu)化目前,等價于將協(xié)方差矩陣對角化:即除對角線外的其它元素化為0,并且在對角線上將元素按大小從上到下排列,這樣我們就達到了優(yōu)化目的。這樣說可能還不是很明晰,我們進一步看下原矩陣與基變換后矩陣協(xié)方差矩陣的關(guān)系:

設(shè)原始數(shù)據(jù)矩陣X對應(yīng)的協(xié)方差矩陣為C,而P是一組基按行組成的矩陣,設(shè)Y=PX,則Y為X對P做基變換后的數(shù)據(jù)。設(shè)Y的協(xié)方差矩陣為D,我們推導(dǎo)一下D與C的關(guān)系:

現(xiàn)在事情很明白了!我們要找的P不是別的,而是能讓原始協(xié)方差矩陣對角化的P。換句話說,優(yōu)化目標變成了尋找一個矩陣P,滿足

是一個對角矩陣,并且對角元素按從大到小依次排列,那么P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維并滿足上述優(yōu)化條件

至此,我們離“發(fā)明”PCA還有僅一步之遙!

現(xiàn)在所有焦點都聚焦在了協(xié)方差矩陣對角化問題上,有時,我們真應(yīng)該感謝數(shù)學(xué)家的先行,因為矩陣對角化在線性代數(shù)領(lǐng)域已經(jīng)屬于被玩爛了的東西,所以這在數(shù)學(xué)上根本不是問題。

由上文知道,協(xié)方差矩陣C是一個是對稱矩陣,在線性代數(shù)上,實對稱矩陣有一系列非常好的性質(zhì):1)實對稱矩陣不同特征值對應(yīng)的特征向量必然正交。

2)設(shè)特征向量重數(shù)為r,則必然存在r個線性無關(guān)的特征向量對應(yīng)于,因此可以將這r個特征向量單位正交化。

由上面兩條可知,一個n行n列的實對稱矩陣一定可以找到n個單位正交特征向量,設(shè)這n個特征向量為,

我們將其按列組成矩陣:

則對協(xié)方差矩陣C有如下結(jié)論:

其中


為對角矩陣,其對角元素為各特征向量對應(yīng)的特征值(可能有重復(fù))。

以上結(jié)論不再給出嚴格的數(shù)學(xué)證明,對證明感興趣的朋友可以參考線性代數(shù)書籍關(guān)于“實對稱矩陣對角化”的內(nèi)容。

到這里,我們發(fā)現(xiàn)我們已經(jīng)找到了需要的矩陣P:

P是協(xié)方差矩陣的特征向量單位化后按行排列出的矩陣,其中每一行都是C的一個特征向量。如果設(shè)P按照

中特征值的從大到小,將特征向量從上到下排列,則用P的前K行組成的矩陣乘以原始數(shù)據(jù)矩陣X,就得到了我們需要的降維后的數(shù)據(jù)矩陣Y。至此我們完成了整個PCA的數(shù)學(xué)原理討論。在下面的一節(jié),我們將給出PCA的一個實例。

8)算法及實例

為了鞏固上面的理論,我們在這一節(jié)給出一個具體的PCA實例。


? ?實例

? ? ?這里以上文提到的


為例,我們用PCA方法將這組二維數(shù)據(jù)其降到一維。

因為這個矩陣的每行已經(jīng)是零均值,這里我們直接求協(xié)方差矩陣:

然后求其特征值和特征向量,具體求解方法不再詳述,可以參考相關(guān)資料。求解后特征值為:

其對應(yīng)的特征向量分別是:


其中對應(yīng)的特征向量分別是一個通解,C1和C2可取任意實數(shù)。那么標準化后的特征向量為:


因此我們的矩陣P是:

可以驗證協(xié)方差矩陣C的對角化:


最后我們用P的第一行乘以數(shù)據(jù)矩陣,就得到了降維后的表示:

降維投影結(jié)果如下圖:

9)進一步討論

根據(jù)上面對PCA的數(shù)學(xué)原理的解釋,我們可以了解到一些PCA的能力和限制。PCA本質(zhì)上是將方差最大的方向作為主要特征,并且在各個正交方向上將數(shù)據(jù)“離相關(guān)”,也就是讓它們在不同正交方向上沒有相關(guān)性。

因此,PCA也存在一些限制,例如它可以很好的解除線性相關(guān),但是對于高階相關(guān)性就沒有辦法了,對于存在高階相關(guān)性的數(shù)據(jù),可以考慮Kernel PCA,通過Kernel函數(shù)將非線性相關(guān)轉(zhuǎn)為線性相關(guān),關(guān)于這點就不展開討論了。另外,PCA假設(shè)數(shù)據(jù)各主特征是分布在正交方向上,如果在非正交方向上存在幾個方差較大的方向,PCA的效果就大打折扣了。

最后需要說明的是,PCA是一種無參數(shù)技術(shù),也就是說面對同樣的數(shù)據(jù),如果不考慮清洗,誰來做結(jié)果都一樣,沒有主觀參數(shù)的介入,所以PCA便于通用實現(xiàn),但是本身無法個性化的優(yōu)化。

希望這篇文章能幫助朋友們了解PCA的數(shù)學(xué)理論基礎(chǔ)和實現(xiàn)原理,借此了解PCA的適用場景和限制,從而更好的使用這個算法。


四、奇異值與主成分分析(PCA):

主成分分析在上一節(jié)里面也講了一些,這里主要談?wù)勅绾斡肧VD去解PCA的問題。PCA的問題其實是一個基的變換,使得變換后的數(shù)據(jù)有著最大的方差。方差的大小描述的是一個變量的信息量,我們在講一個東西的穩(wěn)定性的時候,往往說要減小方差,如果一個模型的方差很大,那就說明模型不穩(wěn)定了。但是對于我們用于機器學(xué)習(xí)的數(shù)據(jù)(主要是訓(xùn)練數(shù)據(jù)),方差大才有意義,不然輸入的數(shù)據(jù)都是同一個點,那方差就為0了,這樣輸入的多個數(shù)據(jù)就等同于一個數(shù)據(jù)了。以下面這張圖為例子:

這個假設(shè)是一個攝像機采集一個物體運動得到的圖片,上面的點表示物體運動的位置,假如我們想要用一條直線去擬合這些點,那我們會選擇什么方向的線呢?當然是圖上標有signal的那條線。如果我們把這些點單純的投影到x軸或者y軸上,最后在x軸與y軸上得到的方差是相似的(因為這些點的趨勢是在45度左右的方向,所以投影到x軸或者y軸上都是類似的),如果我們使用原來的xy坐標系去看這些點,容易看不出來這些點真正的方向是什么。但是如果我們進行坐標系的變化,橫軸變成了signal的方向,縱軸變成了noise的方向,則就很容易發(fā)現(xiàn)什么方向的方差大,什么方向的方差小了。

一般來說,方差大的方向是信號的方向,方差小的方向是噪聲的方向,我們在數(shù)據(jù)挖掘中或者數(shù)字信號處理中,往往要提高信號與噪聲的比例,也就是信噪比。對上圖來說,如果我們只保留signal方向的數(shù)據(jù),也可以對原數(shù)據(jù)進行不錯的近似了。

PCA的全部工作簡單點說,就是對原始的空間中順序地找一組相互正交的坐標軸,第一個軸是使得方差最大的,第二個軸是在與第一個軸正交的平面中使得方差最大的,第三個軸是在與第1、2個軸正交的平面中方差最大的,這樣假設(shè)在N維空間中,我們可以找到N個這樣的坐標軸,我們?nèi)∏皉個去近似這個空間,這樣就從一個N維的空間壓縮到r維的空間了,但是我們選擇的r個坐標軸能夠使得空間的壓縮使得數(shù)據(jù)的損失最小。

還是假設(shè)我們矩陣每一行表示一個樣本,每一列表示一個feature,用矩陣的語言來表示,將一個m * n的矩陣A的進行坐標軸的變化,P就是一個變換的矩陣從一個N維的空間變換到另一個N維的空間,在空間中就會進行一些類似于旋轉(zhuǎn)、拉伸的變化。

而將一個m * n的矩陣A變換成一個m * r的矩陣,這樣就會使得本來有n個feature的,變成了有r個feature了(r < n),這r個其實就是對n個feature的一種提煉,我們就把這個稱為feature的壓縮。用數(shù)學(xué)語言表示就是:

但是這個怎么和SVD扯上關(guān)系呢?之前談到,SVD得出的奇異向量也是從奇異值由大到小排列的,按PCA的觀點來看,就是方差最大的坐標軸就是第一個奇異向量,方差次大的坐標軸就是第二個奇異向量…我們回憶一下之前得到的SVD式子:

在矩陣的兩邊同時乘上一個矩陣V,由于V是一個正交的矩陣,所以V轉(zhuǎn)置乘以V得到單位陣I,所以可以化成后面的式子

將后面的式子與A * P那個m * n的矩陣變換為m * r的矩陣的式子對照看看,在這里,其實V就是P,也就是一個變化的向量。這里是將一個m * n 的矩陣壓縮到一個m * r的矩陣,也就是對列進行壓縮,如果我們想對行進行壓縮(在PCA的觀點下,對行進行壓縮可以理解為,將一些相似的sample合并在一起,或者將一些沒有太大價值的sample去掉)怎么辦呢?同樣我們寫出一個通用的行壓縮例子:

這樣就從一個m行的矩陣壓縮到一個r行的矩陣了,對SVD來說也是一樣的,我們對SVD分解的式子兩邊乘以U的轉(zhuǎn)置U'

這樣我們就得到了對行進行壓縮的式子。可以看出,其實PCA幾乎可以說是對SVD的一個包裝,如果我們實現(xiàn)了SVD,那也就實現(xiàn)了PCA了,而且更好的地方是,有了SVD,我們就可以得到兩個方向的PCA,如果我們對A’A進行特征值的分解,只能得到一個方向的PCA。


為什么數(shù)據(jù)降維:

(1)在原始的高維空間中,包含有冗余信息以及噪音信息,在實際應(yīng)用例如圖像識別中造成了誤差,降低了準確率;而通過降維,我們希望減少冗余信息所造成的誤差,提高識別(或其他應(yīng)用)的精度。

(2)或者希望通過降維算法來尋找數(shù)據(jù)內(nèi)部的本質(zhì)結(jié)構(gòu)特征。

(3)通過降維來加速后續(xù)計算的速度

(4)還有其他很多目的,如解決數(shù)據(jù)的sparse問題


來源:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

? ? ? ? ? ?http://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html

? ? ? ? ? ?http://www.360doc.com/content/13/1124/02/9482_331688889.shtml

http://blog.csdn.net/u013719780/article/details/51755208

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

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