LDA人脸识别的matlab程序

2018-11-16 20:40

LDA人脸识别的matlab程序

以下是LDA的m文件函数: 你稍稍改改就能用了!

function [eigvector, eigvalue, elapse] = LDA(gnd,options,data) % LDA: Linear Discriminant Analysis %

% [eigvector, 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.

% options - Struct value in Matlab. The fields in options % that can be set: %

% Regu - 1: regularized solution, % a* = argmax (a'X'WXa)/(a'X'Xa+ReguAlpha*I)

% 0: solve the sinularity problem by SVD

% Default: 0 %

% ReguAlpha - The regularization parameter. Valid

% when Regu==1. Default value is 0.1. %

% ReguType - 'Ridge': Tikhonov regularization

% 'Custom': User provided % regularization matrix

% Default: 'Ridge'

% regularizerR - (nFea x nFea) regularization % matrix which should be provided

% if ReguType is 'Custom'. nFea is

% the feature number of data % matrix

% Fisherface - 1: Fisherface approach

% PCARatio = nSmp - nClass

% Default: 0 %

% PCARatio - The percentage of principal

% component kept in the PCA

% step. The percentage is % calculated based on the % eigenvalue. Default is 1 % (100%, all the non-zero % eigenvalues will be kept. % If PCARatio > 1, the PCA step

% will keep exactly PCARatio principle

% components (does not exceed the

% exact number of non-zero components).

% %

% Output:

% eigvector - Each column is an embedding function, for a new

% data point (row vector) x, y = x*eigvector % will be the embedding result of x.

% eigvalue - The sorted eigvalue of LDA eigen-problem. % elapse - Time spent on different steps %

% Examples: %

% fea = 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: 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, % \CVPR'2007 %

% Deng Cai, Xiaofei He, Jiawei Han, \% Large Scale Discriminant Analysis\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 (dengcai2 AT cs.uiuc.edu)

%

if ~exist('data','var') global data; end

if (~exist('options','var')) options = []; end

if ~isfield(options,'Regu') | ~options.Regu bPCA = 1;

if ~isfield(options,'PCARatio') options.PCARatio = 1; end else

bPCA = 0;

if ~isfield(options,'ReguType') options.ReguType = 'Ridge'; end

if ~isfield(options,'ReguAlpha')

options.ReguAlpha = 0.1; end end

tmp_T = cputime;

% ====== Initialization [nSmp,nFea] = size(data); if length(gnd) ~= nSmp

error('gnd and data mismatch!'); end

classLabel = unique(gnd); nClass = length(classLabel); Dim = nClass - 1;

if bPCA & isfield(options,'Fisherface') & options.Fisherface options.PCARatio = nSmp - nClass; end

if issparse(data)

data = full(data); end

sampleMean = mean(data,1);

data = (data - repmat(sampleMean,nSmp,1));

bChol = 0;

if bPCA & (nSmp > nFea+1) & (options.PCARatio >= 1) DPrime = data'*data;

DPrime = max(DPrime,DPrime'); [R,p] = chol(DPrime);

if p == 0

bPCA = 0; bChol = 1; end end

%====================================== % SVD

%====================================== if bPCA

if nSmp > nFea

ddata = data'*data;

ddata = max(ddata,ddata');

[eigvector_PCA, eigvalue_PCA] = eig(ddata); eigvalue_PCA = diag(eigvalue_PCA); clear ddata;

maxEigValue = max(abs(eigvalue_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 > 1

idx = options.PCARatio;

if idx < length(eigvalue_PCA)

eigvalue_PCA = eigvalue_PCA(1:idx); eigvector_PCA = eigvector_PCA(:,1:idx); end

elseif options.PCARatio < 1

sumEig = sum(eigvalue_PCA);

sumEig = sumEig*options.PCARatio; sumNow = 0;

for idx = 1:length(eigvalue_PCA)

sumNow = sumNow + eigvalue_PCA(idx); if sumNow >= sumEig break; end end

eigvalue_PCA = eigvalue_PCA(1:idx); eigvector_PCA = eigvector_PCA(:,1:idx); end

%=======================================

eigvalue_PCA = eigvalue_PCA.^-.5;

data = (data*eigvector_PCA).*repmat(eigvalue_PCA',nSmp,1); else


LDA人脸识别的matlab程序.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:八年级安全教育教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: