协方差及PCA降维计算
PCA(Principal Component Analysis,主成分分析),PCA是一種無監(jiān)督算法,也就是我們不需要標(biāo)簽也能對數(shù)據(jù)做降維,這就使得其應(yīng)用范圍更加廣泛了。那么PCA的核心思想是什么呢?這里我們提到了方差,咱們可以想象一下,如果一群人都堆疊在一起,我們想?yún)^(qū)分他們是不是比較困難,但是如果這群人站在馬路兩側(cè),我們就可以很清晰的判斷出來應(yīng)該這是兩伙人。所以基于方差我們可以做的就是讓方差來去判斷咱們數(shù)據(jù)的擁擠程度,在這里我們認(rèn)為方差大的應(yīng)該辨識度更高一些,因為分的比較開(一條馬路給隔開啦)。
降維致力于解決三類問題。?
1. 降維可以緩解維度災(zāi)難問題;?
2. 降維可以在壓縮數(shù)據(jù)的同時讓信息損失最小化;?
3. 理解幾百個維度的數(shù)據(jù)結(jié)構(gòu)很困難,兩三個維度的數(shù)據(jù)通過可視化更容易理解。?
就像我們圖上面的,我說有一個向量(3,2),但是為什么這個向量是這樣的表示呢?因為它在我們的做標(biāo)系中,如果我把坐標(biāo)系換了,它就不是(3,2)了。作為基,首先的一個前提就是要相互垂直,或者說內(nèi)積為0,因為X和Y它們表達(dá)的分別是兩種指標(biāo),我們不希望它們之間內(nèi)部存在任何聯(lián)系,所以必須讓他們內(nèi)積為0,這樣就是各自獨立的啦!
所謂的降維就是要把我們的數(shù)據(jù)投影到最合適的基中
方差,協(xié)方差和協(xié)方差矩陣
方差(Variance)是度量一組數(shù)據(jù)的分散程度。方差是各個樣本與樣本均值的差的平方和的均值:?
協(xié)方差(Covariance)是度量兩個變量的變動的同步程度,也就是度量兩個變量線性相關(guān)性程度。如果兩個變量的協(xié)方差為0,則統(tǒng)計學(xué)上認(rèn)為二者線性無關(guān)。注意兩個無關(guān)的變量并非完全獨立,只是沒有線性相關(guān)性而已。計算公式如下:?
如果協(xié)方差大于0表示一個變量增大是另一個變量也會增大,即正相關(guān),協(xié)方差小于0表示一個變量增大是另一個變量會減小,即負(fù)相關(guān)。?
對于二維數(shù)據(jù)降維到一維數(shù)據(jù),按照上面的方法找到方差值最大就行。但是對于高維數(shù)據(jù)來說,僅此一個條件并不能完全決定。三維數(shù)據(jù)降維到二維時,首先我們希望找到一個方向使得投影后方差最大,這樣就完成了第一個方向的選擇,繼而我們選擇第二個投影方向。
如果我們還是單純只選擇方差最大的方向,很明顯,這個方向與第一個方向應(yīng)該是“幾乎重合在一起”,顯然這樣的維度是沒有用的,因此,應(yīng)該有其他約束條件。從直觀上說,讓兩個字段盡可能表示更多的原始信息,我們是不希望它們之間存在(線性)相關(guān)性的,因為相關(guān)性意味著兩個字段不是完全獨立,必然存在重復(fù)表示的信息。數(shù)學(xué)上協(xié)方差表示兩組數(shù)據(jù)的相關(guān)性:
假設(shè)有一個矩陣:
然后我們用X乘以X的轉(zhuǎn)置,并乘上系數(shù)1/m:
這個矩陣對角線上的兩個元素分別是兩個字段的方差,而其它元素是a和b的協(xié)方差。兩者被統(tǒng)一到了一個矩陣的。根據(jù)矩陣相乘的運算法則,這個結(jié)論很容易被推廣到一般情況:
設(shè)我們有m個n維數(shù)據(jù)記錄,將其按列排成n乘m的矩陣X,設(shè)C=1mXXT,則C是一個對稱矩陣,其對角線分別個各個字段的方差,而第i行j列和j行i列元素相同,表示i和j兩個字段的協(xié)方差。
PCA算法步驟:
設(shè)有m條n維數(shù)據(jù)。
1)將原始數(shù)據(jù)按列組成n行m列矩陣X
2)將X的每一行(代表一個屬性字段)進(jìn)行零均值化,即減去這一行的均值
3)求出協(xié)方差矩陣?
4)求出協(xié)方差矩陣的特征值及對應(yīng)的特征向量
5)將特征向量按對應(yīng)特征值大小從上到下按行排列成矩陣,取前k行組成矩陣P
6)Y=PX即為降維到k維后的數(shù)據(jù)
實例:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
對其進(jìn)行0均值化處理:
? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
求協(xié)方差矩陣:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
求解后特征值為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
特征值和特征向量的求法是這樣的:假設(shè)A
根據(jù)前面的公式AA乘以特征向量,必然等于特征值乘以特征向量。我們建立特征方程求解:
從特征方程可以看出,矩陣與單位矩陣和特征值乘積的矩陣行列式為0,即:
矩陣的兩個特征值都等于-1。現(xiàn)在再用特征值來解特征向量。?把λ=?1帶入:
得到:
所以:
對特征值分解后按照特征值大小排序,取前多少個。通過特征值排列 ,我們可以得到數(shù)據(jù)在這些特征向量上的分布和多樣性。
其對應(yīng)的特征向量分別是:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
其中對應(yīng)的特征向量分別是一個通解,c1和c2可取任意實數(shù)。那么標(biāo)準(zhǔn)化后的特征向量為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
因此我們的矩陣P是:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
可以驗證協(xié)方差矩陣C的對角化:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ?
最后我們用P的第一行乘以數(shù)據(jù)矩陣,就得到了降維后的表示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??
?
?
總結(jié)
以上是生活随笔為你收集整理的协方差及PCA降维计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中的 istringstream
- 下一篇: SIFT详解