《模式识别》实验报告班级:电子信息科学与技术13级02班姓名:学号:指导老师:成绩:通信与信息工程学院二〇一六年1实验一最大最小距离算法一、实验内容1.熟悉最大最小距离算法,并能够用程序写出。2.利用最大最小距离算法寻找到聚类中心,并将模式样本划分到各聚类中心对应的类别中。二、实验原理N个待分类的模式样本NXXX,21,,分别分类到聚类中心NZZZ,21,对应的类别之中。最大最小距离算法描述:(1)任选一个模式样本作为第一聚类中心1Z。(2)选择离1Z距离最远的模式样本作为第二聚类中心2Z。(3)逐个计算每个模式样本与已确定的所有聚类中心之间的距离,并选出其中的最小距离。(4)在所有最小距离中选出一个最大的距离,如果该最大值达到了21ZZ的一定分数比值以上,则将产生最大距离的那个模式样本定义为新增的聚类中心,并返回上一步。否则,聚类中心的计算步骤结束。这里的21ZZ的一定分数比值就是阈值T,即有:1021ZZT(5)重复步骤(3)和步骤(4),直到没有新的聚类中心出现为止。在这个过程中,当有k个聚类中心NZZZ,21,时,分别计算每个模式样本与所有聚类中心距离中的最小距离值,寻找到N个最小距离中的最大距离并进行判别,结果大于阈值T是,1kZ存在,并取为产生最大值的相应模式向量;否则,停止寻找聚类中心。(6)寻找聚类中心的运算结束后,将模式样本NiXi,2,1,按最近距离划分到相应的聚类中心所代表的类别之中。2三、实验结果及分析该实验的问题是书上课后习题2.1,以下利用的matlab中的元胞存储10个二维模式样本X{1}=[0;0];X{2}=[1;1];X{3}=[2;2];X{4}=[3;7];X{5}=[3;6];X{6}=[4;6];X{7}=[5;7];X{8}=[6;3];X{9}=[7;3];X{10}=[7;4];利用最大最小距离算法,matlab运行可以求得从matlab运行结果可以看出,聚类中心为971,,XXX,以1X为聚类中心的点有321,,XXX,以7X为聚类中心的点有7654,,,XXXX,以9X为聚类中心的有1098,,XXX。同时,做出聚类分析后的分布图,如下:0123456780123456789样本坐标聚类显示图图中用蓝色大圈标记了聚类中心,用星号标记了以1X为聚类中心的样本,用三角符号标记了以以7X为聚类中心的样本,用红色小圈标记了以9X为聚类中3心的样本,该程序成功进行了分类实验二感知器算法一、实验内容1.熟悉感知器算法,并能够用程序写出。2.利用感知器算法进行判别分类,算出判别函数,画出判别界面。二、实验原理直接用来对模式进行分类的准则函数。若分属于ω1,ω2的两类模式可用一方程0)(Xd来划分,那么称)(Xd为判别函数,或称判决函数、决策函数。如,一个二维的两类判别问题,模式分布如图示,这些分属于ω1,ω2两类的模式可用一直线方程0)(Xd来划分。其中0)(32211wxwxwdX式中:21,xx为坐标变量。图2-1两类二维模式的分布将某一未知模式X代入:32211)(wxwxwdX若0)(Xd,则1X类;0)(Xd2x1xO12+-4若0)(Xd,则2X类;若0)(Xd,则21ωωXX或或拒绝。两类线性可分的模式类21,,设XWXdT)(其中,T121,,,,nnW,T211,,,,nxxxX应具有性质21,0,0)(XXXWXTd对样本进行规范化处理,即ω2类样本全部乘以(-1),则有:0)(TXWXd感知器算法通过对已知类别的训练样本集的学习,寻找一个满足上式的权向量。感知器算法步骤:(1)选择N个分属于ω1和ω2类的模式样本构成训练样本集NXXX,21,构成增广向量形式,并进行规范化处理。任取权向量初始值W(1),开始迭代。迭代次数k=1。(2)用全部训练样本进行一轮迭代,计算ikXW的值,并修正权向量。分两种情况,更新权向量的值:1.,若0≤TikXW分类器对第i个模式做了错误分类,权向量校正为:ickkXWW1c:正的校正增量。2.若0TikXW分类正确,权向量不变:kkWW1,统一写为:0)(,)(0)(),()1(kTkkTkckkkkXWXWX(3)分析分类结果:只要有一个错误分类,回到(2),直至对所有样本正确分类。感知器算法是一种赏罚过程:分类正确时,对权向量“赏”——这里用“不罚”,即权向量不变;5分类错误时,对权向量“罚”——对其修改,向正确的方向转换。三、实验结果与分析已知两类训练样本为:TTTTTTTT)1,1,1(,)0,1,0(,)1,1,0(,)1,0,0(:)0,1,1(,)1,0,1(,)0,0,1(,)0,0,0(:21设T)0,2,2,1()1(W,同样地,利用matlab元胞数组存储该两类训练样本利用感知器算法,matlab运行得到如下结果:因此,可以得到感知器算法算出的判别函数为:1323)(321xxxXd利用matlab的画图函数画出判别界面以及样本点,得到如下的分布图:由样本分布图可以看出,判别界面成功将两类训练样本分离。6实验三LMSE算法一、实验内容1.了解LMSE算法,并能够用程序写出。2.利用LMSE算法进行判别分类,算出判别函数,并画出判别界面。二、实验原理LMSE算法为最小平方误差算法,其算法过程如下:(1)将N个分属于1类和2类的n维模式样本写成增广形式,将属于2的训练样本乘以(-1),写出规范化增广样本矩阵X。(2)求X的伪逆矩阵TTXXXX-1#)(。(3)设置初值c和)1(B,c为正的校正增量,)1(B的各分量大于0,括号中数字代表迭代次数k=1,开始迭代。(4)计算)()()(kkkBXWe,进行可分性判别。如果0)(ke,模式线性可分,解为)(kW,算法结束。如果0)(ke,模式线性可分,有解。继续迭代。如果0)(ke,停止迭代,检查)(kXW是否大于0。若大于0,有解,否则无解,算法结束。(5)计算)1(kW和)1(kB先计算])(|)([)()1(|kkckkeeBB,再计算)1()1(#kkBXW,迭代次数k加1,返回第(4)步。三、实验结果及分析该实验用的训练样本与感知器算法使用的样本一致,为以下两类训练样本:TTTTTTTT)1,1,1(,)0,1,0(,)1,1,0(,)1,0,0(:)0,1,1(,)1,0,1(,)0,0,1(,)0,0,0(:21设定初始值T)1,1,1,1,1,1,1,1()1(B,同样地利用matlab中的元胞数组存放训练7样本点,通过编写matlab的LMSE程序可以得到以下结果:所以,LMSE算法求得的该两类训练样本的判别函数为1222)(321xxxXd利用matlab的画图函数画出判别界面以及样本点,得到如下的分布图:由样本分布图可以看出,LMSE算法所得的判别界面也成功将两类训练样本分离。实验四Parzen窗估计一、实验内容1.了解Parzen窗概率密度的估计方法,能用程序实现。2.编写matlab程序,求解一个正态密度的Parzen窗估计。二、实验原理设区域NR是一个d维的超立方体,并设Nh是超立方体的棱长,则超立方体的体积为定义窗函数)(u为8其他,0,,2,1;21,1)(djuuj由于)(u是以原点为中心的一个超立方体,所以当iX落入到以X为中心,体积为NV的超立方体时,1]/)[()(NihXXu,否则0)(u,因此落入该超立方体内的样本数为NiNiNhXXk1)()(ˆXpN是)(Xp的第N次估计,则有NNNVNkXp/)(ˆ所以联立上面两式得NiNiNhXXVNXp1)(11)(ˆ这个式子就是Parzen窗法的基本公式。三、实验结果与分析待估计的)(Xp的均值为零,方差为1的正态密度函数,利用matlab可以随机产生1个,16个,256个学习样本iX的样本集,选取正态窗函数22121)(ueu并设NhhN1,1h分别取4.01.00.25,,,利用matlab可以得到不同取值下的估计结果。(1)当0.4,0.1,25.01hN,时得到的结果9-50500.10.20.30.4原概率分布-50500.511.52N=1,h1=0.25的Parzen窗估计-50500.10.20.30.4N=1,h1=1的Parzen窗估计-5050.040.060.080.1N=1,h1=4的Parzen窗估计从图中可以看出,估计概率密度函数是一个样本为中心的小丘,误差很大。(2)当0.4,0.1,25.016hN,时得到的结果-50500.10.20.30.4原概率分布-50500.511.5N=16,h1=0.25的Parzen窗估计-50500.20.40.60.8N=16,h1=1的Parzen窗估计-50500.10.20.30.4N=16,h1=4的Parzen窗估计从图中可以看出,在25.01h时,噪声误差非常大,产生了不连续性。慢慢增大1h时,受到了平滑,但平均性误差也随之增大,分辨率降低。(3)当0.4,0.1,25.0256hN,时得到的结果从下图可以看出,当N增大到256,估计量越来越好,在41h时,估计量10很接近真实分布。-50500.10.20.30.4原概率分布-50500.20.40.60.8N=256,h1=0.25的Parzen窗估计-50500.20.40.60.8N=256,h1=1的Parzen窗估计-50500.20.40.60.8N=256,h1=4的Parzen窗估计从整个实验来看,Parzen窗法只要样本足够多,总可以保证收敛于任何复杂的未知概率密度函数,但是也受到Nh值的影响,当Nh太小时,就会造成不连续性,噪声误差增大。当Nh太大时,分辨率就会下降,平均性误差就会增大。11附录一最大最小距离算法程序clear;clc;X{1}=[0;0];X{2}=[1;1];X{3}=[2;2];X{4}=[3;7];X{5}=[3;6];X{6}=[4;6];X{7}=[5;7];X{8}=[6;3];X{9}=[7;3];X{10}=[7;4];%取第一个点为一个聚类中心z{1}=X{1};position(1)=1;%计算其它点到z1的距离fori=1:10d(i)=dist(X{i}',z{1});end%找到距离z1最远的点的位置max_dist=max(d);pos=find(d==max(d));z{2}=X{pos};position(2)=pos;rate=0.5;%分数比值设置为0.5T=rate*dist(z{1}',z{2});%初始阈值min_dist=d;flag=2;index=1;while(1)%循环求出其他距离并与事先设定的阈值作比较fori=1:10d(flag,i)=dist(X{i}',z{flag});ifmin_dist(i)d(flag,i)min_dist(index)=d(flag,i);elsemin_dist(index)=min_dist(i);endindex=index+1;endindex=1;max_dist=max(max(min_dist));[xy]=find(min_dist==max(min_dist));if(max_distT)flag=flag+1;z{flag}=X{y};position(flag)=y;elsebreak;end12endfprintf('以下序号的样本为聚类中心:\n');fori=1:flagfprintf('%d\t',position(i));endfprintf('\n=======================');%计算各样