当前位置:首页 >> 信息与通信 >>

基于SVM人脸识别代码


基于 SVM 人脸识别 Matlab 代码
function [nsv,al3,bi,T]=svm168(x,y,ker,C,par,tol); % 支持向量机在模式识别方面的应用. % [nsv,al3,bi,T]=svm168(x,y,ker,C,par,tol); % 输入参数: % x: 输入矩阵,每行代表一个样本,列数表示样本特征数。矩阵行数代表样本 数 。

% y: 由 -1 或 +1 组成的列向量. 每行表示相应样本的类别。只有两类。 % ker: 字符串 'linear', 'poly_h', 'poly_i' and 'rbf'。 % 用于传递内积函数的类型。 % C: 惩罚因子。 % par: 内积函数的参数。如多项式内积表示多项式的次数。查看 kernel 函数。 % tol: 算法的迭代误差。默认值是 10^-5。 % 输出: % nsv: 支持向量个数. % al3: alpha 值. % bi: 偏差值. % T: 运行时间. % clear;clc;close all; % disp('输入样本矩阵(每行表示一个测试数据):'); % x=[randn(1,20)-3 randn(1,20)+3;randn(1,40)]' % disp('样本所属类别:'); % y=[-ones(1,20) ones(1,20)]' % [nsv,alpha,bias,T]=svm168(x,y,'linear',10); % fprintf('运行时间 T=%g\n',T); % fprintf('支持向量个数:%g\n',nsv); % svcplot(x,y,'linear',alpha,bias); % W=x'*alpha; % disp('权系数向量:'); % W % disp('测试数据:'); % X_test=[randn(1,20)-3 randn(1,20)+3;randn(1,40)]' % disp('测试数据类别:');

% Y_test=[-ones(1,20) ones(1,20)]' % disp('测试数据类别判决:'); % Output=X_test*W+bias % disp('错误率:'); % number_error=sum(abs(Y_test-sign(Output)))/2; % error=number_error/20 % 径向基(或多项式)内积函数:(testrbf.m) % clear;clc;close all; % disp('输入样本矩阵(每行表示一个测试数据):'); % x=[randn(1,20)-3 randn(1,20)+3;randn(1,40)]' % disp('样本所属类别:'); % y=[-ones(1,20) ones(1,20)]' % [nsv,alpha,bias,T]=svm168(x,y,'rbf',10,4); % fprintf('运行时间 T=%g\n',T); % fprintf('支持向量个数:%g\n',nsv); % svcplot(x,y,'linear',alpha,bias); % disp('测试数据:'); % X_test=[randn(1,20)-3 randn(1,20)+3;randn(1,40)]' % disp('测试数据类别:'); % Y_test=[-ones(1,20) ones(1,20)]' % disp('测试数据类别判决:'); Output=kernel('rbf',X_test,x(find(alpha),:),4)*alpha(find(alpha))+bi as % disp('错误率:'); % number_error=sum(abs(Y_test-sign(Output)))/2; % error=number_error/20 -----------------------------------------------------------------------T=clock; if (nargin<4 | nargin>6) help svm168 else if(nargin==4 & ker(1)=='p') disp('将多项式内积的次数置为 2。'); par=2;

elseif(nargin==4 & ker(1)=='r') fprintf(1,'径向基函数内积的参数 (方差) 置为 %1.3f\n',sqrt(size(x,2))); par=sqrt(size(x,2)); elseif(nargin==4) par=0; end if(nargin<6) tol=10^-5; end K=10^6; N=size(x,1); ns=-1; k=2; hacer=1; bi=0; H=kernel(ker,x,x,par); i1p=1:2:N; i1n=2:2:N; i1=[i1p i1n]'; a=zeros(N,1); a(i1)=C; al3=zeros(N,1); bi=0; i2p=[]; i2n=[]; Lp(1)=N*C; e=y; while(hacer) al3_a=al3; bi_a=bi; al3=zeros(N,1); al3(i2p)=C; al3(i2n)=-C; if(length(i1)) Xi=inv([H(i1,i1)+diag(1./(a(i1))) ones(length(i1),1);ones(1,length(i1)) 0]);

aux=Xi*[y(i1)+C*H(i1,i2n)*ones(length(i2n),1)-C*H(i1,i2p)*ones(lengt h(i2p),1);C*length(i2n)-C*length(i2p)]; al3(i1)=aux(1:length(i1)); bi=aux(length(i1)+1); end e_a=e; I=find(al3-al3_a); if(length(I)) e=e_a-H(:,I)*(al3(I)-al3_a(I))-(bi-bi_a); end Lp(k)=al3'*H*al3/2+C*sum(e(find(e.*y>0)).*y(find(e.*y>0))); if((abs(Lp(k)-Lp(k-1))/Lp(k-1))<tol & k>(ns+1)) nsv=length(i1)+length(i2n)+length(i2p); hacer=0; else if((Lp(k)-Lp(k-1))/Lp(k-1)>tol) LL=Lp(k-1); HH=Lp(k); posL=0; posH=1; while(posL==0) jj=(posH+posL)/2; al3b=al3*jj+al3_a*(1-jj); bib=bi*jj+bi_a*(1-jj); I=find(al3b-al3_a); if(length(I)) eb=e_a-H(:,I)*(al3b(I)-al3_a(I))-(bib-bi_a); end if(HH>LL) HHa=HH; posHa=posH; HH=al3b'*H*al3b/2+C*sum(eb(find(eb.*y>0)).*y(find(eb.*y>0))); posH=jj; else LL=al3b'*H*al3b/2+C*sum(eb(find(eb.*y>0)).*y(find(eb.*y>0))); posL=jj;

end end jj=posH+posL; al3b=al3*jj+al3_a*(1-jj); bib=bi*jj+bi_a*(1-jj); I=find(al3b-al3_a); if(length(I)) eb=e_a-H(:,I)*(al3b(I)-al3_a(I))-(bib-bi_a); end valor=al3b'*H*al3b/2+C*sum(eb(find(eb.*y>0)).*y(find(eb.*y>0))); posL=posH; LL=HH; posH=jj; HH=valor; if(valor>Lp(k-1)) while(abs(valor-Lp(k-1))/Lp(k-1)>10^-3) jj=(posH+posL)/2; al3b=al3*jj+al3_a*(1-jj); bib=bi*jj+bi_a*(1-jj); I=find(al3b-al3_a); if(length(I)) eb=e_a-H(:,I)*(al3b(I)-al3_a(I))-(bib-bi_a); end valor=al3b'*H*al3b/2+C*sum(eb(find(eb.*y>0)).*y(find(eb.*y>0))); if(valor>Lp(k-1)) HH=valor; posH=jj; else LL=valor; posL=jj; end end end pos=jj; al3=al3*pos+al3_a*(1-pos); bi=bi*pos+bi_a*(1-pos);

I=find(al3-al3_a); if(length(I)) e=e_a-H(:,I)*(al3(I)-al3_a(I))-(bi-bi_a); end Lp(k)=al3'*H*al3/2+C*sum(e(find(e.*y>0)).*y(find(e.*y>0))); if(pos<10^-10) hacer=0; nsv=length(i1)+length(i2n)+length(i2p); end end i1p=find(e>=0 & y==1); i1n=find(e<=0 & y==-1); a=zeros(N,1); a(i1p)=C./e(i1p); a(i1n)=-C./e(i1n); a(find(a>K))=K; i2p=find(al3>=(C-C/100) & al3<=(C+C/100) & al3_a>=(C-C/100) & al3_a<=(C+C/100) & e>0 & y==1 & 15*e>14*e_a); if(length(setdiff(i1p,i2p))) i1p=setdiff(i1p',i2p)'; else [val,pos]=min(e(i2p)); i2p=setdiff(i2p,i2p(pos)); i1p=setdiff(i1p',i2p)'; end i2n=find(al3>=(-C-C/100) & al3<=(-C+C/100) & al3_a>=(-C-C/100) & al3_a<=(-C+C/100) & e<0 & y==-1 & 15*e<14*e_a); if(length(setdiff(i1n,i2n))) i1n=setdiff(i1n',i2n)'; else [val,pos]=max(e(i2n)); i2n=setdiff(i2n,i2n(pos)); i1n=setdiff(i1n',i2n)'; end i1=[i1p;i1n];

k=k+1; end end end T=etime(clock,T);


相关文章:
基于PCA和SVM的人脸识别
基于PCA 和 SVM人脸识别 【摘要】主成分分析(PCA)是人脸识别中特征提取的主要方法,支持向 量机(SVM)具有适合处理小样本、非线性和高维数问题,利用核函数且...
SVM分类器-人脸识别专题报告
实验仿真结果图如下: 6.总结与展望本次实验报告是基于 SVM 分类器, 设计人脸识别系统, 采用 ORL 人脸数据库, 并对图片进行预处理,包括 PCA 降维、规格化、SVM...
特征抽取与SVM在人脸识别的应用
4 4.5 部分代码 preprocess.m: %先通过 PCA 提取再通过 LDA 降维,防止 Sw ...SVM人脸识别中的应用 22页 免费 基于人脸局部特征和SVM的... 5页 1下载...
SVM原理及在人脸识别中的应用
SVM原理及在人脸识别中的应用_能源/化工_工程科技_专业资料。关于SVM的基础介绍及在人脸识别中的应用关于SVM 及其应用的相关原理一、 支持向量机介绍 下面我简单介绍...
Matlab PCA+SVM人脸识别(一)
Matlab PCA+SVM人脸识别(一)_计算机软件及应用_IT/...显示的主分量人脸: 基于主分量的人脸重构: 这段...可以把它插入在主函数里主成 分分析的代码下面 [plain...
基于matlab的简单人脸识别程序代码
基于matlab的简单人脸识别程序代码_IT/计算机_专业资料。matlab人脸识别小程序 基于matlab的简单人脸识别实例简介人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的...
基于PCA和SVM的人脸识别
基于PCA 和 SVM人脸识别 【摘要】主成分分析(pca)是人脸识别中特征提取的主要方法, 支持向量机(svm)具有适合处理小样本、非线性和高维数问题, 利用核函数且...
基于matlab的人脸识别源代码
基于matlab的人脸识别源代码_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 基于matlab的人脸识别源代码_计算机软件及应用_IT/计算机_...
人脸识别课程设计附带代码
但是直 接使用 SVM 方法进行人脸识别有两方面的困难:第一,训练时需要求解二次...2.4 基于积分图像特征的人脸检测方法: 是 Viola 等新近提出的一种算法,它综合...
人脸识别程序源代码
人脸识别程序源代码_理学_高等教育_教育专区。1.利用 OpenCV 进行人脸检测 人脸检测程序主要完成 3 部分功能,即加载分类器、加载待检测图象以及检测并标示。 本程序...
更多相关标签:
基于svm的人脸识别 | svm人脸识别 | pca svm 人脸识别 | hog svm人脸识别 | opencv svm 人脸识别 | python svm 人脸识别 | matlab svm 人脸识别 | svm算法人脸识别 |