2021-10-14

最大最小距离法实验预习

1实验目的
本实验的目的是使学生了解最大最小距离法聚类方法,掌握最大最小距离聚类分析法的基本原理,培养学生实际动手和思考能力,为数据分析和处理打下牢固基础。
2实验算法
(1):任意选取一个样本模式作为第一聚类中心Z1。
(2):选择离Z1最远欧氏距离的模式样本作为第二聚类中心Z2。
(3):逐个计算每个模式样本与已确定的所有聚类中心之间的欧式距离,并选出其中的最小欧式距离。也就是说,所有的模式样本分别和Z1,Z2、…Zn求欧式距离,每个模式样本会分别得到和Z1、Z2、…Zn的欧式距离,从n者中选择小的那个。如果模式样本数是Na,那么就会选出Na个最小距离。
(4):在所有最小距离中(Na个)选出一个最大距离,如果该最大值达到 ||Z1一Z2|| (Z1和Z2的欧式距离)的一定分数比值以上,(分数比值就是阈值T)则将产生最大距离的那个模式样本定义为新增聚类中心Z3,并返回步骤(3)。否则,聚类中心计算步骤结束。
(5):根据实验情况,需要不断重复步骤(3)(4),直到满足阈值条件,计算出所有聚类中心{ Z1 、 Z2 、 Z3 …Zn }。
(6):寻找聚类中心的运算结束后,将所有模式样本按最近欧式距离划分到相应聚类中心所代表的类别中。也就是说模式样本距哪个聚类中心近,就划分到哪个模式类中。
3.实验内容
4.实验步骤
1、提取分类特征,确定特征值值域,确定特征空间;
2、编写聚类程序;
3、将所提取的样本的加以聚类;
4、用误差平方和准则(也可选用其他准则)加以评价,直到满意为止
5.实验代码
以下代码已试运行
clc
close all;
x=xlsread(‘exp_1.xlsx’,‘A1:A10’);
y=xlsread(‘exp_1.xlsx’,‘B1:B10’);
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 && temp1temp2 && 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’); %顺序为:红、蓝、绿、黑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值