《模式识别》实验报告班级:电子信息科学与技术13级02 班姓名:学号:指导老师:成绩:通信与信息工程学院二〇一六年实验一 最大最小距离算法一、实验内容1. 熟悉最大最小距离算法,并能够用程序写出。
2. 利用最大最小距离算法寻找到聚类中心,并将模式样本划分到各聚类中心对应的类别中。
二、实验原理N 个待分类的模式样本{}N X X X , 21,,分别分类到聚类中心{}N Z Z Z , 21,对应的类别之中。
最大最小距离算法描述:(1)任选一个模式样本作为第一聚类中心1Z 。
(2)选择离1Z 距离最远的模式样本作为第二聚类中心2Z 。
(3)逐个计算每个模式样本与已确定的所有聚类中心之间的距离,并选出其中的最小距离。
(4)在所有最小距离中选出一个最大的距离,如果该最大值达到了21Z Z -的一定分数比值以上,则将产生最大距离的那个模式样本定义为新增的聚类中心,并返回上一步。
否则,聚类中心的计算步骤结束。
这里的21Z Z -的一定分数比值就是阈值T ,即有:1021<<-=θθZ Z T(5)重复步骤(3)和步骤(4),直到没有新的聚类中心出现为止。
在这个过程中,当有k 个聚类中心{}N Z Z Z , 21,时,分别计算每个模式样本与所有聚类中心距离中的最小距离值,寻找到N 个最小距离中的最大距离并进行判别,结果大于阈值T 是,1+k Z 存在,并取为产生最大值的相应模式向量;否则,停止寻找聚类中心。
(6)寻找聚类中心的运算结束后,将模式样本{}N i X i ,2,1, =按最近距离划分到相应的聚类中心所代表的类别之中。
三、实验结果及分析该实验的问题是书上课后习题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。
同时,做出聚类分析后的分布图,如下:012345678123456789样本坐标聚类显示图图中用蓝色大圈标记了聚类中心,用星号标记了以1X为聚类中心的样本,用三角符号标记了以以7X为聚类中心的样本,用红色小圈标记了以9X为聚类中心的样本,该程序成功进行了分类实验二 感知器算法一、实验内容1. 熟悉感知器算法,并能够用程序写出。
2. 利用感知器算法进行判别分类,算出判别函数,画出判别界面。
二、实验原理直接用来对模式进行分类的准则函数。
若分属于ω1,ω2的两类模式可用一方程0)(=X d 来划分,那么称)(X d 为判别函数,或称判决函数、决策函数。
如,一个二维的两类判别问题,模式分布如图示,这些分属于ω1,ω2两类的模式可用一直线方程0)(=X d 来划分。
其中0)(32211=++=w x w x w d X 式中: 21,x x 为坐标变量。
图2-1 两类二维模式的分布将某一未知模式 X 代入:32211)(w x w x w d ++=X若0)(>X d ,则1ω∈X 类;2x 1x若0)(<X d ,则2ω∈X 类;若0)(=X d ,则21ωω∈∈X X 或或拒绝。
两类线性可分的模式类 21,ωω,设X W X d T )(=其中,[]T 121,,,,+=n n w w w w W ,[]T211,,,,n x x x =X 应具有性质⎩⎨⎧∈<∈>=21,0,0)(ωωX X X W X T d 对样本进行规范化处理,即ω2类样本全部乘以(-1),则有:0)(T >=X W X d感知器算法通过对已知类别的训练样本集的学习,寻找一个满足上式的权向量。
感知器算法步骤:(1)选择N 个分属于ω1和 ω2类的模式样本构成训练样本集{}N X X X , 21,构成增广向量形式,并进行规范化处理。
任取权向量初始值W(1),开始迭代。
迭代次数k=1。
(2)用全部训练样本进行一轮迭代,计算()i k X W 的值,并修正权向量。
分两种情况,更新权向量的值:1. (),若0≤T i k X W 分类器对第i 个模式做了错误分类,权向量校正为:()()i c k k X W W +=+1c :正的校正增量。
2. 若()0T >i k X W 分类正确,权向量不变:()()k k W W =+1,统一写为:⎪⎩⎪⎨⎧<+>=+0)(,)(0)(),()1(k Tk k Tk c k k k k X W X W X W W W (3)分析分类结果:只要有一个错误分类,回到(2),直至对所有样本正确分类。
感知器算法是一种赏罚过程:分类正确时,对权向量“赏”——这里用“不罚”,即权向量不变;分类错误时,对权向量“罚”——对其修改,向正确的方向转换。
三、实验结果与分析已知两类训练样本为: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)(321+--=xxxXd利用matlab的画图函数画出判别界面以及样本点,得到如下的分布图:由样本分布图可以看出,判别界面成功将两类训练样本分离。
实验三 LMSE 算法一、实验内容1. 了解LMSE 算法,并能够用程序写出。
2. 利用LMSE 算法进行判别分类,算出判别函数,并画出判别界面。
二、实验原理LMSE 算法为最小平方误差算法,其算法过程如下:(1)将N 个分属于1ω类和2ω类的n 维模式样本写成增广形式,将属于2ω的训练样本乘以(-1),写出规范化增广样本矩阵X 。
(2)求X 的伪逆矩阵TT X X X X -1#)(=。
(3)设置初值c 和)1(B ,c 为正的校正增量,)1(B 的各分量大于0,括号中数字代表迭代次数k=1,开始迭代。
(4)计算)()()(k k k B XW e -=,进行可分性判别。
如果0)(=k e ,模式线性可分,解为)(k W ,算法结束。
如果0)(>k e ,模式线性可分,有解。
继续迭代。
如果0)(<k e ,停止迭代,检查)(k XW 是否大于0。
若大于0,有解,否则无解,算法结束。
(5)计算)1(+k W 和)1(+k B先计算])(|)([)()1(|k k c k k e e B B ++=+,再计算)1()1(#+=+k k B X W ,迭代次数k 加1,返回第(4)步。
三、实验结果及分析该实验用的训练样本与感知器算法使用的样本一致,为以下两类训练样本:TTTTT T T T )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 中的元胞数组存放训练样本点,通过编写matlab的LMSE程序可以得到以下结果:所以,LMSE算法求得的该两类训练样本的判别函数为1222)(321+--=xxxXd利用matlab的画图函数画出判别界面以及样本点,得到如下的分布图:由样本分布图可以看出,LMSE算法所得的判别界面也成功将两类训练样本分离。
实验四 Parzen窗估计一、实验内容1.了解Parzen窗概率密度的估计方法,能用程序实现。
2.编写matlab程序,求解一个正态密度的Parzen窗估计。
二、实验原理设区域NR是一个d维的超立方体,并设Nh是超立方体的棱长,则超立方体的体积为定义窗函数)(uϕ为⎪⎩⎪⎨⎧=≤=其他,0,,2,1;21,1)(d j u u jϕ由于)(u ϕ是以原点为中心的一个超立方体,所以当i X 落入到以X 为中心,体积为N V 的超立方体时,1]/)[()(=-=N i h X X u ϕϕ,否则0)(=u ϕ,因此落入该超立方体内的样本数为∑=-=Ni NiN h X X k 1)(ϕ )(ˆX pN 是)(X p 的第N 次估计,则有 NN N V Nk X p/)(ˆ= 所以联立上面两式得∑=-=Ni Ni N h X X V NX p1)(11)(ˆϕ 这个式子就是Parzen 窗法的基本公式。
三、实验结果与分析待估计的)(X p 的均值为零,方差为1的正态密度函数,利用matlab 可以随机产生1个,16个,256个学习样本i X 的样本集,选取正态窗函数22121)(u e u -=πϕ 并设Nh h N 1=,1h 分别取 4.01.00.25,,,利用matlab 可以得到不同取值下的估计结果。
(1)当0.4,0.1,25.01==h N ,时得到的结果原概率分布N=1,h1=0.25的Parzen 窗估计N=1,h1=1的Parzen 窗估计N=1,h1=4的Parzen 窗估计从图中可以看出,估计概率密度函数是一个样本为中心的小丘,误差很大。
(2)当0.4,0.1,25.016==h N ,时得到的结果原概率分布N=16,h1=0.25的Parzen 窗估计N=16,h1=1的Parzen 窗估计N=16,h1=4的Parzen 窗估计从图中可以看出,在25.01=h 时,噪声误差非常大,产生了不连续性。
慢慢增大1h 时,受到了平滑,但平均性误差也随之增大,分辨率降低。
(3)当0.4,0.1,25.0256==h N ,时得到的结果从下图可以看出,当N 增大到256,估计量越来越好,在41=h 时,估计量很接近真实分布。
原概率分布N=256,h1=0.25的Parzen 窗估计N=256,h1=1的Parzen 窗估计N=256,h1=4的Parzen 窗估计从整个实验来看,Parzen 窗法只要样本足够多,总可以保证收敛于任何复杂的未知概率密度函数,但是也受到N h 值的影响,当N h 太小时,就会造成不连续性,噪声误差增大。
当N h 太大时,分辨率就会下降,平均性误差就会增大。
附录一最大最小距离算法程序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的距离for i=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) %循环求出其他距离并与事先设定的阈值作比较for i=1:10d(flag,i)=dist(X{i}',z{flag});if min_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));[x y]=find(min_dist==max(min_dist));if(max_dist>T)flag=flag+1;z{flag}=X{y};position(flag)=y;elsebreak;endendfprintf('以下序号的样本为聚类中心:\n');for i=1:flagfprintf('%d\t',position(i));endfprintf('\n=======================');%计算各样本到各聚类中心的距离for i=1:10for j=1:flagdistance(i,j)=dist(X{i}',z{j});endendflag1=1;flag2=1;distance2=distance';[mincol I]=min(distance2);%对10个样本进行聚类for i=1:10for j=1:flagif(I(i)==j)array(j,flag1)=i;flag1=flag1+1;elsecontinue;endendend%对聚类结果进行输出while(flag2<=flag)fprintf('\n第%d类的聚类中心为:%d\n',flag2,position(flag2));fprintf('属于第%d类的有:\n',flag2);for i=1:10if(array(flag2,i)~=0)fprintf('%d\t',array(flag2,i));if flag2==1plot(X{array(flag2,i)}(1),X{array(flag2,i)}(2),'b*');hold on;endif flag2==2plot(X{array(flag2,i)}(1),X{array(flag2,i)}(2),'black^'); hold on;endif flag2==3plot(X{array(flag2,i)}(1),X{array(flag2,i)}(2),'ro'); title('样本坐标聚类显示图');hold on;endendendfprintf('\n');flag2=flag2+1;endgrid on;axis([0 8 0 9]);hold onplot(X{position(1)}(1),X{position(1)}(2),'o','Markersize',10); hold onplot(X{position(2)}(1),X{position(2)}(2),'o','Markersize',10); hold onplot(X{position(3)}(1),X{position(3)}(2),'o','Markersize',10);附录二感知器算法程序clc;clear;w1{1} = [0 0 0]';w1{2} =[1 0 0]';w1{3} =[1 0 1]';w1{4} =[1 1 0]'; w2{1} = [0 0 1]';w2{2} =[0 1 1]';w2{3} =[0 1 0]';w2{4} =[1 1 1]'; [rol col ]= size(w1{1});for i=1:4w1{i}(rol+1,1)=1;w2{i}(rol+1,1)=1;w2{i}=w2{i}.*-1;endk=1;W(k,:)=[-1,-2,-2,0]';flag=0;while(1)%w1的计算for i=1:4k=k+1;if ((W(k-1,:)*w1{i})<=0)W(k,:)=W(k-1,:)'+w1{i};flag=1; %发生错判,立即将标记位赋1elseW(k,:)=W(k-1,:);endend%w2的计算for i=1:4k=k+1;if ((W(k-1,:)*w2{i})<=0)W(k,:)=W(k-1,:)'+w2{i};flag=1;%发生错判,立即将标记位赋1elseW(k,:)=W(k-1,:);endendif flag==1flag=0;elsebreak;endendfprintf('求得判别函数为:\t');fprintf('d(X)=(%s*x1)+(%s*x2)+(%s*x3)+(%s)\n',num2str(W(k,1)),num2str(W(k,2)),num2s tr(W(k,3)),num2str(W(k,4)));for i=1:4w2{i}=w2{i}.*-1;endx1=-2:0.01:2;x2=-2:0.01:2;[x1 x2]=meshgrid(x1,x2);x3=(W(k,1)*x1+W(k,2)*x2+W(k,4))/(-1*W(k,3));surf(x1,x2,x3);holdfor i=1:4plot3(w1{i}(1),w1{i}(2),w1{i}(3),'b*');plot3(w2{i}(1),w2{i}(2),w2{i}(3),'r^');endtitle('感知器算法判别界面及样本分布图');附录三LMSE算法程序clc;clear;w1{1} = [0 0 0]';w1{2} =[1 0 0]';w1{3} =[1 0 1]';w1{4} =[1 1 0]';w2{1} = [0 0 1]';w2{2} =[0 1 1]';w2{3} =[0 1 0]';w2{4} =[1 1 1]';[rol col ]= size(w1{1});for i=1:4w1{i}(rol+1,1)=1;w2{i}(rol+1,1)=1;w2{i}=w2{i}.*-1;endX=[w1{1},w1{2},w1{3},w1{4},w2{1},w2{2},w2{3},w2{4}]';XW=inv(X'*X)*X';k=1;B(k,:)=[1,1,1,1,1,1,1,1];flag=0;c=1;while(1)W(k,:)=XW*B(k,:)';e=X*W(k,:)'-B(k,:)';if mean(abs(e))<1.0e-014|e==0flag=0;break;endif e<0if X*W>=0flag=1;break;endendk=k+1;B(k,:)=B(k-1,:)'+c*(e+abs(e));endif flag==1fpritf('该模式样本线性不可分\n');elsefprintf('求得判别函数为:\t');fprintf('d(X)=(%s*x1)+(%s*x2)+(%s*x3)+(%s)\n',num2str(W(k,1)),num2str(W(k,2)),num2s tr(W(k,3)),num2str(W(k,4)));for i=1:4w2{i}=w2{i}.*-1;endx1=-2:0.01:2;x2=-2:0.01:2;[x1 x2]=meshgrid(x1,x2);x3=(W(k,1)*x1+W(k,2)*x2+W(k,4))/(-1*W(k,3));surf(x1,x2,x3);holdfor i=1:4plot3(w1{i}(1),w1{i}(2),w1{i}(3),'b*');plot3(w2{i}(1),w2{i}(2),w2{i}(3),'r^');endendtitle('LMSE算法判别界面及样本分布图');附录四Parzen估计算法程序clc;clear;X=randn(1,3000);px=normpdf(X,0,1);% N=1的情况 %pNx1_1=parzen(0.25,1,X);pNx1_2=parzen(1,1,X);pNx1_3=parzen(4,1,X);subplot(221);plot(X,px,'.');grid on;title('原概率分布');subplot(222)plot(X,pNx1_1,'.');grid on;title('N=1,h1=0.25的Parzen窗估计');subplot(223);plot(X,pNx1_2,'.');grid on;title('N=1,h1=1的Parzen窗估计');subplot(224);plot(X,pNx1_3,'.');grid on;title('N=1,h1=4的Parzen窗估计');% N=16的情况 %pNx16_1=parzen(0.25,16,X);pNx16_2=parzen(1,16,X);pNx16_3=parzen(4,16,X);figure;subplot(221);plot(X,px,'.');grid on;title('原概率分布');subplot(222)plot(X,pNx16_1,'.');grid on;title('N=16,h1=0.25的Parzen窗估计');subplot(223);plot(X,pNx16_2,'.');grid on;title('N=16,h1=1的Parzen窗估计');subplot(224);plot(X,pNx16_3,'.');grid on;title('N=16,h1=4的Parzen窗估计');% N=256的情况 %pNx256_1=parzen(0.25,256,X);pNx256_2=parzen(1,256,X);pNx256_3=parzen(4,256,X);figure;subplot(221);plot(X,px,'.');grid on;title('原概率分布');subplot(222)plot(X,pNx256_1,'.');grid on;title('N=256,h1=0.25的Parzen窗估计');subplot(223);plot(X,pNx256_2,'.');grid on;title('N=256,h1=1的Parzen窗估计');subplot(224);plot(X,pNx256_3,'.');grid on;title('N=256,h1=4的Parzen窗估计');function pNx=parzen(h1,N,x)pNx=zeros(1,3000);hN=h1/sqrt(N);for j=1:3000for i=1:NpNx(j)=pNx(j)+exp(((x(j)-x(i))/hN).^2/-2)/sqrt(2*pi);endpNx(j)=pNx(j)/hN/N;end。