实验指导书(模式识别)(6)

2019-08-30 14:08

算量会很大,甚至会陷入“维数灾难”而使得计算不可行;但通过上述代换,F中的内积可基于R中的变量通过给定的核函数直接计算得到,即使F的维数非常高,SVM本身也并没有增加多少计算复杂度。特别是对某些映射函数而言,F的维数是无限的,此时内积必须用积分来计算,这种代换的作用就更为明显。另外从以上推导过程可看出,在特征空间中构造最优分类面,并不需要以显式形式来考虑特征空间,也没有必要知道映射函数的形式,只需通过(3.7)计算内积即可。

值得指出的是,以上推导的假设前提是N个样本被映射到F中以后能够线性可分,如果该前提不满足,则必须在F中构造广义最优分类面。相应地(3.2)要改成

min

N 1w2?C??i (3.10)

2i?1s.t. ti?w???xi??b??1??i

在(3.9)中,假设输入空间R内的向量为x??x?1?,x?2?,?x?d??T,另有s个向量x1,x2,…xs对应的?i不为零,它们被称为支持向量,则SVC的拓扑结构如图3-2所示,从图中看出SVM的计算复杂度取决于支持向量的数目。

x?1?K?x,x1??1t1x?2??f?x??stsx?d?K?x,xs?

图3-2 SVC拓扑结构图

五、实验步骤

1.将CBCL人脸样本库放在硬盘上的指定位置;构建非人脸学习样本库并将之放在硬盘上的指定位置;

2.观测不同的特征提取方法对人脸识别率的影响。在MATLAB命令行状态下,首先键入faceclassify1(1)并按回车键,记录不采用任何特征提取时,程序的执行结果;然后键入faceclassify1(2) 并按回车键,记录采用主成分方法进行特征提取时程序的执行结果;最后键入faceclassify1(3) 并按回车键,记录采用核主成分方法进行特征提取时程序的执行结果;

3.观测不同的学习样本数对人脸识别率的影响。将源代码中的一个语句

26

“face_lean=200(”见本实验附录1中的源代码片段),分别修改成“face_lean=20”、 “face_lean=50”、“face_lean=100”、“face_lean=300”后,再在MATLAB命令行状态下键入faceclassify1(1)并按回车键,记录程序的执行结果;

4.观测支持向量机选用不同的核函数(线性核或径向基核)后对人脸识别率的影响。先将源代码中的一个语句“ker='linear';”(即线性核),修改成“ker='rbf';”(即径向基核),再在MATLAB命令行状态下键入faceclassify1(1)并按回车键,记录程序的执行结果;

5.观测支持向量机选用不同的核参数后对人脸识别率的影响。先将源代码中的一个语句“p1=sqrt(sumsqr(svm_xlean(1,:)-mean(svm_xlean(1,:)))./idlean);”,分别修改成“p1=0.5;”、 “p1=1;”、 “p1=2;”(即改变核参数p1的值),再在MATLAB命令行状态下分别键入faceclassify1(1)并按回车键,记录程序的执行结果。

六、实验报告要求

1.按照固定格式(见实验一的附录1)撰写实验报告; 2.在实验报告中,必须对实验指导书中所列思考题给予回答;

3.详细写出实验总结与心得体会,可以根据自己的实验情况,在实验设置等

方面给出合理化建议。

七、实验注意事项

1.在人脸识别源代码中(见附录一),有一行语句为“face_pname='D:\%user\\dataset\\face\\face19X19_mit_cbcl\\';”,从该语句看出人脸学习样本库在硬盘上的具体位置为D:\%user\\dataset\\face\\face19X19_mit_cbcl。如果人脸学习样本库在硬盘上的具体位置改变,上述语句也应随之修改,否则程序运行时会出现找不到人脸样本的情形。 八、思考题

1.为什么用计算机识别人脸比起人类自己识别人脸要困难得多?

27

附录1:基于支持向量机的人脸识别源代码片段

function faceclassify1(iflag) %参数 faceclassify(iflag)

% iflag=1 不进行特征提取,直接利用象素点信息进行分类 % iflag=2 用主成分分析方法进行特征提取后,再进行分类 % iflag=3 用核主成分分析方法进行特征提取后,再进行分类 %作者 Zhou yatong (Xi'an jiaotong university) 2001.01.18

if (nargin~=1) help faceclassify1 return end

% ~~~~~~~~~~~~ The parameter of face and non_face dataset ~~~~~~~~~~~~~~~~

face_pname='D:\%user\\dataset\\face\\face19X19_mit_cbcl\\'; %人脸学习样本库在硬盘上的位置 face_fname='face';

nonface_pname='D:\%user\\dataset\\nonface\\'; %非人脸学习样本库在硬盘上的位置 nonface_fname='nonface';

nonface_test_pname='D:\%user\\dataset\\nonface\\nonface_test\\'; %非人脸测试样本库在硬盘上的位置 nonface_test_fname='nonface_test';

imlen=19; % image's pixels number in horizontal direction(image matrix's col num) imhigh=19; % image's pixels number in vectical direction (image maxtix's row num) idlean=imlen*imhigh; % the dimension of learning sample idtest=idlean; % the dimension of testing sample

