PCA主成分分析詳解,結(jié)合matlab_第1頁
PCA主成分分析詳解,結(jié)合matlab_第2頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、PCA(主成分分析)詳解(寫給初學(xué)者)結(jié)合matlab一、簡介PCA(PiiiicipalComponentsAnalysis)即主成分分析,是圖像處理屮經(jīng)常用到的降維方法,大家知道,我們在處理有關(guān)數(shù)字圖像處理方面的問題時,比如經(jīng)常用的圖像的查詢問題,在一個幾萬或者幾百萬甚至更大的數(shù)據(jù)庫屮查詢一幅相近的圖像。這時,我們通常的方法是對圖像庫中的圖片提取響應(yīng)的特征,如顏色,紋理,sift,surf,vlad等等特征,然后將其保存,建立響應(yīng)的數(shù)據(jù)索引,然后對要查詢的圖像提取相應(yīng)的特征,與數(shù)據(jù)庫中的圖像特征對比,找出與之最近的圖片。這里,如果我們?yōu)榱颂岣卟樵兊臏?zhǔn)確率,通常會提取一些較為復(fù)雜的特征,如s

2、ift,SUTf等,一幅圖像有很多個這種特征點,每個特征點又有一個相應(yīng)的描述該特征點的128維的向量,設(shè)想如果一幅圖像有300個這種特征點,那么該幅圖像就有300*vector(128維)個,如果我們數(shù)據(jù)庫中有一百萬張圖片,這個存儲量是相當(dāng)大的,建立索引也很耗時,如果我們對每個向量進(jìn)行PCA處理,將其降維為64維,是不是很節(jié)約存儲空間???對于學(xué)習(xí)圖像處理的人來說,都知道PCA是降維的,但是,很多人不知道具體的原理,為此,我寫這篇文章,來詳細(xì)闡述一下PCA及其具體計算過程:二、PCA詳解1、原始數(shù)據(jù):為了方便,我們假定數(shù)據(jù)是二維的,借助網(wǎng)絡(luò)上的一組數(shù)據(jù),如下:x=2.5,0.5,2.2,1.9,

3、3.1,2.3,2,1,1.5,1.1T尸2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9T2、計算協(xié)方差矩陣什么是協(xié)方差矩陣?相信看這篇文章的人都學(xué)過數(shù)理統(tǒng)計,一些基本的常識都知道,但是,也許你很長時間不看了,都忘差不多了,為了方便大家更好的理解,這里先簡單的回顧一下數(shù)理統(tǒng)計的相關(guān)知識,當(dāng)然如果你知道協(xié)方差矩陣的求法你可以跳過這里。(1)協(xié)方差矩陣:首先我們給你一個含有n個樣本的集合,依次給出數(shù)理統(tǒng)計中的一些相關(guān)概念:均值;X=望也方差;S2=既然我們都有這么多描述數(shù)據(jù)之間關(guān)系的統(tǒng)計量,為什么我們還要用協(xié)方差呢?我們應(yīng)該注意到,標(biāo)準(zhǔn)差和方差一般是用來描述一維數(shù)據(jù)

