一.实验目的
本实验的目的是使学生了解最大最小距离法聚类方法,掌握最大最小距离聚类分析法的基本原理,培养学生实际动手和思考能力,为数据分析和处理打下牢固基础。
二.最大最小距离聚类算法
二.最大最小距离聚类算法
该算法以欧氏距离为基础,首先辨识最远的聚类中心,然后确定其他的聚类中心,直到无新的聚类中心产生。最后将样本按最小距离原则归入最近的类。
例:样本分布如图所示:

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

测试代码:
clc
close all;
x=xlsread(‘mytest.xlsx’,‘A1:A39’);
y=xlsread(‘mytest.xlsx’,‘B1:B39’);
figure;
plot(x,y,‘ok’,‘linewidth’,2);grid on;
axis([0 10 0 10]);
set(gca,‘xtick’,0:10);
set(gca,‘ytick’,0:10);
xlabel(‘x’);
ylabel(‘y’);
max1 = 0;
max_x = 0;
max_y = 0;
T = 0.5;%阈值T由人主观设置。
for i = 1:length(x)
temp = sqrt((x(i)-x(1))^2 + (y(i)-y(1))^2);
if temp>max1
max1 = temp;
max_x = x(i);
max_y = y(i);
end
end
a_x = [];
a_y = [];
minMax1 = 0;
for i = 1:length(x)
temp1 = sqrt((x(i)-x(1))^2 + (y(i)-y(1))^2);
temp2 = sqrt((x(i)-max_x)^2 + (y(i)-max_y)^2);
if minMax1<min(temp1,temp2)
minMax1 = min(temp1,temp2);
b_x = x(i);
b_y = y(i);
end
end
minMax2 = 0;
showZ1_x = [];
showZ1_y = [];
showZ2_x = [];
showZ2_y = [];
showZ3_x = [];
showZ3_y = [];
showZ4_x = [];
showZ4_y = [];
if minMax1/max1 > T
for i = 1:length(x)
temp1 = sqrt((x(i)-x(1))^2 + (y(i)-y(1))^2);
temp2 = sqrt((x(i)-max_x)^2 + (y(i)-max_y)^2);
temp3 = sqrt((x(i)-b_x)^2 + (y(i)-b_y)^2);
c = min(temp1,temp2);
if minMax2<min(c,temp3)
minMax2 = min(c,temp3);
b2_x = x(i);
b2_y = y(i);
end
end
for i = 1:length(x)
temp1 = sqrt((x(i)-x(1))^2 + (y(i)-y(1))^2);
temp2 = sqrt((x(i)-max_x)^2 + (y(i)-max_y)^2);
temp3 = sqrt((x(i)-b_x)^2 + (y(i)-b_y)^2);
temp4 = sqrt((x(i)-b2_x)^2 + (y(i)-b2_y)^2);
if temp1<temp2 && temp1<temp3 && temp1 temp2 && temp2 < temp3 && temp2< temp4
showZ2_x = [showZ2_x,x(i)];
showZ2_y = [showZ2_y,y(i)];
else if temp3 < temp1 && temp3 < temp2 && temp3 < temp4
showZ3_x = [showZ3_x,x(i)];
showZ3_y = [showZ3_y,y(i)];
else if temp4 < temp1 && temp4 < temp2 && temp4 < temp3
showZ4_x = [showZ4_x,x(i)];
showZ4_y = [showZ4_y,y(i)];
end
end
end
end
end
else if minMax1/max1 < T
for i = 1:length(x)
temp1 = sqrt((x(i)-x(1))^2 + (y(i)-y(1))^2);
temp2 = sqrt((x(i)-max_x)^2 + (y(i)-max_y)^2);
temp3 = sqrt((x(i)-b_x)^2 + (y(i)-b_y)^2);
if temp1 < temp2 && temp1 < temp3
showZ1_x = [showZ1_x,x(i)];
showZ1_y = [showZ1_y,y(i)];
else if temp1 > temp2 && temp2 < temp3
showZ2_x = [showZ2_x,x(i)];
showZ2_y = [showZ2_y,y(i)];
else if temp3 < temp1 && temp3 < temp2
showZ3_x = [showZ3_x,x(i)];
showZ3_y = [showZ3_y,y(i)];
end
end
end
end
end
end
figure
plot(showZ1_x,showZ1_y,‘or’,‘linewidth’,2);hold on;
plot(showZ2_x,showZ2_y,‘ob’,‘linewidth’,2);grid on;
plot(showZ3_x,showZ3_y,‘og’,‘linewidth’,2);
plot(showZ4_x,showZ4_y,‘ok’,‘linewidth’,2);
plot(x(1),y(1),‘or’,‘linewidth’,5);
plot(max_x,max_y,‘ob’,‘linewidth’,5);
plot(b_x,b_y,‘og’,‘linewidth’,5);
if minMax1/max1 > T
plot(b2_x,b2_y,‘ok’,‘linewidth’,5);
end
axis([0 10 0 10]);
set(gca,‘xtick’,0:10);
set(gca,‘ytick’,0:10);
xlabel(‘x’);
ylabel(‘y’);
title(‘最大最小距离算法’);
gtext(‘Z1’);
gtext(‘Z2’);
gtext(‘Z3’);
gtext(‘Z4’);
这种算法聚类结果与选取的第一个聚类中心以及选定的比例系数 θ \thetaθ 有关。这会导致聚类结果不理想,所以要尽可能避免聚类结果不理想的问题,尽可能找到距离原点最近的一点作为初始的聚类中心,这样方可降低误差
该实验旨在介绍最大最小距离法聚类方法,通过理解其基本原理和操作步骤,提升数据分析技能。最大最小距离算法基于欧氏距离,首先确定最远的聚类中心,再不断寻找新的中心直至无新中心产生。实验中使用r语言和python进行代码实现,并通过示例数据展示聚类过程。

2万+

被折叠的 条评论
为什么被折叠?



