PCA算法总结

PCA算法总结
PCA算法总结

摘要:

PCA(Principal Component Analysis),称主成分分析,从统计学的角度来说是一种多元统计方法。PCA通过将多个变量通过线性变换以选出较少的重要变量。它往往可以有效地从过于“丰富”的数据信息中获取最重要的元素和结构,去除数据的噪音和冗余,将原来复杂的数据降维,揭示隐藏在复杂数据背后的简单结构。近年来,PCA方法被广泛地运用于计算机领域,如数据降维、图像有损压缩、特征追踪等等。

引言:

在人脑的生理特征中,人脑对外界的认知手段多样,导致人获取的信息维数过高。如果人脑不对获取的信息进行降维处理,那么人脑对信息处理的效率和精准度都会下降,因此人脑对这些感知神经处理时,均通过了复杂的降维处理。

PCA方法广泛运用于从神经科学到计算机图形学的数据分析。因为它是一种简单的非参方法,能够从复杂的数据集中提取出数据相关信息。我们进行主成分分析的动机是希望计算出一个含有噪音数据空间的最重要的基,来重新表达这个数据空间。但是这些新基往往隐藏在复杂的数据结构中,我们需要滤除噪音来找到重构出数据空间的新基。

PCA方法是一个高普适用方法,它的一大优点是能够对数据进行降维处理,我们通过PCA 方法求出数据集的主元,选取最重要的部分,将其余的维数省去,从而达到降维和简化模型的目的,间接地对数据进行了压缩处理,同时很大程度上保留了原数据的信息,就如同人脑在感知神经处理时进行了降维处理。

所以在机器学习和模式识别及计算机视觉领域,PCA方法被广泛的运用。

在人脸识别中,假设训练集是30幅不同的N×N大小的人脸图像。把图像中每一个像素看成是一维信息,那么一副图像就是N2维的向量。因为人脸的结构有极大的相似性,如果是同一个人脸的话相似性更大。而我们的所希望能够通过人脸来表达人脸,而非用像素来表达人脸。那么我们就可以用PCA方法对30幅训练集图像进行处理,寻找这些图像中的相似维度。我们提取出最重要的主成份后,让被识别图像与原图进行过变化后的主元维度进行相似度比较,以衡量两幅图片的相似性。

在图像压缩方面,我们还可以通过PCA方法进行图像压缩,又称Hotelling或者Karhunen and Leove变换。我们通过PCA提取出图像的主分量,去除掉一些次分量,然后变换回原图像空间,图像因为维数的降低得到了很大程度上的压缩,同时图像还很大程度上保留了原图像的重要信息。

正文:

PCA方法其实就是将数据空间通过正交变换映射到低维子空间的过程。而相应的基向量组应满足正交性且由基向量组构成的地位子空间最优地考虑了数据的相关性。在原数据集变换空间后应使单一数据样本的相互相关性降低到最低点。

图1 红点代表原始数据点;绿点代表被映射到低维空间后的点;紫线代表映射平面。

方差最大化

上面我们说过PCA方法的过程其实是寻找低维子空间的过程。那么什么样的低维空间才符合我们要求的呢。因为我们希望被映射后的数据之间的相关性降低到最低点,所以我们可以采取求解被映射后方差最大化的最优策略来找到低维空间。

假设我们有N个样本数据{x n},每个样本数据是D维,我们希望样本数据映射到M

量为

(1)

那么映射后的数据方差就为:

(2)

注:此处S为原始数据集的协方差矩阵

(3)

我们所希望的低维空间是能使等式(2)值最大的空间,即方差最大化。那么问题就转化为求解等式(2)的最大值。

因为u1向量是正交向量,所以我们引入拉格朗日乘子法求解等式(2)得最大值。构造条件限制等式:

(4)

由高等数学知识可知,我们要求解关于u1的等式(4)的最大值,只需要令(4)对u1求导令其等于0,得:

(5)

由线形代数知识可知,必为协方差矩阵的特征值,而u1为其对应的特征向量。

我们将由1维情况扩展到M>1维情况,协方差矩阵S应该有M个特征特征值:,其对应的特征向量应为:u1,…,u n。

误差最小化

PCA的另一种构造形式是基于误差最小化。

我们引入D维完备正交基向量组,即

(6)

所以我们可以用完备正交基向量来线形表示样本数据集中的每一个数据x n,

(7)

充分利用根据等式(6)的正交属性,利用等式(7)可得系数,反代回等式(7),可得等式:

(8)

我们来看,表达等式(8)需要D维信息,而我们的目的是希望用M

(9)

代表的是数据点的特殊分量,而b i代表的是所有数据点的所共有的分量。我们构造一个目标函数:

(10)

其通俗的含义是我们希望通过M维表达的出的数据点逼近D维样本数据点,这里我们采用欧式距离衡量两个数据点的相似性。那么我们的问题又转化为最小化目标函数J。通过求导,我们可以得出:

(11)

(12)

反代回等式(10),得:

(13)

因此我们只要找寻协方差矩阵S的D-M个最小特征值就可。

SVD奇异值分解

PCA方法中对于协方差矩阵的分解,提取主成分,采用两种方法:

1 特征值分解。该种方法有一定局限性,分解的矩阵必须为方阵。

2 SVD奇异值分解。

奇异值分解是线性代数中的一种重要的矩阵分解方法,在信号处理、统计学等领域都有重要的应用。奇异值分解可以将一个比较复杂的矩阵分解为几个更小更简单的子矩阵相乘的形式来表达,而这些子矩阵描述的是原矩阵的重要的特性。

对于一个M×N大小的矩阵A来说,总是可以分解为:

(14)

其中U和V分别是AA T和A T A的特征向量,而则是他们的特征根。在PCA方法中,我们选取P个最大特征根及其所对应的特征向量,对A进行逼近:

(15)

线性代数理论证明:A与A’在最小二乘法的意义下是逼近的。而当P越接近N,则逼近的结果越接近于原矩阵。所以当我们选取的P远小于N时,所需要存储的信息量就会越小,达到了降维和压缩的目的。

一、简介

PCA(Principal Components Analysis)即主成分分析,是图像处理中经常用到的降维方法,大家知道,我们在处理有关数字图像处理方面的问题时,比如经常用的图像的查询问题,在一个几万或者几百万甚至更大的数据库中查询一幅相近的图像。这时,我们通常的方法是对图像库中的图片提取响应的特征,如颜色,纹理,sift,surf,vlad等等特征,然后将其保存,建立响应的数据索引,然后对要查询的图像提取相应的特征,与数据库中的图像特征对比,找出与之最近的图片。这里,如果我们为了提高查询的准确率,通常会提取一些较为复杂的特征,如sift,surf等,一幅图像有很多个这种特征点,每个特征点又有一个相应的描述该特征点的128维的向量,设想如果一幅图像有300个这种特征点,那么该幅图像就有300*vector(128维)个,如果我们数据库中有一百万张图片,这个存储量是相当大的,建立索引也很耗时,如果我们对每个向量进行PCA处理,将其降维为64维,是不是很节约存储空间啊?对于学习图像处理的人来说,都知道PCA是降维的,但是,很多人不知道具体的原理,为此,我写这篇文章,来详细阐述一下PCA及其具体计算过程:

二、PCA详解

1、原始数据:

为了方便,我们假定数据是二维的,借助网络上的一组数据,如下:

x=[2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2, 1, 1.5, 1.1]T

y=[2.4, 0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9]T

2、计算协方差矩阵

什么是协方差矩阵?相信看这篇文章的人都学过数理统计,一些基本的常识都知道,但是,也许你很长时间不看了,都忘差不多了,为了方便大家更好的理解,这里先简单的回顾一下数理统计的相关知识,当然如果你知道协方差矩阵的求法你可以跳过这里。

(1)协方差矩阵:

首先我们给你一个含有n个样本的集合,依次给出数理统计中的一些相关概念:

均值:

标准差:

方差:

既然我们都有这么多描述数据之间关系的统计量,为什么我们还要用协方差呢?我们应该注意到,标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集,最简单的大家上学时免不了要统计多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解这几科成绩之间的关系,这时,我们就要用协方差,协方差就是一种用来度量两个随机变量关系的统计量,其定义为:

从协方差的定义上我们也可以看出一些显而易见的性质,如:

(X的方差)

需要注意的是,协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如

n维的数据集就需要计算个协方差,那自然而然的我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义:

这个定义还是很容易理解的,我们可以举一个简单的三维的例子,假设数据集有

三个维度,则协方差矩阵为

可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。

(2)协方差矩阵的求法:

协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。下面我们将在matlab中用一个例子进行详细说明:

首先,随机产生一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。MySample = fix(rand(10,3)*50)

根据公式,计算协方差需要计算均值,那是按行计算均值还是按列呢,我一开始就老是困扰这个问题。前面我们也特别强调了,协方差矩阵是计算不同维度间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列为一个维度,所以我们要按列计算均值。为了描述方便,我们先将三个维度的数据分别赋值:

dim1 = MySample(:,1);

dim2 = MySample(:,2);