4、的,但現(xiàn)實生活我們常常遇到含有多維數(shù)據(jù)的數(shù)據(jù)集,最簡單的大家上學(xué)時免不了要統(tǒng)計多個學(xué)科的考試成績。面對這樣的數(shù)據(jù)集,我們當(dāng)然可以按照每一維獨立的計算其方差,但是通常我們還想了解這幾科成績之間的關(guān)系,這時,我們就要用協(xié)方差,協(xié)方差就是一種用來covg羅"""T)度量兩個隨機(jī)變量關(guān)系的統(tǒng)計量,其定義為:n1從協(xié)方差的定義上我們也可以看出一些顯而易見的性質(zhì),如:1.COV(X,X)=vaT(馬(X的方差)2.COV(X,Y)二COV(Y,X)需要注意的是,協(xié)方差也只能處理二維問題,那維數(shù)多了自然就需要72計算多個協(xié)方差,比如n維的數(shù)據(jù)集就需要計算耐芮個協(xié)方差,那自然而然

5、的我們會想到使用矩陣來組織這些數(shù)據(jù)。給出協(xié)方差矩陣的定義:Cnxn=(cjqj=這個定義還是很容易理解的,我們可以舉一個簡單的三維的例子,假設(shè)數(shù)據(jù)集有三個維度,則協(xié)方差矩陣為(cov(x,x)cov(x,y)cov(x,z)cov(y,x)cov(y,y)cov(y,z)cov(z,x)cov(z,y)cov(z,z)可見,協(xié)方差矩陣是一個對稱的矩陣,而且對角線是各個維度上的方差。(2)協(xié)方差矩陣的求法:協(xié)方差矩陣計算的是不同維度Z間的協(xié)方差,而不是不同樣本Z間的。卜面我們將在matlab中用一個例子進(jìn)行詳細(xì)說明:首先,隨機(jī)產(chǎn)生一個10*3維的整數(shù)矩陣作為樣本集,10為樣本的個數(shù),3為樣本的維

6、數(shù)。MySample=fix(rand(10,3)*50)MySample=407324548164742452446314033473713213727451947393248478根據(jù)公式,計算協(xié)方差需要計算均值,那是按行計算均值還是按列呢,我一開始就老是困擾這個問題。前面我們也特別強(qiáng)調(diào)了,協(xié)方差矩陣是計算不同維度間的協(xié)方差,要時刻牢記這一點。樣本矩陣的每行是一個樣本,每列為一個維度,所以我們要按列計算均值。為了描述方便,我們先將三個維度的數(shù)據(jù)分別賦值:diinl=MySample(:,l);diin2=MySainple(:,2);diin3=MySainple(:,3);計算diinl

7、與diin2,diinl與dim3,dim2與dim3的協(xié)方差:siun(diin1-meaii(diin1).*(diin2-meaii(diin2)/(size(MySainple,1)-1)%得到74.5333siun(dunl-meaii(diinl).*(diin3-meaii(diin3)/(size(MySample,1)-1)%得到-10.0889sum(dim2-mean(dim2).*(dim3-mean(dim3)/(size(MySample,1)-1)%得到-10*000搞清楚了這個后面就容易多了,協(xié)方差矩陣的對角線就是各個維度上的方差,下面我們依次計算:std(di

8、inl)A2%得到108.3222std(diin2)A2%得到260.6222std(diin3)A2%得到94.1778這樣,我們就得到了計算協(xié)方差矩陣所需要的所有數(shù)據(jù),調(diào)用Matlab自帶的COV函數(shù)進(jìn)行驗證:cov(MySainple)aiis=301.155678.0000-120.244478.0000268.9444-126.9444120.2444-126.9444216.0111可以看到跟我們計算的結(jié)果是一樣的,說明我們的計算是正確的。但是通常我們不用這種方法,而是用下面簡化的方法進(jìn)行計算:先讓樣本矩陣中心化,即每一維度減去該維度的均值,然后直接用新的到的樣本矩陣乘上它的轉(zhuǎn)置

9、,然后除以(N-1)即可。其實這種方法也是由前面的公式通道而來,只不過理解起來不是很直觀而已。大家可以自己寫個小的矩陣看一下就明白了。其Matlab代碼實現(xiàn)如下:X=MySainple-iepmat(meaii(MySainple),10,1);%中心化樣本矩陣C=(X,*X)./(size(X,l)-l)(為方便對matlab不太明白的人,小小說明一下各個函數(shù),同樣,對matlab有一定基礎(chǔ)的人直接跳過:B=iepmat(A,m,n)%將矩陣A復(fù)制mXn塊,即把A作為B的元素,B由mXn個A平鋪而成。B的維數(shù)是size(A,l)*m,(size(A,2)*nB=meaii(A)的說明:如果你

10、有這樣一個矩陣:A=123;336;468;477;用meaii(A)(默認(rèn)diin=l)就會求每一列的均值aiis=3.00004.50006.0000用meaii(A,2)就會求每一行的均值aiis=2.00004.00006.00006.0000size(A,n)%如果在size函數(shù)的輸入?yún)?shù)中再添加一項n,并用1或2為n賦值,則size將返回矩陣的行數(shù)或列數(shù)。其中尸size(A,l)該語句返回的是矩陣A的行數(shù),c=size(A,2)該語句返回的是矩陣A的列數(shù))上面我們簡單說了一下協(xié)方差矩陣及其求法,言歸正傳,我們用上面簡化求法,求出樣本的協(xié)方差矩陣為:1f.616555556.6154

11、44444cov=-<I615444444.716555556J丿.3、計算協(xié)方差矩陣的特征向量和特征值因為協(xié)方差矩陣為方陣,我們可以計算它的特征向量和特征值,如下:735178<S<S.677873399eigenvectors,eigenvalues=eig(cov)735178656丿我們可以看到這些矢量都是單位矢量,也就是它們的長度為1,這對PCA來說是很重要的。4、選擇成分組成模式矢量求出協(xié)方差矩陣的特征值及特征向量之后,按照特征值由大到小進(jìn)行排列,這將給出成分的重要性級別?,F(xiàn)在,如果你喜歡,可以忽略那些重要性很小的成分,當(dāng)然這會丟失一些信息,但是如果對應(yīng)的特征值很

12、小,你不會丟失很多信息。如果你已經(jīng)忽略了一些成分,那么最后的數(shù)據(jù)集將有更少的維數(shù),精確地說,如果你的原始數(shù)據(jù)是n維的,你選擇了前P個主要成分,那么你現(xiàn)在的數(shù)據(jù)將僅有P維?,F(xiàn)在我們要做的是組成一個模式矢量,這只是幾個矢量組成的矩陣的一個有意思的名字而已,它由你保持的所有特征矢量構(gòu)成,每一個特征矢量是這個矩陣的一列。對于我們的數(shù)據(jù)集,因為有兩個特征矢量,因此我們有兩個選擇。我們可以用兩個特征矢量組成模式矢量:(.677873399-.735178656、.735178656.6力873399丿我們也可以忽略其中較小特征值的一個特征矢量,從而得到如下模式矢量'.677873399、,.735

13、178656丿5、得到降維后的數(shù)據(jù)FinalData=rowFeatureVectorXrowdataAdjust其中iowFeatoeVector是由模式矢量作為列組成的矩陣的轉(zhuǎn)置,因此它的行就是原來的模式矢量,而且對應(yīng)最大特征值的特征矢量在該矩陣的最上一行。rowdataAdjust是每一維數(shù)據(jù)減去均值后,所組成矩陣的轉(zhuǎn)置,即數(shù)據(jù)項目在每一列中,每一行是一維,對我們的樣本來說即是,第一行為x維上數(shù)據(jù),第二行為y維上的數(shù)據(jù)。FmalData是最后得到的數(shù)據(jù),數(shù)據(jù)項目在它的列中,維數(shù)沿著行。這將給我們什么結(jié)果呢?這將僅僅給出我們選擇的數(shù)據(jù)。我們的原始數(shù)據(jù)有兩個軸(x和y),所以我們的原始數(shù)據(jù)按這兩個軸分布。我們可以按任何兩個我們喜歡的軸表示我們的數(shù)據(jù)。如果這些軸是正交的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論