PCA的數(shù)學(xué)原理

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的工作機(jī)制是什么斩个。當(dāng)然我并不打算把文章寫成純數(shù)學(xué)文章蹦疑,而是希望用直觀和易懂的方式敘述PCA的數(shù)學(xué)原理,所以整個文章不會引入嚴(yán)格的數(shù)學(xué)推導(dǎo)萨驶。希望讀者在看完這篇文章后能更好的明白PCA的工作原理。

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

一般情況下艇肴,在數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)中腔呜,數(shù)據(jù)被表示為向量。例如某個淘寶店2012年全年的流量及交易情況可以看成一組記錄的集合再悼,其中每一天的數(shù)據(jù)是一條記錄核畴,格式如下:
(日期, 瀏覽量, 訪客數(shù), 下單數(shù), 成交數(shù), 成交金額)
其中“日期”是一個記錄標(biāo)志而非度量值,而數(shù)據(jù)挖掘關(guān)心的大多是度量值冲九,因此如果我們忽略日期這個字段后谤草,我們得到一組記錄,每條記錄可以被表示為一個五維向量莺奸,其中一條看起來大約是這個樣子:
(500,240,25,13,2312.15)??
注意這里我用了轉(zhuǎn)置丑孩,因為習(xí)慣上使用列向量表示一條記錄(后面會看到原因),本文后面也會遵循這個準(zhǔn)則灭贷。不過為了方便有時我會省略轉(zhuǎn)置符號温学,但我們說到向量默認(rèn)都是指列向量。
我們當(dāng)然可以對這一組五維向量進(jìn)行分析和挖掘甚疟,不過我們知道仗岖,很多機(jī)器學(xué)習(xí)算法的復(fù)雜度和數(shù)據(jù)的維數(shù)有著密切關(guān)系逃延,甚至與維數(shù)呈指數(shù)級關(guān)聯(lián)。當(dāng)然轧拄,這里區(qū)區(qū)五維的數(shù)據(jù)揽祥,也許還無所謂,但是實際機(jī)器學(xué)習(xí)中處理成千上萬甚至幾十萬維的情況也并不罕見檩电,在這種情況下拄丰,機(jī)器學(xué)習(xí)的資源消耗是不可接受的,因此我們必須對數(shù)據(jù)進(jìn)行降維是嗜。
降維當(dāng)然意味著信息的丟失愈案,不過鑒于實際數(shù)據(jù)本身常常存在的相關(guān)性,我們可以想辦法在降維的同時將信息的損失盡量降低鹅搪。
舉個例子站绪,假如某學(xué)籍?dāng)?shù)據(jù)有兩列M和F,其中M列的取值是如何此學(xué)生為男性取值1丽柿,為女性取值0恢准;而F列是學(xué)生為女性取值1,男性取值0甫题。此時如果我們統(tǒng)計全部學(xué)籍?dāng)?shù)據(jù)馁筐,會發(fā)現(xiàn)對于任何一條記錄來說,當(dāng)M為1時F必定為0坠非,反之當(dāng)M為0時F必定為1敏沉。在這種情況下,我們將M或F去掉實際上沒有任何信息的損失炎码,因為只要保留一列就可以完全還原另一列盟迟。
當(dāng)然上面是一個極端的情況,在現(xiàn)實中也許不會出現(xiàn)潦闲,不過類似的情況還是很常見的攒菠。例如上面淘寶店鋪的數(shù)據(jù),從經(jīng)驗我們可以知道歉闰,“瀏覽量”和“訪客數(shù)”往往具有較強(qiáng)的相關(guān)關(guān)系辖众,而“下單數(shù)”和“成交數(shù)”也具有較強(qiáng)的相關(guān)關(guān)系。這里我們非正式的使用“相關(guān)關(guān)系”這個詞和敬,可以直觀理解為“當(dāng)某一天這個店鋪的瀏覽量較高(或較低)時凹炸,我們應(yīng)該很大程度上認(rèn)為這天的訪客數(shù)也較高(或較低)”。后面的章節(jié)中我們會給出相關(guān)性的嚴(yán)格數(shù)學(xué)定義昼弟。
這種情況表明还惠,如果我們刪除瀏覽量或訪客數(shù)其中一個指標(biāo),我們應(yīng)該期待并不會丟失太多信息。因此我們可以刪除一個蚕键,以降低機(jī)器學(xué)習(xí)算法的復(fù)雜度救欧。
上面給出的是降維的樸素思想描述,可以有助于直觀理解降維的動機(jī)和可行性锣光,但并不具有操作指導(dǎo)意義笆怠。例如,我們到底刪除哪一列損失的信息才最刑艿蹬刷?亦或根本不是單純刪除幾列,而是通過某些變換將原始數(shù)據(jù)變?yōu)楦俚牧械质沟脕G失的信息最衅登稹办成?到底如何度量丟失信息的多少?如何根據(jù)原始數(shù)據(jù)決定具體的降維操作步驟搂漠?
要回答上面的問題迂卢,就要對降維問題進(jìn)行數(shù)學(xué)化和形式化的討論。而PCA是一種具有嚴(yán)格數(shù)學(xué)基礎(chǔ)并且已被廣泛采用的降維方法桐汤。下面我不會直接描述PCA而克,而是通過逐步分析問題,讓我們一起重新“發(fā)明”一遍PCA怔毛。

