PCA (principal component analysis)算法
一、 PCA算法
PCA(principal component analysis)是一種應(yīng)用廣泛的降維算法,其基本思想是想通過(guò)找到一個(gè)低維的“最具有代表性”的方向,并將原數(shù)據(jù)映射到這個(gè)低維空間中去,從而實(shí)現(xiàn)數(shù)據(jù)的降維。
1. 算法原理
??我們先從二維數(shù)據(jù)簡(jiǎn)單說(shuō)明,假設(shè)我們有n個(gè)二維數(shù)據(jù)組成的數(shù)據(jù)集\(D_{n\times 2}\)(如圖),現(xiàn)在我們想要將其映射到一維空間,并且我們的目的是盡可能保留信息。那問(wèn)題是如何尋找這個(gè)主方向?假設(shè)我們的原數(shù)據(jù)集為\(X_{n\times m}\)(n為數(shù)據(jù)維度,m為數(shù)據(jù)個(gè)數(shù)),那么上述問(wèn)題就等價(jià)表述為:找到一個(gè)變換矩陣,將X從高維空間映射到低維空間中去,即:
| 圖1. 二維PCA降維示意圖(由于技術(shù)限制,本圖映射并沒(méi)有遵循投影規(guī)則) |
??我們首先先確定我們的優(yōu)化目標(biāo),即什么情況下的映射能盡可能保留我們數(shù)據(jù)的信息,又或者說(shuō)映射成的數(shù)據(jù)\(Y\)要滿足什么條件?
1. redundancy (冗余)
??假設(shè)在一個(gè)二維數(shù)據(jù)中,是否所有維度都應(yīng)該保留?在圖2中,我們對(duì)于幾組不同的數(shù)據(jù),很明顯能看出,左側(cè)圖中\(r_{1},r_{2}\)兩個(gè)維度相關(guān)性較弱,我們無(wú)法通過(guò)一個(gè)數(shù)據(jù)預(yù)測(cè)另一個(gè)數(shù)據(jù)值,所以這組數(shù)據(jù)具有低冗余性。對(duì)于右側(cè)一組數(shù)據(jù),很明顯,\(r_{1},r_{2}\)具有十分強(qiáng)的相關(guān)關(guān)系,因此我們完全可以通過(guò)回歸方程由一個(gè)數(shù)據(jù)值來(lái)預(yù)測(cè)另一個(gè)數(shù)據(jù)值,即該數(shù)據(jù)是只需要一個(gè)維度即可表示,故該數(shù)據(jù)是高度冗余的。
??為此PCA的思想就是去除那些冗余的維度,讓映射到的低維空間中,每個(gè)方向都具有低的相關(guān)性,從而使映射后的數(shù)據(jù)\(Y\)冗余程度大大減小,從而實(shí)現(xiàn)降維的目的。
| 圖2. 來(lái)自兩個(gè)單獨(dú)的測(cè)量 ,\(r_{1}\),\(r_{2}\) 的數(shù)據(jù)中可能存在冗余的情況。左圖中的兩個(gè)測(cè)量是不相關(guān)的,因?yàn)槟悴荒軓囊粋€(gè)預(yù)測(cè)另一個(gè)。相反,右圖中的兩個(gè)測(cè)量高度相關(guān),這意味著數(shù)據(jù)高度冗余。 |
2. 協(xié)方差矩陣
??由概率論的知識(shí)我們知道,協(xié)方差可以用來(lái)描述兩個(gè)變量之間的相關(guān)性。
協(xié)方差的定義為:
協(xié)方差越大,兩個(gè)變量的相關(guān)性越強(qiáng);協(xié)方差等于0,兩個(gè)變量沒(méi)有相關(guān)性。
??對(duì)于一個(gè)零均值化后數(shù)據(jù)矩陣\(X_{n\times m}\)(m為數(shù)據(jù)個(gè)數(shù),n為數(shù)據(jù)維度),其協(xié)方差矩陣的定義為:
其中協(xié)方差矩陣對(duì)角線上的元素是每個(gè)變量自身的方差,其他元素是兩個(gè)變量之間的協(xié)方差。協(xié)方差矩陣反應(yīng)了數(shù)據(jù)的噪聲與信號(hào),其中對(duì)角代表著信號(hào)值,其余代表著噪聲。我們不僅希望噪聲越小,還希望信號(hào)越大,即我們希望保留數(shù)據(jù)方差最大所代表的方向。
?? 對(duì)于式(1),我們可以求得:\(Cov(X) = \frac{1}{m-1} XX^{T}\),我們希望新數(shù)據(jù)集\(Y\)的數(shù)據(jù)維度之間沒(méi)有冗余,即我們希望他們之間的協(xié)方差為0,因此\(Y\)的協(xié)方差矩陣是一個(gè)對(duì)角矩陣。
3. 算法推導(dǎo)
由上述已知Y的協(xié)方差矩陣為一個(gè)對(duì)角矩陣,即為\(\Lambda\),由(1)及題意有:
即:
由線性代數(shù)的知識(shí)我們知道,上式是一個(gè)對(duì)稱(chēng)矩陣的合同變換,其中對(duì)角陣\(\Lambda\)是其特征值組成的矩陣,\(A\)是其特征值對(duì)應(yīng)特征向量所組成的矩陣。
??綜上我們得知,如果要將X映射到Y(jié)中,只需要選取最大特征值所對(duì)應(yīng)的特征向量構(gòu)成變換矩陣A,則可獲得映射后的數(shù)據(jù)集Y。
4. 算法步驟
- 將數(shù)據(jù)集X零均值化
- 計(jì)算X的協(xié)方差矩陣,并進(jìn)行特征值分解
- 選取k個(gè)最大的特征值所對(duì)應(yīng)的特征向量,組成變換矩陣A
- 得到降維后的新數(shù)據(jù)Y=AX
2. 代碼補(bǔ)充
補(bǔ)充的代碼如下:
######### 需要你完成: #########
# 1. 計(jì)算數(shù)據(jù)的均值向量mu
mu = np.mean(X,axis=0)
X = X - mu
# 2. 計(jì)算數(shù)據(jù)的協(xié)方差矩陣S
S = np.cov(X.T)
# 3. 對(duì)S進(jìn)行特征值分解,求得其特征值L以及對(duì)應(yīng)的特征向量U
L,U = np.linalg.eig(S)
L = np.real(L)
# 4. 選取L中前k個(gè)最大的特征值所對(duì)應(yīng)的特征向量構(gòu)成降維矩陣W
idx = np.argsort(L)[::-1]
W = U[:, idx[:k]]
###############################
3. 實(shí)驗(yàn)效果
原始圖片(圖3)及降維后圖片(圖4)如下:
![]() |
|---|
| 圖3. 原始圖像展示 |
![]() |
|---|
| 圖4. 保留不同數(shù)量的主成分后的降維圖片 |
4. 參考文獻(xiàn)
[1] J.Shlens "A Tutorial on Principal Component Analysis" arXiv preprint, arXiv:1404.1100v1



浙公網(wǎng)安備 33010602011771號(hào)