上次那篇文章在理論層次介紹了下協(xié)方差矩陣尸执,沒準(zhǔn)很多人覺得這東西用處不大家凯,其實(shí)協(xié)方差矩陣在好多學(xué)科里都有很重要的作用,比如多維的正態(tài)分布如失,再比如今天我們今天的主角——主成分分析(Principal Component Analysis绊诲,簡(jiǎn)稱PCA)。結(jié)合PCA相信能對(duì)協(xié)方差矩陣有個(gè)更深入的認(rèn)識(shí)~
PCA的緣起
PCA大概是198x年提出來的吧褪贵,簡(jiǎn)單的說掂之,它是一種通用的降維工具。在我們處理高維數(shù)據(jù)的時(shí)候脆丁,為了能降低后續(xù)計(jì)算的復(fù)雜度世舰,在“預(yù)處理”階段通常要先對(duì)原始數(shù)據(jù)進(jìn)行降維,而PCA就是干這個(gè)事的槽卫。本質(zhì)上講跟压,PCA就是將高維的數(shù)據(jù)通過線性變換投影到低維空間上去,但這個(gè)投影可不是隨便投投歼培,要遵循一個(gè)指導(dǎo)思想震蒋,那就是:找出最能夠代表原始數(shù)據(jù)的投影方法。這里怎么理解這個(gè)思想呢躲庄?“最能代表原始數(shù)據(jù)”希望降維后的數(shù)據(jù)不能失真查剖,也就是說,被PCA降掉的那些維度只能是那些噪聲或是冗余的數(shù)據(jù)噪窘。這里的噪聲和冗余我認(rèn)為可以這樣認(rèn)識(shí):
噪聲:我們常說“噪音污染”笋庄,意思就是“噪聲”干擾我們想聽到的真正聲音。同樣倔监,假設(shè)樣本中某個(gè)主要的維度A直砂,它能代表原始數(shù)據(jù),是“我們真正想聽到的東西”丐枉,它本身含有的“能量”(即該維度的方差哆键,為啥?別急瘦锹,后文該解釋的時(shí)候就有啦~)本來應(yīng)該是很大的籍嘹,但由于它與其他維度有那么一些千絲萬縷的相關(guān)性闪盔,受到這些個(gè)相關(guān)維度的干擾,它的能量被削弱了辱士,我們就希望通過PCA處理后泪掀,使維度A與其他維度的相關(guān)性盡可能減弱,進(jìn)而恢復(fù)維度A應(yīng)有的能量颂碘,讓我們“聽的更清楚”异赫!
冗余:冗余也就是多余的意思,就是有它沒它都一樣头岔,放著就是占地方塔拳。同樣,假如樣本中有些個(gè)維度峡竣,在所有的樣本上變化不明顯(極端情況:在所有的樣本中該維度都等于同一個(gè)數(shù))靠抑,也就是說該維度上的方差接近于零,那么顯然它對(duì)區(qū)分不同的樣本絲毫起不到任何作用适掰,這個(gè)維度即是冗余的颂碧,有它沒它一個(gè)樣,所以PCA應(yīng)該去掉這些維度类浪。
這么一分析载城,那么PCA的最終目的就是“降噪”和消滅這些“冗余”的維度,以使降低維度的同時(shí)保存數(shù)據(jù)原有的特征不失真费就。后面我們將結(jié)合例子繼續(xù)討論诉瓦。
協(xié)方差矩陣——PCA實(shí)現(xiàn)的關(guān)鍵
前面我們說了,PCA的目的就是“降噪”和“去冗余”受楼】寻幔“降噪”的目的就是使保留下來的維度間的相關(guān)性盡可能小呼寸,而“去冗余”的目的就是使保留下來的維度含有的“能量”即方差盡可能大艳汽。那首先的首先,我們得需要知道各維度間的相關(guān)性以及個(gè)維度上的方差岸匝河狐!那有什么數(shù)據(jù)結(jié)構(gòu)能同時(shí)表現(xiàn)不同維度間的相關(guān)性以及各個(gè)維度上的方差呢?自然是非協(xié)方差矩陣莫屬瑟捣。回憶下 淺談協(xié)方差矩陣的內(nèi)容馋艺,協(xié)方差矩陣度量的是維度與維度之間的關(guān)系,而非樣本與樣本之間迈套。協(xié)方差矩陣的主對(duì)角線上的元素是各個(gè)維度上的方差(即能量)捐祠,其他元素是兩兩維度間的協(xié)方差(即相關(guān)性)。我們要的東西協(xié)方差矩陣都有了桑李,先來看“降噪”踱蛀,讓保留下的不同維度間的相關(guān)性盡可能小窿给,也就是說讓協(xié)方差矩陣中非對(duì)角線元素都基本為零。達(dá)到這個(gè)目的的方式自然不用說率拒,線代中講的很明確——矩陣對(duì)角化崩泡。而對(duì)角化后得到的矩陣,其對(duì)角線上是協(xié)方差矩陣的特征值猬膨,它還有兩個(gè)身份:首先角撞,它還是各個(gè)維度上的新方差;其次勃痴,它是各個(gè)維度本身應(yīng)該擁有的能量(能量的概念伴隨特征值而來)谒所。這也就是我們?yōu)楹卧谇懊娣Q“方差”為“能量”的原因。也許第二點(diǎn)可能存在疑問沛申,但我們應(yīng)該注意到這個(gè)事實(shí)百炬,通過對(duì)角化后,剩余維度間的相關(guān)性已經(jīng)減到最弱污它,已經(jīng)不會(huì)再受“噪聲”的影響了剖踊,故此時(shí)擁有的能量應(yīng)該比先前大了∩辣幔看完了“降噪”德澈,我們的“去冗余”還沒完呢。對(duì)角化后的協(xié)方差矩陣固惯,對(duì)角線上較小的新方差對(duì)應(yīng)的就是那些該去掉的維度梆造。所以我們只取那些含有較大能量(特征值)的維度,其余的就舍掉即可葬毫。PCA的本質(zhì)其實(shí)就是對(duì)角化協(xié)方差矩陣镇辉。
下面就讓我們跟著上面的感覺來推推公式吧。假設(shè)我們有一個(gè)樣本集X贴捡,里面有N個(gè)樣本忽肛,每個(gè)樣本的維度為d。即:
將這些樣本組織成樣本矩陣的形式烂斋,即每行為一個(gè)樣本屹逛,每一列為一個(gè)維度,得到樣本矩陣S:
我們先將樣本進(jìn)行中心化汛骂,即保證每個(gè)維度的均值為零罕模,只需讓矩陣的每一列除以對(duì)應(yīng)的均值即可。很多算法都會(huì)先將樣本中心化帘瞭,以保證所有維度上的偏移都是以零為基點(diǎn)的淑掌。然后,對(duì)樣本矩陣計(jì)算其協(xié)方差矩陣蝶念,按照《淺談協(xié)方差矩陣》里末尾的update抛腕,我們知道诈悍,協(xié)方差矩陣可以簡(jiǎn)單的按下式計(jì)算得到:
下面,根據(jù)我們上文的推理兽埃,將協(xié)方差矩陣C對(duì)角化侥钳。注意到,這里的矩陣C是對(duì)稱矩陣柄错,對(duì)稱矩陣對(duì)角化就是找到一個(gè)正交矩陣P舷夺,滿足: PTCP =Λ 具體操作是:先對(duì)C進(jìn)行特征值分解,得到特征值矩陣(對(duì)角陣)即為Λ 售貌,得到特征向量矩陣并正交化即為P给猾。 顯然,P,Λ ∈Rd x d 假如我們?nèi)∽畲蟮那皃(p<d)個(gè)特征值對(duì)應(yīng)的維度颂跨,那么這個(gè)p個(gè)特征值組成了新的對(duì)角陣Λ∈Rp x p敢伸, ,對(duì)應(yīng)的p個(gè)特征向量組成了新的特征向量矩陣P∈Rd x p
實(shí)際上恒削,這個(gè)新的特征向量矩陣P1就是投影矩陣,為什么這么說呢池颈?假設(shè)PCA降維后的樣本矩陣為S1,顯然钓丰,根據(jù)PCA的目的躯砰,S1中的各個(gè)維度間的協(xié)方差基本為零,也就是說携丁,S1的協(xié)方差矩陣應(yīng)該為Λ1琢歇。即滿足:
- 形成樣本矩陣,樣本中心化
- 計(jì)算樣本矩陣的協(xié)方差矩陣
- 對(duì)協(xié)方差矩陣進(jìn)行特征值分解梦鉴,選取最大的p個(gè)特征值對(duì)應(yīng)的特征向量組成投影矩陣
- 對(duì)原始樣本矩陣進(jìn)行投影李茫,得到降維后的新樣本矩陣
Matlab中PCA實(shí)戰(zhàn)
首先,隨機(jī)產(chǎn)生一個(gè)103維的整數(shù)矩陣作為樣本集肥橙,10為樣本的個(gè)數(shù)魄宏,3為樣本的維數(shù)。
1快骗、S = fix(rand(10,3)50);
對(duì)比娜庇,可以發(fā)現(xiàn),SCORE和S1在不考慮維度順序和正負(fù)的情況下是完全吻合的方篮,之所以我們計(jì)算的S1的維度順序不同,是因?yàn)橥ǔ6际菍⑼队熬仃嘝按能量(特征值)的降序排列的励负,而剛才我們用eig函數(shù)得到的結(jié)果是升序藕溅。另外,在通常的應(yīng)用中继榆,我們一般是不使用matlab的princomp函數(shù)的巾表,因?yàn)樗荒苷嬲慕稻S(不提供相關(guān)參數(shù)汁掠,還是我沒發(fā)現(xiàn)?)集币。一般情況下考阱,我們都是按照協(xié)方差矩陣分解后特征值所包含的能量來算的,比如取90%的能量鞠苟,那就從最大的特征值開始加乞榨,一直到部分和占特征值總和的90%為止,此時(shí)部分和含有的特征值個(gè)數(shù)即為p当娱。
經(jīng)過了一番推公式加敲代碼的過程吃既,相信大家對(duì)主成分分析應(yīng)該不陌生了吧,同時(shí)對(duì)協(xié)方差矩陣也有了更深層次的認(rèn)識(shí)了吧跨细,它可不只是花花槍啊鹦倚。我個(gè)人覺得PCA在數(shù)學(xué)上的理論還是很完備的,想必這也是它能在多種應(yīng)用中博得鰲頭的原因吧冀惭。