PCA降維在MATLAB上的實(shí)現(xiàn)剖析_第1頁(yè)
PCA降維在MATLAB上的實(shí)現(xiàn)剖析_第2頁(yè)
PCA降維在MATLAB上的實(shí)現(xiàn)剖析_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余7頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、PCA 降維在MATLA吐的實(shí)現(xiàn)學(xué)專院業(yè)計(jì)算機(jī)科學(xué)與技術(shù) 計(jì)算機(jī)科學(xué)與技術(shù)級(jí)名年姓a11Q/王云標(biāo)學(xué) 號(hào) 指導(dǎo)教師 魏建國(guó)2014年 5月 28日PCA降維在MATLA上的實(shí)現(xiàn)一實(shí)驗(yàn)?zāi)康?二實(shí)驗(yàn)環(huán)境3三實(shí)驗(yàn)原理31、PCA降維方法原理 32、MATLAB33、PCA降維方法詳解 41)、原始數(shù)據(jù):42)、協(xié)方差矩陣的求法: 53)、計(jì)算協(xié)方差矩陣的特征向量和特征值: 74)、選擇成分組成模式矢量: 75)、得到降維后的數(shù)據(jù): 7四實(shí)驗(yàn)代碼詳解8五實(shí)驗(yàn)結(jié)果9六實(shí)驗(yàn)總結(jié)9PCA降維在MATLABh的實(shí)現(xiàn)一實(shí)驗(yàn)?zāi)康?掌握PCA降維的基本內(nèi)容2 了解MATLA的基本用法3用PCA降維算法處理圖像數(shù)據(jù)、

2、實(shí)驗(yàn)環(huán)境Matlab 7.0三實(shí)驗(yàn)原理1、PCA降維方法原理PCA的原理就是將原來(lái)的樣本數(shù)據(jù)投影到一個(gè)新的空間中,相 當(dāng)于我們?cè)诰仃嚪治隼锩鎸W(xué)習(xí)的將一組矩陣映射到另外的坐標(biāo)系 下。通過(guò)一個(gè)轉(zhuǎn)換坐標(biāo),也可以理解成把一組坐標(biāo)轉(zhuǎn)換到另外一 組坐標(biāo)系下,但是在新的坐標(biāo)系下,表示原來(lái)的原本不需要那么 多的變量,只需要原來(lái)樣本的最大的一個(gè)線性無(wú)關(guān)組的特征值對(duì) 應(yīng)的空間的坐標(biāo)即可。PCA即主成分分析,是圖像處理中經(jīng)常用到的降維方法,大家 知道,我們?cè)谔幚碛嘘P(guān)數(shù)字圖像處理方面的問(wèn)題時(shí),比如經(jīng)常用 的圖像的查詢問(wèn)題,在一個(gè)幾萬(wàn)或者幾百萬(wàn)甚至更大的數(shù)據(jù)庫(kù)中 查詢一幅相近的圖像。這時(shí),我們通常的方法是對(duì)圖像庫(kù)中的圖

3、 片提取響應(yīng)的特征,如顏色,紋理,sift ,surf,vlad等等特征, 然后將其保存,建立響應(yīng)的數(shù)據(jù)索引,然后對(duì)要查詢的圖像提取 相應(yīng)的特征,與數(shù)據(jù)庫(kù)中的圖像特征對(duì)比,找出與之最近的圖片。2、MATLABMATLA(矩陣實(shí)驗(yàn)室)是 MATrix LABoratory 的縮寫,是一款 由美國(guó)The MathWorks公司出品的商業(yè)數(shù)學(xué)軟件。 MATLAB是種 用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級(jí)技術(shù) 計(jì)算語(yǔ)言和交互式環(huán)境。除了矩陣運(yùn)算、繪制函數(shù) /數(shù)據(jù)圖像等常 用功能外,MATLA還可以用來(lái)創(chuàng)建用戶界面及與調(diào)用其它語(yǔ)言 (包 括C, C+ffi FORTRAN編寫的程序。3、

4、PCA降維方法詳解1) 、原始數(shù)據(jù):由于本實(shí)驗(yàn)數(shù)據(jù)過(guò)于龐大,為了方便,我們假定數(shù)據(jù)是二維的, 借助網(wǎng)絡(luò)上的一組數(shù)據(jù),如下:x=2.5, 0.5, 2.2, 1.9, 3.1,2.3, 2, 1, 1.5, 1.1Ty=2.4,0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9T2) 、計(jì)算協(xié)方差矩陣(1)協(xié)方差矩陣:以下是含有n個(gè)樣本的集合中,一些數(shù)理統(tǒng)計(jì)的相關(guān)概念:均值:/ _ ELI岡-尉方差:-在這里,標(biāo)準(zhǔn)差和方差一般是用來(lái)描述一維數(shù)據(jù)的,但現(xiàn)實(shí)生 活我們常常遇到含有多維數(shù)據(jù)的數(shù)據(jù)集,例如上學(xué)時(shí)免不了要統(tǒng) 計(jì)多個(gè)學(xué)科的考試成績(jī)。面對(duì)這樣的數(shù)據(jù)集,我們當(dāng)

