模式识别作业第三章1.docx
《模式识别作业第三章1.docx》由会员分享,可在线阅读,更多相关《模式识别作业第三章1.docx(14页珍藏版)》请在冰豆网上搜索。
模式识别作业第三章1
第三章作业
1.设有10个两维模式,
;若选择阈值的系数为
使用最大最小算法进行聚类。
解:
先定义几个函数:
文件名为caldistance.m函数
%求其他样本点与选定点的第m个的最大距离,并找到这个最大距离点
Function[distance,i]=caldistance(x,m)
[M,N]=size(x);
distance=0;
index=0;
fori=1:
N
index=index+1;
temp=sum((x(:
m)-x(:
i)).^2);
distance(index)=sqrt(temp);
v(:
i)=distance(index);
end
end
文件名为jiaoxiaojuli.m函数
%其他样本分别与第m、n个样本之间的欧氏距离距离,取较小的
function[vvi]=jiaoxiaojuli(x,m,n)
[M,N]=size(x);
ddistance=0;
fori=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;
end
end
文件名为fenlei.m函数
%其他各样本点被分到离z1、z2近的类中
function[w1w]=fenlei(x,m,n)
[M,N]=size(x);
fori=1:
N
a1=sqrt(sum((x(:
m)-x(:
i)).^2));
a2=sqrt(sum((x(:
n)-x(:
i)).^2));
ifa1>a2
w1(1,i)=i;
w(1,i)=0;
else
w1(1,i)=0;
w(1,i)=i;
end
end
end
文件名为z3jiaoxiao.m函数
%第m、n和q个样本与其他样本之间的欧氏距离取较小的一个
function[s]=z3jiaoxiao(x,m,n,q)
[M,N]=size(x);
ddistance=0;
fori=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;
end
end
文件名为z3fenlei.m函数
%将x中的各样本点分类到离第m、n、p较近的类中
function[w1w2w3]=z3fenlei(x,m,n,p)
[M,N]=size(x);
fori=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));
ifa1<=a2&&a1<=a3
w1(1,i)=i;
w2(1,i)=0;
w3(1,i)=0;
elseifa2<=a1&&a2<=a3
w1(1,i)=0;
w2(1,i)=i;
w3(1,i)=0;
elseifa3w1(1,i)=0;
w2(1,i)=0;
w3(1,i)=i;
end
end
end
总程序为:
x1=[00]';x2=[11]';x3=[22]';x4=[37]';x5=[36]';x6=[46]';x7=[57]';x8=[63]';x9=[73]';x10=[74]';
X=[x1x2x3x4x5x6x7x8x9x10];
z1=x2;
[distance,i]=caldistance(X,2);%得到i,和最大距离distance,i=10
h=i;
T=1/2*sqrt(sum((z1-X(:
i)).^2));
[vvj]=jiaoxiaojuli(X,2,h);
%第m和n个样本与其他样本之间的欧氏距离取较小的一个放在数组vv中1*10
[a1k]=max(vv);
ifa1[w1w2]=fenlei(X,2,h)%分类
else
disp('addz3')
[s]=z3jiaoxiao(X,2,h,k);
[a2k1]=max(s);
ifa2h,k
[w1w2w3]=z3fenlei(X,2,h,k);%分类
else
disp('addz4')
end
end
a=find(w1>0);b=find(w2>0);c=find(w3>0);
%画第一类点
[mn]=size(a);
fort=1:
n
s=a(t);
plot(X(1,s),X(2,s),'bo');holdon;
end
%画第二类点
[mn]=size(b);
fort=1:
n
s=b(t);
plot(X(1,s),X(2,s),'rx')
end
%画第三类点
[mn]=size(c);
fort=1:
n
s=c(t);
plot(X(1,s),X(2,s),'kd')
end
axis([-17-17]);title('最大最小算法聚类')
运行结果:
addz3
h=
10
k=
4
a=
123
b=
8910
c=
4567
由结果可知,聚类结果如图:
2.设有5个两维模式样本,
定义类间距离为最小距离,且不小于3,试用层次距离法对5个样本进行聚类。
解:
定义文件名为jiaoxiaojuli.m函数:
function[vvri]=jiaoxiaojuli(x,m,n)
%第m和n个样本与其他样本之间的欧氏距离取较小的一个
[M,N]=size(x);
ddistance=0;k=0;
fori=1:
N
ifi~=m&&i~=n
k=k+1;
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(:
k)=ddistance;
%第m和n个样本与其他样本之间的欧氏距离取较小的一个放在数组vv中1*10
r(:
k)=i;
else
end
end
end
主程序:
x1=[00]';x2=[01]';x3=[20]';x4=[33]';x5=[44]';
x=[x1x2x3x4x5];L=0;
d12=sqrt(sum((x(:
1)-x(:
2)).^2));
d13=sqrt(sum((x(:
1)-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=[d12d13d14d15d23d24d25d34d35d45];
[ai]=min(d);
ifi==1
w1=[x1x2];
j=1;k=2;
elseifi==2
w1=[x1x3];
j=1;k=3;
elseifi==3
w1=[x1x4];
j=1;k=4;
elseifi==4
w1=[x1x5];
j=1;k=5;
elseifi==5
w1=[x2x3];
j=2;k=3;
elseifi==6
w1=[x2x4];
j=2;k=4;
elseifi==7
w1=[x2x5];
j=2;k=5;
elseifi==8
w1=[x3x4];
j=3;k=4;
elseifi==9
w1=[x3x5];
j=3;k=5;
elseifi==10
w1=[x4x5];
j=4;k=5;
end
[vvri]=jiaoxiaojuli(x,j,k);%r中存放的是哪一项与j、k的差值
%计算出j、k列与剩余各列之间的距离
form=1:
5
forn=1:
5
ifm~=j&&m~=k&&n~=j&&n~=k&&m~=n&&mL=L+1;
distance=sqrt(sum((x(:
m)-x(:
n)).^2));
s(1,L)=distance;
q1(:
L)=[mn]';%记录求m、n两个样本距离
else
end
end
ifm==4
break;
end
end
[smini]=min(s);
[vvminj]=min(vv);
ifmin(smin,vvmin)<3
ifsmina1=x(:
q1(1,i));b1=x(:
q1(2,i));
w2=[a1b1];
forj1=3:
5
ifj1==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);
ifmin(v1,v2)<3
ifv1w1=[x1x2x(:
j1)];
else
w2=[a1b1x(:
j1)];
end
else
end
end
end
else
a1=x(:
r(1,j));
w1=[x1x2a1];
end
else
end
[m1n1]=size(w1);
[m2n2]=size(w2);
k=0;
fori=1:
n1
forj=1:
n2
k=k+1;
distance=sqrt(sum((w1(:
i)-w2(:
j)).^2));
w12(1,k)=distance;
end
end
ifmin(w12)<3
w=[w1w2];
else
w1,w2
end
%画第一类点
plot(w1(1,:
),w1(2,:
),'bo');holdon
%画第二类点
plot(w2(1,:
),w2(2,:
),'rd')
axis([-15-15]);legend('第一类','第二类')
运行结果:
w1=
002
010
w2=
34
34
3.用k-均值算法对下列6个模式进行聚类,设聚类中心个数
,
解:
先定义几个函数
文件名为yzgl.m的函数
function[w1w2]=yzgl(x,z1,z2)%样本向z1、z2按距离归类
[m,n]=size(x);k1=0;k2=0;
fori=1:
n
distance1=sqrt(sum((z1-x(:
i)).^2));
distance2=sqrt(sum((z2-x(:
i)).^2));
ifdistance1k1=k1+1;
w1(:
k1)=x(:
i);
else
k2=k2+1;
w2(:
k2)=x(:
i);
end
end
end
文件名为kjunzhidian.m的函数
function[z1z2]=kjunzhidian(w1,w2)%求类w1、w2新的聚类中心
a1=mean(w1(1,:
));
b1=mean(w1(2,:
));
z1=[a1b1]';
a2=mean(w2(1,:
));
b2=mean(w2(2,:
));
z2=[a2b2]';
end
主程序如下:
x1=[0,0]';x2=[1,0]';x3=[1,1]';x4=[4,4]';x5=[5,4]';x6=[5,5]';n=100;
x=[x1x2x3x4x5x6];k=1;
z1=x1;z2=x2;
fori=1:
n
k=k+1;
[w1w2]=kyzgl(x,z1,z2);%样本向z1、z2按距离归类
[z1z2]=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);
ifdelta1==0&&delta2==0
k,z1,z2,w1,w2
break;
else
end
end
plot(w1(1,:
),w1(2,:
),'bo',w2(1,:
),w2(2,:
),'rx');holdon
plot(z1
(1),z1
(2),'d','MarkerFaceColor',[001]);plot(z2
(1),z2
(2),'d','MarkerFaceColor',[110])
title('k-均值算法聚类');
legend('第一类','第二类','第一类均值点','第二类均值点')
axis([-16-16])
运算结果:
k=
4
z1=
0.6667
0.3333
z2=
4.6667
4.3333
w1=
011
001
w2=
455
445
由运行结果知道,两个聚类分别为
此时中心
此时中心
.
分类结果如图: