1、模式识别作业第三章1第三章作业1.设有10个两维模式, ;若选择阈值的系数为,使用最大最小算法进行聚类。解:先定义几个函数:文件名为caldistance.m函数%求其他样本点与选定点的第m个的最大距离,并找到这个最大距离点Function distance,i=caldistance(x,m)M,N=size(x); distance=0; index=0; for i=1:N index=index+1; temp=sum(x(:,m)-x(:,i).2); distance(index)=sqrt(temp); v(:,i)=distance(index); end end文件名为jia
2、oxiaojuli.m函数%其他样本分别与第m、n个样本之间的欧氏距离距离,取较小的function vv i=jiaoxiaojuli(x,m,n) M,N=size(x); ddistance=0; for i=1:N temp=sum(x(:,m)-x(:,i).2); ddistance(1)=sqrt(temp); temp1=sum(x(:,n)-x(:,i).2); ddistance(2)=sqrt(temp1); ddistance=min(ddistance(1),ddistance(2); vv(:,i)=ddistance; endend文件名为fenlei.m函数%其
3、他各样本点被分到离z1、z2近的类中function w1 w=fenlei(x,m,n)M,N=size(x);for i=1:N a1=sqrt(sum(x(:,m)-x(:,i).2); a2=sqrt(sum(x(:,n)-x(:,i).2); if a1a2 w1(1,i)=i; w(1,i)=0; else w1(1,i)=0; w(1,i)=i; endendend文件名为z3jiaoxiao.m函数%第m、n和q个样本与其他样本之间的欧氏距离取较小的一个function s=z3jiaoxiao(x,m,n,q) M,N=size(x); ddistance=0; for i=
4、1:N temp=sum(x(:,m)-x(:,i).2); ddistance(1)=sqrt(temp); temp=sum(x(:,n)-x(:,i).2); ddistance(2)=sqrt(temp); temp=sum(x(:,q)-x(:,i).2); ddistance(3)=sqrt(temp); ddistance=min(min(ddistance(1),ddistance(2),ddistance(3); s(:,i)=ddistance; endend文件名为z3fenlei.m函数%将x中的各样本点分类到离第m、n、p较近的类中function w1 w2 w3=
5、z3fenlei(x,m,n,p)M,N=size(x);for i=1:N a1=sqrt(sum(x(:,m)-x(:,i).2); a2=sqrt(sum(x(:,n)-x(:,i).2); a3=sqrt(sum(x(:,p)-x(:,i).2); if a1=a2&a1=a3 w1(1,i)=i; w2(1,i)=0; w3(1,i)=0; elseif a2=a1&a2=a3 w1(1,i)=0; w2(1,i)=i; w3(1,i)=0; elseif a3a1&a3a2 w1(1,i)=0; w2(1,i)=0; w3(1,i)=i; end endend总程序为:x1=0 0
6、;x2=1 1;x3=2 2;x4=3 7;x5=3 6;x6=4 6;x7=5 7;x8=6 3;x9=7 3;x10=7 4;X=x1 x2 x3 x4 x5 x6 x7 x8 x9 x10;z1=x2;distance,i=caldistance(X,2);%得到i,和最大距离distance,i=10h=i;T=1/2*sqrt(sum(z1-X(:,i).2);vv j=jiaoxiaojuli(X,2,h);%第m和n个样本与其他样本之间的欧氏距离取较小的一个放在数组vv中1*10a1 k=max(vv);if a1T w1 w2=fenlei(X,2,h) %分类else dis
7、p(add z3) s=z3jiaoxiao(X,2,h,k); a2 k1=max(s); if a20);b=find(w20);c=find(w30);%画第一类点m n=size(a);for t=1:n s=a(t); plot(X(1,s),X(2,s),bo);hold on;end%画第二类点 m n=size(b);for t=1:n s=b(t); plot(X(1,s),X(2,s),rx)end%画第三类点m n=size(c);for t=1:n s=c(t); plot(X(1,s),X(2,s),kd)endaxis(-1 7 -1 7);title(最大最小算法
8、聚类)运行结果: add z3h = 10k = 4a = 1 2 3b = 8 9 10c = 4 5 6 7由结果可知,聚类结果如图: 2.设有5个两维模式样本, 定义类间距离为最小距离,且不小于3,试用层次距离法对5个样本进行聚类。解:定义文件名为jiaoxiaojuli.m函数:function vv r i=jiaoxiaojuli(x,m,n)%第m和n个样本与其他样本之间的欧氏距离取较小的一个 M,N=size(x); ddistance=0;k=0; for i=1:N if i=m&i=n k=k+1; temp=sum(x(:,m)-x(:,i).2); ddistance
9、(1)=sqrt(temp); temp1=sum(x(:,n)-x(:,i).2); ddistance(2)=sqrt(temp1); ddistance=min(ddistance(1),ddistance(2); vv(:,k)=ddistance;%第m和n个样本与其他样本之间的欧氏距离取较小的一个放在数组vv中1*10 r(:,k)=i; else end endend主程序:x1=0 0;x2=0 1;x3=2 0;x4=3 3;x5=4 4;x=x1 x2 x3 x4 x5;L=0;d12=sqrt(sum(x(:,1)-x(:,2).2);d13=sqrt(sum(x(:,1
10、)-x(:,3).2);d14=sqrt(sum(x(:,1)-x(:,4).2);d15=sqrt(sum(x(:,1)-x(:,5).2);d23=sqrt(sum(x(:,2)-x(:,3).2);d24=sqrt(sum(x(:,2)-x(:,4).2);d25=sqrt(sum(x(:,2)-x(:,5).2);d34=sqrt(sum(x(:,3)-x(:,4).2);d35=sqrt(sum(x(:,3)-x(:,5).2);d45=sqrt(sum(x(:,4)-x(:,5).2);d=d12 d13 d14 d15 d23 d24 d25 d34 d35 d45;a i=mi
11、n(d);if i=1 w1=x1 x2; j=1;k=2;elseif i=2 w1=x1 x3; j=1;k=3;elseif i=3 w1=x1 x4; j=1;k=4; elseif i=4 w1=x1 x5; j=1;k=5; elseif i=5 w1=x2 x3; j=2;k=3;elseif i=6 w1=x2 x4; j=2;k=4; elseif i=7 w1=x2 x5; j=2;k=5;elseif i=8 w1=x3 x4; j=3;k=4; elseif i=9 w1=x3 x5; j=3;k=5;elseif i=10 w1=x4 x5; j=4;k=5;endv
12、v r i=jiaoxiaojuli(x,j,k);%r中存放的是哪一项与j、k的差值%计算出j、k列与剩余各列之间的距离for m=1:5 for n=1:5 if m=j&m=k&n=j&n=k&m=n&mn L=L+1; distance=sqrt(sum(x(:,m)-x(:,n).2); s(1,L)=distance; q1(:,L)=m n;%记录求m、n两个样本距离 else end end if m=4 break; endendsmin i=min(s);vvmin j=min(vv);if min(smin,vvmin)3if sminvvmin a1=x(:,q1(1,
13、i);b1=x(:,q1(2,i); w2=a1 b1; for j1=3:5 if j1=q1(1,i)|j1=q1(2,i) else distance1=sqrt(sum(x(:,1)-x(:,j1).2); distance2=sqrt(sum(x(:,2)-x(:,j1).2); distance3=sqrt(sum(x(:,q1(1,i)-x(:,j1).2); distance4=sqrt(sum(x(:,q1(2,i)-x(:,j1).2); v1=min(distance1,distance2); v2=min(distance3,distance4); if min(v1,
14、v2)3 if v1v2 w1=x1 x2 x(:,j1); else w2=a1 b1 x(:,j1); end else end end endelse a1=x(:,r(1,j); w1=x1 x2 a1;endelseendm1 n1=size(w1);m2 n2=size(w2);k=0;for i=1:n1 for j=1:n2 k=k+1; distance=sqrt(sum(w1(:,i)-w2(:,j).2); w12(1,k)= distance; endend if min(w12)3 w=w1 w2; else w1,w2 end %画第一类点 plot(w1(1,:)
15、,w1(2,:),bo);hold on %画第二类点 plot(w2(1,:),w2(2,:),rd) axis(-1 5 -1 5); legend(第一类,第二类)运行结果:w1 = 0 0 2 0 1 0w2 = 3 4 3 43.用k-均值算法对下列6个模式进行聚类,设聚类中心个数, 解:先定义几个函数文件名为yzgl.m的函数function w1 w2=yzgl(x,z1,z2)%样本向z1、z2按距离归类m,n=size(x);k1=0;k2=0;for i=1:n distance1=sqrt(sum(z1-x(:,i).2); distance2=sqrt(sum(z2-x
16、(:,i).2);if distance1distance2 k1=k1+1;w1(:,k1)=x(:,i);else k2=k2+1;w2(:,k2)=x(:,i);endendend文件名为kjunzhidian.m的函数function z1 z2=kjunzhidian(w1,w2)%求类w1、w2新的聚类中心a1=mean(w1(1,:);b1=mean(w1(2,:);z1=a1 b1;a2=mean(w2(1,:);b2=mean(w2(2,:);z2=a2 b2;end主程序如下:x1=0,0;x2=1,0;x3=1,1;x4=4,4;x5=5,4;x6=5,5;n=100;x
17、=x1 x2 x3 x4 x5 x6;k=1;z1=x1;z2=x2;for i=1:n k=k+1;w1 w2=kyzgl(x,z1,z2); %样本向z1、z2按距离归类z1 z2=kjunzhidian(w1,w2);%求类w1、w2新的聚类中心v1(:,k)=z1;v2(:,k)=z2;delta1=sum(v1(:,k)-v1(:,k-1).2);%前后两次中心距离差值delta2=sum(v2(:,k)-v2(:,k-1).2);if delta1=0&delta2=0 k,z1,z2,w1,w2 break;elseendendplot(w1(1,:),w1(2,:),bo, w2(1,:),w2(2,:),rx);hold onplot(z1(1),z1(2),d,MarkerFaceColor,0 0 1);plot(z2(1),z2(2),d,MarkerFaceColor,1 1 0)title(k-均值算法聚类);legend(第一类,第二类,第一类均值点,第二类均值点)axis(-1 6 -1 6)运算结果:k = 4z1 = 0.6667 0.3333z2 = 4.6667 4.3333w1 = 0 1 1 0 0 1w2 = 4 5 5 4 4 5由运行结果知道,两个聚类分别为,此时中心,此时中心.分类结果如图:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1