原文:http://blog.csdn.net/orthocenterchocolate/article/details/39401767
今天給大家說說主成分分析這個(gè)玩意~那么捡絮,首先來說說它是干嘛用的吧,它是就來做特征選擇(Feature Selection)光绕,或者說降維(Dimension Reduction)的。其實(shí)特征選擇和降維是有聯(lián)系的蹲蒲,因?yàn)樘卣鬟x擇的結(jié)果是把那些有用的特征給選出來阔籽,冗余的沒用的特征給去掉,那么這樣之后特征維數(shù)自然而然就降低了吼鳞。那為什么要做特征選擇呢奄抽?舉個(gè)具體例子蔼两,假設(shè)有一大堆網(wǎng)頁,然后想對(duì)這些網(wǎng)頁做聚類(Clustering)逞度,所用特征是網(wǎng)頁中文本分詞后的各詞項(xiàng)的TD-IDF值额划,那么這個(gè)特征有多少維?維數(shù)等于分詞后能分出的不同的詞項(xiàng)的個(gè)數(shù)档泽,那么這個(gè)個(gè)數(shù)能有多大呢俊戳?在我實(shí)際的研究工作中所碰到的詞項(xiàng)數(shù)大約是500W的級(jí)別揖赴,那么就是說,如果采用這些詞項(xiàng)做為特征中的詞項(xiàng)抑胎,那么特征空間就是500W維的燥滑,這是個(gè)巨大的數(shù)字,會(huì)給計(jì)算帶來災(zāi)難阿逃,這就是所謂的維災(zāi)(Dimension?Curse)铭拧,因此有必要通過特征選擇來降維。除此之外恃锉,還有別的原因需要做特征選擇羽历,比如說現(xiàn)在有一堆用戶的數(shù)據(jù),想對(duì)用戶進(jìn)行聚類淡喜,但是現(xiàn)在用戶特征很多,其中有很多特征意義不大诵闭,如果聚類的時(shí)候把這些特征也考慮進(jìn)去炼团,會(huì)干擾聚類的效果,但是特征太多疏尿,我們?nèi)搜塾趾茈y看出什么特征有用瘟芝,什么特征沒用。
? ? ? ? 那么PCA是怎么選擇特征的呢褥琐?它是怎么定義所謂的“有用的特征”锌俱?它的思想是這樣的:它把高維特征通過線性變換,變換到低維空間中敌呈,使得在這個(gè)低維空間中贸宏,特征的方差盡可能地大。這時(shí)低維空間中的特征就是被選擇出來的特征磕洪,就是所謂的主成分吭练,而其它次要的成分就被剔除了。為什么希望方差大呢析显?因?yàn)榉讲畲篥暄剩捅硎具@個(gè)維上的數(shù)據(jù)所包含的信息比較豐富。舉個(gè)例子谷异,比如現(xiàn)在有10個(gè)人的數(shù)據(jù)分尸,每條數(shù)據(jù)有兩個(gè)維:出生地,性別歹嘹,10個(gè)人的出生地各不相同箩绍,5男5女。從感覺上看荞下,哪一維所包含的信息量大一些伶选?是不是出生地呢史飞?如果我一說出生地,是不是馬上就可以找到那個(gè)人了呢仰税?因此出生地各不相同嘛构资,而性別呢?因此性別只有2種陨簇,因此會(huì)有大量重復(fù)的值吐绵,也就是很多人的值都是一樣的,這個(gè)屬性對(duì)于人的刻畫效果不好河绽,比如你找一個(gè)性別是男的人己单,可以找到5個(gè),這5個(gè)人從性別這一維上看耙饰,是完全一樣的纹笼,無法區(qū)分。從PCA的角度來看苟跪,出生地這個(gè)維的方差就要比性別這個(gè)維的方差要大廷痘,而方差大就說明包含的信息比較豐富,不單一件已,這樣的特征是我們希望留下的笋额,因此就這個(gè)例子來看,PCA更傾向于保留出生地這個(gè)特征篷扩。
? ? ? ? 那么是不是簡單的就把需要保留的特征留下來兄猩,不需要保留的特征去掉就行了呢?比如說剛才那個(gè)人的數(shù)據(jù)的例子鉴未,是不是直接把性別這個(gè)特征去掉就完了枢冤?遠(yuǎn)遠(yuǎn)不止那么簡單,PCA是把原特征映射到一個(gè)低維空間上铜秆,使得特征在這個(gè)低維空間中的方差最大掏导,如果是直接去掉特征維的話,那么剩下的特征不一定是低維空間中方差最大的羽峰。這里要注意一個(gè)問題趟咆,繼續(xù)剛才那個(gè)人的數(shù)據(jù)的例子,有2維梅屉,性別和出生地值纱,如果用PCA把它降成1維,那么這一維是什么坯汤?這是沒有定義的虐唠,也就是說,這一維既不是性別惰聂,也不是出生地疆偿,它已經(jīng)沒有定義了咱筛,我們只知道它是1維選擇出來的特征而已,但這并不影響我們對(duì)特征的使用杆故。
? ? ? ? 再回想一下剛才說的PCA的思想:它的思想是這樣的:它把高維特征通過線性變換迅箩,變換到低維空間中,使得在這個(gè)低維空間中处铛,特征的方差盡可能地大饲趋。下面我們就來看看如何達(dá)到這個(gè)效果。
? ? ? ? 假設(shè)有一堆m維的特征:
? ? ? ? 我們想把它降到k維撤蟆,其中k<m奕塑,為了方便講解,先假設(shè)降到1維家肯,怎么降呢龄砰?取一個(gè)m維的向量α,那么把上面的那些m維向量降到1維就是:
? ? ? ? 這時(shí)每個(gè)特征就變成了一個(gè)值讨衣,也就是1維了寝贡。注意,現(xiàn)在的α還是未知的值依,是我們要求的,求出α后碟案,我們就知道降維后的特征是什么樣了愿险。
? ? ? ? 那么降維后的特征的方差就是:
? ? ?其中S剛好就是協(xié)方差矩陣。
? ? ?好了价说,現(xiàn)在我們的目標(biāo)就是最大化
? ? ? ?然后對(duì)求導(dǎo)并令導(dǎo)數(shù)為0得:?
? ? ? ?再變換一下得:
? ? ???呵呵呵呵呵呵衍锚,還記得學(xué)過的線性代數(shù)么友题?上面這個(gè)形式不就是矩陣S的特征值和特征向量的式子么?其中
? ? ? ?這里注意一個(gè)問題,可能會(huì)有人問凫海,那如果矩陣S有多個(gè)特征值呛凶,那該選哪個(gè),大家仔細(xì)回前面看矩陣S的定義行贪,可以發(fā)現(xiàn)漾稀,如果你要降到k維,那么矩陣S就是k乘k的建瘫,于是S就最多有k個(gè)特征值崭捍,所以就沒得選,剛好夠啰脚,不多也不少殷蛇。
? ? ? ?剛才說的是降到一維的情況,那降到k維該怎么辦橄浓?剛才說到粒梦,如果是降到k維,S剛好有k個(gè)特征值荸实,于是對(duì)應(yīng)有k個(gè)特征向量匀们,假設(shè)求出來分別是:
? ? ? ?記矩陣,此時(shí)A是m乘k的准给,那么將原始特征向量降到k維就是:
? ? 至此泄朴,我們就完成了將m維特征向量降到k維,在處理大數(shù)據(jù)時(shí)露氮,經(jīng)常會(huì)碰到高維數(shù)據(jù)叼旋,降維是很有用的,有些時(shí)間甚至是必須的沦辙,因?yàn)橛袝r(shí)候維數(shù)實(shí)在太高夫植,算法對(duì)高維向量進(jìn)行運(yùn)算所需的時(shí)間、空間開銷是非常巨大的,降維能有效的減小這些開銷详民。但是降維是會(huì)常來信息的丟失的延欠,畢竟維數(shù)少了,信息量也少了沈跨,因此由捎,降維算法實(shí)際上就是想在降維的時(shí)候,盡量保留有用的信息饿凛,去除冗余的信息狞玛,可以說降維是用損失一些信息來換取對(duì)高維特征向量進(jìn)行運(yùn)算所產(chǎn)生的時(shí)空開銷的削減。