实验指导书(模式识别)
更新时间:2024-01-21 13:53:01 阅读量: 教育文库 文档下载
《模式识别》 实验指导书
河北工业大学信息工程学院 《模式识别》课程组
2008年1月
前 言
模式识别是电子信息工程专业的一门重要的专业选修课。其目的是通过对模式识别基本理论、概念和方法的学习,使学生能够灵活运用所学知识,借助计算机解决实际工程应用中的自动识别问题。而模式识别实验是本门课程重要的教学环节,其目的是使学生掌握统计模式识别中常见分类方法的算法设计及其验证方法,通过接受实验的训练,以提高学生的分析和解决问题的能力。为此,河北工业大学信息工程学院编写了《模式识别实验指导书》。在编写中由于可供参考的实验指导资料有限,因此本书肯定存在不少不妥之处,恳请读者予以批评指正。
本实验指导书共包含三个实验。第一个实验为安装并使用模式识别工具箱,通过本次实验可以让学生了解模式识别软件的具体形态、基本设置以及运行流程,了解一些基本识别方法的工作过程。第二个实验为用人工神经网络对二维样本进行分类,通过本次实验可以让学生掌握人工神经网络的运行机理,了解神经网络在解决实际问题时如何进行参数设置和模型选择。第三个实验为用支持向量机进行人脸识别,通过本次实验可以让学生掌握支持向量机的运行机理、参数选择与快速算法等,了解在实际分类中学习样本库的重要性。
2
目 录
实验一 安装并使用模式识别工具箱----------------------------------------------------------4 实验二 用人工神经网络对二维样本分类---------------------------------------------------13 实验三
用支持向量机进行人脸识别---------------------------------------------------------22 3
实验一 安装并使用模式识别工具箱 (2学时)
一、实验目的
1.掌握安装模式识别工具箱的技巧,能熟练使用工具箱中的各项功能; 2.熟练使用最小错误率贝叶斯决策器对样本分类; 3.熟练使用感知准则对样本分类; 4.熟练使用最小平方误差准则对样本分类;
5.了解近邻法的分类过程,了解参数K值对分类性能的影响(选做); 6.了解不同的特征提取方法对分类性能的影响(选做)。
二、实验内容
1.安装模式识别工具箱;
2.用最小错误率贝叶斯决策器对呈正态分布的两类样本分类;
3.用感知准则对两类可分样本进行分类,并观测迭代次数对分类性能的影响; 4.用最小平方误差准则对云状样本分类,并与贝叶斯决策器的分类结果比较; 5.用近邻法对双螺旋样本分类,并观测不同的K值对分类性能的影响(选做); 6.观测不同的特征提取方法对分类性能的影响(选做)。
三、实验仪器、设备
1. PC机-系统最低配置 512M 内存、P4 CPU;
2. Matlab 仿真软件 - 7.0 / 7.1 / 2006a等版本的Matlab 软件。
四、实验原理
1.模式识别工具箱
模式识别工具箱是学习模式识别基本原理、灵活应用既有的模式识别方法、开发研制新的识别方法、提高学生分析和解决问题能力的一个良好平台。本实验采用的模式识别工具箱是由Elad Yom-Tov,Hilit Serby和David G. Storka等人开发的。
2.最小错误率贝叶斯决策器
在模式识别领域,贝叶斯决策通常利用一些决策规则来判定样本的类别。最常
4
见的决策规则有最大后验概率决策和最小风险决策等。设共有K个类别,各类别用符号ck?k?1,2,?,K?代表。假设ck类出现的先验概率P?ck?以及类条件概率密度
P?x|ck?是已知的,那么应该把x划分到哪一类才合适呢?若采用最大后验概率决策
规则,首先计算x属于ck类的后验概率
P?ck|x??P?ck?P?x|ck?P?ck?P?x|ck?
?KP?x??P?ck?P?x|ck?k?1
然后将x判决为属于ck~类,其中
??argmaxP?c|x? kk1?k?K若采用最小风险决策,则首先计算将x判决为ck类所带来的风险R?x,ck?,再将x判决为属于ck~类,其中
??minR?x,c? kkk可以证明在采用0-1损失函数的前提下,两种决策规则是等价的。
贝叶斯决策器在先验概率P?ck?以及类条件概率密度P?x|ck?已知的前提下,利用上述贝叶斯决策规则确定分类面。贝叶斯决策器得到的分类面是最优的,它是最优分类器。但贝叶斯决策器在确定分类面前需要预知P?ck?与P?x|ck?,这在实际运用中往往不可能,因为P?x|ck?一般是未知的。因此贝叶斯决策器只是一个理论上的分类器,常用作衡量其它分类器性能的标尺。
3.感知准则
设有一组样本x1,x2,?,xN,其中xn是规范化增广样本向量。现欲寻找一个解向量a,使得aTxn?0。感知准则通过使
JP?a?????ax??0
Tx?R最小而求出向量a,其中R是被解向量a错分的样本集。上式一般用梯度下降法求解。
4.最小平方误差准则
设有一组样本x1,x2,?,xN,其中xn是规范化增广样本向量。现欲寻找一个解向
5
量a,使得aTxn?bn?0。最小平方误差准则通过使
Js?a????axTn?1Nn?bn?2
最小而求出向量a。上式一般用最小二乘法求解。
5.近邻法原理
近邻法是一种经典的模式识别方法。正如其名所示,近邻法在分类时运用如下“最近邻分类规则”对测试样本x进行分类:在x的周围找出离其最近的k个近邻样本,该k个样本中最频繁出现的那一类样本所对应的类别就是x所属的类别。以图1-1为例,图中存在两类样本,第一类记为c1并用黑点表示,第二类记为c2并用方框表示。现欲用NN判决x是属于c1类还是c2类。假设取k?5,则可找出x的5个近邻样本并用圆圈围住,圆圈中有3个样本属于c1类(目标值tn?1,n?1,2,3),2个样本属于c2类(目标值tn??1,n?4,5),那么x根据规则应属于c1类。
?x1,t1?1??x2,t2?1??x5,t5??1??x,t????x4,t4??1??x3,t3?1? 图1-1 近邻法的分类原理示意图
6.特征提取
特征提取是模式识别中的关键一环。因为原始的特征数量可能很大,或者说样本处于一个高维空间中,因此可以通过映射或变换的办法在低维空间中来表示样本,这个过程就是特征提取。常见的特征提取方法有主成分分析(PCA)与主曲线等。更详细的内容可参见教材第8章。
五、实验步骤
1.安装模式识别工具箱。首先将工具箱文件拷贝至指定文件夹里,然后在
6
MATLAB环境下将该文件夹设置成“current directory”(即当前文件夹);最后在MATLAB命令行状态下,键入Classifier并按回车键;则可得到如图1-2所示主界面。在该主界面上,可以装入样本文件(见界面“Filename”处),可以选择特征提取方式(见界面“preprocessing”处),可以选择不同的模式识别方法(见界面“algorithms”处),识别结果(识别错误率)显示在界面“classification errors”处。
图1-2 模式识别工具箱主界面
2.用最小错误率贝叶斯决策器对呈正态分布的两类样本分类。首先点击界面“Filename”处的下拉式菜单,在文件列表中选择双螺旋样本文件XOR.mat;然后在界面“preprocessing”处下拉式菜单中选择“None”,在界面“Algorithm”处下拉式菜单中选择“None”,最后点击界面上的“Start”按钮,得到如图1-3所示的分类结果。使用屏幕拷贝方式将该分类结果保存于WORD文档里,并如实记录界面“classification errors”处显示的分类错误率。
7
图1-3 最小错误率贝叶斯决策器的分类结果
3.用感知准则对两类可分样本进行分类。首先点击界面“Filename”处的下拉式菜单,在文件列表中选择可分样本文件Seperable.mat;然后在界面“preprocessing”处下拉式菜单中选择“None”,在界面“Algorithm”处下拉式菜单中选择“Perceptron”,在界面“Num of iteration”处填入数字“300”,最后点击界面上的“Start”按钮,得到如图1-4所示的分类结果。使用屏幕拷贝方式将该分类结果保存于WORD文档里,并如实记录界面“classification errors”处显示的分类错误率。
图1-4用感知准则对两类可分样本分类后的结果
8
现在界面“Num of iteration”处重新填入数字“10000”,然后点击界面上的“Start”按钮,可得到新的分类结果。使用屏幕拷贝方式将该分类结果保存于WORD文档里,并如实记录界面“classification errors”处显示的分类错误率。最后比较不同迭代次数情形下分类效果的异同。
4.用最小平方误差准则对两类样本进行分类。首先点击界面“Filename”处的下拉式菜单,在文件列表中选择可分样本文件Clouds.mat;然后在界面“preprocessing”处下拉式菜单中选择“None”,在界面“Algorithm”处下拉式菜单中选择“LS”,最后点击界面上的“Start”按钮,得到如图1-5所示的分类结果,其中黑线为最小平方误差准则的分类结果,红线为贝叶斯决策器的分类结果。将这两种分类结果的比较(分类效果好坏,能否将样本完全分开等)记录下来,并使用屏幕拷贝方式将分类结果保存于WORD文档里,最后如实记录界面“classification errors”处显示的分类错误率。
图1-5用最小平方误差准则对两类可分样本分类后的结果
5.用近邻法对双螺旋样本进行分类。首先点击界面“Filename”处的下拉式菜单,在文件列表中选择双螺旋样本文件Spiral.mat;然后在界面“preprocessing”处下拉式菜单中选择“None”,在界面“Algorithm”处下拉式菜单中选择“Nearest Neighbor”,在界面“Num of nearest neighbor”处填入数字“3”,最后点击界面上的“Start”按钮,得到如图1-6所示的分类结果。使用屏幕拷贝方式将该分类结果保存于WORD文档里,并记录界面“classification errors”处显示的分类错误率。
9
图1-6 近邻法对双螺旋样本分类后的结果
在界面“Num of nearest neighbor”处重新填入数字“12”,然后点击界面上的“Start”按钮,可得到新的分类结果。使用屏幕拷贝方式将该分类结果保存于WORD文档里,并如实记录界面“classification errors”处显示的分类错误率。最后比较“k=3”与“k=12”两种情形下分类效果的异同。
6.特征提取方法对分类效果的影响。用感知准则对两类可分样本进行分类。首先点击界面“Filename”处的下拉式菜单,在文件列表中选择可分样本文件XOR.mat;然后在界面“preprocessing”处下拉式菜单中选择“PCA”,在界面“New data dimension”处填入数字2,在界面“Algorithm”处下拉式菜单中选择“Nearest Neighbor”,在界面“Num of nearest neighbor”处填入数字“3”,最后点击界面上的“Start”按钮,得到如图1-7(a)所示的分类结果。使用屏幕拷贝方式将该分类结果保存于WORD文档里,并如实记录界面“classification errors”处显示的分类错误率。
现在界面“New data dimension”处重新填入数字1,其它条件不变,然后点击界面上的“Start”按钮,可得到新的分类结果如图1-7(b)所示。使用屏幕拷贝方式将该分类结果保存于WORD文档里,并如实记录界面“classification errors”处显示的分类错误率。最后比较提取的特征数目不同的情形下分类效果(即图1-7(a)(b)两个图)的异同。
10
层数大于三层时,陷入局部极小点的可能性很大,此时需利用先验知识缩小搜索范围。另外BP网的输入层与输出层结点数由问题本身决定,例如在模式识别中输入层结点数为特征维数,输出层结点数为类别数;但中间隐层的结点数只能靠经验确定。一般而言,要解决的问题越复杂,需要的隐层的结点数越多,但过多的结点会导致“过学习”,从而使网络的泛化能力变差。 径向基函数网
1988年Broomhead等将径向基函数(radial basis function, RBF)首先用于神经网络设计,从而构成了RBF网。RBF网如图2-1(c)所示,它与感知器很相似,只是感知器多了一个隐层,因此是一种三层网。隐层单元采用径向基函数K作为其输出特性,输入层到隐层的权值固定为1,输出结点为线性求和单元,隐层到输出结点间的权值wi可调。假设RBF网输入层有d个结点,隐层有m个结点,若输入
x?x(1),?,x??,?x?im?d??T,K?x,x??exp??x?xc2c/2?2?,xc是基函数的中心,?为基函数的宽度,
??则输出为y?f???wK?x,x???f??wexp??x?xm2ci?i?1ic??i?1i?/2?2???。一个函数可以表示成一组基函数的加权
和,因此RBF网可以看作是用隐层单元的输出函数构成的一组基去逼近一个函数。
五、实验步骤
1.在MATLAB命令行状态下,键入DEMO并按回车键;得到如图2-2所示的界面。然后点击“Toolboxes”,打开MATLAB工具箱。再点击“Neural networks”,选定神经网络工具箱,如图2-3所示。
16
图2-2 打开MATLAB工具箱
图2-3 选定神经网络工具箱
2.观察并记录人工神经元(Neurons)的特性与功能。首先在如图2-3所示界面上,将鼠标移至“simple neuron and transfer function”并双击之,得到如图2-4所示界面。然后双击如图2-4所示界面上的文字“run this demo”,得到图2-5。
17
图2-4 选定神经元演示程序
Neural NetworkDESIGNInputOne-Input NeuronLinear Neuron: a = purelin(w*p+b)Alter the weight, biasand input by draggingthe triangular shapedindicators.Pick the transferfunction with theF menu.Watch the change tothe neuron functionand its output.4pwab1w-2 0 2 20-2b-2 0 2 F:-4-4-2024aChapter 2p 图2-5神经元演示模块
在如图2-5所示界面上,拖动与w与b对应的“Δ”符号,从而改变w与b的值,观察神经元的输出随权值w与b的变化情况,并将改变后的界面保存下来(在菜单“Edit”中选择“Copy figure”,再粘贴至WORD文档中)。
3.观察并记录感知器(Perceptrons)的特性与功能。在如图2-3所示界面上,
18
将鼠标移至“Decisions Boundaries”并双击之,得到一个界面;然后双击界面上的文字“run this demo”,得到图2-6。仔细阅读该图上的英文说明,并照该说明一步步操作,以此实现用感知器对两类样本分类的目标,最后将分类结果保存下来。
Neural NetworkDESIGN3Move the perceptrondecision boundary bydragging its handles.Decision Boundaries21WTry to divide thecircles so that noneof their edges are red.The weights and biaswill take on valuesassociated with thechosen boundary.Drag the white andblack dots to definedifferent problems.0-1-2-3-3-2-10123W= 1.790.894b= 1.79Chapter 4 图2-6 感知器演示模块
4.观察并记录误差反传网(Back propagation Networks)的特性与功能。在如图2-3所示界面上,将鼠标移至“Generalization”上并双击之,得到一个界面;然后双击界面上的文字“run this demo”,得到图2-7。仔细阅读该图上的英文说明,并照该说明进行操作,以此达到用误差反传网逼近函数的目标,最后将逼近结果保存下来。
19
Neural NetworkDESIGNFunction Approximation2Generalization1.5TargetClick the [Train]button to train thelogsig-linearnetwork on thedata points at left.Use the slide barto choose thenumber of neuronsin the hidden layer.10.50-2-1.5-1-0.50Input0.511.52Number of Hidden Neurons S1:1Difficulty Index:1391Chapter 119 图2-7 误差反传网演示模块
5.观察并记录径向基函数网(Radial Basis Networks)的特性与功能。在如图2-3所示界面上,将鼠标移至“Radial basis approximation”并双击之,得到图2-8。现将该图上的所有源代码拷贝至一个新文件“Raba.m”中,并在MATLAB命令行状态下执行Raba,以此实现用径向基函数网逼近函数的目标,最后将逼近结果保存下来。
图2-8 径向基函数网演示模块
20
六、实验报告要求
1.按照固定格式(见实验一的附录1)撰写实验报告; 2.在实验报告中,必须对实验指导书中所列思考题给予回答;
3.详细写出实验总结与心得体会,可以根据自己的实验情况,在实验设置等
方面给出合理化建议。
七、实验注意事项
1. 如果实验有充裕时间,可在如图2-3所示界面上,用鼠标双击“Application examples”中的几个例子,进一步加深对人工神经网络的理解。 八、思考题
1.请详述感知器、误差反传网与径向基函数网等三种经典的网络模型间的联
系与区别。
21
实验三 用支持向量机进行人脸识别(2学时)
一、实验目的
1.掌握支持向量机(SVM)的原理、核函数类型选择以及核参数选择原则等; 2.熟悉人脸识别的一般流程与常见识别方法; 3.熟悉不同的特征提取方法在人脸识别的应用;
4.了解在实际的人脸识别中,学习样本数等参数对识别率的影响; 5.了解非人脸学习样本库的构建在人脸识别的重要作用。
二、实验内容
1.构建非人脸学习样本库;
2.观测不同的特征提取方法对人脸识别率的影响; 3.观测不同的学习样本数对人脸识别率的影响;
4.观测支持向量机选用不同的核函数(线性核或径向基核)后对人脸识别率的
影响;
5.观测支持向量机选用不同的核参数后对人脸识别率的影响。
三、实验仪器、设备
1. PC机-系统最低配置 512M 内存、P4 CPU;
2. Matlab 仿真软件 - 7.0 / 7.1 / 2006a 等版本的Matlab 软件。 3. CBCL人脸样本库;
四、实验原理
1. 人脸识别:
人脸识别也就是利用计算机分析人脸图象,进而从中提取出有效的识别信息,用来“辨认”身份的一门技术。人脸识别技术应用背景广泛,可用于公安系统的罪犯身份识别、驾驶执照及护照等与实际持证人的核对、银行及海关的监控系统及自动门卫系统等。
常见的人脸识别方法包括基于KL变换的特征脸识别、基于形状和灰度分离的
22
可变形模型识别、基于小波特征的弹性匹配、基于传统的部件建模识别、基于神经网络的识别、基于支持向量机的识别等。其中特征脸方法、神经网络方法、基于支持向量机的方法等是基于整体人脸的识别,而基于提取眼睛等部件特征而形成特征向量的方法就是基于人脸特征的识别。
虽然人类的人脸识别能力很强,能够记住并辨别上千个不同人脸,可是计算机则困难多了。其表现在:人脸表情丰富;人脸随年龄增长而变化;人脸所成图象受光照、成象角度及成象距离等影响;而且从二维图象重建三维人脸是病态过程,目前尚没有很好的描述人脸的三维模型。另外,人脸识别还涉及到图象处理、计算机视觉、模式识别以及神经网络等学科,也和人脑的认识程度紧密相关。这诸多因素使得人脸识别成为一项极富挑战性的课题。
通常人类进行人脸识别依靠的感觉器官包括视觉、听觉、嗅觉与触觉等。一般人脸的识别可以用单个感官完成,也可以是多感官相配合来存储和检索人脸。而计算机的人脸识别所利用的则主要是视觉数据。另外计算机人脸识别的进展还受限于对人类本身识别系统的认识程度。研究表明,人类视觉数据的处理是一个分等级的过程,其中最底层的视觉过程(视网膜功能)起信息转储的作用,即将人眼接收的大量图象数据变换为一个比较规则的紧凑表达形式。生理学的研究表明,人眼视网膜上存在着低层次和高层次的细胞。其中,低层次的细胞对空间的响应和小波变换的结果相似;而高层次的细胞则依据一群低层次细胞的响应,而作出具体的线、面乃至物体模式的响应。以此为依据,在计算机人脸识别中,可以将那些通过大量图象数据简单处理后获得的特征定义为低层次特征,而将线、面、模式等描述特征定义为高层次特征。由此图象变换后的系数特征、小波变换特征及一些统计特征均属低层次特征的范畴,而人脸部件形状分析的结果则为高层次特征。由于视觉数据经传输后的重建,需依赖于人脑中早期形成的先验知识,因此在人的识别系统中,人脸的检测是一个整体识别和特征识别共同作用的结果。具体说来,远处辨认人,主要是整体识别,而在近距离的人脸识别中,特征部件的识别则更重要。
另外,人脸的各部件对识别的贡献也不相同,如眼睛和嘴巴的重要程度大于人的鼻子,人脸上半部分重要性大于人脸下半部分,其中特别的人脸更容易被识别记住,比如说歪嘴,或是独眼龙等人脸就更容易为人记起,没有个性的人脸相对就需要更长的时间来辨认。根据对人脑的研究表明,人脸的表情识别和人脸识别虽然存在联
23
系,但总体说是分开的、并行的处理过程。这些结论对于设计有效的识别方法起到了一定启发作用。
人脸识别是一个跨学科富挑战性的前沿课题,但目前人脸识别还只是研究课题,尚不是实用化领域的活跃课题。人脸识别难度较大,主要难在人脸都是有各种变化的相似刚体,由于人脸部件不仅存在各种变形,而且和皮肤之间是平缓过渡,因此人脸是不能用经典的几何模型来进行识别分类的典型例子。如今人脸识别研究人员已经慢慢地将研究重点从传统的点和曲线的分析方法,过渡到用新的人脸模型来表达和识别人脸,其中弹性图匹配就是较成功的尝试。
2.支持向量机:
SVM近年来成为模式识别领域发展最快的研究方向之一,并且在各个领域得到了广泛应用。SVM通过一个非线性映射将输入空间中的学习样本映射到高维特征空间F中,然后利用结构风险最小化原则在F中求取线性分类超平面,巧妙地引入核函数实现特征空间中的内积运算。SVM的基本原理可用图3-1来说明。
如图3-1(a)所示,如果N个独立样本?x1,t1?,?x2,t2?,…,?xN,tN??R?T不是线性可分的,这时可以通过一个未知的映射函数?:R?F将样本映射到某特征空间F中,得到???x1?,t1?,???x2?,t2?,…,???xN?,tN??F?T,然后在F中构造线性最优分类面(图(b)),从输入空间R的角度看,所得最优分类面是非线性的(图(c))。可记x1,x2,?xN的集合为?,??x1?,??x2?,???xN?的集合为????。
RFRH1H2H3(a)(b)(c)
图3-1 SVM基本原理示意图 (a)输入空间R中的N个待分类样本 (b)样本被映射到特征空间F中,并构建最优分类面 (c)从输入空间R的角度看,分类面是非线性的
在F中构造线性最优分类面的方式与上节在输入空间R中构造最优分类面的方式是一样的。设与H2对应的线性判别函数表达式为
24
f?x??w???x??b
(3.1)
上式中求取w与b可归结为求解下面的约束优化问题
min
1w222 (3.2)
s.t. ti?w???xi??b??1 i?1,2?N
上式的解由下面的拉格朗日函数的鞍点给出
N12G?w,b,α??w???i?ti??w???x???b??1?
2i?1 (3.3)
上式中?i?0,i?1,2,?N为拉格朗日乘子。为得到鞍点令
N?G?0 ?w???iti??xi? ?wi?1N?G ??0ti?i?0 ??bi?1 (3.4)
(3.5)
将(3.4)和(3.5)一起代入到(3.3)中可得(3.2)的对偶规划
max ?G?α????i?i?1N12???i?1j?1NNi?tjti??jx?i???x? (3.6)
js.t.
?t?ii?1Ni?0 ?i?0
上式含有映射函数?。
若在F中定义内积
K?xi,xj????xi????xj? (3.7)
将之代入到(3.6)后有
1NNmax ?G?α????i????i?jtitjK?xi,xj?
2i?1j?1i?1N (3.8)
s.t.
?t?ii?1Ni?0 ?i?0
又设α???1,?2,?,?i,?,?N?T,d??1,1,?,1?T,tN??t1,t2,?,tN?T,矩阵Q的第i行第j列为
Qij?titj?xi,xj?,则(3.8)可写成矩阵形式。解(3.8)可得?i的最优值,并将(3.4)代入
到(3.1)中可得F中的线性判别函数表达式
f?x????itiK?x,xi??b
i?1N (3.9)
式(3.7)中的K?xi,xj?被称为核函数,它欲成为F中的内积必须满足Mercer条件:使得积分算子?Tkf??xi???K?xi,xj?f?xj?dxj为正。如果F的维数很高,(3.7)等号右边的计
25
算量会很大,甚至会陷入“维数灾难”而使得计算不可行;但通过上述代换,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
[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
正在阅读:
实验指导书(模式识别)01-21
《行政强制法》培训试题库及答案06-16
勇敢面对的一件事作文500字06-21
美国的食品安全法律体系05-20
在高三誓师大会上的讲话08-22
高考生物 基因的自由组合定律复习练习03-15
20XX年呼吸内科护理工作计划范文12-11
如何辨别诺基亚手机电池的真假 - 图文10-17
JAVA语言_第八章_java.io_包06-06
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 指导书
- 识别
- 模式
- 实验
- 边坡稳定性分析
- 大学生创新基础期末考试
- 食管癌-贲门癌术后II-A型液囊空肠导管护理论文
- 农业信息化标准化综合集成研究与示范基地可研报告 - 图文
- 信号与线性系统五六章自测题(标准答案)
- 2018年教师招聘考试小学语文真题及答案
- 机械手的研发 - 图文
- 建筑与相关专业配合拍图主要注意点汇总
- 苍南龙港镇松涛嘉园配套道路 - 图文
- 高炉设备操作、维护规程
- 考研英语词汇课程电子版教材
- 刚性防水屋面施工质量控制
- 杭州湾大桥现浇段箱梁施工技术及工艺方案
- 大连海事大学考船长知识点整理(船舶避碰)
- 新人教版四年级数学上册合理安排时间、排队论练习题
- 润滑剂与润滑油牌号详解
- 村级集体经济调研报告 关于发展壮大村级集体经济的调研报告(定稿) 精品
- 自备电厂镁法脱硫市场分析
- 猪病诊断与防治误区探讨
- 边坡设计说明书 - 图文