轉(zhuǎn)載: PCA的數(shù)學(xué)原理
PCA(Principal Component Analysis)是一種常用的數(shù)據(jù)分析方法。PCA通過(guò)線性變換將原始數(shù)據(jù)變換為一組各維度線性無(wú)關(guān)的表示杰标,可用于提取數(shù)據(jù)的主要特征分量兵怯,常用于高維數(shù)據(jù)的降維。網(wǎng)上關(guān)于PCA的文章有很多腔剂,但是大多數(shù)只描述了PCA的分析過(guò)程媒区,而沒(méi)有講述其中的原理。這篇文章的目的是介紹PCA的基本數(shù)學(xué)原理掸犬,幫助讀者了解PCA的工作機(jī)制是什么袜漩。
當(dāng)然我并不打算把文章寫(xiě)成純數(shù)學(xué)文章,而是希望用直觀和易懂的方式敘述PCA的數(shù)學(xué)原理湾碎,所以整個(gè)文章不會(huì)引入嚴(yán)格的數(shù)學(xué)推導(dǎo)宙攻。希望讀者在看完這篇文章后能更好的明白PCA的工作原理。
數(shù)據(jù)的向量表示及降維問(wèn)題
一般情況下介褥,在數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)中座掘,數(shù)據(jù)被表示為向量。例如某個(gè)淘寶店2012年全年的流量及交易情況可以看成一組記錄的集合呻顽,其中每一天的數(shù)據(jù)是一條記錄雹顺,格式如下:
其中“日期”是一個(gè)記錄標(biāo)志而非度量值,而數(shù)據(jù)挖掘關(guān)心的大多是度量值廊遍,因此如果我們忽略日期這個(gè)字段后嬉愧,我們得到一組記錄,每條記錄可以被表示為一個(gè)五維向量喉前,其中一條看起來(lái)大約是這個(gè)樣子:
注意這里我用了轉(zhuǎn)置没酣,因?yàn)榱?xí)慣上使用列向量表示一條記錄(后面會(huì)看到原因)王财,本文后面也會(huì)遵循這個(gè)準(zhǔn)則。不過(guò)為了方便有時(shí)我會(huì)省略轉(zhuǎn)置符號(hào)裕便,但我們說(shuō)到向量默認(rèn)都是指列向量绒净。
我們當(dāng)然可以對(duì)這一組五維向量進(jìn)行分析和挖掘,不過(guò)我們知道偿衰,很多機(jī)器學(xué)習(xí)算法的復(fù)雜度和數(shù)據(jù)的維數(shù)有著密切關(guān)系挂疆,甚至與維數(shù)呈指數(shù)級(jí)關(guān)聯(lián)。當(dāng)然下翎,這里區(qū)區(qū)五維的數(shù)據(jù)缤言,也許還無(wú)所謂,但是實(shí)際機(jī)器學(xué)習(xí)中處理成千上萬(wàn)甚至幾十萬(wàn)維的情況也并不罕見(jiàn)视事,在這種情況下胆萧,機(jī)器學(xué)習(xí)的資源消耗是不可接受的,因此我們必須對(duì)數(shù)據(jù)進(jìn)行降維俐东。
降維當(dāng)然意味著信息的丟失跌穗,不過(guò)鑒于實(shí)際數(shù)據(jù)本身常常存在的相關(guān)性,我們可以想辦法在降維的同時(shí)將信息的損失盡量降低虏辫。
舉個(gè)例子蚌吸,假如某學(xué)籍?dāng)?shù)據(jù)有兩列M和F,其中M列的取值是如何此學(xué)生為男性取值1砌庄,為女性取值0套利;而F列是學(xué)生為女性取值1,男性取值0鹤耍。此時(shí)如果我們統(tǒng)計(jì)全部學(xué)籍?dāng)?shù)據(jù)肉迫,會(huì)發(fā)現(xiàn)對(duì)于任何一條記錄來(lái)說(shuō),當(dāng)M為1時(shí)F必定為0稿黄,反之當(dāng)M為0時(shí)F必定為1喊衫。在這種情況下,我們將M或F去掉實(shí)際上沒(méi)有任何信息的損失杆怕,因?yàn)橹灰A粢涣芯涂梢酝耆€原另一列族购。
當(dāng)然上面是一個(gè)極端的情況,在現(xiàn)實(shí)中也許不會(huì)出現(xiàn)陵珍,不過(guò)類似的情況還是很常見(jiàn)的寝杖。例如上面淘寶店鋪的數(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)意義街氢。例如,我們到底刪除哪一列損失的信息才最心佬洹?亦或根本不是單純刪除幾列荣刑,而是通過(guò)某些變換將原始數(shù)據(jù)變?yōu)楦俚牧械质沟脕G失的信息最邢隗稀?到底如何度量丟失信息的多少厉亏?如何根據(jù)原始數(shù)據(jù)決定具體的降維操作步驟董习?
要回答上面的問(wèn)題,就要對(duì)降維問(wèn)題進(jìn)行數(shù)學(xué)化和形式化的討論爱只。而PCA是一種具有嚴(yán)格數(shù)學(xué)基礎(chǔ)并且已被廣泛采用的降維方法皿淋。下面我不會(huì)直接描述PCA,而是通過(guò)逐步分析問(wèn)題恬试,讓我們一起重新“發(fā)明”一遍PCA窝趣。
向量的表示及基變換
既然我們面對(duì)的數(shù)據(jù)被抽象為一組向量,那么下面有必要研究一些向量的數(shù)學(xué)性質(zhì)训柴。而這些數(shù)學(xué)性質(zhì)將成為后續(xù)導(dǎo)出PCA的理論基礎(chǔ)哑舒。
內(nèi)積與投影
下面先來(lái)看一個(gè)高中就學(xué)過(guò)的向量運(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)單起見(jiàn)我們假設(shè)A和B均為二維向量稀拐,則火邓,
。則在二維平面上A和B可以用兩條發(fā)自原點(diǎn)的有向線段表示,見(jiàn)下圖:
好贡翘,現(xiàn)在我們從A點(diǎn)向B所在直線引一條垂線蹈矮。我們知道垂線與B的交點(diǎn)叫做A在B上的投影,再設(shè)A與B的夾角是a鸣驱,則投影的矢量長(zhǎng)度為泛鸟,其中
是向量A的模,也就是A線段的標(biāo)量長(zhǎng)度踊东。
注意這里我們專門(mén)區(qū)分了矢量長(zhǎng)度和標(biāo)量長(zhǎng)度北滥,標(biāo)量長(zhǎng)度總是大于等于0,值就是線段的長(zhǎng)度闸翅;而矢量長(zhǎng)度可能為負(fù)再芋,其絕對(duì)值是線段長(zhǎng)度坚冀,而符號(hào)取決于其方向與標(biāo)準(zhǔn)方向相同或相反。
到這里還是看不出內(nèi)積和這東西有什么關(guān)系司训,不過(guò)如果我們將內(nèi)積表示為另一種我們熟悉的形式:
現(xiàn)在事情似乎是有點(diǎn)眉目了:A與B的內(nèi)積等于A到B的投影長(zhǎng)度乘以B的模液南。再進(jìn)一步,如果我們假設(shè)B的模為1统扳,即讓畅姊,那么就變成了:
也就是說(shuō),設(shè)向量B的模為1盯腌,則A與B的內(nèi)積值等于A向B所在直線投影的矢量長(zhǎng)度陨瘩!這就是內(nèi)積的一種幾何解釋,也是我們得到的第一個(gè)重要結(jié)論帚湘。在后面的推導(dǎo)中甚淡,將反復(fù)使用這個(gè)結(jié)論。
基
下面我們繼續(xù)在二維空間內(nèi)討論向量。上文說(shuō)過(guò)焙贷,一個(gè)二維向量可以對(duì)應(yīng)二維笛卡爾直角坐標(biāo)系中從原點(diǎn)出發(fā)的一個(gè)有向線段贿堰。例如下面這個(gè)向量:
在代數(shù)表示方面,我們經(jīng)常用線段終點(diǎn)的點(diǎn)坐標(biāo)表示向量故硅,例如上面的向量可以表示為(3,2)纵搁,這是我們?cè)偈煜げ贿^(guò)的向量表示。
不過(guò)我們常常忽略徘层,只有一個(gè)(3,2)本身是不能夠精確表示一個(gè)向量的利职。我們仔細(xì)看一下,這里的3實(shí)際表示的是向量在x軸上的投影值是3眼耀,在y軸上的投影值是2哮伟。也就是說(shuō)我們其實(shí)隱式引入了一個(gè)定義:以x軸和y軸上正方向長(zhǎng)度為1的向量為標(biāo)準(zhǔn)妄帘。那么一個(gè)向量(3,2)實(shí)際是說(shuō)在x軸投影為3而y軸的投影為2。注意投影是一個(gè)矢量抡驼,所以可以為負(fù)致盟。
更正式的說(shuō),向量(x,y)實(shí)際上表示線性組合:
不難證明所有二維向量都可以表示為這樣的線性組合馏锡。此處(1,0)和(0,1)叫做二維空間中的一組基杯道。
所以,要準(zhǔn)確描述向量,首先要確定一組基霜医,然后給出在基所在的各個(gè)直線上的投影值驳规,就可以了。只不過(guò)我們經(jīng)常省略第一步值朋,而默認(rèn)以(1,0)和(0,1)為基巩搏。
我們之所以默認(rèn)選擇(1,0)和(0,1)為基,當(dāng)然是比較方便丰辣,因?yàn)樗鼈兎謩e是x和y軸正方向上的單位向量禽捆,因此就使得二維平面上點(diǎn)坐標(biāo)和向量一一對(duì)應(yīng),非常方便琐凭。但實(shí)際上任何兩個(gè)線性無(wú)關(guān)的二維向量都可以成為一組基浊服,所謂線性無(wú)關(guān)在二維平面內(nèi)可以直觀認(rèn)為是兩個(gè)不在一條直線上的向量。
例如愁憔,(1,1)和(-1,1)也可以成為一組基孽拷。一般來(lái)說(shuō),我們希望基的模是1膜宋,因?yàn)閺膬?nèi)積的意義可以看到炼幔,如果基的模是1,那么就可以方便的用向量點(diǎn)乘基而直接獲得其在新基上的坐標(biāo)了学辱!實(shí)際上,對(duì)應(yīng)任何一個(gè)向量我們總可以找到其同方向上模為1的向量衙傀,只要讓兩個(gè)分量分別除以模就好了萨咕。例如,上面的基可以變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=(%5Cfrac%7B1%7D%7B%5Csqrt%7B2%7D%7D%2C%5Cfrac%7B1%7D%7B%5Csqrt%7B2%7D%7D)" alt="(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})" mathimg="1">和聪建。
現(xiàn)在茫陆,我們想獲得(3,2)在新基上的坐標(biāo)堰乔,即在兩個(gè)方向上的投影矢量值艺配,那么根據(jù)內(nèi)積的幾何意義袜硫,我們只要分別計(jì)算(3,2)和兩個(gè)基的內(nèi)積府树,不難得到新的坐標(biāo)為。下圖給出了新的基以及(3,2)在新基上坐標(biāo)值的示意圖:
另外這里要注意的是迷雪,我們列舉的例子中基是正交的(即內(nèi)積為0遂鹊,或直觀說(shuō)相互垂直)蔗包,但可以成為一組基的唯一要求就是線性無(wú)關(guān)调限,非正交的基也是可以的。不過(guò)因?yàn)檎换休^好的性質(zhì)耻矮,所以一般使用的基都是正交的裆装。
基變換的矩陣表示
下面我們找一種簡(jiǎn)便的方式來(lái)表示基變換倡缠。還是拿上面的例子昙沦,想一下载荔,將(3,2)變換為新基上的坐標(biāo),就是用(3,2)與第一個(gè)基做內(nèi)積運(yùn)算丘损,作為第一個(gè)新的坐標(biāo)分量徘钥,然后用(3,2)與第二個(gè)基做內(nèi)積運(yùn)算定庵,作為第二個(gè)新坐標(biāo)的分量蔬浙。實(shí)際上,我們可以用矩陣相乘的形式簡(jiǎn)潔的表示這個(gè)變換:
太漂亮了笨忌!其中矩陣的兩行分別為兩個(gè)基,乘以原向量官疲,其結(jié)果剛好為新基的坐標(biāo)亮隙∫缥牵可以稍微推廣一下,如果我們有m個(gè)二維向量犀盟,只要將二維向量按列排成一個(gè)兩行m列矩陣蝇狼,然后用“基矩陣”乘以這個(gè)矩陣迅耘,就得到了所有這些向量在新基下的值监署。例如(1,1)焦匈,(2,2)昵仅,(3,3)摔笤,想變換到剛才那組基上,則可以這樣表示:
于是一組向量的基變換被干凈的表示為矩陣的相乘彰触。
一般的命辖,如果我們有M個(gè)N維向量,想將其變換為由R個(gè)N維向量表示的新空間中尔艇,那么首先將R個(gè)基按行組成矩陣A,然后將向量按列組成矩陣B终娃,那么兩矩陣的乘積AB就是變換結(jié)果棠耕,其中AB的第m列為A中第m列變換后的結(jié)果窍荧。
數(shù)學(xué)表示為:
其中是一個(gè)行向量蕊退,表示第i個(gè)基咕痛,
是一個(gè)列向量喇嘱,表示第j個(gè)原始數(shù)據(jù)記錄者铜。
特別要注意的是,這里R可以小于N砾医,而R決定了變換后數(shù)據(jù)的維數(shù)衣厘。也就是說(shuō),我們可以將一N維數(shù)據(jù)變換到更低維度的空間中去错邦,變換后的維度取決于基的數(shù)量撬呢。因此這種矩陣相乘的表示也可以表示降維變換魂拦。
最后芯勘,上述分析同時(shí)給矩陣相乘找到了一種物理解釋:兩個(gè)矩陣相乘的意義是將右邊矩陣中的每一列列向量變換到左邊矩陣中每一行行向量為基所表示的空間中去借尿。更抽象的說(shuō)路翻,一個(gè)矩陣可以表示一種線性變換茂契。很多同學(xué)在學(xué)線性代數(shù)時(shí)對(duì)矩陣相乘的方法感到奇怪掉冶,但是如果明白了矩陣相乘的物理意義厌小,其合理性就一目了然了璧亚。
協(xié)方差矩陣及優(yōu)化目標(biāo)
上面我們討論了選擇不同的基可以對(duì)同樣一組數(shù)據(jù)給出不同的表示癣蟋,而且如果基的數(shù)量少于向量本身的維數(shù),則可以達(dá)到降維的效果濒生。但是我們還沒(méi)有回答一個(gè)最最關(guān)鍵的問(wèn)題:如何選擇基才是最優(yōu)的幔欧〗刚幔或者說(shuō)瘦麸,如果我們有一組N維向量滋饲,現(xiàn)在要將其降到K維(K小于N)屠缭,那么我們應(yīng)該如何選擇K個(gè)基才能最大程度保留原有的信息呵曹?
要完全數(shù)學(xué)化這個(gè)問(wèn)題非常繁雜奄喂,這里我們用一種非形式化的直觀方法來(lái)看這個(gè)問(wèn)題跨新。
為了避免過(guò)于抽象的討論赘被,我們?nèi)砸砸粋€(gè)具體的例子展開(kāi)。假設(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)在問(wèn)題來(lái)了:如果我們必須使用一維來(lái)表示這些數(shù)據(jù),又希望盡量保留原始的信息呼胚,你要如何選擇?
通過(guò)上一節(jié)對(duì)基變換的討論我們知道呼盆,這個(gè)問(wèn)題實(shí)際上是要在二維平面中選擇一個(gè)方向厨幻,將所有數(shù)據(jù)都投影到這個(gè)方向所在直線上况脆,用投影值表示原始記錄看铆。這是一個(gè)實(shí)際的二維降到一維的問(wèn)題弹惦。
那么如何選擇這個(gè)方向(或者說(shuō)基)才能盡量保留最多的原始信息呢?一種直觀的看法是:希望投影后的投影值盡可能分散助泽。
以上圖為例,可以看出如果向x軸投影暑刃,那么最左邊的兩個(gè)點(diǎn)會(huì)重疊在一起岩臣,中間的兩個(gè)點(diǎn)也會(huì)重疊在一起,于是本身四個(gè)各不相同的二維點(diǎn)投影后只剩下兩個(gè)不同的值了谷扣,這是一種嚴(yán)重的信息丟失,同理末秃,如果向y軸投影最上面的兩個(gè)點(diǎn)和分布在x軸上的兩個(gè)點(diǎn)也會(huì)重疊惰匙。所以看來(lái)x和y軸都不是最好的投影選擇项鬼。我們直觀目測(cè),如果向通過(guò)第一象限和第三象限的斜線投影弧哎,則五個(gè)點(diǎn)在投影后還是可以區(qū)分的撤嫩。
下面茴她,我們用數(shù)學(xué)方法表述這個(gè)問(wèn)題。
方差
上文說(shuō)到己沛,我們希望投影后投影值盡可能分散,而這種分散程度,可以用數(shù)學(xué)上的方差來(lái)表述霹粥。此處,一個(gè)字段的方差可以看做是每個(gè)元素與字段均值的差的平方和的均值矾利,即:
由于上面我們已經(jīng)將每個(gè)字段的均值都化為0了,因此方差可以直接用每個(gè)元素的平方和除以元素個(gè)數(shù)表示:
于是上面的問(wèn)題被形式化表述為:尋找一個(gè)一維基察皇,使得所有數(shù)據(jù)變換為這個(gè)基上的坐標(biāo)表示后怀酷,方差值最大桅锄。
協(xié)方差
對(duì)于上面二維降成一維的問(wèn)題來(lái)說(shuō),找到那個(gè)使得方差最大的方向就可以了。不過(guò)對(duì)于更高維盟戏,還有一個(gè)問(wèn)題需要解決格嘁√饺耄考慮三維降到二維問(wèn)題蜂嗽。與之前相同,首先我們希望找到一個(gè)方向使得投影后方差最大,這樣就完成了第一個(gè)方向的選擇完沪,繼而我們選擇第二個(gè)投影方向域庇。
如果我們還是單純只選擇方差最大的方向,很明顯覆积,這個(gè)方向與第一個(gè)方向應(yīng)該是“幾乎重合在一起”听皿,顯然這樣的維度是沒(méi)有用的,因此宽档,應(yīng)該有其他約束條件尉姨。從直觀上說(shuō),讓兩個(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è)方向一定是正交的。
至此鉴扫,我們得到了降維問(wèn)題的優(yōu)化目標(biāo):將一組N維向量降為K維(K大于0赞枕,小于N),其目標(biāo)是選擇K個(gè)單位(模為1)正交基坪创,使得原始數(shù)據(jù)變換到這組基上后炕婶,各字段兩兩間協(xié)方差為0,而字段的方差則盡可能大(在正交的約束下莱预,取最大的K個(gè)方差)柠掂。
協(xié)方差矩陣
上面我們導(dǎo)出了優(yōu)化目標(biāo),但是這個(gè)目標(biāo)似乎不能直接作為操作指南(或者說(shuō)算法)依沮,因?yàn)樗徽f(shuō)要什么涯贞,但根本沒(méi)有說(shuō)怎么做枪狂。所以我們要繼續(xù)在數(shù)學(xué)上研究計(jì)算方案。
我們看到宋渔,最終要達(dá)到的目的與字段內(nèi)方差及字段間協(xié)方差有密切關(guān)系摘完。因此我們希望能將兩者統(tǒng)一表示,仔細(xì)觀察發(fā)現(xiàn)傻谁,兩者均可以表示為內(nèi)積的形式孝治,而內(nèi)積又與矩陣相乘密切相關(guān)。于是我們來(lái)了靈感:
假設(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é)方差崩哩。
協(xié)方差矩陣對(duì)角化
根據(jù)上述推導(dǎo),我們發(fā)現(xiàn)要達(dá)到優(yōu)化目前言沐,等價(jià)于將協(xié)方差矩陣對(duì)角化:即除對(duì)角線外的其它元素化為0邓嘹,并且在對(duì)角線上將元素按大小從上到下排列,這樣我們就達(dá)到了優(yōu)化目的险胰。這樣說(shuō)可能還不是很明晰汹押,我們進(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奖年。換句話說(shuō)细诸,優(yōu)化目標(biāo)變成了尋找一個(gè)矩陣P,滿足是一個(gè)對(duì)角矩陣陋守,并且對(duì)角元素按從大到小依次排列震贵,那么P的前K行就是要尋找的基利赋,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維并滿足上述優(yōu)化條件。
至此猩系,我們離“發(fā)明”P(pán)CA還有僅一步之遙媚送!
現(xiàn)在所有焦點(diǎn)都聚焦在了協(xié)方差矩陣對(duì)角化問(wèn)題上,有時(shí)寇甸,我們真應(yīng)該感謝數(shù)學(xué)家的先行塘偎,因?yàn)榫仃噷?duì)角化在線性代數(shù)領(lǐng)域已經(jīng)屬于被玩爛了的東西,所以這在數(shù)學(xué)上根本不是問(wèn)題拿霉。
由上文知道吟秩,協(xié)方差矩陣C是一個(gè)是對(duì)稱矩陣,在線性代數(shù)上绽淘,實(shí)對(duì)稱矩陣有一系列非常好的性質(zhì):
1)實(shí)對(duì)稱矩陣不同特征值對(duì)應(yīng)的特征向量必然正交涵防。
2)設(shè)特征向量重?cái)?shù)為r,則必然存在r個(gè)線性無(wú)關(guān)的特征向量對(duì)應(yīng)于
沪铭,因此可以將這r個(gè)特征向量單位正交化壮池。
由上面兩條可知,一個(gè)n行n列的實(shí)對(duì)稱矩陣一定可以找到n個(gè)單位正交特征向量杀怠,設(shè)這n個(gè)特征向量為椰憋,我們將其按列組成矩陣:
則對(duì)協(xié)方差矩陣C有如下結(jié)論:
其中為對(duì)角矩陣,其對(duì)角元素為各特征向量對(duì)應(yīng)的特征值(可能有重復(fù))驮肉。
以上結(jié)論不再給出嚴(yán)格的數(shù)學(xué)證明熏矿,對(duì)證明感興趣的朋友可以參考線性代數(shù)書(shū)籍關(guān)于“實(shí)對(duì)稱矩陣對(duì)角化”的內(nèi)容已骇。
到這里离钝,我們發(fā)現(xiàn)我們已經(jīng)找到了需要的矩陣P:
P是協(xié)方差矩陣的特征向量單位化后按行排列出的矩陣,其中每一行都是C的一個(gè)特征向量褪储。如果設(shè)P按照中特征值的從大到小卵渴,將特征向量從上到下排列,則用P的前K行組成的矩陣乘以原始數(shù)據(jù)矩陣X鲤竹,就得到了我們需要的降維后的數(shù)據(jù)矩陣Y浪读。
至此我們完成了整個(gè)PCA的數(shù)學(xué)原理討論。在下面的一節(jié)辛藻,我們將給出PCA的一個(gè)實(shí)例碘橘。
算法及實(shí)例
為了鞏固上面的理論,我們?cè)谶@一節(jié)給出一個(gè)具體的PCA實(shí)例吱肌。
PCA算法
總結(jié)一下PCA的算法步驟:
設(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ù)
實(shí)例
這里以上文提到的
為例纺蛆,我們用PCA方法將這組二維數(shù)據(jù)其降到一維吐葵。
因?yàn)檫@個(gè)矩陣的每行已經(jīng)是零均值,這里我們直接求協(xié)方差矩陣:
然后求其特征值和特征向量桥氏,具體求解方法不再詳述温峭,可以參考相關(guān)資料。求解后特征值為:
其對(duì)應(yīng)的特征向量分別是:
其中對(duì)應(yīng)的特征向量分別是一個(gè)通解字支,c_1和c_2可取任意實(shí)數(shù)凤藏。那么標(biāo)準(zhǔn)化后的特征向量為:
因此我們的矩陣P是:
可以驗(yàn)證協(xié)方差矩陣C的對(duì)角化:
最后我們用P的第一行乘以數(shù)據(jù)矩陣,就得到了降維后的表示:
降維投影結(jié)果如下圖:
進(jìn)一步討論
根據(jù)上面對(duì)PCA的數(shù)學(xué)原理的解釋堕伪,我們可以了解到一些PCA的能力和限制清笨。PCA本質(zhì)上是將方差最大的方向作為主要特征,并且在各個(gè)正交方向上將數(shù)據(jù)“離相關(guān)”刃跛,也就是讓它們?cè)诓煌环较蛏蠜](méi)有相關(guān)性抠艾。
因此,PCA也存在一些限制桨昙,例如它可以很好的解除線性相關(guān)检号,但是對(duì)于高階相關(guān)性就沒(méi)有辦法了,對(duì)于存在高階相關(guān)性的數(shù)據(jù)蛙酪,可以考慮Kernel PCA齐苛,通過(guò)Kernel函數(shù)將非線性相關(guān)轉(zhuǎn)為線性相關(guān),關(guān)于這點(diǎn)就不展開(kāi)討論了桂塞。另外凹蜂,PCA假設(shè)數(shù)據(jù)各主特征是分布在正交方向上,如果在非正交方向上存在幾個(gè)方差較大的方向阁危,PCA的效果就大打折扣了玛痊。
最后需要說(shuō)明的是,PCA是一種無(wú)參數(shù)技術(shù)狂打,也就是說(shuō)面對(duì)同樣的數(shù)據(jù)擂煞,如果不考慮清洗,誰(shuí)來(lái)做結(jié)果都一樣趴乡,沒(méi)有主觀參數(shù)的介入对省,所以PCA便于通用實(shí)現(xiàn),但是本身無(wú)法個(gè)性化的優(yōu)化晾捏。
希望這篇文章能幫助朋友們了解PCA的數(shù)學(xué)理論基礎(chǔ)和實(shí)現(xiàn)原理蒿涎,借此了解PCA的適用場(chǎng)景和限制,從而更好的使用這個(gè)算法惦辛。