文档库 最新最全的文档下载
当前位置:文档库 › PCA与PPCA详细介绍

PCA与PPCA详细介绍

PCA与PPCA详细介绍
PCA与PPCA详细介绍

PRINCIPAL COMPONENT ANALYSIS

中文教學文件

姜任遠文宗麟一、前言

由於在網路上已至少有一分相當完整的PCA中文教學文件,經過仔細檢視之後,我們認為沒有必要重造車輪(reinvent the wheel),因此將該教學文件附上,而將心力集中於PPCA及PCA 應用實例兩篇Siggraph paper的寫作上。

本教學文件架構如下,第二部分為PPCA教學部分,第三部分為PCA應用實例,試以兩篇Siggraph paper示範之。

二、PPCA部分

==Introduction==

PCA [Principal Component Analysis] 是一種統計學上常用來降低問題維度的方法,而PPCA (Probabilistic PCA) 這個概念主要是來自於Michael E. Tipping以及Christopher M. Bishop 1998年的論文,主要的概念是將PCA用機率的方式來表示。

本篇tutorial前半部先補充一些相關數學概念,大部分都和機率統計有關,接下來再來說明PPCA的運理。簡單的來說,他們想要做的事情就是build a probabilistic model associated with PCA,這樣的好處除了可以除了PCA with missing data的情形,也能藉由mix多組PCA 來表示更複雜的資料(Mixture PPCA)。我們稍後在文件中會指出詳細的用法。

Part 1

==Background Probability and Statistics==

這部分提到的數學都是想要了解PPCA所必需的,在此只做簡單提示,詳見參考資料。

Gaussian Distribution

Likelihood Function

Maximum Likelihood Estimation

Mixture Model

Expectation Maximization

Part2

Probabilistic Principal Component Analysis

Question1

基本上PPCA就是想要build a probabilistic model associated with PCA。我們要怎麼樣達到這樣的目的呢?這個probabilistic mode怎麼無中生有出來?

Answer1

首先我們先假設有一個“Parametric probability distribution model” which contains a number of adaptive parameters. 我們要做的事就是用手頭上現有的觀察到的sample data 來決定這些parameters最適當的值,例如一堆點已經確定是依據Gaussian distribution來撒的,我們不知道這個Gaussian distribution的parameters, 這是一個parametric probability distribution function,但我們能用手的上的sample data來evaluate最適合的parameters例如平均值及標準差。

Question2

怎麼樣得到這個parametric probability distribution model?

Answer2

由Latent Variable Model以及Factor Analysis得來。

既然你都問了,我就順便告訴你這兩個東西是什麼。為什麼要提latent variable model能,全都是因為我們想用”機率”來表達PCA。假設我們有一些已知variables組成的distribution function但想用更小數目的latent variable來表達原來這個distribution function,這時就要用到latent variable model。

那什麼又是factor analysis呢? 它是其中一個最常見的latent variable model:

( as common factors; as special factors or noise )

依照慣例latent variable

我們在此做一個假設,

則observed data

我們知道Gaussian distribution也能夠寫成probability distribution function的形式,因

此在Factor Analysis中,我們就能用低維度的latent variable來表示高維度的data機率分佈。當然這其中包含了許多參數,像以及。這就是我們所謂的parametric probability distribution mode。

在此我們得到observed variable vector 的parametric probability distribution function為:

Question3

咦? 那Factor Analysis和PCA有什麼關係呢?? 怎麼突然扯到它?

Answer3

你仔細看FA的數學表示式

x代表低維變數,t代表高維的資料,我們主要是想用低維的”factor”來表示高維的資料。你在想想PCA的數學表示式是什麼呢?當PCA做dimension reduction的時候,也就是找principal component的時候

在做data reconstruction的時候

所以基本上,factor analysis是可視做PCA的data reconstruction加上一個noise的term,以及導入機率(probability distribution) 的概念。

Question4:

那要怎麼解這個表示PCA的parametric probability distribution model呢?

Answer4:

我們用的方法叫做Maximum Likelihood。什麼是likelihood呢?在前面我們已經說過,它有點像是conditional probability的相反。Likelihood就是P(A|B) consider B given A fixed。一般用ML來解的問題都能表達成一個likelihood function的形式:

Given a probability distribution D, sample x and distributional parameter θ

θ就是我們要解的參數。已知observed data x的情況下,我們想知道在怎樣的θ能讓function 達到最大值,這樣用ML解出來的θ又稱作maximum likelihood estimator。

回頭看我們已知的parametric probability function:

在知道observed data的狀況,我們要求以及。

如果要用ML,首先我們先得到likelihood function為

這只是把上列function經過一個取log的動作使它變成strictly increasing。因為ML使用的概念就像是微分求function的極值,所以我們必需要strictly increasing function。

詳細ML解法請見論文。

所得出來的MLE(maximum likelihood estimator),也就是parametric probability function的參數為:

Question5

到底和PCA有何關聯?

Anwser5

