一.前言
主成分分析(Principal components analysis,以下簡稱PCA)是最重要的降維方法之一。在數(shù)據(jù)壓縮消除冗余和數(shù)據(jù)噪音消除等領(lǐng)域都有廣泛的應(yīng)用雀费。它可以通過線性變換將原始數(shù)據(jù)變換為一組各維度線性無關(guān)的表示野宜,以此來提取數(shù)據(jù)的主要線性分量援所。需要注意的是外莲,PCA一般只用于線性數(shù)據(jù)降維不狮,對于非線性數(shù)據(jù)一般采用KPCA。
二. PCA的基本思想
降維就是找出數(shù)據(jù)里最主要的方面在旱,用數(shù)據(jù)里最主要的方面來代替原始數(shù)據(jù)摇零,并且希望損失盡可能的小。首先看幾張圖桶蝎,有一個直觀的認(rèn)識驻仅。
這里面,把橢圓看成是數(shù)據(jù):
如果我們單獨看某一個維度的話登渣,比如看x1這個維度:
可以看到將點投影到x1這個維度上看的話噪服,圖1的數(shù)據(jù)離散性最高,圖3居中胜茧,圖2數(shù)據(jù)離散性是最低的。數(shù)據(jù)離散性越大,代表數(shù)據(jù)在所投影的維度上具有越高的區(qū)分度杨赤,這個區(qū)分度就是信息量句葵。如果數(shù)據(jù)區(qū)分度不高,好多不同的點投影成了一個點廊遍,那么就發(fā)生了數(shù)據(jù)損失嬉愧。如果我們用方差來形容數(shù)據(jù)的離散性的話,就是數(shù)據(jù)方差越大喉前,表示數(shù)據(jù)的區(qū)分度越高没酣,也就是蘊含的信息量是越大的。
基于這個知識卵迂,如果我們想對數(shù)據(jù)進(jìn)行降維的話裕便,比如圖1的兩個維度的數(shù)據(jù)降成一維,我們可以選擇保留X1這個維度的數(shù)據(jù)狭握,因為在這個維度上蘊含的信息量更多闪金。同理,圖2就可以保留x2這個維度的數(shù)據(jù)论颅。但是哎垦,問題來了,圖3應(yīng)該保留哪個維度的數(shù)據(jù)呢恃疯?答案是保留哪個維度都不好漏设,都會丟失較大的信息量。但是今妄,如果我們把圖3的坐標(biāo)軸旋轉(zhuǎn)一下
比較容易看出郑口,圖3在新的坐標(biāo)軸下就能進(jìn)行降維了鸳碧。
所以,第一犬性,變換正確的坐標(biāo)軸(基)瞻离;第二,保留方差最大的幾個軸作為主成分乒裆,這樣的做法就是PCA的核心思想套利。
三. PCA的深入理解
1. 如何變換到新的坐標(biāo)軸
從前文可以看出,理想的坐標(biāo)軸是要求數(shù)據(jù)投在新坐標(biāo)軸后鹤耍,盡可能的分散肉迫,也就是數(shù)據(jù)的方差最大。然后每次選擇方差最大的軸作為主成分稿黄。
將前文2維降1維的例子擴展到更高維度喊衫,還有一個問題需要解決,考慮三維降到二維問題杆怕。與之前相同族购,首先我們希望找到一個方向使得投影后方差最大,這樣就完成了第一個方向的選擇财著,繼而我們選擇第二個投影方向联四。如果我們還是單純只選擇方差最大的方向,很明顯撑教,這個方向與第一個方向應(yīng)該是“幾乎重合在一起”朝墩,顯然這樣的維度是沒有用的,因為發(fā)生了大量的信息重復(fù)伟姐,起不到降維的作用收苏,因此,應(yīng)該有其他約束條件——就是正交愤兵。PCA要求軸與軸之間是正交的鹿霸,也就是不同維度的信息相關(guān)性為0。
-
協(xié)方差
在表示相關(guān)性中秆乳,相關(guān)系數(shù)與協(xié)方差是等價的懦鼠,這里為了方便計算,使用協(xié)方差屹堰。下面是協(xié)方差公式肛冶,當(dāng)協(xié)方差為0時,表示兩個特征a,b線性不相關(guān)扯键。
可以發(fā)現(xiàn)睦袖,當(dāng)a=b時,協(xié)方差公式就變成了方差公式荣刑,方差是特殊的協(xié)方差馅笙。如果運氣更好伦乔,特征a與b的平均數(shù)都為0,那么公式會進(jìn)一步簡化董习,得到:
所以說烈和,為了計算方便,PCA降維前皿淋,一般都要求將所有特征屬性中心化斥杜,即平均數(shù)為0。
-
協(xié)方差矩陣
因為PCA要求沥匈,同一軸內(nèi)方差最大,不同軸協(xié)方差為0忘渔,如何把它們放在一塊呢高帖?這里就引入了協(xié)方差矩陣的概念:
假設(shè)有m個樣本,每個樣本特征維度是2畦粮,每個特征都經(jīng)過中心化處理:
協(xié)方差矩陣就是:
這里需要注意散址,矩陣X的每個列向量都是一個樣本,X乘以X的轉(zhuǎn)置就相當(dāng)于特征之間的點積運算(為了計算特征間的協(xié)方差)宣赔,得到的協(xié)方差矩陣是一個與特征維度相同的方陣预麸。
我們發(fā)現(xiàn)協(xié)方差矩陣的對角線是方差,而且是對稱矩陣儒将。方差和協(xié)方差都放在了一個矩陣?yán)锩胬艋觯恍鑼@個矩陣優(yōu)化,使它除了對角線的其余元素都為0钩蚊,就可以了贡翘,美滋滋。
-
矩陣變換
我們知道矩陣乘法砰逻,本質(zhì)上就是一種線性變換的過程鸣驱。而正交基矩陣的乘法,則是坐標(biāo)系變換的過程蝠咆。設(shè)原空間的數(shù)據(jù)為X踊东,協(xié)方差矩陣為C,經(jīng)過正交基矩陣P刚操,得到了新坐標(biāo)系下的數(shù)據(jù)Y闸翅,即Y=PX。那么新坐標(biāo)系下的協(xié)方差矩陣D是怎樣的呢赡茸?
我們發(fā)現(xiàn)缎脾,新舊空間的協(xié)方差矩陣是有關(guān)系的,而且都和變換矩陣P有關(guān)系占卧。問題就轉(zhuǎn)化成了遗菠,能不能找到一個矩陣P联喘,使得新空間下的協(xié)方差矩陣的非對角線元素都為0.
-
矩陣對角化
首先,原始數(shù)據(jù)矩陣X的協(xié)方差矩陣C是一個實對稱矩陣辙纬,它有特殊的數(shù)學(xué)性質(zhì):
- 實對稱矩陣不同特征值對應(yīng)的特征向量必然正交豁遭。
- 設(shè)特征值λ 重數(shù)為r,則必然存在r個線性無關(guān)的特征向量對應(yīng)于λ贺拣,因此可以將這r個特征向量單位正交化蓖谢。
- 一個n階的實對稱矩陣一定可以找到n個單位正交特征向量,使其變成對角矩陣譬涡。
也就是說闪幽,P就是是協(xié)方差矩陣的特征向量單位化后按行排列出的矩陣,其中每一行都是C的一個特征向量涡匀。如果設(shè)P按照中特征值的從大到小盯腌,將特征向量從上到下排列,則用P的前K行組成的矩陣乘以原始數(shù)據(jù)矩陣X陨瘩,就得到了我們需要的降維后的數(shù)據(jù)矩陣Y腕够。
其實,經(jīng)過數(shù)學(xué)上的推導(dǎo)的舌劳,我們就可以知道帚湘,特征值對應(yīng)的特征向量就是理想中想取得正確的坐標(biāo)軸,而特征值就等于數(shù)據(jù)在旋轉(zhuǎn)之后的坐標(biāo)上對應(yīng)維度上的方差甚淡。
由于協(xié)方差矩陣的維度和特征相同大诸,所以在進(jìn)行特征值分解時,得到的特征值數(shù)目不會超過特征的數(shù)目材诽。
四. 從另一個角度理解PCA(參考)
在學(xué)習(xí)線性代數(shù)時底挫,我們都會學(xué)矩陣的特征值分解,我們知道一個方陣A經(jīng)過特征值分解后就得到特征向量和特征值了脸侥。那么建邓,這個所謂的特征值和特征向量到底是什么東西呢?
很多人都會說是那個經(jīng)典的式子:
這個式子是如此的簡單粗暴睁枕,以致于從這個公式來看官边,給向量x乘上一個矩陣A,只是相當(dāng)于給這個向量乘上了一個系數(shù)λ外遇。偌大一個矩陣A對向量x的作用竟然本質(zhì)上不過只是和一個小小的數(shù)字λ相同而已W⒉尽!跳仿!
所以這個矩陣分解方法到底具有什么樣的意義诡渴?
首先給出概念上的一種解釋。所謂的特征值和特征向量菲语,最重要的是理解“特征”這兩個字妄辩,特征向量翻譯為eigen vector, eigen這個單詞來自德語惑灵,本義是在“本身固有的,本質(zhì)的”眼耀。純數(shù)學(xué)的定義下英支,并不能很明白地理解到底為什么叫做特征值和特征向量。但是舉一個應(yīng)用例子哮伟,可能就容易理解多了干花。
在圖像處理中,有一種方法就是特征值分解楞黄。我們都知道圖像其實就是一個像素值組成的矩陣池凄,假設(shè)有一個100x100的圖像,對這個圖像矩陣做特征值分解鬼廓,其實是在提取這個圖像中的特征修赞,這些提取出來的特征是一個個的向量,即對應(yīng)著特征向量桑阶。而這些特征在圖像中到底有多重要,這個重要性則通過特征值來表示勾邦。比如這個100x100的圖像矩陣A分解之后蚣录,會得到一個100x100的特征向量組成的矩陣Q,以及一個100x100的只有對角線上的元素不為0的矩陣E眷篇,這個矩陣E對角線上的元素就是特征值萎河,而且還是按照從大到小排列的(取模,對于單個數(shù)來說蕉饼,其實就是取絕對值)虐杯,也就是說這個圖像A提取出來了100個特征,這100個特征的重要性由100個數(shù)字來表示昧港,這100個數(shù)字存放在對角矩陣E中擎椰。在實際中我們發(fā)現(xiàn),提取出來的這100個特征從他們的特征值大小來看创肥,大部分只有前20(這個20不一定达舒,有的是10,有的是30或者更多)個特征對應(yīng)的特征值很大叹侄,后面的就都是接近0了巩搏,也就是說后面的那些特征對圖像的貢獻(xiàn)幾乎可以忽略不計。
我們知道趾代,圖像矩陣A特征值分解后可以得到矩陣P和矩陣E(特征值對角矩陣):
所以贯底,根據(jù)特征值與特征向量,也能還原回圖像A撒强。既然已經(jīng)知道了矩陣E中只有前20個特征值比較重要禽捆,那么我們不妨試試把E中除了前20個后面的都置為0笙什,即只取圖像的前20個主要特征來恢復(fù)圖像,剩下的全部舍棄睦擂,看看此時會發(fā)生什么:
我們可以看到得湘,在只取前20個特征值和特征向量對圖像進(jìn)行恢復(fù)的時候,基本上已經(jīng)可以看到圖像的大體輪廓了顿仇,而取到前50的時候淘正,幾乎已經(jīng)和原圖像無異了。明白了吧臼闻,這就是所謂的矩陣的特征向量和特征值的作用鸿吆。
所以歸根結(jié)底,特征向量其實反應(yīng)的是矩陣A本身固有的一些特征述呐,本來一個矩陣就是一個線性變換惩淳,當(dāng)把這個矩陣作用于一個向量的時候,通常情況絕大部分向量都會被這個矩陣A變換得“面目全非”乓搬,但是偏偏剛好存在這么一些向量思犁,被矩陣A變換之后居然還能保持原來的樣子,于是這些向量就可以作為矩陣的核心代表了进肯。于是我們可以說:一個變換(即一個矩陣)可以由其特征值和特征向量完全表述激蹲,這是因為從數(shù)學(xué)上看,這個矩陣所有的特征向量組成了這個向量空間的一組基底江掩。而矩陣作為變換的本質(zhì)其實不就把一個基底下的東西變換到另一個基底表示的空間中么学辱?
五. 總結(jié)一下PCA算法的計算過程
- 去除平均值,進(jìn)行中心化环形。
- 計算協(xié)方差矩陣
- 計算協(xié)方差矩陣的特征值和特征向量
- 將特征相量按對應(yīng)特征值大小從上到下按行排列成矩陣策泣,取前k行組成矩陣P
- Y=PX 得到降維后的數(shù)據(jù)Y
參考:
https://blog.csdn.net/hjq376247328/article/details/80640544
https://blog.csdn.net/hustqb/article/details/78394058
https://blog.csdn.net/woainishifu/article/details/76418176