如何生成聚类图
1.计算n个样本点两两之间的距离,记为矩阵
2.构造n个类,每一个类中只包含一个样本点,每一类的平台高度均为0
3.合并距离最近的两类为新类,并且以这两类间的距离值作为聚类图中的平台高度
4.计算新类与当前各类的距离,若类的个数已经等于1,转入步骤5,否则回到步骤3
5.画聚类图
6.决定类的个数和类
EG:
设有5个销售员,他们的销售业绩由二维变量(v1,v2)描述,见表格
使用绝对值距离来测量点与点之间的距离,是用最短距离法来测量类与类之间的距离
1.算出距离矩阵
w1 w2 w3 w4 w5
w1 0 1 4 6 6
w2 1 0 3 5 5
w3 4 3 0 2 4
w4 6 5 2 0 4
w5 6 5 4 4 0
2.进行聚类分析
(1)所有的元素自成一类 H1 = {w1, w2,w3,w4,w5}。每一个类的平台高度为0,
(2)把w1,w2 合成一个新类h6,新类的平台高度为1,此时的分类情况是:
H2 = {h6,w3,w4,w5}
(3)把w3,w4 合成一个新类h7,新类的平台高度为2,此时的分类情况是:
H3 = {h6,h7,w5}
(4)把h6,h7 合成一个新类h8,新类的平台高度为3,此时的分类情况是:
H4 = {h8,w5}
(5)把h8,w5 合成一个新类h9,新类的平台高度为4,此时的分类情况是:
H5 = {h9}
代码如下:
clc,clear
a = [1,0;1,1;3,2;4,3;2,5];
[m,n] = size(a);
d = mandist(a')
d = tril(d);
nd = nonzeros(d);
nd = union(nd,nd);
for i = 1:m-1
nd_min = min(nd);
[row,col] = find(d == nd_min);tm = union(row,col);
tm = reshape(tm,1,length(tm));
fprintf('第%d次合成,平台高度为%d时的分类结果为:%s',i,nd_min,int2str(tm));
nd(find(nd == nd_min)) = [];
if length(nd) == 0
break
end
end
代码详解:(按行注释)
聚类前的