從Question3我們已經可以看出factor analysis和PCA的相似之處,由FA所導得的parametric probability function求解後,發現參數的columns,就是求principal

component時sample的covariance matrix的eigenvector經過scale和rotate得來。So, from now on, PCA can be expressed in terms of a probability density

model---PPCA.

Question6

總結一下吧!

Answer6

Please allow me to speak in English…

This is how PPCA works: Given an observation sequence t (high dimension), the PPCA model estimates the latent variable sequence x (low dimension) and finds the optimal

parameter set according to the maximum likelihood criterion.

Question7

解說了這麼久怎麼得到PCA的機率表示法,辛苦你了Orz…

不過還是得說說有什麼應用吧…

Answer7

(汗…)

既然我們可以把observed data用機率的分佈方法來表達,我們就能組合多組PPCA來表示同一組data---mixture PPCA,就像mixture Gaussian function一樣。

以上是兩組Gaussian function的mixture。

可用iterative的方法(Expectation Maximization)來找出observed data可以由那些PPCA 的組合來組成:(詳見論文)

=Reference=

[1] Wikipedia

[2] Google

[3] “Probabilistic Principal Component Analysis”, Journal of the Royal Statistical Society, Series B, 61, Part 3, pp. 611-622.

三、PCA應用實例部分

以下試以兩篇Siggraph paper來作PCA的應用實例。

A Morphable Model For The Synthesis of 3D Faces (published in Siggraph 1999)

[摘要]

簡單來說,這篇paper是希望藉由大量的3D face database作為奧援,經由文中所提出的處理方法,達到以下兩件事情:

1)給定一張2D face image,產生一個3D face model

2)讓臉形、臉上的材質變化作到儘可能的自然

為了能夠更快的了解上述功能,建議讀者在此可前往本paper官方網站上下載demo影片來看。

在影片中,系統被給定了一張奧黛莉赫本的2D face image。系統便生成一個3D face model,利用這個資訊,我們可以替她戴上一頂帽子,同時還能產生自然的打光。

至於上面提到的第二點,paper作者則是以黑白照片轉換為彩色照片來作示範,請注意膚質的轉換是相當自然的,而不只是單純的內插。

以下,本文作者將儘可能簡要的說明此系統之演算法,而將重點放在PCA是如何被運用此一系統上。細節部分,仍請參照該篇paper。

[演算法]

[資料庫]

首先必須了解此系統有一資料庫在後方作為奧援。總計掃描了200張年輕成人(男女各半)

的臉部。

而人的頭部大致上可以看作是一個cylinder,因此,我們將此假想中的cylinder 依高度、角度各切成512等分。

此時,給定高度h, 角度 ,我們可以得到:

1)Shape: 該點與cylinder中心軸之距離r(h,φ)

2)Texture: 該點之色彩R(h,φ) , G(h,φ), B(h,φ)

由於每張臉都是作如此畫分,我們可以得到各點之間的full correspondence。

[Morphable 3D Face Model]

經過資料採集之後,每張臉應該都有自己的shape vector, texture vector: S i, T i。

將之平均之後可求得整個資料庫的shape與texture之average vector:,

而new face可視為資料庫已有old face的線性組合,所以各係數抽取出來就可以完整描述一張new face:

但是這邊要注意的是,一個好的system一定要能夠知道怎樣的臉是可能的怎樣是不可能的,換句話說,這個a跟b並不是隨便可以亂動,有一定範圍在那邊。

那麼,現在是PCA登場的時候了,這篇paper裡面PCA被使用了兩次。現在我們要講解的這個部分主要是在作data compression:

首先我們先用, 計算出其covariance matrix C S, C T,接著我們對C S, C T作PCA,可以得到其eigenvector s i, s t。

那麼,我們可以把原本的表示方法轉換成下列方式:

我們可以看到,原本是對每一個各別的shape vector, texture vector作linear combination,現在則是對一個共用的座標軸(s i, s t本身為一組 orthogonal basis)

作linear combination。資料量與計算量明顯少了許多。

[Matching Morphable Model to Images]

以下,講解本篇paper很重要一個應用,亦即把3d的morphable model自動化地match到一個2d的image上面去,以及PCA如何居中幫助此一功能的進行。

簡明扼要地說,使用者先把環境變數設好,再去找一組αj, βj,可以讓I model跟I input的距離最小。(分別對RGB而言)

但是這種把3d model投到一個平面上與given image作比較的事情其實不算是定義很嚴謹的一個問題,因為其解的可能性太大了。

所以我們的αj, βj要受原本資料庫中的αi, βi限制,不能長出太奇怪的臉。

並且,為了避免卡在local minima,所以我們induct一個coarse-to-fine的stategy,此時,PCA再度派上用場:

首先先對image作down sampling。此外,model能夠調的部分,我們一開始固定在first principal component就好。在之後的iteration才慢慢把其他的principal component加上來。

The Space of Human Body Shapes

(published in Siggraph 2003)

[摘要]

與上一篇''A Morphable Model For The Synthesis of 3D Faces'' 相同的是,本paper 企圖作出一個morphable的model,只不過差別在於這次的對象是整個human body而不只是臉部。

當然最簡單的方法就是3d scan。可是這很費時,有洞還得自己去補。再者,只告訴我們個人的體型,而不是一群人。最後,要作編輯也挺麻煩的。所以最佳的解決之道就是造一個morphable model出來。

而難度在哪裡呢?與上一篇相較的話,body沒辦法單純用一個cylinder來表示,換句話說,model之間要建立vertex to vertex的correspondence就比較難。(前者可依據高度、角度是否相同一一判斷)

建出這樣的model之後,能有許多的應用,比方說我們在作3D scan的時候,遇到像耳朵這樣的地方難免會產生破洞,我們就可以利用這個morphable model根據某些準則與目標model作matching將破洞補起來。

[演算法]

[Morphable Model的建立]

最開始,有幾件事情是必須手動處理的。首先,我們的第一個model是由artist 所繪製而成的。再來,我們必須手動設定此一template與其他model的少數vertex 的一一對應關係,在本篇paper的術語中,稱之為marker。

那麼接下來就可以來作對應了,我們可以把如何將一個template點對點地match 到target surface D這件事情,reduce成minimize a set of error function。

[PCA可資運用之處]

建立好vertex to vertex一一對應的關係之後,我們可用與上篇paper同樣的方式來作data compression。

上圖中,紅色標起來的是key model,其他是內插出來的。

比較特別的是說,這些interpolated model每個都有一些跟origianl model不一樣的獨特之處,所以說不完全只是"interpolate"

至於作法也很簡單,其實就是在經過PCA轉換的座標上做Gaussian sampling。如此一來,將可造出無限多種原本不存在的model,大部分有相當真實的外表,但卻有少部分與原來的model都不相同。

[Conclusion]

當然這兩篇paper不僅止於此,不過基於tutorial的本質,對本paper的介紹就僅限於與PCA較相關的部分。

PCA主成分分析计算步骤

主成分分析( Principal Component Analysis , PCA )是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。计算主成分的目的是将高维数据投影到较低维空间。给定 n 个变量的 m 个观察值,形成一个 n*m 的数据矩阵, n 通常比较大。对于一个由多个变量描述的复杂事物,人们难以认识,那么是否可以抓住事物主要方面进行重点分析呢?如果事物的主要方面刚好体现在几个主要变量上,我们只需要将这几个变量分离出来,进行详细分析。但是,在一般情况下,并不能直接找出这样的关键变量。这时我们可以用原有变量的线性组合来表示事物的主要方面, PCA 就是这样一种分析方法。 PCA 的目标是寻找 r ( r

PCA算法详解

主成分分析法 主成分分析(Principal Component Analysis,简称PCA)方法是目前应用很广泛的一种代数特征提取方法,可以说是常用的一种基于变量协方差矩阵对样本中的信息进行处理、压缩和抽提的有效方法,主要通过K-L(Karhunen-Loeve)变换展开式从人脸数据库中提取人脸的主要特征[i],构成特征脸空间,在识别时将待测试的人脸图像投影到特征脸空间,得到一组投影系数,与数据库中各个人脸图像进行比对识别。这种方法保留了原向量在与其协方差矩阵最大特征值相对应的特征向量方向上的投影,即主分量(Principal Components),因此被称为主成分分析。由于PCA方法在进行降维处理和人脸特征提取方面的有效性,在人脸识别领域得到了广泛的应用。它的核心思想是:利用较少数据的特征对样本进行描述以达到降低特征空间维数的目的,根据样本点在多维空间的位置分布,以样本点在空间中变化最大方向,即方差最大方向,作为差别矢量来实现数据的特征提取。利用K-L变换抽取人脸的主要成分,利用特征脸法进行人脸识别的过程由训练阶段和识别阶段两个阶段组成。 3.1.1 K-L变换概述 K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换。它是建立在统计特性基础上的一种变换,它的突出优点是它能去相关性,而且是均方误差(Mean Square Error,MSE)意义下的最佳变换。 K-L变换的基本思想是在一个新的特征空间中将样本数据沿其特征矢量用对齐的方式进行旋转变换。这个变换有效地克服了样本数据向量间的相关性,从而去除那些只带有较少信息的数据以达到降低特征空间维数的目的。经过以上K-L 变换得到的特征是原图像向量的正交分解,其图像信息的总能量不变,不损失任何信息。在这个互相正交、可测量的特征空间中进行图像的特征提取可以有效地利用图像之间的差异,提取有效信息。K-L特征空间中,较大特征值所对应的特征向量体现原图像的总体趋势以及低频分量,较小特征值所对应特征向量体现原图像的细节变化以及高频分量所以人们用PCA法提取图像总体特征,其目的是用较少数量的特征对样本进行描述,同时又能保留所需要的识别信息。在人脸图像

python实验报告(经过pca算法)

#-*-coding:utf-8-*- """ Created on Fri923:15:472017 @author """ #-*-coding:utf-8-*- """ Created on Tue May3020:31:022017 @author: """ import pandas as pd import numpy as np from sklearn.preprocessing import Imputer from sklearn.cross_validation import train_test_split from sklearn import svm from sklearn import cross_validation from sklearn.decomposition import PCA from sklearn.lda import LDA def loadData(filePath): fr=open(filePath,'r+') lines=fr.readlines() Data=[] label=[] for line in lines: items=line.strip().split(",") label.append(items[0]) Data.append([float(items[i])for i in range(1,len(items))]) return Data,label if__name__=='__main__': x1_train,y1_train=loadData('C:\Users\Administrator\SPECTF.train') x_test,y_test=loadData('C:\Users\Administrator\SPECTF.test') x_train=[] y_train=[] for i in range(23,37): x_train.append(x1_train[i]) y_train.append(y1_train[i]) for i in range(173,187): x_train.append(x1_train[i]) y_train.append(y1_train[i])

人脸识别PCA算法matlab实现及详细步骤讲解

%FaceRec.m %PCA人脸识别修订版,识别率88% %calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5 a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); %imshow(a); b=a(1:112*92);%b是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上 到下,从左到右 b=double(b); allsamples=[allsamples;b];%allsamples是一个M*N矩阵,allsamples中每一行数 据代表一张图片,其中M=200 end end samplemean=mean(allsamples);%平均图片,1×N for i=1:200xmean(i,:)=allsamples(i,:)-samplemean;%xmean是一个M×N矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片” end; %获取特征值及特征向量 sigma=xmean*xmean';%M*M阶矩阵 [v d]=eig(sigma); d1=diag(d); %按特征值大小以降序排列 dsort=flipud(d1); vsort=fliplr(v); %以下选择90%的能量 dsum=sum(dsort); dsum_extract=0; p=0; while(dsum_extract/dsum<0.9) p=p+1; dsum_extract=sum(dsort(1:p)); end i=1; %(训练阶段)计算特征脸形成的坐标系 base=xmean'*vsort(:,1:p)*diag(dsort(1:p).^(-1/2)); %base是N×p阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) %详见《基于PCA的人脸识别算法研究》p31 %xmean'*vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程 %while(i<=p&&dsort(i)>0) %base(:,i)=dsort(i)^(-1/2)*xmean'*vsort(:,i);%base是N×p阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) %详见《基于PCA的人脸识别算法研究》p31 %i=i+1;%xmean'*vsort(:,i)是小矩阵的特征向量向大矩阵特 征向量转换的过程 %end %以下两行add by gongxun将训练样本对坐标系上进行投影,得到一个M*p阶矩阵allcoor allcoor=allsamples*base;%allcoor里面是每张训练人脸图片在M*p子空间中的一个点,即在子空间中的组合系数, accu=0;%下面的人脸识别过程中就是利用这些组合系数来进行识别

人脸识别PCA算法matlab实现及详细步骤讲解

% FaceRec.m % PCA 人脸识别修订版,识别率88% % calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5 a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); % imshow(a); b=a(1:112*92); % b 是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上 到下,从左到右 b=double(b); allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数 据代表一张图片,其中M=200 end end samplemean=mean(allsamples); % 平均图片,1 × N for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean 是一个M × N 矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片” end; % 获取特征值及特征向量 sigma=xmean*xmean'; % M * M 阶矩阵 [v d]=eig(sigma); d1=diag(d); % 按特征值大小以降序排列 dsort = flipud(d1); vsort = fliplr(v); %以下选择90%的能量 dsum = sum(dsort); dsum_extract = 0; p = 0; while( dsum_extract/dsum < 0.9) p = p + 1; dsum_extract = sum(dsort(1:p)); end i=1; % (训练阶段)计算特征脸形成的坐标系 base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2)); % base 是N×p 阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) % 详见《基于PCA 的人脸识别算法研究》p31 % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程 %while (i<=p && dsort(i)>0) % base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base 是N×p 阶矩阵,除以dsort(i)^(1/2) 是对人脸图像的标准化(使其方差为1) % 详见《基于PCA 的人脸识别算法研究》p31 % i = i + 1; % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特 征向量转换的过程 %end % 以下两行add by gongxun 将训练样本对坐标系上进行投影,得到一个M*p 阶矩阵allcoor allcoor = allsamples * base; % allcoor 里面是每张训练人脸图片在M*p 子空间中的一个点,即在子空间中的组合系数, accu = 0; % 下面的人脸识别过程中就是利用这些组合系数来进行识别

PCA算法的数学知识---特征值分解和奇异值分解

PCA算法的数学知识---特征值分解和奇异值分解: 1)特征值: 如果说一个向量v是方阵X的特征向量,将一定可以表示成下面的形式: = Xv vλ 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 1 =∑ X Q Q- 其中Q是这个矩阵X的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。 首先,要明确的是,乘以一个矩阵其实就是一个线性变换,而且将一个矩阵乘以一个向量后得到的向量,其实就相当于对这个向量进行了线性变换。如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。分解得到的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)。通过特征值分解得到的前N个特征向量,就对应了这个矩阵最主要的N个变化方向。我们利用这前N个变化方向,就可以近似这个矩阵(变换)。也就是:提取这个矩阵最重要的特征。 总结一下,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可

