实验1 最大最小距离法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 最大最小距离法

一.实验目的

本实验的目的是使学生了解最大最小距离法聚类方法,掌握最大最小距离聚类分析法的基本原理,培养学生实际动手和思考能力,为数据分析和处理打下牢固基础。

二.最大最小距离聚类算法

该算法以欧氏距离为基础,首先辨识最远的聚类中心,然后确定其他的聚类中心,直到无新的聚类中心产生。最后将样本按最小距离原则归入最近的类。

例:样本分布如图所示。

最大最小距离聚类算法步骤如下:

① 给定θ,10<<θ,并且任取一个样本作为第一个聚合中心,11x Z =。 ② 寻找新的集合中心:

计算其它所有样本到1Z 的距离1i D :

若}{max 11i i

k D D =,则取k x 为第二个聚合中心2Z ,62x Z =。

计算所有样本到1Z 和2Z 的距离1i D 和2i D :

若)},max{min(21i i l D D D =,n i ,....,2,1=,并且12D D l ⋅>θ,12D 为1Z 和2Z 间距离,则取l x 为第三个集合中心3Z ,73x Z =。【注意:∑=-=

-=d

i i

i i z

x Z x D 1

21

11||||||,

||||22Z x D i i -=】

如果3Z 存在,则计算)},,max{min(321i i i j D D D D =,n i ,....,2,1=,若12D D j ⋅>θ,则建立第四个聚合中心。依次类推,直到最大最小距离不大于12D ⋅θ时,结束寻找聚合中心的计算。

注意7x 所在第列,29在),min(21i i D D 中为最大的,而且8029⋅>=θl D ,一

般取2

1

=

θ。所以,73x Z =。 这里的例中只有三个集合中心,11x Z =,62x Z =,73x Z =。

③ 按最近邻原则把所有样本归属于距离最近的聚合中心,得: 1431},,{Z x x x ∈,

262},{Z x x ∈,3109875},,,,{Z x x x x x ∈。

④ 按照某聚类准则考查聚类结果,若不满意,则重选θ,第一个聚合中心1Z ,返回到②,直到满意,算法结束。

该算法的聚类结果与参数θ和起始点1Z 的选取关系重大。若无先验样本分布知识,则只有用试探法通过多次试探优化,若有先验知识用于指导θ和1Z 选取,则算法可很快收敛。

三.实验内容

见右图所示,为二维点集。

四.实验步骤

1、提取分类特征,确定特征值值域,确定特征空间;

2、编写聚类程序;

3、将所提取的样本的加以聚类;

4、用误差平方和准则(也可选用其他准则)加以评价,直到满意为止。

sample=[0 0;3 8;2 2;1 1;5 3;4 8;6 3;5 4;6 4;7 5];

[N,m]=size(sample);

for i=1:N

pattern(i).feature=sample(i,:);

pattern(i).category=0;

end

center(1).feature=pattern(1).feature;

center(1).index=1;

center(1).patternNum=1;

pattern(1).category=1;

index=0;

maxdis=0;

for i=1:N

dis=sqrt((pattern(i).feature-center(1).feature)*(pattern(i).feature-c enter(1).feature)');

if dis>maxdis

maxdis=dis;

index=i;

end

end

center(2).feature=pattern(index).feature;

center(2).index=2;

pattern(index).category=2;

centerNum=2;

tag=1;

while tag

tag=0;

max=0;

index=0; %¼Ç¼µ½ÖÐÐĵãСÖÐÈ¡´ó´ïµ½×î´ó¾àÀëµÄµã

for i=1:N

min=inf;

for j=1:centerNum

dis=sqrt((pattern(i).feature-center(j).feature)*(pattern(i).feature-c enter(j).feature)');

if dis

min=dis;

end

end% inner for j

if max

max=min;

index=i; % µ±Ç°µ½ÖÐÐĵãСÖÐÈ¡´ó´ïµ½×î´ó¾àÀëµÄµã end

end% outer for i

if max>maxdis/3 %ÐγÉеÄÖÐÐÄ

centerNum=centerNum+1;

center(centerNum).feature=pattern(index).feature;

center(centerNum).index=centerNum;

tag=1;

else

tag=0; %ûÓÐеÄÖÐÐÄ

end% if

end% while

for i=1:centerNum

center(i).patternNum=0;

end

for i=1:N

min=inf;

index=0;

for j=1:centerNum

dis=sqrt((pattern(i).feature-center(j).feature)*(pattern(i).feature-c enter(j).feature)');

if dis

min=dis;

index=j;

end

end% inner for j

pattern(i).category=index;

center(index).patternNum=center(index).patternNum+1;

end% outer for i

disp('ÏÔʾÖÐÐÄ£º')

for i=1:centerNum

fprintf('%d center: ',center(i).index)

disp(center(i).feature)

fprintf('%d center contains %d samples\n',i,center(i).patternNum) end

disp('ÏÔʾÑù±¾µÄ¾ÛÀࣺ')

for i=1:N

fprintf('%d pattern type: %d\n',i,pattern(i).category)

disp(pattern(i).feature)

相关文档
最新文档