向量的表示及基變換

既然我們面對的數(shù)據(jù)被抽象為一組向量员萍,那么下面有必要研究一些向量的數(shù)學(xué)性質(zhì)。而這些數(shù)學(xué)性質(zhì)將成為后續(xù)導(dǎo)出PCA的理論基礎(chǔ)拣度。
內(nèi)積與投影
下面先來看一個高中就學(xué)過的向量運(yùn)算:內(nèi)積碎绎。兩個維數(shù)相同的向量的內(nèi)積被定義為:
(a1,a2,?,an)???(b1,b2,?,bn)??=a1b1+a2b2+?+anbn
內(nèi)積運(yùn)算將兩個向量映射為一個實數(shù)。其計算方式非常容易理解抗果,但是其意義并不明顯混卵。下面我們分析內(nèi)積的幾何意義。假設(shè)A和B是兩個n維向量窖张,我們知道n維向量可以等價表示為n維空間中的一條從原點發(fā)射的有向線段,為了簡單起見我們假設(shè)A和B均為二維向量蚁滋,則A=(x1,y1)宿接,B=(x2,y2)。則在二維平面上A和B可以用兩條發(fā)自原點的有向線段表示辕录,見下圖:

好睦霎,現(xiàn)在我們從A點向B所在直線引一條垂線。我們知道垂線與B的交點叫做A在B上的投影走诞,再設(shè)A與B的夾角是a副女,則投影的矢量長度為|A|cos(a),其中|A|=√ x12+y12 ̄ ̄ ̄ ̄ ̄ ̄ ̄√是向量A的模蚣旱,也就是A線段的標(biāo)量長度碑幅。
注意這里我們專門區(qū)分了矢量長度和標(biāo)量長度戴陡,標(biāo)量長度總是大于等于0,值就是線段的長度沟涨;而矢量長度可能為負(fù)恤批,其絕對值是線段長度,而符號取決于其方向與標(biāo)準(zhǔn)方向相同或相反裹赴。
到這里還是看不出內(nèi)積和這東西有什么關(guān)系喜庞,不過如果我們將內(nèi)積表示為另一種我們熟悉的形式:
A?B=|A||B|cos(a)
現(xiàn)在事情似乎是有點眉目了:A與B的內(nèi)積等于A到B的投影長度乘以B的模。再進(jìn)一步棋返,如果我們假設(shè)B的模為1延都,即讓|B|=1,那么就變成了:
A?B=|A|cos(a)
也就是說睛竣,設(shè)向量B的模為1晰房,則A與B的內(nèi)積值等于A向B所在直線投影的矢量長度!這就是內(nèi)積的一種幾何解釋酵颁,也是我們得到的第一個重要結(jié)論嫉你。在后面的推導(dǎo)中,將反復(fù)使用這個結(jié)論躏惋。

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

在代數(shù)表示方面距误,我們經(jīng)常用線段終點的點坐標(biāo)表示向量,例如上面的向量可以表示為(3,2)扁位,這是我們再熟悉不過的向量表示准潭。
不過我們常常忽略,只有一個(3,2)本身是不能夠精確表示一個向量的域仇。我們仔細(xì)看一下刑然,這里的3實際表示的是向量在x軸上的投影值是3,在y軸上的投影值是2暇务。也就是說我們其實隱式引入了一個定義:以x軸和y軸上正方向長度為1的向量為標(biāo)準(zhǔn)泼掠。那么一個向量(3,2)實際是說在x軸投影為3而y軸的投影為2。注意投影是一個矢量垦细,所以可以為負(fù)择镇。
更正式的說,向量(x,y)實際上表示線性組合:
x(1,0)??+y(0,1)??
不難證明所有二維向量都可以表示為這樣的線性組合括改。此處(1,0)和(0,1)叫做二維空間中的一組基腻豌。

所以,要準(zhǔn)確描述向量,首先要確定一組基吝梅,然后給出在基所在的各個直線上的投影值虱疏,就可以了。只不過我們經(jīng)常省略第一步憔涉,而默認(rèn)以(1,0)和(0,1)為基订框。
我們之所以默認(rèn)選擇(1,0)和(0,1)為基,當(dāng)然是比較方便兜叨,因為它們分別是x和y軸正方向上的單位向量穿扳,因此就使得二維平面上點坐標(biāo)和向量一一對應(yīng),非常方便国旷。但實際上任何兩個線性無關(guān)的二維向量都可以成為一組基矛物,所謂線性無關(guān)在二維平面內(nèi)可以直觀認(rèn)為是兩個不在一條直線上的向量。
例如跪但,(1,1)和(-1,1)也可以成為一組基履羞。一般來說,我們希望基的模是1屡久,因為從內(nèi)積的意義可以看到忆首,如果基的模是1,那么就可以方便的用向量點乘基而直接獲得其在新基上的坐標(biāo)了被环!實際上糙及,對應(yīng)任何一個向量我們總可以找到其同方向上模為1的向量,只要讓兩個分量分別除以模就好了筛欢。例如浸锨,上面的基可以變?yōu)?12√,12√)和(?12√,12√)。
現(xiàn)在版姑,我們想獲得(3,2)在新基上的坐標(biāo)柱搜,即在兩個方向上的投影矢量值,那么根據(jù)內(nèi)積的幾何意義剥险,我們只要分別計算(3,2)和兩個基的內(nèi)積聪蘸,不難得到新的坐標(biāo)為(52√,?12√)。下圖給出了新的基以及(3,2)在新基上坐標(biāo)值的示意圖:

另外這里要注意的是表制,我們列舉的例子中基是正交的(即內(nèi)積為0健爬,或直觀說相互垂直),但可以成為一組基的唯一要求就是線性無關(guān)夫凸,非正交的基也是可以的。不過因為正交基有較好的性質(zhì)阱持,所以一般使用的基都是正交的夭拌。
基變換的矩陣表示
下面我們找一種簡便的方式來表示基變換。還是拿上面的例子,想一下鸽扁,將(3,2)變換為新基上的坐標(biāo)蒜绽,就是用(3,2)與第一個基做內(nèi)積運(yùn)算,作為第一個新的坐標(biāo)分量桶现,然后用(3,2)與第二個基做內(nèi)積運(yùn)算,作為第二個新坐標(biāo)的分量相赁。實際上慰于,我們可以用矩陣相乘的形式簡潔的表示這個變換:
(1/2 ̄√?1/2 ̄√1/2 ̄√1/2 ̄√)(32)=(5/2 ̄√?1/2 ̄√)
太漂亮了钮科!其中矩陣的兩行分別為兩個基,乘以原向量绵脯,其結(jié)果剛好為新基的坐標(biāo)休里∏欤可以稍微推廣一下,如果我們有m個二維向量妙黍,只要將二維向量按列排成一個兩行m列矩陣悴侵,然后用“基矩陣”乘以這個矩陣废境,就得到了所有這些向量在新基下的值噩凹。例如(1,1),(2,2)驮宴,(3,3),想變換到剛才那組基上修己,則可以這樣表示:
(1/2 ̄√?1/2 ̄√1/2 ̄√1/2 ̄√)(112233)=(2/2 ̄√04/2 ̄√06/2 ̄√0)
于是一組向量的基變換被干凈的表示為矩陣的相乘迎罗。
一般的,如果我們有M個N維向量尤辱,想將其變換為由R個N維向量表示的新空間中,那么首先將R個基按行組成矩陣A光督,然后將向量按列組成矩陣B结借,那么兩矩陣的乘積AB就是變換結(jié)果,其中AB的第m列為A中第m列變換后的結(jié)果咖熟。
數(shù)學(xué)表示為:
??????p1p2?pR??????(a1a2?aM)=??????p1a1p2a1?pRa1p1a2p2a2?pRa2????p1aMp2aM?pRaM??????
其中pi是一個行向量努隙,表示第i個基球恤,aj是一個列向量,表示第j個原始數(shù)據(jù)記錄荸镊。
特別要注意的是躬存,這里R可以小于N,而R決定了變換后數(shù)據(jù)的維數(shù)宛逗。也就是說盾剩,我們可以將一N維數(shù)據(jù)變換到更低維度的空間中去,變換后的維度取決于基的數(shù)量屎暇。因此這種矩陣相乘的表示也可以表示降維變換驻粟。
最后,上述分析同時給矩陣相乘找到了一種物理解釋:兩個矩陣相乘的意義是將右邊矩陣中的每一列列向量變換到左邊矩陣中每一行行向量為基所表示的空間中去挤巡。更抽象的說酷麦,一個矩陣可以表示一種線性變換沃饶。很多同學(xué)在學(xué)線性代數(shù)時對矩陣相乘的方法感到奇怪瀑晒,但是如果明白了矩陣相乘的物理意義徘意,其合理性就一目了然了轩褐。
協(xié)方差矩陣及優(yōu)化目標(biāo)
上面我們討論了選擇不同的基可以對同樣一組數(shù)據(jù)給出不同的表示把介,而且如果基的數(shù)量少于向量本身的維數(shù),則可以達(dá)到降維的效果脚牍。但是我們還沒有回答一個最最關(guān)鍵的問題:如何選擇基才是最優(yōu)的巢墅。或者說驯遇,如果我們有一組N維向量蓄髓,現(xiàn)在要將其降到K維(K小于N)会喝,那么我們應(yīng)該如何選擇K個基才能最大程度保留原有的信息?
要完全數(shù)學(xué)化這個問題非常繁雜枉阵,這里我們用一種非形式化的直觀方法來看這個問題蔚万。
為了避免過于抽象的討論,我們?nèi)砸砸粋€具體的例子展開昵慌。假設(shè)我們的數(shù)據(jù)由五條記錄組成淮蜈,將它們表示成矩陣形式:
(1113234424)
其中每一列為一條數(shù)據(jù)記錄梧田,而一行為一個字段侧蘸。為了后續(xù)處理方便鹉梨,我們首先將每個字段內(nèi)所有值都減去字段均值,其結(jié)果是將每個字段都變?yōu)榫禐?(這樣做的道理和好處后面會看到)晌坤。
我們看上面的數(shù)據(jù)骤菠,第一個字段均值為2疤孕,第二個字段均值為3,所以變換后:
(?1?2?10002101)
我們可以看下五條數(shù)據(jù)在平面直角坐標(biāo)系內(nèi)的樣子:

現(xiàn)在問題來了:如果我們必須使用一維來表示這些數(shù)據(jù)鹉戚,又希望盡量保留原始的信息专控,你要如何選擇踩官?
通過上一節(jié)對基變換的討論我們知道,這個問題實際上是要在二維平面中選擇一個方向颖系,將所有數(shù)據(jù)都投影到這個方向所在直線上辩越,用投影值表示原始記錄黔攒。這是一個實際的二維降到一維的問題。
那么如何選擇這個方向(或者說基)才能盡量保留最多的原始信息呢督惰?一種直觀的看法是:希望投影后的投影值盡可能分散赏胚。
以上圖為例,可以看出如果向x軸投影崖疤,那么最左邊的兩個點會重疊在一起,中間的兩個點也會重疊在一起叮趴,于是本身四個各不相同的二維點投影后只剩下兩個不同的值了权烧,這是一種嚴(yán)重的信息丟失豪嚎,同理谈火,如果向y軸投影最上面的兩個點和分布在x軸上的兩個點也會重疊。所以看來x和y軸都不是最好的投影選擇扔字。我們直觀目測温技,如果向通過第一象限和第三象限的斜線投影舵鳞,則五個點在投影后還是可以區(qū)分的。
下面抛虏,我們用數(shù)學(xué)方法表述這個問題套才。
方差
上文說到,我們希望投影后投影值盡可能分散沸毁,而這種分散程度傻寂,可以用數(shù)學(xué)上的方差來表述疾掰。此處,一個字段的方差可以看做是每個元素與字段均值的差的平方和的均值勒葱,即:
Var(a)=1m∑i=1m(ai?μ)2
由于上面我們已經(jīng)將每個字段的均值都化為0了,因此方差可以直接用每個元素的平方和除以元素個數(shù)表示:
Var(a)=1m∑i=1ma2i
于是上面的問題被形式化表述為:尋找一個一維基死遭,使得所有數(shù)據(jù)變換為這個基上的坐標(biāo)表示后凯旋,方差值最大。
協(xié)方差
對于上面二維降成一維的問題來說钠署,找到那個使得方差最大的方向就可以了谐鼎。不過對于更高維趣惠,還有一個問題需要解決〔莞辏考慮三維降到二維問題侍瑟。與之前相同涨颜,首先我們希望找到一個方向使得投影后方差最大,這樣就完成了第一個方向的選擇揽思,繼而我們選擇第二個投影方向见擦。
如果我們還是單純只選擇方差最大的方向鲤屡,很明顯,這個方向與第一個方向應(yīng)該是“幾乎重合在一起”卢未,顯然這樣的維度是沒有用的,因此伟墙,應(yīng)該有其他約束條件滴铅。從直觀上說汉匙,讓兩個字段盡可能表示更多的原始信息,我們是不希望它們之間存在(線性)相關(guān)性的戏自,因為相關(guān)性意味著兩個字段不是完全獨立伤锚,必然存在重復(fù)表示的信息。
數(shù)學(xué)上可以用兩個字段的協(xié)方差表示其相關(guān)性,由于已經(jīng)讓每個字段均值為0玄呛,則:
Cov(a,b)=1m∑i=1maibi
可以看到和二,在字段均值為0的情況下惯吕,兩個字段的協(xié)方差簡潔的表示為其內(nèi)積除以元素數(shù)m。
當(dāng)協(xié)方差為0時淹魄,表示兩個字段完全獨立堡距。為了讓協(xié)方差為0羽戒,我們選擇第二個基時只能在與第一個基正交的方向上選擇。因此最終選擇的兩個方向一定是正交的缸废。
至此,我們得到了降維問題的優(yōu)化目標(biāo):將一組N維向量降為K維(K大于0测萎,小于N)绳泉,其目標(biāo)是選擇K個單位(模為1)正交基姆泻,使得原始數(shù)據(jù)變換到這組基上后,各字段兩兩間協(xié)方差為0四苇,而字段的方差則盡可能大(在正交的約束下方咆,取最大的K個方差)瓣赂。
協(xié)方差矩陣
上面我們導(dǎo)出了優(yōu)化目標(biāo),但是這個目標(biāo)似乎不能直接作為操作指南(或者說算法)妓肢,因為它只說要什么碉钠,但根本沒有說怎么做卷拘。所以我們要繼續(xù)在數(shù)學(xué)上研究計算方案栗弟。
我們看到,最終要達(dá)到的目的與字段內(nèi)方差及字段間協(xié)方差有密切關(guān)系颓屑。因此我們希望能將兩者統(tǒng)一表示耿焊,仔細(xì)觀察發(fā)現(xiàn)罗侯,兩者均可以表示為內(nèi)積的形式,而內(nèi)積又與矩陣相乘密切相關(guān)纫塌。于是我們來了靈感:
假設(shè)我們只有a和b兩個字段,那么我們將它們按行組成矩陣X:
X=(a1b1a2b2??ambm)
然后我們用X乘以X的轉(zhuǎn)置依痊,并乘上系數(shù)1/m:
1mXX??=(1m∑mi=1a2i1m∑mi=1aibi1m∑mi=1aibi1m∑mi=1b2i)
奇跡出現(xiàn)了胸嘁!這個矩陣對角線上的兩個元素分別是兩個字段的方差凉逛,而其它元素是a和b的協(xié)方差状飞。兩者被統(tǒng)一到了一個矩陣的。
根據(jù)矩陣相乘的運(yùn)算法則酵使,這個結(jié)論很容易被推廣到一般情況:
設(shè)我們有m個n維數(shù)據(jù)記錄吭练,將其按列排成n乘m的矩陣X官辽,設(shè)C=1mXX??瞧哟,則C是一個對稱矩陣,其對角線分別個各個字段的方差咧党,而第i行j列和j行i列元素相同陨亡,表示i和j兩個字段的協(xié)方差负蠕。
協(xié)方差矩陣對角化
根據(jù)上述推導(dǎo),我們發(fā)現(xiàn)要達(dá)到優(yōu)化目前绣的,等價于將協(xié)方差矩陣對角化:即除對角線外的其它元素化為0,并且在對角線上將元素按大小從上到下排列芭概,這樣我們就達(dá)到了優(yōu)化目的罢洲。這樣說可能還不是很明晰文黎,我們進(jìn)一步看下原矩陣與基變換后矩陣協(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)系:
D=====1mYY??1m(PX)(PX)??1mPXX??P??P(1mXX??)P??PCP??
現(xiàn)在事情很明白了位他!我們要找的P不是別的,而是能讓原始協(xié)方差矩陣對角化的P舞竿。換句話說窿冯,優(yōu)化目標(biāo)變成了尋找一個矩陣P,滿足PCP??是一個對角矩陣醒串,并且對角元素按從大到小依次排列芜赌,那么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個特征向量為e1,e2,?,en,我們將其按列組成矩陣:
E=(e1e2?en)
則對協(xié)方差矩陣C有如下結(jié)論:
E??CE=Λ=??????λ1λ2?λn??????
其中Λ為對角矩陣动雹,其對角元素為各特征向量對應(yīng)的特征值(可能有重復(fù))跟压。
以上結(jié)論不再給出嚴(yán)格的數(shù)學(xué)證明震蒋,對證明感興趣的朋友可以參考線性代數(shù)書籍關(guān)于“實對稱矩陣對角化”的內(nèi)容。
到這里钾虐,我們發(fā)現(xiàn)我們已經(jīng)找到了需要的矩陣P:
P=E??
P是協(xié)方差矩陣的特征向量單位化后按行排列出的矩陣效扫,其中每一行都是C的一個特征向量直砂。如果設(shè)P按照Λ中特征值的從大到小哆键,將特征向量從上到下排列籍嘹,則用P的前K行組成的矩陣乘以原始數(shù)據(jù)矩陣X,就得到了我們需要的降維后的數(shù)據(jù)矩陣Y泪掀。
至此我們完成了整個PCA的數(shù)學(xué)原理討論颂碘。在下面的一節(jié)异赫,我們將給出PCA的一個實例。
算法及實例
為了鞏固上面的理論头岔,我們在這一節(jié)給出一個具體的PCA實例塔拳。
PCA算法
總結(jié)一下PCA的算法步驟:
設(shè)有m條n維數(shù)據(jù)。
1)將原始數(shù)據(jù)按列組成n行m列矩陣X
2)將X的每一行(代表一個屬性字段)進(jìn)行零均值化峡竣,即減去這一行的均值
3)求出協(xié)方差矩陣C=1mXX??
4)求出協(xié)方差矩陣的特征值及對應(yīng)的特征向量
5)將特征向量按對應(yīng)特征值大小從上到下按行排列成矩陣靠抑,取前k行組成矩陣P
6)Y=PX即為降維到k維后的數(shù)據(jù)
實例
這里以上文提到的
(?1?2?10002101)
為例,我們用PCA方法將這組二維數(shù)據(jù)其降到一維适掰。
因為這個矩陣的每行已經(jīng)是零均值荠列,這里我們直接求協(xié)方差矩陣:
C=15(?1?2?10002101)????????1?1020?20011???????=(65454565)
然后求其特征值和特征向量,具體求解方法不再詳述载城,可以參考相關(guān)資料肌似。求解后特征值為:
λ1=2,λ2=2/5
其對應(yīng)的特征向量分別是:
c1(11),c2(?11)
其中對應(yīng)的特征向量分別是一個通解,c1和c2可取任意實數(shù)诉瓦。那么標(biāo)準(zhǔn)化后的特征向量為:
(1/2 ̄√1/2 ̄√),(?1/2 ̄√1/2 ̄√)
因此我們的矩陣P是:
P=(1/2 ̄√?1/2 ̄√1/2 ̄√1/2 ̄√)
可以驗證協(xié)方差矩陣C的對角化:
PCP??=(1/2 ̄√?1/2 ̄√1/2 ̄√1/2 ̄√)(6/54/54/56/5)(1/2 ̄√1/2 ̄√?1/2 ̄√1/2 ̄√)=(2002/5)
最后我們用P的第一行乘以數(shù)據(jù)矩陣锈嫩,就得到了降維后的表示:
Y=(1/2 ̄√1/2 ̄√)(?1?2?10002101)=(?3/2 ̄√?1/2 ̄√03/2 ̄√?1/2 ̄√)
降維投影結(jié)果如下圖:

進(jìn)一步討論

根據(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的適用場景和限制热康,從而更好的使用這個算法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末百炬,一起剝皮案震驚了整個濱河市褐隆,隨后出現(xiàn)的幾起案子污它,更是在濱河造成了極大的恐慌剖踊,老刑警劉巖庶弃,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異德澈,居然都是意外死亡歇攻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門梆造,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缴守,“玉大人,你說我怎么就攤上這事镇辉÷潘耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵忽肛,是天一觀的道長村砂。 經(jīng)常有香客問我,道長屹逛,這世上最難降的妖魔是什么础废? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮罕模,結(jié)果婚禮上评腺,老公的妹妹穿的比我還像新娘。我一直安慰自己淑掌,他們只是感情好蒿讥,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抛腕,像睡著了一般诈悍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兽埃,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天侥钳,我揣著相機(jī)與錄音,去河邊找鬼柄错。 笑死舷夺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的售貌。 我是一名探鬼主播给猾,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颂跨!你這毒婦竟也來了敢伸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恒削,失蹤者是張志新(化名)和其女友劉穎池颈,沒想到半個月后尾序,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡躯砰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年每币,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琢歇。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡兰怠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出李茫,到底是詐尸還是另有隱情揭保,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布魄宏,位于F島的核電站掖举,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏娜庇。R本人自食惡果不足惜塔次,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望名秀。 院中可真熱鬧励负,春花似錦、人聲如沸匕得。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汁掠。三九已至略吨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間考阱,已是汗流浹背翠忠。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留乞榨,地道東北人秽之。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像吃既,于是被迫代替她去往敵國和親考榨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

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