白話“主成分分析” 1 :主成分分析用于降維的思想
[TOC]
1. 什么是主成分分析
主成分分析叉弦,即分析“主成分”翩概,找到“主成分”涉馁,英文是 Principal Component Analysis,簡(jiǎn)稱 PCA峭火。
經(jīng)常和 PCA 一起出現(xiàn)的另一個(gè)詞是降維(decomposition)德撬,當(dāng)原始數(shù)據(jù)有成千甚至上萬(wàn)個(gè)特征的時(shí)候铲咨,降維可以節(jié)約空間,降低算法運(yùn)行的開(kāi)銷蜓洪,后面我們可以看到纤勒,PCA 的這種降維方式可以用于數(shù)據(jù)的可視化,還有去噪聲的噪聲隆檀。
在這里要說(shuō)明的一點(diǎn)是:PCA 是方法摇天,降維是思想,PCA != 降維恐仑, 降維還有很多方法泉坐,直接去掉一些無(wú)關(guān)的特征,也是降維裳仆,PCA 降維是線性降維腕让,還有非線性降維,當(dāng)然這里會(huì)扯出很多東西歧斟,不在我現(xiàn)有能解釋的范圍內(nèi)纯丸。
本質(zhì)上主成分分析是找到一個(gè)歐式空間的線性變換,把原始數(shù)據(jù)從“一組舊的標(biāo)準(zhǔn)正交基下的表示”轉(zhuǎn)化成“另一組新的標(biāo)準(zhǔn)正交基下的表示”静袖,降維發(fā)生在新的標(biāo)準(zhǔn)正交基下的表示觉鼻,直接去掉了后面幾個(gè)維度的坐標(biāo)值。
這里我使用了一些“線性代數(shù)”中的概念和表述队橙,但請(qǐng)你不要擔(dān)心坠陈,全部在你的射程范圍之內(nèi),主成分分析的思想其實(shí)并不深?yuàn)W捐康,只是被一些書(shū)籍用過(guò)于復(fù)雜的數(shù)學(xué)公式寫(xiě)得比較高大上仇矾,我倒覺(jué)得主成分分析是復(fù)習(xí)“線性代數(shù)”基礎(chǔ)知識(shí)的絕佳材料。
2. PCA 應(yīng)用于降維的思想
在初中解总,我們就學(xué)習(xí)過(guò)“從不同方向看物體”若未。PCA 應(yīng)用于降維是想找到一個(gè)適合的方向看物體,去掉一些不太重要的特征倾鲫,然后應(yīng)用于建模粗合。
請(qǐng)看下面這張圖,左邊是我斜著拿一支筆乌昔,三維空間中的一支筆隙疚,你在二維平面內(nèi)你還能夠看出是一支筆。如果我把這支筆像右邊這張圖那樣展示給你磕道,你有可能認(rèn)為我拿著一個(gè)藍(lán)色小球供屉。
在三維空間里看到二維平面其實(shí)就是降維,降維以后的物體不是原來(lái)的物體,但可以作為原來(lái)物體的近似伶丐。
顯而易見(jiàn)降維會(huì)帶來(lái)?yè)p失悼做,但如果損失的信息并不是我們關(guān)注的主要的信息,其實(shí)并不妨礙我們對(duì)原本事物的認(rèn)識(shí)哗魂。再看上面的左圖肛走,這個(gè)角度比較完整地展現(xiàn)了一支筆的全貌,我們可以看出這是一只藍(lán)色水筆录别,還有很多墨水沒(méi)有用完朽色,而右邊的圖,只從這支筆的底部看组题,雖然也是降維葫男,但是丟失了很多信息,以至于我們有可能不知道這居然是一支筆崔列。這說(shuō)明在我們有限的視野范圍內(nèi)觀察一個(gè)事務(wù)梢褐,找對(duì)角度很關(guān)鍵。北宋詩(shī)人蘇軾有名詩(shī)句《題西林壁》傳頌至今:
橫看成嶺側(cè)成峰赵讯,
遠(yuǎn)近高低各不同盈咳。
不識(shí)廬山真面目,
只緣身在此山中瘦癌。
說(shuō)的就是如果你置身于廬山之中猪贪,便看不清廬山的全貌跷敬。
那么在 PCA 中讯私,降維是如何發(fā)生的呢?請(qǐng)看下面這張圖西傀。
降維最直接的做法就是去掉一個(gè)維度的信息,這件事情就叫做朝著坐標(biāo)軸“投影”拥褂,從左邊這張圖中娘锁,可以看出,投影到 軸可能更好一些饺鹃,因?yàn)橥队暗?
軸以后莫秆,數(shù)據(jù)更接近原始數(shù)據(jù)的樣子。
而 PCA 用于降維的思想只是在這個(gè)基礎(chǔ)上多做了一步:先將坐標(biāo)軸進(jìn)行旋轉(zhuǎn)悔详,旋轉(zhuǎn)到如右圖所示镊屎, 軸盡量擬合原始數(shù)據(jù)的分布,然后將原始數(shù)據(jù)投影到
軸上茄螃,很明顯缝驳,這樣得到的數(shù)據(jù)的近似表示比左邊那張圖要好,同樣是二維降到一維,右邊的方法損失的信息更少用狱。
再看看我前面拿筆的那兩張圖运怖,右邊的圖之所以降維效果差,是因?yàn)槲覀冞x擇的角度把藍(lán)色水筆重要的維度給丟棄了夏伊。
還可以通過(guò)下面的例子來(lái)理解 PCA 降維的思想摇展。
整數(shù) 可以有以下兩種分解方式:
- 第 1 種方式:
;
- 第 2 種方式:
署海;
分析:
- 第 1 種方式分解比較平均吗购,隨便去掉一個(gè)數(shù),和分解之前(
)差別都比較大砸狞;
- 第 2 種方式不僅給出了分解捻勉,并且你很容易看出來(lái),按照高位到低位分解刀森,去掉
剩下
踱启,去掉
和
剩下
,越是高位研底,與原始數(shù)值就越接近埠偿。
依據(jù)矩陣分解的相關(guān)理論,更換以后的坐標(biāo)系榜晦,從大到小包含了原始矩陣的信息冠蒋,在降維的時(shí)候,我們就可以根據(jù)需要乾胶,保留前面的坐標(biāo)軸抖剿,去掉尾巴的坐標(biāo)軸,得到數(shù)據(jù)的降維表示识窿。數(shù)據(jù)還是那個(gè)數(shù)據(jù)斩郎,維數(shù)減少了,但信息沒(méi)有丟失多少喻频,我們認(rèn)為這是一件劃算的事情缩宜。
整理一下,PCA 用于降維主要分為兩步甥温,第一步旋轉(zhuǎn)坐標(biāo)軸锻煌,第二步去掉一些特征,進(jìn)而留下的特征可以作為原始數(shù)據(jù)的近似姻蚓。在機(jī)器學(xué)習(xí)中宋梧,第一步可以認(rèn)為是特征抽取或者是特征轉(zhuǎn)換,而第二步可以認(rèn)為是特征選擇史简。即 “PCA = 特征抽取 + 特征選擇”乃秀。
這里要說(shuō)明一點(diǎn):其實(shí) PCA 變換坐標(biāo)軸不一定是旋轉(zhuǎn)肛著,還有可能是對(duì)坐標(biāo)系做了鏡像,我們這里不妨只理解成 PCA 旋轉(zhuǎn)了坐標(biāo)軸到一個(gè)合適的位置即可跺讯。
3. 旋轉(zhuǎn)以后的坐標(biāo)軸應(yīng)該具有什么性質(zhì)
其實(shí)這個(gè)問(wèn)題上面一部分已經(jīng)回到了枢贿,即原始數(shù)據(jù)在旋轉(zhuǎn)以后的坐標(biāo)軸上進(jìn)行投影更接近原始數(shù)據(jù)的分布。這樣說(shuō)還是有些抽象刀脏,二維三維空間還好理解局荚,高維空間就不好理解了。如何用數(shù)學(xué)的表示描述這件事情呢愈污?我們慢慢說(shuō)耀态。
3.1 機(jī)器學(xué)習(xí)中的數(shù)據(jù)使用二維矩陣表示,矩陣中的元素就是坐標(biāo)
我們?cè)谧鎏卣鞴こ痰臅r(shí)候暂雹,實(shí)際上就是在處理各種二維表格首装。舉一個(gè)簡(jiǎn)單的例子,下面是一張成績(jī)表杭跪,每一行是一個(gè)數(shù)據(jù)仙逻,一個(gè)數(shù)據(jù)組成的有序?qū)崝?shù)就是坐標(biāo),例如涧尿,表示張三的成績(jī)系奉,就可以用一個(gè)列向量 來(lái)表示。
姓名 | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) |
---|---|---|---|
張三 | |||
李四 | |||
王五 | |||
趙六 |
這是我們?cè)跈C(jī)器學(xué)習(xí)中處理的數(shù)據(jù)姑廉。那么坐標(biāo)是什么呢缺亮?談坐標(biāo)一定不能離開(kāi)坐標(biāo)系,我們?cè)诋?huà)這張表的時(shí)候桥言,在心里就已經(jīng)建立了一個(gè)坐標(biāo)系萌踱,這個(gè)坐標(biāo)系是約定速成的,以致于不用說(shuō)明限书,那么這個(gè)人為建立的坐標(biāo)系是什么呢虫蝶?
3.2 談?wù)撟鴺?biāo)不能離開(kāi)基底
翻一翻《線性代數(shù)》教材章咧,描述“坐標(biāo)”的語(yǔ)言一定是“向量在什么什么基底下的坐標(biāo)”倦西。那么畫(huà)出上面的成績(jī)表的手,我們選用的基底是什么呢赁严?
很簡(jiǎn)單扰柠,基底其實(shí)就是“語(yǔ)文成績(jī)”、“數(shù)學(xué)成績(jī)”疼约、“英語(yǔ)成績(jī)”卤档。如果分別把“語(yǔ)文成績(jī)”、“數(shù)學(xué)成績(jī)”程剥、“英語(yǔ)成績(jī)”表示成 軸劝枣、
軸、
軸,并且讓它們都是單位向量舔腾,可以寫(xiě)成如下形式:
那么張三的成績(jī) 可以寫(xiě)成:
這里我的描述可能比較啰嗦溪胶,但我想你應(yīng)該很容易明白我在說(shuō)什么,因?yàn)檫@其實(shí)是我們大家都約定速成的事情稳诚。
談到這里哗脖,很自然的一個(gè)問(wèn)題是,如何找到一個(gè)合適的坐標(biāo)系呢扳还?即如何找到新的坐標(biāo)系的各個(gè)坐標(biāo)軸(即“基底”)呢才避?在這里我們要使用一些“線性代數(shù)”的概念和記號(hào),不要擔(dān)心氨距,你都能想起來(lái)桑逝。
3.3 使用“線性代數(shù)”的語(yǔ)言描述 PCA 找坐標(biāo)系的過(guò)程
為了說(shuō)清楚后面的內(nèi)容,這里我們會(huì)用一些“線性代數(shù)”的語(yǔ)言俏让,如果你忘記了一些概念肢娘,能翻一翻書(shū)查一查資料是最好的,我再介紹一些概念的時(shí)候舆驶,可能會(huì)直接給出一些結(jié)論橱健,不會(huì)展開(kāi)了,因?yàn)樵僬归_(kāi)就是抄書(shū)了沙廉,你最好想一想或者翻翻書(shū)拘荡,但如果手邊沒(méi)有這樣的條件,也可以選擇性跳過(guò)一些內(nèi)容撬陵。當(dāng)然我會(huì)用盡量通俗的語(yǔ)言幫大家回憶起曾經(jīng)你學(xué)習(xí)過(guò)的知識(shí)珊皿,其實(shí)它們非常有用。
我們知道坐標(biāo)軸是基底巨税,基底其實(shí)就是一組向量(不是一個(gè)向量)蟋定,一般我們將每個(gè)向量單位化。取單位向量是因?yàn)閷⑷我庀蛄客队暗絾挝幌蛄康哪莻€(gè)標(biāo)量值好算草添,空間中的坐標(biāo)就是向量依次投影到各個(gè)坐標(biāo)軸的值驶兜,這個(gè)是是一個(gè)標(biāo)量,帶符號(hào)的远寸。
這個(gè)結(jié)論我想是很顯然抄淑,也容易理解。例如驰后, 投影到
就是
肆资,即
的第
個(gè)分量,注意
是單位向量灶芝,才有這么好的性質(zhì)郑原,一般情況下的投影要根據(jù)投影公式計(jì)算唉韭。
再補(bǔ)充一句,我們選擇一組向量成為基底犯犁,不僅僅希望它們都是單位向量纽哥,我們還希望這組基底里面的單位向量單位互相垂直,垂直也叫正交栖秕,此時(shí)春塌,既是單位向量且相互正交的基底是標(biāo)準(zhǔn)正交基,上面的 簇捍、
只壳、
就是一組標(biāo)準(zhǔn)正交基,標(biāo)準(zhǔn)正交基有非常良好的性質(zhì):
如果使用標(biāo)準(zhǔn)正交基暑塑,向量在新的基底的坐標(biāo)表示吼句,就可以通過(guò)這個(gè)向量依次和標(biāo)準(zhǔn)正交基里的每一個(gè)基向量做內(nèi)積,得到的標(biāo)量組成向量事格,即是向量在新的基底的坐標(biāo)表示惕艳。
這個(gè)結(jié)論是非常重要的,如果忘記了的朋友們請(qǐng)一定翻一翻《線性代數(shù)》教材驹愚,描述“正交變換”的部分远搪,簡(jiǎn)單來(lái)說(shuō)就是因?yàn)檎唬ù怪保┑木壒剩鰞?nèi)積的時(shí)候逢捺,不同的基向量的內(nèi)積成為了 谁鳍,自己和自己做內(nèi)積的時(shí)候,因?yàn)槭菃挝幌蛄拷偻瑑?nèi)積就是
倘潜,標(biāo)準(zhǔn)正交基簡(jiǎn)化了坐標(biāo)的計(jì)算,經(jīng)過(guò)后面的分析志于,我們可以看到涮因,通過(guò) PCA 找到的新的坐標(biāo)系的基底恰好就是標(biāo)準(zhǔn)正交基。
談到這里伺绽,你一定明白了养泡,計(jì)算新坐標(biāo)系下的坐標(biāo),其實(shí)就是計(jì)算原始坐標(biāo)在新坐標(biāo)軸下的投影憔恳,這個(gè)投影在新坐標(biāo)軸是標(biāo)準(zhǔn)正交基的情況下瓤荔,就成為了內(nèi)積的計(jì)算净蚤。
在這里我們假設(shè)原始數(shù)據(jù)的坐標(biāo)組成的矩陣是 钥组,
的每一行表示一個(gè)數(shù)據(jù),
的每一列表示一個(gè)特征今瀑。原始數(shù)據(jù)在新坐標(biāo)軸下的矩陣是
程梦,同樣
的每一行表示一個(gè)數(shù)據(jù)点把,
的每一列表示一個(gè)特征。而假設(shè)新坐標(biāo)軸的基底的每一個(gè)基向量按列排成矩陣
屿附。則矩陣
郎逃、
、
之間有如下關(guān)系:
我們知道矩陣乘法的定義是左邊矩陣的每一行和右邊矩陣的每一列分別相乘以后再相加挺份,這就是內(nèi)積的定義褒翰。通過(guò)上面的分析,我們知道 是各個(gè)坐標(biāo)軸匀泊,這些坐標(biāo)軸是單位向量并且相互正交优训,計(jì)算到一個(gè)向量到它們的坐標(biāo),就是計(jì)算投影各聘,計(jì)算投影就是計(jì)算內(nèi)積揣非。
到這里我們捋一捋, 是我們已知的躲因,
是我們待求的早敬,
、
知道了
就求出來(lái)了大脉。如何求出
呢搞监?我們通過(guò)分析
應(yīng)該滿足的性質(zhì),進(jìn)而就能得到
了镰矿。
3.3.1 新坐標(biāo)的各個(gè)維度方差依次減少
在線性回歸中腺逛,我們知道,如果一個(gè)特征(即數(shù)據(jù)矩陣的一個(gè)列)在數(shù)值上都差不多衡怀,其實(shí)這一列對(duì)回歸的結(jié)果沒(méi)有什么幫助棍矛,它的系數(shù)幾乎為 0,可以收縮到偏置項(xiàng)中抛杨。
因此够委,送入機(jī)器學(xué)習(xí)的算法的數(shù)據(jù)的特征,我們喜歡特征在數(shù)值有區(qū)分度怖现,那么數(shù)值的區(qū)分度用什么度量呢茁帽?其實(shí)在中學(xué)我們就接觸過(guò)這個(gè)概念了:方差。
方差表示了一組數(shù)據(jù)離散的程度屈嗤,方差大是各種機(jī)器學(xué)習(xí)算法喜歡的樣子潘拨,方差小的,表示這組數(shù)據(jù)在數(shù)值上差別不大饶号,差別很小的時(shí)候作為特征就可以被忽略了铁追。機(jī)器學(xué)習(xí)算法庫(kù) scikit-learn 就專門(mén)有用于特征選的類 sklearn.feature_selection.VarianceThreshold
,它的作用很簡(jiǎn)單茫船,就是幫助我們移除方差小的特征琅束。
在生活中也有這樣的例子扭屁,差別不大的特征往往不是區(qū)分個(gè)體的主要因素。例如:女士在擇偶的時(shí)候涩禀,往往會(huì)看重男士的家庭背景料滥,擁有的資產(chǎn)多少。在男士的身高艾船、體重葵腹、顏值要求上,可能只是這樣的描述屿岂,身高不低于多少厘米礁蔗,體重不超過(guò)多少公斤,顏值不要太低雁社,年齡不要太大諸如此類浴井。因?yàn)槠鋵?shí)身高、體重霉撵、顏值磺浙,除了極個(gè)別的,全世界的成年人類放在一起比較徒坡,都不會(huì)差太多撕氧。但是家庭背景、知識(shí)喇完、學(xué)識(shí)伦泥、見(jiàn)識(shí)、資產(chǎn)是可以有極端差別的锦溪,是具有區(qū)分度的不脯。身高、體重刻诊、顏值在繼承后代上帶來(lái)的優(yōu)勢(shì)遠(yuǎn)不如“背景防楷、知識(shí)、學(xué)識(shí)则涯、見(jiàn)識(shí)复局、資產(chǎn)”能帶給后代的多。
于是我們期望經(jīng)過(guò) PCA 以后粟判,得到的原始數(shù)據(jù)在新坐標(biāo)軸下的表示矩陣 具有這樣的形式:
的第一列方差最大亿昏,
的第二列方差次之,以此類推档礁,
的最后一列方差最小角钩。用投影的語(yǔ)言再描述一遍就是:原始數(shù)據(jù)在新坐標(biāo)系的第一個(gè)坐標(biāo)軸上的投影的方差最大,原始數(shù)據(jù)在新坐標(biāo)系的第二個(gè)坐標(biāo)軸上的投影的方差次之,依次類推彤断。
3.3.2 新坐標(biāo)的各個(gè)維度不能線性相關(guān)
還是從線性回歸說(shuō)起野舶,如果兩個(gè)特征線性相關(guān)易迹,這個(gè)現(xiàn)象叫做“多重共線性”宰衙,一個(gè)特征可以用另一個(gè)特征線性表示,那么就可以去掉一個(gè)特征睹欲,即去掉冗余的特征供炼。例如“年齡”和“出生年”,由年齡可以推出出生年窘疮,同樣由出生年也可以推出年齡袋哼,“出生年”就可以被去掉。
那么兩個(gè)特征之間的線性線性相關(guān)性用什么來(lái)衡量呢闸衫?這就是“協(xié)方差”涛贯。
第 1 點(diǎn)提到了方差,第 2 點(diǎn)提到了協(xié)方差蔚出,在數(shù)學(xué)上弟翘,有一個(gè)概念把它們聯(lián)系在了一起,那就是“協(xié)方差矩陣”骄酗。
3.3.3 協(xié)方差矩陣
我們把上面第 1 點(diǎn)和第 2 點(diǎn)對(duì)矩陣 的要求寫(xiě)出來(lái)就是:
的各個(gè)列向量的方差逐漸減少稀余;
的不同列向量線性無(wú)關(guān)。
把矩陣 按列分塊趋翻,寫(xiě)成列向量的形式
纽绍,這里每一個(gè)分量應(yīng)該看出一個(gè)列向量沃琅,這樣
才構(gòu)成矩陣,我們可以如下這樣構(gòu)造一個(gè)矩陣:
這里 是
的轉(zhuǎn)置。如果你對(duì)這個(gè)矩陣感到陌生的話皆怕,你不妨動(dòng)筆寫(xiě)一寫(xiě):
可以看到,把前面的系數(shù) 放進(jìn)矩陣以后睁壁,這個(gè)矩陣主對(duì)角線上的元素捌锭,就是方差,非主對(duì)角線上的元素步脓,就是不同列的協(xié)方差愿待,并且還有一條很重要的性質(zhì):協(xié)方差矩陣是對(duì)稱矩陣。
因此靴患,我們把期望矩陣 滿足的兩個(gè)條件重新通過(guò)協(xié)方差矩陣
描述就是:
- 協(xié)方差矩陣
主對(duì)角線上的元素越來(lái)越腥越摹;
- 協(xié)方差矩陣
非主對(duì)角線上的元素為
(非線性相關(guān)鸳君,即協(xié)方差為
)农渊,即協(xié)方差矩陣
是對(duì)角矩陣。
由于
是對(duì)角矩陣或颊,又因?yàn)? 砸紊,代入上式消去
传于,即
即我們希望
是對(duì)角矩陣。令 醉顽,即可以定義
是原始數(shù)據(jù)矩陣
的協(xié)方差矩陣沼溜,注意到
也是一個(gè)對(duì)稱矩陣,那么問(wèn)題就轉(zhuǎn)化成的問(wèn)題了游添,解決這個(gè)問(wèn)題的使用的是在“線性代數(shù)”中是使用得非常廣泛的“對(duì)稱矩陣對(duì)角化”的相關(guān)結(jié)論系草。我們簡(jiǎn)述如下:
實(shí)對(duì)稱矩陣一定可以對(duì)角化;
對(duì)一個(gè)對(duì)稱矩陣對(duì)角化的步驟就是對(duì)這個(gè)對(duì)稱矩陣進(jìn)行特征值分解唆涝;
實(shí)對(duì)稱矩陣的各個(gè)特征向量相互正交找都,可以將實(shí)對(duì)稱矩陣進(jìn)行特征值分解得到的特征向量先正交化(施密特正交化)再單位化,得到的特征向量按照特征值從大到小廊酣、按列排成矩陣
能耻,這個(gè)矩陣就是正交矩陣,實(shí)對(duì)稱矩陣總能夠這樣做亡驰,得到正交矩陣
將
對(duì)角化晓猛;
正交矩陣
滿足
,因此我們要將數(shù)據(jù)恢復(fù)到原來(lái)的坐標(biāo)系中隐解,只需要乘以降維以后的
矩陣的轉(zhuǎn)置即可;
正交矩陣表示的變換稱之為正交變換鞍帝,正交變換保持距離不變,保持內(nèi)積(夾角)不變煞茫,因此正交變換施加于原始坐標(biāo)系可以認(rèn)為是對(duì)原始坐標(biāo)系做了一次“旋轉(zhuǎn)”或“鏡像”帕涌。
的第 1 列就是主成分 1 ,
的第 2 列就是主成分 2续徽,以此類推蚓曼。于是我們可以總結(jié)出 PCA 應(yīng)用于降維的步驟。
4钦扭、PCA 應(yīng)用于降維的步驟
- 計(jì)算原始特征矩陣
的協(xié)方差矩陣
纫版;
這里要特別說(shuō)明的是,協(xié)方差和方差的定義中客情,都包括了減去均值這一操作其弊,因此原始特征矩陣 ,我們要將其每一列減去每一列的均值膀斋。
- 對(duì)協(xié)方差矩陣
進(jìn)行特征值分解梭伐;
- 根據(jù)第 2 步得到的特征值和特征向量,按照特征值從大到小把對(duì)應(yīng)的特征向量按列排成矩陣仰担,去掉特征值小的最后幾列糊识,形成矩陣
,
的前幾列就是主成分;
- 使用矩陣乘法
得到的矩陣
就是降維以后的矩陣赂苗。