LDA人脸识别的matlab程序_第1页
LDA人脸识别的matlab程序_第2页
LDA人脸识别的matlab程序_第3页
LDA人脸识别的matlab程序_第4页
LDA人脸识别的matlab程序_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、以下是LDA的m文件函数: 你稍稍改改就能用了!% % %function eigvector, eigvalue, elapse = LDA(gnd,options,data) % LDA: Linear Discriminant Analysiseigvector, eigvalue = LDA(gnd, options, data)Input:data - Data matrix. Each row vector of fea is a data point.gnd - Colunm vector of the label information for each data point.

2、options - Struct value in Matlab. The fields in options that can be set:Regu - 1: regularized solution, a* = argmax%0: solve the sinularity problem bySVD%Default: 0%ReguAlpha -The regularization parameter.Valid%when Regu=1. Default value is0.1.%ReguType-'Ridge': Tikhonovregularization%'C

3、ustom': User provided%regularizationmatrix%Default: 'Ridge'%regularizerR- (nFea x nFea) regularization%matrix which should beprovided%if ReguType is 'Custom'.nFea is%the feature number of data%matrix(a'X'WXa)/(a'X'Xa+ReguAlpha*I)%Fisherface1:%nClass% % % principal

4、 %PCA% % % % % %step%PCARatio principle %exceed the%components).PCARatioPCARatio = nSmp -Default: 0The percentage ofcomponent kept in thestep. The percentage is calculated based on the eigenvalue. Default is 1 (100%, all the non-zero eigenvalues will be kept.If PCARatio > 1, the PCAwill keep exac

5、tlycomponents (does notexact number of non-zero% %new% % % % % % % %Examples:Output:eigvector - Each column is an embedding function, for aeigvalue elapsedata point (row vector) x, y = x*eigvector will be the embedding result of x.-The sorted eigvalue of LDA eigen-problem.-Time spent on different st

6、epsfea = rand(50,70);gnd = ones(10,1);ones(15,1)*2;ones(10,1)*3;ones(15,1)*4;options = 口;options.Fisherface = 1;eigvector, eigvalue = LDA(gnd, options, fea);Y = fea*eigvector;% See also LPP, constructW, LGE%Reference:% P. N. Belhumeur, J. P. Hespanha, and D. J. Kriegman, 掏 igenfaces% vs. fisherfaces

7、: recognition using class specific linear% projection, ? IEEE Transactions on Pattern Analysis and Machine% Intelligence, vol. 19, no. 7, pp. 711-720, July 1997. % Deng Cai, Xiaofei He, Yuxiao Hu, Jiawei Han, and Thomas Huang,% "Learning a Spatially Smooth Subspace for Face Recognition", C

8、VPR'2007% Deng Cai, Xiaofei He, Jiawei Han, "SRDA: An Efficient Algorithm for% Large Scale Discriminant Analysis", IEEE Transactions on Knowledge and% Data Engineering, 2007.%version 2.1 -June/2007%version 2.0 -May/2007%version 1.1 -Feb/2006%version 1.0 -April/2004% Written by Deng Cai

9、 (dengcai2 AT ) %if -exist('data',var,) global data;endif (-exist('options',var,) options =;endif isfield(options,'Regu') | options.RegubPCA = 1;if isfield(options,'PCARatio') options.PCARatio = 1;endelsebPCA = 0;if isfield(options,'ReguType') optio

10、ns.ReguType = 'Ridge'endif isfield(options,'ReguAlpha')options.ReguAlpha = 0.1;end endtmp_T = cputime;% = InitializationnSmp,nFea = size(data);if length(gnd) = nSmperror('gnd and data mismatch!');endclassLabel = unique(gnd);nClass = length(classLabel);Dim = nClass - 1;if bPCA

11、 & isfield(options,'Fisherface') & options.Fisherface options.PCARatio = nSmp - nClass;endif issparse(data)data = full(data);endsampleMean = mean(data,1);data = (data - repmat(sampleMean,nSmp,1);bChol = 0;if bPCA & (nSmp > nFea+1) & (options.PCARatio >= 1)DPrime = data&

12、#39;*data;DPrime = max(DPrime,DPrime');R,p = chol(DPrime);if p = 0bPCA = 0;bChol = 1;end end%=% SVD%=if bPCAif nSmp > nFeaddata = data'*data;ddata = max(ddata,ddata');eigvector_PCA, eigvalue_PCA = eig(ddata);eigvalue_PCA = diag(eigvalue_PCA);clear ddata;maxEigValue = max(abs(eigvalue_

13、PCA);eigIdx = find(eigvalue_PCA/maxEigValue < 1e-12);eigvalue_PCA(eigIdx)=;eigvector_PCA(:,eigIdx)=;junk, index = sort(-eigvalue_PCA);eigvalue_PCA = eigvalue_PCA(index);eigvector_PCA = eigvector_PCA(:, index);%=if options.PCARatio > 1idx = options.PCARatio;if idx < length(eigvalue_PCA)eigva

14、lue_PCA = eigvalue_PCA(1:idx);eigvector_PCA = eigvector_PCA(:,1:idx);endelseif options.PCARatio < 1sumEig = sum(eigvalue_PCA);sumEig = sumEig*options.PCARatio;sumNow = 0;for idx = 1:length(eigvalue_PCA)sumNow = sumNow + eigvalue_PCA(idx);if sumNow >= sumEigbreak;endendeigvalue_PCA = eigvalue_P

15、CA(1:idx);eigvector_PCA = eigvector_PCA(:,1:idx);end%=eigvalue_PCA = eigvalue_PCA.A-.5;data = (data*eigvector_PCA).*repmat(eigvalue_PCA',nSmp,1); elseddata = data*data'ddata = max(ddata,ddata');eigvector, eigvalue_PCA = eig(ddata);eigvalue_PCA = diag(eigvalue_PCA);clear ddata;maxEigValue

16、 = max(eigvalue_PCA);eigIdx = find(eigvalue_PCA/maxEigValue < 1e-12);eigvalue_PCA(eigIdx)=;eigvector(:,eigIdx)=;junk, index = sort(-eigvalue_PCA);eigvalue_PCA = eigvalue_PCA(index);eigvector = eigvector(:, index);%=if options.PCARatio > 1idx = options.PCARatio;if idx < length(eigvalue_PCA)e

17、igvalue_PCA = eigvalue_PCA(1:idx);eigvector = eigvector(:,1:idx);endelseif options.PCARatio < 1sumEig = sum(eigvalue_PCA);sumEig = sumEig*options.PCARatio;sumNow = 0;for idx = 1:length(eigvalue_PCA)sumNow = sumNow + eigvalue_PCA(idx);if sumNow >= sumEigbreak;endendeigvalue_PCA = eigvalue_PCA(1

18、:idx);eigvector = eigvector(:,1:idx);end%=eigvalue_PCA = eigvalue_PCA.A-.5;eigvector_PCA = (data'*eigvector).*repmat(eigvalue_PCA',nFea,1);data = eigvector; clear eigvector;end elseif -bCholDPrime = data'*data;%options.ReguAlpha = nSmp*options.ReguAlpha;switch lower(options.ReguType) cas

19、e lower('Ridge')for i=1:size(DPrime,1)DPrime(i,i) = DPrime(i,i) + options.ReguAlpha; endcase lower('Tensor')DPrime = DPrime + options.ReguAlpha*options.regularizerR; case lower('Custom')DPrime = DPrime + options.ReguAlpha*options.regularizerR; otherwiseerror('ReguType doe

20、s not exist!'); endDPrime = max(DPrime,DPrime');end endnSmp,nFea = size(data);Hb = zeros(nClass,nFea);for i = 1:nClass,index = find(gnd=classLabel(i);classMean = mean(data(index,:),1);Hb (i,:) = sqrt(length(index)*classMean;endelapse.timeW = 0;elapse.timePCA = cputime - tmp_T;tmp_T = cputime

21、;if bPCAdumpVec,eigvalue,eigvector = svd(Hb,'econ');eigvalue = diag(eigvalue);eigIdx = find(eigvalue < 1e-3);eigvalue(eigldx)=;eigvector(:,eigldx)=;eigvalue = eigvalue.A2;eigvector =eigvector_PCA*(repmat(eigvalue_PCA,1,length(eigvalue).*eigvector); elseWPrime = Hb'*Hb;WPrime = max(WPr

22、ime,WPrime');dimMatrix = size(WPrime,2);if Dim > dimMatrixDim = dimMatrix;endif isfield(options,'bEigs')if options.bEigsbEigs = 1;elsebEigs = 0;endelseif (dimMatrix > 1000 & Dim < dimMatrix/10) | (dimMatrix > 500 & Dim< dimMatrix/20) | (dimMatrix > 250 & Dim < dimMat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论