模式识别作业第三章1.docx

上传人:b****6 文档编号:8186143 上传时间:2023-01-29 格式:DOCX 页数:14 大小:70.27KB
下载 相关 举报
模式识别作业第三章1.docx_第1页
第1页 / 共14页
模式识别作业第三章1.docx_第2页
第2页 / 共14页
模式识别作业第三章1.docx_第3页
第3页 / 共14页
模式识别作业第三章1.docx_第4页
第4页 / 共14页
模式识别作业第三章1.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

模式识别作业第三章1.docx

《模式识别作业第三章1.docx》由会员分享,可在线阅读,更多相关《模式识别作业第三章1.docx(14页珍藏版)》请在冰豆网上搜索。

模式识别作业第三章1.docx

模式识别作业第三章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;

elseifa3

w1(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);

ifa2

h,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&&m

L=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

ifsmin

a1=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

ifv1

w1=[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));

ifdistance1

k1=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

由运行结果知道,两个聚类分别为

此时中心

此时中心

.

分类结果如图:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1