文档库 最新最全的文档下载
当前位置:文档库 › PCA算法c实现

PCA算法c实现

PCA算法c实现
PCA算法c实现

本文档供大家参考

PCA算法

% FaceRec.m %CQUPT

% PCA 识别率88%

% calc xmean,sigma and its eigen decomposition

allsamples=[]; %所有训练图片

for i=1:40

for j=1:5

a=imread(strcat('e:ORLs',num2str(i),'',num2str(j),'.pgm'));

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; %allsamples是一个M*N矩阵,allsamples中每一行保存

%的数据是“每个图片数据—平均图片”

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)

% xmean' * vsort(:,1:p)是小矩阵的特征向量向大矩阵特征向量转换的过程 %以下两行将训练样本对坐标系上进行投影,得到一个M*p子空间中的一个点,

%即在子空间中的组合系数

allcoor=allsamples*base;

accu = 0; %下面的人脸识别过程中就是利用这些组合系数来进行识别

%测试过程

for i=1:40

for j=6:10 %读入40 x 5 副测试图像

a=imread(strcat('e:ORLs',num2str(i),'',num2str(j),'.pgm'));

b=a(1:10304);

b=double(b);

tcoor=b*base; %计算坐标,是1*p阶矩阵

for k=1:200

mdist(k)=norm(tcoor-allcoor(k,:));

end;

%三阶近邻

[dist,index2]=sort(mdist);

class1=floor( (index2(1)-1)/5 )+1;

class2=floor((index2(2)-1)/5)+1;

class3=floor((index2(3)-1)/5)+1;

if class1~=class2 && class2~=class3

class=class1;

elseif class1==class2

class=class1;

elseif class2==class3

class=class2;

end;

if class==i

accu=accu+1;

end;

end;

end;

accuracy=accu/200 % 输出识别率

PCA特征人脸

% FaceRec.m %CQUPT

% PCA 识别率88%

% calc xmean,sigma and its eigen decomposition

allsamples=[]; %所有训练图片

for i=1:40

for j=1:5

a=imread(strcat('e:ORLs',num2str(i),'',num2str(j),'.pgm'));

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; %allsamples是一个M*N矩阵,allsamples中每一行保存

%的数据是“每个图片数据—平均图片”

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

p=199;

% (训练阶段)计算特征脸形成的坐标系

base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2));

%生成特征脸

for(k=1:p)

temp=reshape(base(:,k),112,92);

newpath=[…e:test? int2str(k) ….jpg?];

imwrite(mat2gray(temp), newpath);

end

%将模型保存

Save(…e:ORLmodel.mat? ,?base?, …samplemean?); PCA人脸重建

%Reconstruct.m % CQUPT

Function[]=reconstruct()

Load e:ORLmodel.mat;

%计算新图片在特征子空间中的系数

Img=?D:test210.jpg?

A=imread(img);

b=a(1:112*92); % b是行矢量1*N,其中N =10304

b=double(b);

b=b-samplemean;

c = b * base; % c 是图片a在子空间中的系数, 是1*p 行矢量% 根据特征系数及特征脸重建图

% 前15 个

t = 15;

temp = base(:,1:t) * c(1:t)';

temp = temp + samplemean';

imwrite(mat2gray(reshape(temp, 112,92)),'d:test2t1.jpg');

% 前50个

t = 50;

temp = base(:,1:t) * c(1:t)';

temp = temp + samplemean';

imwrite(mat2gray(reshape(temp, 112,92)),'d:test2t2.jpg');

% 前100个

t = 100;

temp = base(:,1:t) * c(1:t)';

temp = temp + samplemean';

imwrite(mat2gray(reshape(temp, 112,92)),'d:test2t3.jpg');

% 前150个

t = 150;

temp = base(:,1:t) * c(1:t)';

temp = temp + samplemean';

imwrite(mat2gray(reshape(temp, 112,92)),'d:test2t4.jpg');

% 前199 个

t = 199;

temp = base(:,1:t) * c(1:t)';

temp = temp + samplemean';

imwrite(mat2gray(reshape(temp, 112,92)),'d:test2t5.jpg');

图片归一化

图片标准化通常是一个整体概念,要求把图片归一到均值为0,方差为1的情况下。这个概念类识于一般正态分布向标准正态分布的转化:

(image-Mean)/Variance 其中,Mean和Variance分别为矩阵的均值和方差。

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)是小矩阵的特征向量向大矩阵特

相关文档