% ~~~~~~~~~~~~~~~~学习样本与测试样本参数设置~~~~~~~~~~~~~~~~~~ face_lean=200; % 人脸学习样本数 nonface_lean=200; % 非人脸学习样本数 face_test=100; % 人脸测试样本数

28

nonface_test=100; % 非人脸测试样本数

face_test_startnumber=1100; % 第一个人脸测试样本在人脸库中的序号 nlean=face_lean+nonface_lean; % the total learning samples number ntest=face_test+nonface_test; % the total testing sample number

%~~~~~~~~~~~~~~~~~~~~读取学习样本 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for ix1=1:1:face_lean % face learn ix1temp=ix1;

fprintf('+ learn sample no:%d\\n',ix1temp);

[face_sample]=face_sampleread(face_pname,face_fname,ix1temp,imlen,imhigh); xlean(ix1,:)=face_sample; end

for ix2=face_lean+1:1:nlean % nonface learn ix2temp=ix2-face_lean;

fprintf('- learn sample no:%d\\n',ix2temp);

[nonface_sample]=nonface_sampleread(nonface_pname,nonface_fname,ix2temp,imlen,imhigh); xlean(ix2,:)=nonface_sample; end

%~~~~~~~~~~~~~~~~~~~~~~读取测试样本~~~~~~~~~~~~~~~~~~~~~~~~~~ for ix3=1:1:face_test % face test

ix3temp=ix3+face_test_startnumber; fprintf('+ test sample no:%d\\n',ix3temp);

[face_sample]=face_sampleread(face_pname,face_fname,ix3temp,imlen,imhigh); xtest(ix3,:)=face_sample; end

for ix4=face_test+1:1:ntest % nonface test ix4temp=ix4-face_test; fprintf('- test sample no:%d\\n',ix4temp);

29

[nonface_sample]=nonface_sampleread(nonface_test_pname,nonface_test_fname,ix4temp,imlen,imhigh); xtest(ix4,:)=nonface_sample; end

% ~~~~~~~class value of 'ylean' sample and 'ytest' sample~~~~~~~~~~~~~ for iy1=1:1:face_lean % face learn ylean(iy1)=1.0; end

for iy2=face_lean+1:1:nlean % nonface learn ylean(iy2)=-1.0; end

for iy3=1:1:face_test % face test ytest_real(iy3)=1.0; end

for iy4=face_test+1:1:ntest % nonface test ytest_real(iy4)=-1.0; end ylean=ylean'; ytest_real=ytest_real';

%~~~~~~~~~~~~~~~~~~ 归一化学习与测试样本 ~~~~~~~~~~~~ [xlean_normal]=normalize(xlean); %normalize learn sample [xtest_normal]=normalize(xtest); %normalize test sample

%======================== 特征提取 =========================== if iflag==1 %不做特征提取 svm_xlean = xlean_normal; svm_xtest = xtest_normal;

elseif iflag==2 %用主成分分析方法进行特征提取 numpc=361; %特征提取的维数

30

[v,latent,explained,xlean_normal_project]=lpca(xlean_normal,xlean_normal,numpc); [v,latent,explained,xtest_normal_project]=lpca(xlean_normal,xtest_normal,numpc); [xlean_normal_project_unit]=unitary(xlean_normal_project); %unitify project [xtest_normal_project_unit]=unitary(xtest_normal_project); %unitify project svm_xlean = xlean_normal_project_unit; svm_xtest = xtest_normal_project_unit;

elseif iflag==3 %用核主成分分析方法进行特征提取 numpc=361; d=2;

[evals,explained,xlean_normal_project]=kpca(xlean_normal,xlean_normal,numpc,d); [evals,explained,xtest_normal_project]=kpca(xlean_normal,xtest_normal,numpc,d); [xlean_normal_project_unit]=unitary(xlean_normal_project); %unitify project [xtest_normal_project_unit]=unitary(xtest_normal_project); %unitify project svm_xlean = xlean_normal_project_unit; svm_xtest = xtest_normal_project_unit; end

%========================== 分类 ============================= ker='linear'; %支持向量机所采用的核的类型 upperbound=Inf; %支持向量机的正则化因子

p1=sqrt(sumsqr(svm_xlean(1,:)-mean(svm_xlean(1,:)))./idlean); %支持向量机的第一个核参数 %p1=0.1;

p2=0; %支持向量机的第二个核参数 % 开始用支持向量机进行分类

[alf,b,nsv]=smoc(svm_xlean,ylean,upperbound,ker,p1,p2); %训练支持向量机 %[alf,b,nsv]=svmc(svm_xlean,ylean,upperbound,ker,p1,p2); fprintf('\\nLagrange coefficient ALF:\\n'); %fprintf('%f\\n',alf);

[ytest] = svmctest(svm_xlean,ylean,svm_xtest,ker,alf,b,p1,p2); %基于训练结果对测试样本进行分类 detc_rate=length(find((ytest_real-ytest)==0))/ntest*100;

fprintf('\\nDetection rate:%f\\n',detc_rate); %输出识别率

31


实验指导书(模式识别)(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:三年级下册数学应用题(300题)

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

马上注册会员

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