5、然可以按照 每一維獨(dú)立的計(jì)算其方差,但是通常我們還想了解這幾科成績(jī)之 間的關(guān)系,這時(shí),我們就要用協(xié)方差,協(xié)方差就是一種用來(lái)度量 兩個(gè)隨機(jī)變量關(guān)系的統(tǒng)計(jì)量,其定義為:A. i )=從協(xié)方差的定義上我們也可以看出一些顯而易見的性質(zhì),如:1. cov(X,Y)=var(X);2. cov(X,Y)=var(Y,X);需要注意的是,協(xié)方差也只能處理二維問(wèn)題,那維數(shù)多了自然就h!需要計(jì)算多個(gè)協(xié)方差,比如n維的數(shù)據(jù)集就需要計(jì)算'個(gè)協(xié)方差,那自然而然的我們會(huì)想到使用矩陣來(lái)組織這些數(shù)據(jù)。給 出協(xié)方差矩陣的定義:=陽(yáng)=coDimf.助叫)這個(gè)定義還是很容易理解的,我們可以舉一個(gè)簡(jiǎn)單的三維的例子,假設(shè)數(shù)據(jù)

6、集有三個(gè)維度,則協(xié)方差矩陣為:CGvfi/r) cov(y.tj) cov(/, z) ICGV(Z J) cov(z.y) COV(Zj z) I可見,協(xié)方差矩陣是一個(gè)對(duì)稱的矩陣,而且對(duì)角線是各個(gè)維度上的方差。2)、協(xié)方差矩陣的求法:協(xié)方差矩陣計(jì)算的是不同維度之間的協(xié)方差,而不是不同樣本之 間的。下面我們將在 matlab中用一個(gè)例子進(jìn)行詳細(xì)說(shuō)明:首先,隨機(jī)產(chǎn)生一個(gè)10*3維的整數(shù)矩陣作為樣本集,10為樣本的個(gè)數(shù),3 為樣本的維數(shù)。MySample = fix(rand(10,3)*50)MySample101529154613232130119354245119405112114E5151