dim3 = MySample(:,3);

计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:

sum( (dim1-mean(dim1)) .* (dim2-mean(dim2)) ) / ( size(MySample,1)-1 ) % 得

到74.5333

sum( (dim1-mean(dim1)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得

到-10.0889

sum( (dim2-mean(dim2)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得

到-10***000

搞清楚了这个后面就容易多了,协方差矩阵的对角线就是各个维度上的方差,下面我们依次计算:

std(dim1)^2 % 得到108.3222

std(dim2)^2 % 得到260.6222

std(dim3)^2 % 得到94.1778

这样,我们就得到了计算协方差矩阵所需要的所有数据,调用Matlab自带的cov函数进行验证:

cov(MySample)

可以看到跟我们计算的结果是一样的,说明我们的计算是正确的。但是通常我们不用这种方法,而是用下面简化的方法进行计算:

先让样本矩阵中心化,即每一维度减去该维度的均值,然后直接用新的到的样本矩阵乘上它的转置,然后除以(N-1)即可。其实这种方法也是由前面的公式通道而来,只不过理解起来不是很直观而已。大家可以自己写个小的矩阵看一下就明白了。其Matlab代码实现如下:X = MySample – repmat(mean(MySample),10,1); % 中心化样本矩阵

C = (X’*X)./(size(X,1)-1)

(为方便对matlab不太明白的人,小小说明一下各个函数,同样,对matlab有一定基础的人直接跳过:

B = repmat(A,m,n ) %%将矩阵A 复制m×n 块,即把A 作为B 的元素,B 由m×n 个A 平铺而成。B 的维数是[size(A,1)*m, (size(A,2)*n]

B = mean(A)的说明:

如果你有这样一个矩阵:A = [1 2 3; 3 3 6; 4 6 8; 4 7 7];

用mean(A)(默认dim=1)就会求每一列的均值

ans =

3.0000

4.5000 6.0000

用mean(A,2)就会求每一行的均值

ans =

2.0000

4.0000

6.0000

6.0000

size(A,n)%% 如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则size 将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的是矩阵A的行数,c=size(A,2) 该语句返回的是矩阵A的列数)

上面我们简单说了一下协方差矩阵及其求法,言归正传,我们用上面简化求法,求出样本的协方差矩阵为:

3、计算协方差矩阵的特征向量和特征值

因为协方差矩阵为方阵,我们可以计算它的特征向量和特征值,如下:[eigenvectors,eigenvalues] = eig(cov)

我们可以看到这些矢量都是单位矢量,也就是它们的长度为1,这对PCA来说是很重要的。

4、选择成分组成模式矢量

求出协方差矩阵的特征值及特征向量之后,按照特征值由大到小进行排列,这将给出成分的重要性级别。现在,如果你喜欢,可以忽略那些重要性很小的成分,当然这会丢失一些信息,但是如果对应的特征值很小,你不会丢失很多信息。如果你已经忽略了一些成分,那么最后的数据集将有更少的维数,精确地说,如果你的原始数据是n维的,你选择了前p个主要成分,那么你现在的数据将仅有p维。现在我们要做的是组成一个模式矢量,这只是几个矢量组成的矩阵的一个有意思的名字而已,它由你保持的所有特征矢量构成,每一个特征矢量是这个矩阵的一列。

对于我们的数据集,因为有两个特征矢量,因此我们有两个选择。我们可以用两个特征矢量组成模式矢量:

我们也可以忽略其中较小特征值的一个特征矢量,从而得到如下模式矢量:

5、得到降维后的数据

其中rowFeatureVector是由模式矢量作为列组成的矩阵的转置,因此它的行就是原来的模式矢量,而且对应最大特征值的特征矢量在该矩阵的最上一行。rowdataAdjust是每一维数据减去均值后,所组成矩阵的转置,即数据项目在每一列中,每一行是一维,对我们的样本来说即是,第一行为x维上数据,第二行为y维上的数据。FinalData是最后得到的数据,数据项目在它的列中,维数沿着行。

这将给我们什么结果呢?这将仅仅给出我们选择的数据。我们的原始数据有两个轴(x和y),所以我们的原始数据按这两个轴分布。我们可以按任何两个我们喜欢的轴表示我们的数据。如果这些轴是正交的,这种表达将是最有效的,这就是特征矢量总是正交的重要性。我们已经将我们的数据从原来的xy轴表达变换为现在的单个特征矢量表达。

(说明:如果要恢复原始数据,只需逆过程计算即可,即:

到此为止,相信你已经掌握了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)是小矩阵的特征向量向大矩阵特

相关主题
相关文档
最新文档