``预习报告
实验一 最大最小距离法
一.实验目的
本实验的目的是使学生了解最大最小距离法聚类方法,掌握最大最小距离聚类分析法的基本原理,培养学生实际动手和思考能力,为数据分析和处理打下牢固基础。
二.最大最小距离聚类算法
该算法以欧氏距离为基础,首先辨识最远的聚类中心,然后确定其他的聚类中心,直到无新的聚类中心产生。最后将样本按最小距离原则归入最近的类。
例:样本分布如图所示。
最大最小距离聚类算法步骤如下:
① 给定,,并且任取一个样本作为第一个聚合中心,。
② 寻找新的集合中心:
计算其它所有样本到的距离:
若,则取为第二个聚合中心,。
计算所有样本到和的距离和:
若,,并且,为和间距离,则取为第三个集合中心,。【注意:,】
如果存在,则计算,,若,则建立第四个聚合中心。依次类推,直到最大最小距离不大于时,结束寻找聚合中心的计算。
注意所在第列,在中为最大的,而且,一般取。所以,。
这里的例中只有三个集合中心,,,。
③ 按最近邻原则把所有样本归属于距离最近的聚合中心,得: ,,。
④ 按照某聚类准则考查聚类结果,若不满意,则重选,第一个聚合中心,返回到②,直到满意,算法结束。
该算法的聚类结果与参数和起始点的选取关系重大。若无先验样本分布知识,则只有用试探法通过多次试探优化,若有先验知识用于指导和选取,则算法可很快收敛。
三.实验内容
见``图所示,为二维点集。
四.实验步骤
1、提取分类特征,确定特征值值域,确定特征空间;
2、编写聚类程序;
3、将所提取的样本的加以聚类;
4、用误差平方和准则(也可选用其他准则)加以评价,直到满意为止。
``
代码段
close all
clc
%坐标点,初始化选定比例系数
num = 10;eta = 0.5;
axis([0 10 0 10]);
hold on
%c = zeros(10,1);z = zeros(10,2);
x1 = [0,0];x2 = [3,8];x3 = [2,2];x4 = [1,1];
x5 = [5,3];x6 = [4,8];x7 = [6,3];x8 = [5,4];
x9 = [6,4];x10 = [7,5];
W = [x1;x2;x3;x4;x5;x6;x7;x8;x9;x10];
%% step1 任选一个坐标点作为第一个聚类中心z1
R= randperm(num);
c(1) = R(1);
z(1,:) = W(c(1),:);
%% step2 从数据中选取一个距离z1最远的坐标点,作为第二个聚类中心z2
d = zeros(num,1);
for i = 1:num
d(i) = norm(z(1,:)-W(i,:));
end
[~,c(2)] = max(d);%距离,位置
z(2,:)= W(c(2),:);
%% step3 计算剩余数据与z1,z2之间的距离,并求其最小距离
d =zeros(num,2);
for i = 1:num
d(i,1) = norm(z(1,:)-W(i,:));
d(i,2) = norm(z(2,:)-W(i,:));
end
D = zeros(num,1);
for i = 1:num
D(i) = min(d(i,:));
end
%% step4 确定是否存在第三个聚类中心
[m,n] = max(D);%最大值,位置
if m>eta*norm(z(2,:)-z(1,:));
c(3) = n;
z(3,:) = W(c(3),:);
jump = 1;%转至step5
else
jump = 2;
end
switch (jump)
case 1
k = 4;
%% step5 继续确定是否存在聚类中心
for p = 1:num
d =zeros(num,length(c));
for i = 1:length(c)
for j = 1:num
d(j,i) = norm(z(i,:)-W(j,:));
end
end
for i = 1:num
D(i) = min(d(i,:));
end
[m,n] = max(D);%最大值,位置
if m>eta*norm(z(2,:)-z(1,:));
c(k) = n;
z(k,:) = W(c(k),:);
k = k+1;
else
break %没有新的聚类中心
end
end
case 2
end
%% step6 最小距离法进行分类
%首先计算数据到每个聚类中心的距离
D =zeros(num,length(c));
for i = 1:length(c)
for j = 1:num
D(j,i) = norm(z(i,:)-W(j,:));
end
end
%归类,判断坐标点属于的类别
k = zeros(length(c),1);
for i = 1:num
[m,n] = min(D(i,:));
k(i,1) = n;%归类标识
end
%设置颜色
colour = zeros(length(c),3);
for i = 1:length(c)
colour(i,:) = rand(1,3);
end
for i = 1:length(c)
v = find(k == i);%位置
u = length(v);%个数
M = zeros(u,2);%用来存储所属同一类的点
for j = 1:u
M(j,:) = W(v(j),:);
end
P = plot(M(:,1),M(:,2),'*');
set(P,'color',colour(i,:));
end
实验结果