7、11221212025根據(jù)公式,計(jì)算協(xié)方差需要計(jì)算均值,那是按行計(jì)算均值還是按列呢,我一開始就老是困擾這個(gè)問(wèn)題。前面我們也特別強(qiáng)調(diào)了, 協(xié)方差矩陣是計(jì)算不同維度間的協(xié)方差,要時(shí)刻牢記這一點(diǎn)。樣 本矩陣的每行是一個(gè)樣本,每列為一個(gè)維度,所以我們要按列計(jì) 算均值。為了描述方便,我們先將三個(gè)維度的數(shù)據(jù)分別賦值: dim1 = MySample(:,1);dim2 = MySample(:,2);dim3 = MySample(:,3);計(jì)算dim1與dim2, dim1與dim3,dim2與dim3的協(xié)方差: sum(dim1-mea n(dim1).*(dim2-mea n(dim2)/(size

8、(MySample ,1)-1)sum(dim1-mea n(dim1).*(dim3-mea n(dim3)/(size(MySample ,1)-1)sum(dim2-mea n(dim2).*(dim3-mea n(dim3)/(size(MySample,1)-1)搞清楚了這個(gè)后面就容易多了,協(xié)方差矩陣的對(duì)角線就是各個(gè)維 度上的方差,下面我們依次計(jì)算:std(dim1F2std(dim22std(dim3)A2這樣,我們就得到了計(jì)算協(xié)方差矩陣所需要的所有數(shù)據(jù),調(diào)用Matlab自帶的cov函數(shù)進(jìn)行驗(yàn)證:cov(MySample)105,322274,5333-10.088974.5333

9、260.5222-106.4&00-16.BS39 -166+48&094.1778可以看到跟我們計(jì)算的結(jié)果是一樣的,說(shuō)明我們的計(jì)算是正確的。 但是通常我們不用這種方法,而是用下面簡(jiǎn)化的方法進(jìn)行計(jì)算:1, 先讓樣本矩陣中心化,即每一維度減去該維度的均值。2, 然后直接用新的樣本矩陣乘上它的轉(zhuǎn)置。3, 然后除以(N-1)即可。其實(shí)這種方法也是由前面的公式通 道而來(lái),只不過(guò)理解起來(lái)不是很直觀而已。其Matlab代碼實(shí)現(xiàn)如下:X = MySample - repmat(mean(MySample),10,1);%中心化樣本矩陣 c = (X ' *X)./(size(X,1)

10、-1)其中B=repmat(A,m,n)%將矩陣A復(fù)制mx n塊。即把A作為B的元 素,B由 mx n個(gè) A平鋪而成。B的維數(shù)是size(A,1)*m, (size(A,2)* nB = mean(A)的說(shuō)明:如果你有這樣一個(gè)矩陣: A = 1 2 3; 3 3 6; 4 6 8; 4 7 7;用mean(A)(默認(rèn) dim=1 ) 就會(huì)求每一列的均值 ans =3.00004.50006.0000 用 mean(A,2)就會(huì)求每一行 的均值 ans =2.00004.00006.00006.0000size(A,n)%如果在size函數(shù)的輸入?yún)?shù)中再添加一項(xiàng) n,并用1 或2為n賦值,則si

11、ze將返回矩陣的行數(shù)或列數(shù)。其中r=size(A,1) 該語(yǔ)句返回的是矩陣A的行數(shù),c=size(A,2) 該語(yǔ)句返回的是矩 陣A的列數(shù)上面我們簡(jiǎn)單說(shuō)了一下協(xié)方差矩陣及其求法,言歸正傳,我們用 上面簡(jiǎn)化求法,求出樣本的協(xié)方差矩陣為:<.616555556 .615444444Q0¥=i!.161§4444嚴(yán) 7165555563)、計(jì)算協(xié)方差矩陣的特征向量和特征值因?yàn)閰f(xié)方差矩陣為方陣,我們可以計(jì)算它的特征向量和特征值, 如下:eige nvectors,eige nvalues = eig(cov)eigenvalues 二匚04908339861.28402771)

12、eigenvectors =<-.735178656 .677873399、i .677873399 735178656;我們可以看到這些矢量都是單位矢量,也就是它們的長(zhǎng)度為 1這對(duì)PCA來(lái)說(shuō)是很重要的。4)、選擇成分組成模式矢量 求出協(xié)方差矩陣的特征值及特征向量之后,按照特征值由大到小 進(jìn)行排列,這將給出成分的重要性級(jí)別?,F(xiàn)在,如果你喜歡,可 以忽略那些重要性很小的成分,當(dāng)然這會(huì)丟失一些信息,但是如 果對(duì)應(yīng)的特征值很小,你不會(huì)丟失很多信息。如果你已經(jīng)忽略了 一些成分,那么最后的數(shù)據(jù)集將有更少的維數(shù),精確地說(shuō),如果 你的原始數(shù)據(jù)是n維的,你選擇了前p個(gè)主要成分,那么你現(xiàn)在 的數(shù)據(jù)將僅有p

13、維?,F(xiàn)在我們要做的是組成一個(gè)模式矢量,這只 是幾個(gè)矢量組成的矩陣的一個(gè)有意思的名字而已,它由你保持的 所有特征矢量構(gòu)成,每一個(gè)特征矢量是這個(gè)矩陣的一列。 對(duì)于我們的數(shù)據(jù)集,因?yàn)橛袃蓚€(gè)特征矢量,因此我們有兩個(gè)選擇。 我們可以用兩個(gè)特征矢量組成模式矢量:C677873399 -735178656>;.735178656.677873399 ,我們也可以忽略其中較小特征值的一個(gè)特征矢量,從而得到如下 模式矢量:.旳7873399、k.73517S6565)、得到降維后的數(shù)據(jù)FmalDaia - rowFecmire I eciorx rowda/aAdjitsi 其中rowFeatureVec

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

15、正 交的重要性。我們已經(jīng)將我們的數(shù)據(jù)從原來(lái)的xy軸表達(dá)變換為現(xiàn)在的單個(gè)特征矢量表達(dá)。說(shuō)明:如果要恢復(fù)原始數(shù)據(jù),只需逆過(guò)程計(jì)算即可,即:rowdataAdjust = rowFeat/irerector1 xFinalDatarow Ongmaklala -( mvFeaiurerecfoi T x FimiiData +四實(shí)驗(yàn)代碼詳解按照上述PCA降維算法的原理編寫代碼如下:load im.mat將im中的數(shù)據(jù)導(dǎo)入MATLABm = mean (im,2);求im數(shù)據(jù)每一行的平均值,即得數(shù)為一列向量,每一元素為im每一行的平均值。Train_Number = size(im,2);求數(shù)據(jù)每一行

16、數(shù)據(jù)的元素個(gè)數(shù)A =;定義一個(gè)空矩陣Afor i = 1 : Train_Numbertemp = im(:,i) - ui nt8(m);定義一個(gè)中間矩陣變量,其值為im中每一列減去m的得數(shù)A = A temp;將中間矩陣變量temp的值存入A中endfor循環(huán)的作用是將im每一列都減去m并存入A中L = A'*A;L=A矩陣與其轉(zhuǎn)置矩陣的乘積V D = eig(L);求矩陣L的特征值與特征向量L_eig_vec =;定義一個(gè)空矩陣for i = 1 : 15L_eig_vec = L_eig_vec V(:,i);End將特征矩陣存入L中PCA = A * L_eig_vec;PCA為A矩陣與特征矩陣的乘積,結(jié)果就是降維后的矩陣,為 520000 15 維度。五實(shí)驗(yàn)結(jié)果最后降至15維» L =» V D二 e±g IL).» L_eig_vec =;» for i = 1 : 15L_eis_v0G - L_eij_

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論