CS229 6.6 Neurons Networks PCA主成分分析
主成分分析(PCA)是一種經(jīng)典的降維算法,基于基變換,數(shù)據(jù)原來位于標準坐標基下,將其投影到前k個最大特征值對應(yīng)的特征向量所組成的基上,使得數(shù)據(jù)在新基各個維度有最大的方差,且在新基的各個維度上數(shù)據(jù)是不相關(guān)的,PCA有幾個關(guān)鍵的點:
1)歸一化均值與方差,均值歸一化后便于計算,方差歸一化后便于對各個維度進行比較
2)新基為正交基,即各個坐標軸是相互獨立的(可理解為垂直),只需要取新基上取方差最大的前幾個維度即可
3)PCA的前提是只對服從高斯分布的數(shù)據(jù)特征提取效果較好,這就大大限制了它的應(yīng)用范圍。如果數(shù)據(jù)呈任意分布,那么不論在原始空間中如何做正交變換,都不可能找到一組最優(yōu)的特征方向,找到所謂的“主分量”也就不能表達數(shù)據(jù)的特征結(jié)構(gòu)了(比如說數(shù)據(jù)呈現(xiàn)正方形)。
引入
假設(shè)有一條淘寶物品記錄,格式如下:
( 瀏覽量, 訪客數(shù), 下單數(shù), 成交數(shù), 成交金額)
這五個屬性可以代表五個維度,分別對應(yīng)坐標系中的五個坐標軸(基),給定在這組基上的一組樣本點:
(500,240,25,13,2312.15)T
可以看到這就是一條物品的記錄,五個維度的計算并不復(fù)雜,但當(dāng)處理的數(shù)據(jù)的維度上萬,甚至十萬、百萬時,(比如1000*1000的圖片)這種情況下會帶來非常大的計算量,所以有必要對數(shù)據(jù)進行降維。降維意味著信息的丟失,比如對于以上數(shù)據(jù),去掉下成交金額這一個維度,將丟失很多關(guān)于物品的信息,所以PCA只能盡量避免信息的丟失。
相關(guān)性:維度教高的數(shù)據(jù)在某幾個維度間兩輛一般會存在一些相關(guān)性,比如如上的瀏覽量與訪客數(shù)往往成正比關(guān)系,這種情況下去掉其中一個維度,往往不會丟失太多信息。以上給出的只是直觀的描述,我們到底刪除哪一列損失的信息才最小?亦或根本不是單純刪除幾列,而是通過某些變換將原始數(shù)據(jù)變?yōu)楦俚牧械质沟脕G失的信息最小?到底如何度量丟失信息的多少?如何根據(jù)原始數(shù)據(jù)決定具體的降維操作步驟?
線性代數(shù)基礎(chǔ)
下面先來看一個高中就學(xué)過的向量運算:內(nèi)積。兩個維數(shù)相同的向量的內(nèi)積被定義為:
內(nèi)積運算會將向量映射為實數(shù),下面看內(nèi)積的幾何意義,二維向量A,B,其中A=(x1,y1),B=(x2,y2),
?
現(xiàn)在從A點向B所在直線引一條垂線。這條垂線與B的交點叫做A在B上的投影,再設(shè)A與B的夾角是a,則投影的矢量長度為,其中,是線段A的長度
把內(nèi)積表示為一種熟悉的形式有:
A與B的內(nèi)積等于A到B的投影長度乘以B的模。再進一步,如果我們假設(shè)B的模為1,即讓|B|=1,那么就變成了:
?
也就是說,設(shè)向量B的模為1,則A與B的內(nèi)積值等于A向B所在直線投影的矢量長度!
再來看基的概念,我們對二維平面上的向量(x,y)非常熟悉,如以上的A、B就是兩個向量,仔細看就知道(x,y)分別表示在x軸上的投影為x,在y周上的投影為y。也就是說這里有一個隱含定義,現(xiàn)在分別取x軸正向、y軸正向一個模為1的向量,向量(x,y)分別在x軸投影為x,在y軸投影為y,注意投影也為矢量。準確的表示為向量x,y的線性組合:
此時(1,0)T與(0,1)T可以稱作向量的一組基。
所以要準確描述向量,首先要給定一組基,然后給向量在基的各個直線上的投影即可。標準坐標系下經(jīng)常忽略第一步以(1,0)和(0,1)為基。
例如,(1,1)和(-1,1)也可以成為一組基。一般來說,我們希望基的模是1,因為從內(nèi)積的意義可以看到,如果基的模是1,那么就可以方便的用向量點乘基而直接獲得其在新基上的坐標了!實際上,對應(yīng)任何一個向量我們總可以找到其同方向上模為1的向量,只要讓兩個分量分別除以模就好了。上面的基就可以變?yōu)?/p>
現(xiàn)在,我們想獲得(3,2)在新基上的坐標,即在兩個方向上的投影矢量值,那么根據(jù)內(nèi)積的幾何意義,我們只要分別計算(3,2)和兩個基的內(nèi)積,可以得到新基的坐標為:,下圖給出點(3,2)在新基的圖:
另外這里要注意的是,例子中的基都是正交的(即內(nèi)積為0,或直觀說相互垂直),但可以成為一組基的唯一要求就是線性無關(guān),非正交的基也是可以的。不過因為正交基有較好的性質(zhì),所以一般使用的基都是正交的。
下面我們找一種簡便的方式來表示基變換。還是拿上面的例子,想一下,將(3,2)變換為新基上的坐標,就是用(3,2)與第一個基做內(nèi)積運算,作為第一個新的坐標分量,然后用(3,2)與第二個基做內(nèi)積運算,作為第二個新坐標的分量。實際上,我們可以用矩陣相乘的形式簡潔的表示這個變換:
于是一組向量的基變換被干凈的表示為矩陣的相乘。
一般的,如果我們有M個N維向量,想將其變換為由R個N維向量表示的新空間中,那么首先將R個基按行組成矩陣A,然后將向量按列組成矩陣B,那么兩矩陣的乘積AB就是變換結(jié)果,其中AB的第m列為A中第m列變換后的結(jié)果。
特別要注意的是,這里R可以小于N,而R決定了變換后數(shù)據(jù)的維數(shù)。也就是說,我們可以將一N維數(shù)據(jù)變換到更低維度的空間中去,變換后的維度取決于基的數(shù)量。因此這種矩陣相乘的表示也可以表示降維變換。
最后,上述分析同時給矩陣相乘找到了一種物理解釋:兩個矩陣相乘的意義是將右邊矩陣中的每一列列向量變換到左邊矩陣中每一行行向量為基所表示的空間中去。更抽象的說,一個矩陣可以表示一種線性變換。很多同學(xué)在學(xué)線性代數(shù)時對矩陣相乘的方法感到奇怪,但是如果明白了矩陣相乘的物理意義,其合理性就一目了然了。
根據(jù)以上的基變換可以看出,如果給定一組新基,其維度小于向量本身的維度,則變換后的數(shù)據(jù)就是原始數(shù)據(jù)再新基中的地維表示,降維的目的就達到了,但對于PCA還有一個問題:即如何選取一組合理的基以最大化的保留原始信息?
先看一個例子,對于五條二維數(shù)據(jù):
(1 ,1) (1 ,3) (2, 3) (4 ,4) (2 ,4)
將其表示為矩陣形式:
為了便于處理,把每個維度的的數(shù)據(jù)都減去對應(yīng)維度的均值,這樣每個維度均變?yōu)?均值。
可以看到,歸一化為0均值后(注意,省略了方差歸一化的步驟,因為數(shù)據(jù)在兩個維度方差相同),樣本在直角坐標系的圖為
要把如上數(shù)據(jù)降低為1維,如何找到一個新的方向,使得信息盡可能不丟失呢?直觀的做法是,投影后的點盡量分散,這種分散程度,可以用方差來度量,方差的公式如下:
對于每個維度都變化為0均值后,方差可以表示為:
于是問題轉(zhuǎn)變?yōu)?#xff0c;尋找一組基,使得數(shù)據(jù)變化到這組基之后,方差最大。
對于n維數(shù)據(jù)降低到k維時,為了讓兩個維度盡可能多的保留初始信息,他們之間應(yīng)該是獨立的,不相關(guān)的,因為相關(guān)代表兩個維度間存在冗余信息,對于均值歸一化為0之后的數(shù)據(jù),度量兩個維度的相關(guān)性可以用協(xié)方差來表示:
當(dāng)協(xié)方差為0時,表示兩個字段完全獨立。為了讓協(xié)方差為0,我們選擇第二個基時只能在與第一個基正交的方向上選擇。因此最終選擇的兩個方向一定是正交的。
至此,我們得到了降維問題的優(yōu)化目標:將一組N維向量降為K維(K大于0,小于N),其目標是選擇K個單位(模為1)正交基,使得原始數(shù)據(jù)變換到這組基上后,各字段兩兩間協(xié)方差為0,而字段的方差則盡可能大(在正交的約束下,取最大的K個方差)。
根據(jù)以上推倒,需要將協(xié)方差矩陣對角化,使得數(shù)據(jù)每個維度本身之間有最大的方差,而兩兩維度之間的協(xié)方差為0,即盡最大量減少數(shù)據(jù)的冗余,假設(shè)變化后的數(shù)據(jù)為Y,協(xié)方差矩陣為D,D為一個對角陣,且主對線線元素按大小排列,原始數(shù)據(jù)X的協(xié)方差矩陣為C,D與C的關(guān)系如下:
現(xiàn)在事情很明白了!我們要找的P不是別的,而是能讓原始協(xié)方差矩陣對角化的P。
換句話說,優(yōu)化目標變成了尋找一個矩陣P,滿足PCPT是一個對角矩陣,并且對角元素按從大到小依次排列,那么P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維并滿足上述優(yōu)化條件。
由上文知道,協(xié)方差矩陣C是一個是對稱矩陣,在線性代數(shù)上,實對稱矩陣有一系列非常好的性質(zhì):
1)實對稱矩陣不同特征值對應(yīng)的特征向量必然正交。
2)設(shè)特征向量λλ重數(shù)為r,則必然存在r個線性無關(guān)的特征向量對應(yīng)于λ,因此可以將這r個特征向量單位正交化。
?
其中Λ為對角矩陣,其對角元素為各特征向量對應(yīng)的特征值(可能有重復(fù))。
到這里,我們發(fā)現(xiàn)我們已經(jīng)找到了需要的矩陣P:
P是協(xié)方差矩陣的特征向量單位化后按行排列出的矩陣,其中每一行都是C的一個特征向量。如果設(shè)P按照ΛΛ中特征值的從大到小,將特征向量從上到下排列,則用P的前K行組成的矩陣乘以原始數(shù)據(jù)矩陣X,就得到了我們需要的降維后的數(shù)據(jù)矩陣Y。
假設(shè)現(xiàn)在輸入數(shù)據(jù)集表示為??,維度??即??。假設(shè)我們想把數(shù)據(jù)從2維降到1維。(在實際應(yīng)用中,我們也許需要把數(shù)據(jù)從256維降到50維;在這里使用低維數(shù)據(jù),主要是為了更好地可視化算法的行為)。下圖為數(shù)據(jù)集:
這些數(shù)據(jù)已經(jīng)進行了預(yù)處理,使得每個特征??和??具有相同的均值(零)和方差。預(yù)處理的方式如下:
注意:這里1,2步是把數(shù)據(jù)各個維度的均值歸一到0,而3,4步是把數(shù)據(jù)的方差歸一為單位方差,這樣各個維度間即可進行合理比較,否則數(shù)據(jù)各個維度規(guī)模不一致會導(dǎo)致方差的規(guī)模不一致(對于一些數(shù)據(jù)比如灰度圖像,其在各個維度上的取值均為0-255之間的數(shù)值,所以對其進行方差歸一化沒有必要的,可以省略3,4步),為了使數(shù)據(jù)方差最大化,且降低數(shù)據(jù)之間的相關(guān)性,根據(jù)之前的分析,可以得到以下兩個方向,根據(jù)圖中顯示,?是數(shù)據(jù)變化的主方向,而??是次方向。
也就是說,數(shù)據(jù)在??方向上的變化要比在??方向上大。為更形式化地找出方向??和??,首先計算出矩陣??,如下所示:
假設(shè)數(shù)據(jù)為三維,其協(xié)方差矩陣??為:
注意協(xié)方差矩陣的計算,,對于均值歸一化后,直接在對應(yīng)維度上相乘即可,先計算出協(xié)方差矩陣的特征向量,按列排放,而組成矩陣:
在本例中,向量??和??構(gòu)成了一個新基,可以用來表示數(shù)據(jù)。令??為訓(xùn)練樣本,那么??就是樣本點??在維度??上的投影的長度(幅值)。同樣的,??是??投影到??維度上的長度(幅值)。
至此,我們可以把??用??基表達為:
?即為在新基下的坐標,在新基上,數(shù)據(jù)的方差可以表示為:
對數(shù)據(jù)集中的每個樣本??分別進行旋轉(zhuǎn):??for every??,然后把變換后的數(shù)據(jù)??顯示在坐標圖上,可得:
這就是把訓(xùn)練數(shù)據(jù)集旋轉(zhuǎn)到?,?基后的結(jié)果。一般而言,運算??表示旋轉(zhuǎn)到基?,, ...,?之上的訓(xùn)練數(shù)據(jù)。矩陣??有正交性,即滿足?,所以若想將旋轉(zhuǎn)后的向量??還原為原始數(shù)據(jù)??,將其左乘矩陣即可:??, 驗算一下:?.
數(shù)據(jù)的主方向就是旋轉(zhuǎn)數(shù)據(jù)的第一維??。因此,若想把這數(shù)據(jù)降到一維,可令:
更一般的,假如想把數(shù)據(jù)??降到??維表示??(令??),只需選取??的前??個成分,分別對應(yīng)前??個數(shù)據(jù)變化的主方向。
PCA的另外一種解釋是:?是一個??維向量,其中前幾個成分可能比較大(例如,上例中大部分樣本第一個成分??的取值相對較大),而后面成分可能會比較小(例如,上例中大部分樣本的??較小)。
PCA算法做的其實就是丟棄??中后面(取值較小)的成分,就是將這些成分的值近似為零。具體的說,設(shè)??是??的近似表示,那么將??除了前?個成分外,其余全賦值為零,就得到:(這里?與??分別表示樣本向量)
在本例中,可得??的點圖如下(取??):
然而,由于上面??的后項均為零,沒必要把這些零項保留下來。所以,我們僅用前??個(非零)成分來定義??維向量??。
這也解釋了為什么以??為基來表示數(shù)據(jù):要決定保留哪些成分變得很簡單,只需取前??個成分即可。得到了原始數(shù)據(jù)??的低維“壓縮”表征量??, 反過來,如果給定??,應(yīng)如何還原原始數(shù)據(jù)??呢???的基為要轉(zhuǎn)換回來,只需??即可。把??看作將??的最后??個元素被置0所得的近似表示,給定??,可以通過在其末尾添加??個0來得到對??的近似,最后,左乘??便可近似還原出原數(shù)據(jù)??。計算如下:
如下即為重構(gòu)為原來基坐標下的點:
?
在PCA中有一個問題是主成分數(shù)K的選取,K的取值過大數(shù)據(jù)壓縮效率不高,K的取值過小,數(shù)據(jù)信息丟失就會嚴重。決定K值得選取通常會考慮k的方差百分比,如果??,那么我們得到的是對數(shù)據(jù)的完美近似,也就是保留了100%的方差,即原始數(shù)據(jù)的所有變化都被保留下來;相反,如果??,那等于是使用零向量來逼近輸入數(shù)據(jù),也就是只有0%的方差被保留下來。
一般而言,設(shè)??表示??的特征值(按由大到小順序排列),使得??為對應(yīng)于特征向量??的特征值。即??投影后第j個維度的方差。保留前??個成分,則保留的方差百分比可計算為:
在上面簡單的二維實驗中,?,?。因此,如果保留??個主成分,等于我們保留了??,即91.3%的方差。
容易證明,?。因此,如果??,則說明??也就基本上接近于0,所以用0來近似它并不會產(chǎn)生多大損失。這也解釋了為什么要保留前面的主成分(對應(yīng)的??值較大)而不是末尾的那些。 這些前面的主成分??變化性更大,取值也更大,如果將其設(shè)為0勢必引入較大的近似誤差。
以處理圖像數(shù)據(jù)為例,一個慣常的經(jīng)驗法則是選擇??以保留99%的方差,換句話說,我們選取滿足以下條件的最小??值:
對其它應(yīng)用,如不介意引入稍大的誤差,有時也保留90-98%的方差范圍。若向他人介紹PCA算法詳情,告訴他們你選擇的??保留了95%的方差,比告訴他們你保留了前120個(或任意某個數(shù)字)主成分更好理解。
協(xié)方差矩陣為PCA變換后數(shù)據(jù)在新基上的方差,取前K個特征值對應(yīng)前K維最大的方差方向,且數(shù)據(jù)在新基的方向為特征值對應(yīng)的特征向量方向:
中間那部分很熟悉啊,不就是樣本特征的協(xié)方差矩陣么(的均值為0,一般協(xié)方差矩陣都除以m-1,這里用m)。用來表示,表示,那么上式寫作,。由于u是單位向量,即,上式兩邊都左乘u得,,即,就是的特征值,u是特征向量。最佳的投影直線是特征值最大時對應(yīng)的特征向量,其次是第二大對應(yīng)的特征向量,依次類推。因此,我們只需要對協(xié)方差矩陣進行特征值分解,得到的前k大特征值對應(yīng)的特征向量就是最佳的k維新特征,而且這k維新特征是正交的。得到前k個u以后,樣例通過以下變換可以得到新的樣本。
? ?其中的第j維就是在上的投影。
參考:
1) http://blog.codinglabs.org/articles/pca-tutorial.html
2) UFLDL
3)?http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html
轉(zhuǎn)載于:https://www.cnblogs.com/alan-blog-TsingHua/p/10023991.html
總結(jié)
以上是生活随笔為你收集整理的CS229 6.6 Neurons Networks PCA主成分分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基本环境安装: Centos7+Java
- 下一篇: 【markdown】图片的处理