少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r 大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解: ****T n p n r r r r p X U V ≈∑ r 是一个远小于n 、p 的数,右边的三个矩阵相乘的结果将会是一个接近于X 的矩阵,在这儿,r 越接近于p ,则相乘的结果越接近于X 。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵X ,我们如果想要压缩空间来表示原矩阵X ,我们存下这里的三个矩阵:U 、Σ、V 就好了。 奇异值与主成分分析(PCA ): PCA 的全部工作简单点说,就是对原始的空间中顺序地找一组相互正交的坐标轴,第一个轴是使得方差最大的,第二个轴是在与第一个轴正交的平面中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的,这样假设在N 维空间中,我们可以找到N 个这样的坐标轴,我们取前r 个去近似这个空间,这样就从一个N 维的空间压缩到r 维的空间了,但是我们选择的r 个坐标轴能够使得空间的压缩使得数据的损失最小。 假设矩阵每一行表示一个样本,每一列表示一个特征,用矩阵的语言来表示,对一个n* p 的矩阵X 进行坐标轴的变化,P 就是一个变换的矩阵,从一个p 维的空间变换到另一个p 维的空间,在空间中就会进行一些类似于旋转、拉伸的变化。

经典的PCA和LDA算法介绍

LDA: LDA的全称是Linear Discriminant Analysis(线性判别分析),是一种supervised learning。有些资料上也称为是Fisher’s Linear Discriminant,因为它被Ronald Fisher发明自1936年,Discriminant这次词我个人的理解是,一个模型,不需要去通过概率的方法来训练、预测数据,比如说各种贝叶斯方法,就需要获取数据的先验、后验概率等等。LDA 是在目前机器学习、数据挖掘领域经典且热门的一个算法,据我所知,百度的商务搜索部里面就用了不少这方面的算法。 LDA的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近。要说明白LDA,首先得弄明白线性分类器(Linear Classifier):因为LDA是一种线性分类器。对于K-分类的一个分类问题,会有K个线性函数: 当满足条件:对于所有的j,都有Yk > Yj,的时候,我们就说x属于类别k。对于每一个分类,都有一个公式去算一个分值,在所有的公式得到的分值中,找一个最大的,就是所属的分类了。 上式实际上就是一种投影,是将一个高维的点投影到一条高维的直线上,LDA最求的目标是,给出一个标注了类别的数据集,投影到了一条直线之后,能够使得点尽量的按类别区分开,当k=2即二分类问题的时候,如下图所示: 红色的方形的点为0类的原始点、蓝色的方形点为1类的原始点,经过原点的那条线就是投影的直线,从图上可以清楚的看到,红色的点和蓝色的点被原点明显的分开了,这个数

matlab PCA算法程序

%calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5 a=imread(strcat('D:\rawdata\ORL\s',num2str(i),'\',num2str(j),'.pgm')); %imshow(a); b=a(1:112*92);%b是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右 b=double(b); allsamples=[allsamples;b];%allsamples是一个M*N矩阵,allsamples中每一行数据代表一张图片,其中M=200 end end samplemean=mean(allsamples);%平均图片,1×N for i=1:200xmean(i,:)=allsamples(i,:)-samplemean;%xmean是一个M×N矩阵,xmean每一行保存的数据是“每个图片数据-平均图片” end; sigma=xmean*xmean';%M*M阶矩阵 [v d]=eig(sigma); d1=diag(d); [d2index]=sort(d1);%以升序排序 cols=size(v,2);%特征向量矩阵的列数 for i=1:cols vsort(:,i)=v(:,index(cols-i+1));%vsort是一个M*col(注:col一般等于M) 阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量dsort(i)=d1(index(cols-i+1));%dsort保存的是按降序排列的特征值,是一维行向量 end%完成降序排列 %以下选择90%的能量 dsum=sum(dsort); dsum_extract=0; p=0; while(dsum_extract/dsum<0.9) p=p+1; dsum_extract=sum(dsort(1:p)); end

【免费下载】PCA算法的原理及其示例

PCA 算法的原理及其示例郑琛(北京师范大学,北京 100875)摘要:主成分分析是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题,对于某些复杂数据就可应用主成分分析法对其进行简化。计算主成分的目的是将高维数据投影到较低维空间。文中介绍了PCA 算法的基本概念和基本原理,利用算法在降维和特征提取方面的有效性,结合人脸识别的实例进行详细的阐述。关键字:主成分分析;数据降维;特征提取1、PCA 算法的基本概念 PCA 是Principal component analysis 的缩写,中文翻译为主成分分析。主成分又称主分量、主元素。它是研究如何通过原来变量的少数几个线性组合来解释随机向量的方差-协方差结构,是数据压缩和特征提取中一种多维向量的统计分析方法[1]。这种方法可以有效的找出数据中最“主要”的元素和结构,去除噪音[2]和冗余,将原有的复杂数据降维,揭示隐藏在复杂数据背后的简单结构。它的优点是简单, 而且无参数限制,可以方便的应用与各个场合。因此应用极其广泛,从神经科学到计算机图形学都有它的用武之地。被誉为应用线形代数 最有价值的结果之一。2、PCA 算法的原理与基本思想 PCA 算法的原理是设法将原来变量重新组合成一组新的互相无关的几个综合变量,同时根据实际需要从中可以取出几个较少的总和变量尽可能多地反映原来变量的信息的统计的方法,也是数学上、管路敷设技术通过管线敷设技术,不仅可以解决吊顶层配置不规范问题,而且可保障各类管路习题到位。在管路敷设过程中,要加强看护关于管路高中资料试卷连接管口处理高中资料试卷弯扁度固定盒位置保护层防腐跨接地线弯曲半径标高等,要求技术交底。管线敷设技术中包含线槽、管架等多项方式,为解决高中语文电气课件中管壁薄、接口不严等问题,合理利用管线敷设技术。线缆敷设原则:在分线盒处,当不同电压回路交叉时,应采用金属隔板进行隔开处理;同一线槽内,强电回路须同时切断习题电源,线缆敷设完毕,要进行检查和检测处理。、电气课件中调试对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料试卷相互作用与相互关系,根据生产工艺高中资料试卷要求,对电气设备进行空载与带负荷下高中资料试卷调控试验;对设备进行调整使其在正常工况下与过度工作下都可以正常工作;对于继电保护进行整核对定值,审核与校对图纸,编写复杂设备与装置高中资料试卷调试方案,编写重要设备高中资料试卷试验方案以及系统启动方案;对整套启动过程中高中资料试卷电气设备进行调试工作并且进行过关运行高中资料试卷技术指导。对于调试过程中高中资料试卷技术问题,作为调试人员,需要在事前掌握图纸资料、设备制造厂家出具高中资料试卷试验报告与相关技术资料,并且了解现场设备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。 、电气设备调试高中资料试卷技术电力保护装置调试技术,电力保护高中资料试卷配置技术是指机组在进行继电保护高中资料试卷总体配置时,需要在最大限度内来确保机组高中资料试卷安全,并且尽可能地缩小故障高中资料试卷破坏范围,或者对某些异常高中资料试卷工况进行自动处理,尤其要避免错误高中资料试卷保护装置动作,并且拒绝动作,来避免不必要高中资料试卷突然停机。因此,电力高中资料试卷保护装置调试技术,要求电力保护装置做到准确灵活。对于差动保护装置高中资料试卷调试技术是指发电机一变压器组在发生内部故障时,需要进行外部电源高中资料试卷切除从而采用高中资料试卷主要保护装置。

PCA算法的原理及其示例

PCA算法的原理及其示例 郑琛 (北京师范大学,北京100875) 摘要:主成分分析是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题,对于某些复杂数据就可应用主成分分析法对其进行简化。计算主成分的目的是将高维数据投影到较低维空间。文中介绍了PCA算法的基本概念和基本原理,利用算法在降维和特征提取方面的有效性,结合人脸识别的实例进行详细的阐述。 关键字:主成分分析;数据降维;特征提取 一、PCA算法的基本概念 PCA是Principal component analysis的缩写,中文翻译为主成分分析。主成分又称主分量、主元素。它是研究如何通过原来变量的少数几个线性组合来解释随机向量的方差-协方差结构,是数据压缩和特征提取中一种多维向量的统计分析方法[1]。这种方法可以有效的找出数据中最“主要”的元素和结构,去除噪音[2]和冗余,将原有的复杂数据降维,揭示隐藏在复杂数据背后的简单结构。它的优点是简单,而且无参数限制,可以方便的应用与各个场合。因此应用极其广泛,从神经科学到计算机图形学都有它的用武之地。被誉为应用线形代数最有价值的结果之一。 二、PCA算法的原理与基本思想 PCA算法的原理是设法将原来变量重新组合成一组新的互相无关的几个综合变量,同时根据实际需要从中可以取出几个较少的总和变量尽可能多地反映原来变量的信息的统计的方法,也是数学上处理

降维的一种方法。 PCA算法的基本思想是设法将原来众多具有一定相关性(比如P 个指标),重新组合成一组新的互相无关的综合指标来代替原来的指标。通常数学上的处理就是将原来P个指标作线性组合,作为新的综合指标。典型的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的方差来表达,即Var(F1)越大,表示F1包含的信息越多。因此在所有的线性组合中选取的F1应该是方差最大的,故称F1为第一主成分。如果第一主成分不足以代表原来P个指标的信息,再考虑选取F2即选第二个线性组合,为了有效地反映原来信息,F1已有的信息就不需要再出现再F2中,用数学语言表达就是要求Cov (F1,F2)=0,则称F2为第二主成分,以此类推可以构造出第三、第四,...........,第P个主成分。应当注意,主成分分析本身往往并不是目的,而是达到目的的一种手段,因此,它多用在大型研究项目的某个中间环节。如把它用在多重回归,便产生了主成分回归,这种回归具有优良性质,另外,它在压缩、特征提取及分类应用中非常有用。 三、PCA求解的一般步骤 PCA求解:特征方程的根 在线形代数中,PCA问题可以描述成以下形式: 寻找一组正交基组成的矩阵P,有Y=PX,使得C Y 1 n-1YY T是对角阵。 则P的行向量(也就是一组正交基),就是数据X的主元向量。对C Y进行推导: C Y= 1 n-1YY T = 1 n-1(PX)(PX) T = 1 n-1PXX T P T = 1 n-1P(XX T)P T

PCA人脸算法 (2)

1.数据准备 function T = CreateDatabase(TrainDatabasePath) % Align a set of face images (the training set T1, T2, ... , TM ) % % Description: This function reshapes all 2D images of the training database % into 1D column vectors. Then, it puts these 1D column vectors in a row to % construct 2D matrix 'T'. % % % Argument: TrainDatabasePath - Path of the training database % % Returns: T - A 2D matrix, containing all 1D imag e vectors. % Suppose all P images in the trainin g database % have the same size of MxN. So the l ength of 1D % column vectors is MN and 'T' will b e a MNxP 2D matrix. % % See also: STRCMP, STRCAT, RESHAPE % Original version by Amir Hossein Omidvarnia, October 2007 % Email: aomidvar@ece.ut.ac.ir %%%%%%%%%%%%%%%%%%%%%%%% File management TrainFiles = dir(TrainDatabasePath); Train_Number = 0; for i = 1:size(TrainFiles,1) if not(strcmp(TrainFiles(i).name,'.')|strcmp(TrainFiles(i).name,'..')|st rcmp(TrainFiles(i).name,'Thumbs.db')) Train_Number = Train_Number + 1; % Number of all images in the train ing database end end %%%%%%%%%%%%%%%%%%%%%%%% Construction of 2D matrix from 1D image vectors T = []; for i = 1 : Train_Number

基于PCA及其改进算法的研究

基于PCA及其改进算法的人脸图像压缩与 重建 摘要:首先介绍了主成分分析(PCA)算法的基本原理,提出了利用PCA进行图像数据压缩与重建的基本模型。主成分分析方法从矩阵角度也称为K-L变换。首先将图像训练库里的每个二维图像拉伸成向量,然后对其进行主成分分析得到主成份的变换矩阵以及图像均值向量。图像压缩过程就是把压缩的图像减去训练得到的图像均值向量并通过变换矩阵变换成维数很小的一个向量的过程。图像的重建就是将压缩的图像通过变换矩阵的逆变换矩阵的逆变换后再加上图像均值向量得到的压缩前向量的近似向量。然后介绍了一系列的主成分分析方法的改进算法。其中包括Mat PCA算法、2DPCA算法、Module PCA算法等。其中Module PCA算法是将每一个训练图像都划分成一些尺寸大小一样的子图像,将所有训练图像的所有子图像集合在一起进行PCA分析,得到相应的总体协方差矩阵。在对测试图像进行压缩时,首先按照训练图像那样的划分方法将测试图像划分成子图像,然后逐个对子图像进行压缩。重建时逐个对压缩的子图像进行重建,然后再拼接成原来的图像。实验结果表明,利用模块化PCA能有效减少数据的维数,实现图像压缩,同时能根据实际需要重建图像。 关键词:图像压缩;图像重建;PCA;特征提取

Face image compression and reconstruction base on PCA and improved PCA algorithm Abstract:First, This article have introduced the basic principle of PCA, and it has proposed the basic module of using PCA to compress and reconstruct the image data. Principal component analysis is also known as K-L transformation from the perspective of matrix. First, each of the two-dimensional image should be stretched into a vector from the image databases. Then,through principal component analysis to obtain a transformation matrix and vector mean of images. The image compression is a process that using the compress the image by subtracting the mean vector of the training images obtained by a transformation matrix and converted into a very small dimension of a vector.The reconstructed image is that a compressed image by the inverse transform matrix of the transformation matrix and then an inverse transform obtained with a mean vector of the image before compression vector approximation.Then, this article introduced a series of improved algorithm of principal component analysis method, including Mat PCA algorithm, 2DPCA algorithm, Module PCA algorithm. Then each one of the training images are divided into a number of s sub-image which is of the same size, and bring all the sub-image of all these training image for PCA analysis. After that we can get the corresponding covariance matrix of the overall. When compressing the test image, we also need divide the test image into sub-image as we do to the training image, and then compress the sub-image one by one. If we want to reconstruct the image, we have to reconstruct the sub-image one by one first, when the reconstruction of the sub-image is over, piecing together all the sub-image for the original image. The result of the experiment shows we can reduce the dimension of the data by using Module PCA, meanwhile, we can also use Module PCA for image compression and reconstruct the image according to our demands. Keywords: image compression, image reconstruction, PCA, feature extraction

matlab实现的PCA 算法

function [features, targets, UW, m] = PCA(features, targets, dimension, region) %Reshape the data points using the principal component analysis %Inputs: % train_features - Input features % train_targets - Input targets % dimension - Number of dimensions for the output data points % region - Decision region vector: [-x x -y y number_of_points] % %Outputs % features - New features % targets - New targets % UW - Reshape martix % m - Original feature averages [r,c] = size(features); if (r < dimension), disp('Required dimension is larger than the data dimension.') disp(['Will use dimension ' num2str(r)]) dimension = r; end %Calculate cov matrix and the PCA matrixes m = mean(features')'; S = ((features - m*ones(1,c)) * (features - m*ones(1,c))'); [V, D] = eig(S); W = V(:,r-dimension+1:r)'; U = S*W'*inv(W*S*W'); %Calculate new features UW = U*W; features = W*features;

pca算法综述

PCA 算法进行人脸识别综述 1 引言 人脸识别过程的一般思想是对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量,如一幅N*N 象素的图像可以视为长度为N 2 的矢量,这样就认为这幅图像是位于N 2 维空间中的一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。不管子空间的具体形式如何,这种方法用于图像识别的基本思想都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。 2、PCA 算法实现过程 首先在图片库中提取出N 张人脸图,每一张图的像素大小为P*M ,然后把第一张图的像素值按行(把每一行的元素依次都连到第一行中去)每一行的矩阵是一个1*(P*M )维,这样就构成了一个N*(P*M )维的由训练图像构成的矩阵B 。 PCA 算法就是对这样的一个矩阵B 进行K-L 变换,K-L 变换的公式为: )()(_ 1_B B B B S i N i i --=∑ = 其中_ B 是B 中各列的元素之和的再除以N 得到的一个1*(P*M )维的行向量,i B 是B 的第 i 行,S 是一个N*(P*M)维的矩阵。 计算出这样的一个矩阵S 后,就消除了原来各张图像之间的相关性,接下来就是要计算出S 的特征值和特征向量,但是S 的维数太大了,计算出这样一个高维矩阵的特征值和特征向量非常的困难。这就要求对这样的一个高维矩阵进行降维处理。设C=T SS ,T S 为要的转置矩阵,C 是一个N*N 维矩阵,相比于S 维数降低了很多了,设C 的特征值和对应的特征向量分别为i λ和i ν,则有: T SS *i λ=i λ*i ν 对这个式子作如下变换: T SS * ( S*i ν)=i λ(S*i ν) 由此可得C 的特征值也是原高维矩阵S 的特征值,C 的特征向量是S*i ν,到经过降维处理 后的低维矩阵C 的特征值也是原高维矩阵S 的特征值,这样就实现了由低维矩阵计算高维矩阵的特征值,只要对所求得的特征向量就可以了。 上述方去所求的每一个向量都构成一个特征脸。由这些特征脸所张成的空间称为特征脸子空间,需要注意对于正交基的选择的不同考虑,对应较大特征值的特征向量(正交基)也称主分量,用于表示人脸的大体形状,而对应于较小特征值的特征向量则用于描述人脸的具体细节,所以在选取特征向量的时候,我们把特征值较少的特征向量省去,只保留占人脸主特征的特征值大的对应的特征向量。通过实验已证明,选取T (T 《N )个这样的特征向量,就足以把人脸图像给表达出来,并且能取得较高的人脸识别率,设由T 个这样的特征向量构成的所所得到的矩阵为V (N*T 维),由T 个这样的特征值对应的后的对角阵为F (1*T 维)。 计算特征脸形成的坐标系

人脸识别PCA算法matlab实现和详细步骤讲解

人脸识别 % % PCA 人脸识别修订版,识别率88% % calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5 a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); % imshow(a); b=a(1:112*92); % b 是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上 到下,从左到右 — b=double(b); allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数 据代表一张图片,其中M=200 end end samplemean=mean(allsamples); % 平均图片,1 × N for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean 是一个M × N 矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片” end; % 获取特征值及特征向量 sigma=xmean*xmean'; % M * M 阶矩阵 : [v d]=eig(sigma); d1=diag(d); % 按特征值大小以降序排列 dsort = flipud(d1); vsort = fliplr(v); %以下选择90%的能量 dsum = sum(dsort); dsum_extract = 0; p = 0; while( dsum_extract/dsum < p = p + 1; | dsum_extract = sum(dsort(1:p)); end i=1; % (训练阶段)计算特征脸形成的坐标系 base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2)); % base 是N×p 阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) % 详见《基于PCA 的人脸识别算法研究》p31 % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程 %while (i<=p && dsort(i)>0) % base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base 是N×p 阶矩阵,除以dsort(i)^(1/2) 是对人脸图像的标准化(使其方差为1) 》 % 详见《基于PCA 的人脸识别算法研究》p31 % i = i + 1; % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特

相关文档