主成分分析的数学原理
生活随笔
收集整理的這篇文章主要介紹了
主成分分析的数学原理
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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é)原理。
1.數(shù)據(jù)的向量表示以及降維問題
一般情況下,在數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)中,數(shù)據(jù)被表示為向量。例如某個(gè)淘寶店2012年全年的流量及交易情況可以看成一組記錄的集合,其中每一天的數(shù)據(jù)是一條記錄,格式如下:(日期, 瀏覽量, 訪客數(shù), 下單數(shù), 成交數(shù), 成交金額)
其中“日期”是一個(gè)記錄標(biāo)志而非度量值,而數(shù)據(jù)挖掘關(guān)心的大多是度量值,因此如果我們忽略日期這個(gè)字段后,我們得到一組記錄,每條記錄可以被表示為一個(gè)五維向量,其中一條看起來大約是這個(gè)樣子:
我們當(dāng)然可以對(duì)這一組五維向量進(jìn)行分析和挖掘,不過我們知道,很多機(jī)器學(xué)習(xí)算法的復(fù)雜度和數(shù)據(jù)的維數(shù)有著密切關(guān)系,甚至與維數(shù)呈指數(shù)級(jí)關(guān)聯(lián)。當(dāng)然,這里區(qū)區(qū)五維的數(shù)據(jù),也許還無所謂,但是實(shí)際機(jī)器學(xué)習(xí)中處理成千上萬甚至幾十萬維的情況也并不罕見,在這種情況下,機(jī)器學(xué)習(xí)的資源消耗是不可接受的,因此我們必須對(duì)數(shù)據(jù)進(jìn)行降維。
降維當(dāng)然意味著信息的丟失,不過鑒于實(shí)際數(shù)據(jù)本身常常存在的相關(guān)性,我們可以想辦法在降維的同時(shí)將信息的損失盡量降低。
上面淘寶店鋪的數(shù)據(jù),從經(jīng)驗(yàn)我們可以知道,“瀏覽量”和“訪客數(shù)”往往具有較強(qiáng)的相關(guān)關(guān)系,而“下單數(shù)”和“成交數(shù)”也具有較強(qiáng)的相關(guān)關(guān)系。這里我們非正式的使用“相關(guān)關(guān)系”這個(gè)詞,可以直觀理解為“當(dāng)某一天這個(gè)店鋪的瀏覽量較高(或較低)時(shí),我們應(yīng)該很大程度上認(rèn)為這天的訪客數(shù)也較高(或較低)”。后面的章節(jié)中我們會(huì)給出相關(guān)性的嚴(yán)格數(shù)學(xué)定義。
這種情況表明,如果我們刪除瀏覽量或訪客數(shù)其中一個(gè)指標(biāo),我們應(yīng)該期待并不會(huì)丟失太多信息。因此我們可以刪除一個(gè),以降低機(jī)器學(xué)習(xí)算法的復(fù)雜度。
上面給出的是降維的樸素思想描述,有助于直觀理解降維的動(dòng)機(jī)和可行性,但并不具有操作指導(dǎo)意義。例如,我們到底刪除哪一列損失的信息才最小?亦或根本不是單純刪除幾列,而是通過某些變換將原始數(shù)據(jù)變?yōu)楦俚牧械质沟脕G失的信息最小?到底如何度量丟失信息的多少?如何根據(jù)原始數(shù)據(jù)決定具體的降維操作步驟?
要回答上面的問題,就要對(duì)降維問題進(jìn)行數(shù)學(xué)化和形式化的討論。而PCA是一種具有嚴(yán)格數(shù)學(xué)基礎(chǔ)并且已被廣泛采用的降維方法。
2.主成分分析的數(shù)學(xué)基礎(chǔ)
既然我們面對(duì)的數(shù)據(jù)被抽象為一組向量,那么下面有必要研究一些向量的數(shù)學(xué)性質(zhì)。而這些數(shù)學(xué)性質(zhì)將成為后續(xù)導(dǎo)出PCA的理論基礎(chǔ)。2.1 內(nèi)積與投影
下面先來看一個(gè)高中就學(xué)過的向量運(yùn)算:內(nèi)積。兩個(gè)維數(shù)相同的向量的內(nèi)積被定義為:內(nèi)積運(yùn)算將兩個(gè)向量映射為一個(gè)實(shí)數(shù)。其計(jì)算方式非常容易理解,但是其意義并不明顯。下面我們分析內(nèi)積的幾何意義。假設(shè)A和B是兩個(gè)n維向量,我們知道n維向量可以等價(jià)表示為n維空間中的一條從原點(diǎn)發(fā)射的有向線段,為了簡(jiǎn)單起見我們假設(shè)A和B均為二維向量,則A=(x1,y1),B=(x2,y2)。則在二維平面上A和B可以用兩條發(fā)自原點(diǎn)的有向線段表示,見下圖:
好,現(xiàn)在我們從A點(diǎn)向B所在直線引一條垂線。我們知道垂線與B的交點(diǎn)叫做A在B上的投影,再設(shè)A與B的夾角是a,則投影的矢量長度為|A|cos(a),其中|A|是向量A的模,也就是A線段的標(biāo)量長度。
到這里還是看不出內(nèi)積和這東西有什么關(guān)系,不過如果我們將內(nèi)積表示為另一種我們熟悉的形式:
現(xiàn)在事情似乎是有點(diǎn)眉目了:A與B的內(nèi)積等于A到B的投影長度乘以B的模。再進(jìn)一步,如果我們假設(shè)B的模為1,即讓|B|=1,那么就變成了:
也就是說,設(shè)向量B的模為1,則A與B的內(nèi)積值等于A向B所在直線投影的矢量長度!這就是內(nèi)積的一種幾何解釋,也是我們得到的第一個(gè)重要結(jié)論。在后面的推導(dǎo)中,將反復(fù)使用這個(gè)結(jié)論。
2.2?協(xié)方差矩陣及優(yōu)化目標(biāo)
選擇不同的基可以對(duì)同樣一組數(shù)據(jù)給出不同的表示,而且如果基的數(shù)量少于向量本身的維數(shù),則可以達(dá)到降維的效果。但是我們還沒有回答一個(gè)最最關(guān)鍵的問題:如何選擇基才是最優(yōu)的。或者說,如果我們有一組N維向量,現(xiàn)在要將其降到K維(K小于N),那么我們應(yīng)該如何選擇K個(gè)基才能最大程度保留原有的信息?要完全數(shù)學(xué)化這個(gè)問題非常繁雜,這里我們用一種非形式化的直觀方法來看這個(gè)問題。
為了避免過于抽象的討論,我們?nèi)砸砸粋€(gè)具體的例子展開。假設(shè)我們的數(shù)據(jù)由五條記錄組成,將它們表示成矩陣形式:
其中每一列為一條數(shù)據(jù)記錄,而一行為一個(gè)字段。為了后續(xù)處理方便,我們首先將每個(gè)字段內(nèi)所有值都減去字段均值,其結(jié)果是將每個(gè)字段都變?yōu)榫禐?(這樣做的道理和好處后面會(huì)看到)。
我們看上面的數(shù)據(jù),第一個(gè)字段均值為2,第二個(gè)字段均值為3,所以變換后:
我們可以看下五條數(shù)據(jù)在平面直角坐標(biāo)系內(nèi)的樣子:
現(xiàn)在問題來了:如果我們必須使用一維來表示這些數(shù)據(jù),又希望盡量保留原始的信息,你要如何選擇?
通過上一節(jié)對(duì)基變換的討論我們知道,這個(gè)問題實(shí)際上是要在二維平面中選擇一個(gè)方向,將所有數(shù)據(jù)都投影到這個(gè)方向所在直線上,用投影值表示原始記錄。這是一個(gè)實(shí)際的二維降到一維的問題。
那么如何選擇這個(gè)方向(或者說基)才能盡量保留最多的原始信息呢?一種直觀的看法是:希望投影后的投影值盡可能分散。
以上圖為例,可以看出如果向x軸投影,那么最左邊的兩個(gè)點(diǎn)會(huì)重疊在一起,中間的兩個(gè)點(diǎn)也會(huì)重疊在一起,于是本身四個(gè)各不相同的二維點(diǎn)投影后只剩下兩個(gè)不同的值了,這是一種嚴(yán)重的信息丟失,同理,如果向y軸投影最上面的兩個(gè)點(diǎn)和分布在x軸上的兩個(gè)點(diǎn)也會(huì)重疊。所以看來x和y軸都不是最好的投影選擇。我們直觀目測(cè),如果向通過第一象限和第三象限的斜線投影,則五個(gè)點(diǎn)在投影后還是可以區(qū)分的。
下面,我們用數(shù)學(xué)方法表述這個(gè)問題。
2.3 方差 與 協(xié)方差
上文說到,我們希望投影后投影值盡可能分散,而這種分散程度,可以用數(shù)學(xué)上的方差來表述。此處,一個(gè)字段的方差可以看做是每個(gè)元素與字段均值的差的平方和的均值,即:上面的問題被形式化表述為:尋找一個(gè)一維基,使得所有數(shù)據(jù)變換為這個(gè)基上坐標(biāo)表示后,方差值最大。
對(duì)于上面二維降成一維的問題來說,找到那個(gè)使得方差最大的方向就可以了。不過對(duì)于更高維,還有一個(gè)問題需要解決。考慮三維降到二維問題。與之前相同,首先我們希望找到一個(gè)方向使得投影后方差最大,這樣就完成了第一個(gè)方向的選擇,繼而我們選擇第二個(gè)投影方向。
如果我們還是單純只選擇方差最大的方向,很明顯,這個(gè)方向與第一個(gè)方向應(yīng)該是“幾乎重合在一起”,顯然這樣的維度是沒有用的,因此,應(yīng)該有其他約束條件。從直觀上說,讓兩個(gè)字段盡可能表示更多的原始信息,我們是不希望它們之間存在(線性)相關(guān)性的,因?yàn)橄嚓P(guān)性意味著兩個(gè)字段不是完全獨(dú)立,必然存在重復(fù)表示的信息。
數(shù)學(xué)上可以用兩個(gè)字段的協(xié)方差表示其相關(guān)性,由于已經(jīng)讓每個(gè)字段均值為0,則:
可以看到,在字段均值為0的情況下,兩個(gè)字段的協(xié)方差簡(jiǎn)潔的表示為其內(nèi)積除以元素?cái)?shù)m。
當(dāng)協(xié)方差為0時(shí),表示兩個(gè)字段完全獨(dú)立。為了讓協(xié)方差為0,我們選擇第二個(gè)基時(shí)只能在與第一個(gè)基正交的方向上選擇。因此最終選擇的兩個(gè)方向一定是正交的。
至此,我們得到了降維問題的優(yōu)化目標(biāo):將一組N維向量降為K維(K大于0,小于N),其目標(biāo)是選擇K個(gè)單位(模為1)正交基,使得原始數(shù)據(jù)變換到這組基上后,各字段兩兩間協(xié)方差為0,而字段的方差則盡可能大(在正交的約束下,取最大的K個(gè)方差)。
2.4 協(xié)方差矩陣 及其 對(duì)角化
上面我們導(dǎo)出了優(yōu)化目標(biāo),但是這個(gè)目標(biāo)似乎不能直接作為操作指南(或者說算法),因?yàn)樗徽f要什么,但根本沒有說怎么做。所以我們要繼續(xù)在數(shù)學(xué)上研究計(jì)算方案。我們看到,最終要達(dá)到的目的與字段內(nèi)方差及字段間協(xié)方差有密切關(guān)系。因此我們希望能將兩者統(tǒng)一表示,仔細(xì)觀察發(fā)現(xiàn),兩者均可以表示為內(nèi)積的形式,而內(nèi)積又與矩陣相乘密切相關(guān)。于是我們來了靈感:
假設(shè)我們只有a和b兩個(gè)字段,那么我們將它們按行組成矩陣X:
然后我們用X乘以X的轉(zhuǎn)置,并乘上系數(shù)1/m:
奇跡出現(xiàn)了!這個(gè)矩陣對(duì)角線上的兩個(gè)元素分別是兩個(gè)字段的方差,而其它元素是a和b的協(xié)方差。兩者被統(tǒng)一到了一個(gè)矩陣的。
根據(jù)矩陣相乘的運(yùn)算法則,這個(gè)結(jié)論很容易被推廣到一般情況:
設(shè)我們有m個(gè)n維數(shù)據(jù)記錄,將其按列排成n乘m的矩陣X,設(shè),則C是一個(gè)對(duì)稱矩陣,其對(duì)角線分別個(gè)各個(gè)字段的方差,而第i行j列和j行i列元素相同,表示i和j兩個(gè)字段的協(xié)方差。
根據(jù)上述推導(dǎo),我們發(fā)現(xiàn)要達(dá)到優(yōu)化目地,等價(jià)于將協(xié)方差矩陣對(duì)角化:即除對(duì)角線外的其它元素化為0,并且在對(duì)角線上將元素按大小從上到下排列,這樣我們就達(dá)到了優(yōu)化目的(協(xié)方差為零,保證字段正交;方差最大)。這樣說可能還不是很明晰,我們進(jìn)一步看下原矩陣與基變換后矩陣協(xié)方差矩陣的關(guān)系:
設(shè)原始數(shù)據(jù)矩陣X對(duì)應(yīng)的協(xié)方差矩陣為C,而P是一組基按行組成的矩陣,設(shè)Y=PX,則Y為X對(duì)P做基變換后的數(shù)據(jù)。設(shè)Y的協(xié)方差矩陣為D,我們推導(dǎo)一下D與C的關(guān)系:
現(xiàn)在事情很明白了!我們要找的P不是別的,而是能讓原始協(xié)方差矩陣對(duì)角化的P。換句話說,優(yōu)化目標(biāo)變成了尋找一個(gè)矩陣P,滿足是一個(gè)對(duì)角矩陣,并且對(duì)角元素按從大到小依次排列,那么P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維并滿足上述優(yōu)化條件。
由上文知道,協(xié)方差矩陣C是一個(gè)是對(duì)稱矩陣,在線性代數(shù)上,實(shí)對(duì)稱矩陣有一系列非常好的性質(zhì):
1)實(shí)對(duì)稱矩陣不同特征值對(duì)應(yīng)的特征向量必然正交。
2)設(shè)特征向量λ重?cái)?shù)為r,則必然存在r個(gè)線性無關(guān)的特征向量對(duì)應(yīng)于λ,因此可以將這r個(gè)特征向量單位正交化。
則具體操作為:
3.算法步驟
設(shè)有m條n維數(shù)據(jù)。1)將原始數(shù)據(jù)按列組成n行m列矩陣X
2)將X的每一行(代表一個(gè)屬性字段)進(jìn)行零均值化,即減去這一行的均值
3)求出協(xié)方差矩陣
4)求出協(xié)方差矩陣的特征值及對(duì)應(yīng)的特征向量
5)將特征向量按對(duì)應(yīng)特征值大小從上到下按行排列成矩陣,取前k行組成矩陣P
6)Y=PX即為降維到k維后的數(shù)據(jù)
4.進(jìn)一步討論
根據(jù)上面對(duì)PCA的數(shù)學(xué)原理的解釋,我們可以了解到一些PCA的能力和限制。 PCA本質(zhì)上是將方差最大的方向作為主要特征,并且在各個(gè)正交方向上將數(shù)據(jù)“離相關(guān)”,也就是讓它們?cè)诓煌环较蛏蠜]有相關(guān)性。因此,PCA也存在一些限制,例如它可以很好的解除線性相關(guān),但是對(duì)于高階相關(guān)性就沒有辦法了,對(duì)于存在高階相關(guān)性的數(shù)據(jù),可以考慮Kernel PCA,通過Kernel函數(shù)將非線性相關(guān)轉(zhuǎn)為線性相關(guān),關(guān)于這點(diǎn)就不展開討論了。另外,PCA假設(shè)數(shù)據(jù)各主特征是分布在正交方向上,如果在非正交方向上存在幾個(gè)方差較大的方向,PCA的效果就大打折扣了。
最后需要說明的是,PCA是一種無參數(shù)技術(shù),也就是說面對(duì)同樣的數(shù)據(jù),如果不考慮清洗,誰來做結(jié)果都一樣,沒有主觀參數(shù)的介入,所以PCA便于通用實(shí)現(xiàn),但是本身無法個(gè)性化的優(yōu)化。
5.參考資料
1. https://en.wikipedia.org/wiki/Principal_component_analysis 2. https://en.wikipedia.org/wiki/Singular_value_decomposition 3.?https://liorpachter.wordpress.com/2014/05/26/what-is-principal-component-analysis/4.http://www.360doc.com/content/17/0304/23/40827612_634027546.shtml
總結(jié)
以上是生活随笔為你收集整理的主成分分析的数学原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt修炼手册7_图形:用户自定义QGra
- 下一篇: 线性判别分析LDA的数学原理(一)