/ u2 R6 m% h, \- w# D/ x1 B! x8 w. n ) k& p; Z3 ~( A- G0 ~. T i9 y k , j3 l+ y# I" Z6 G, Z% y ' k# M' P, B# n, _6 K4 U ( L6 o6 g5 \/ S h) m) F5 z7 X. O3 g7 n. h$ m
因此,可以得到任意两个销售员的数据距离矩阵: , m2 l1 ]/ d7 w# e+ ?4 r/ [' `, S1 c) B
- U& u2 x% h' o' _1 d7 h' E" d! f- z0 r8 U: d7 s% o r0 L
Step1 首先,最相近的两组样本是w1和w2,他们的距离为1,所以先将其聚为一类; * M% A+ y' i+ ?! Y D7 H * g8 U: J$ f% F( b/ Z6 R* eStep2 然后,剩下的样本为{w1,w2},w3,w4,w5,我们发现除了距离1之外,最相似的是 w3,w4,他们的距离为2,所以将其聚为一类; [, L( Z( Y5 f. A% \4 ?/ v
Step3 然后,剩下的样本为{w1,w2},{w3,w4},w5,我们发现除了距离1,2之外,最相似的 是{w1,w2}和{w3,w4},他们的距离以 w2和w3的距离为准,距离为3,所以将这两类聚为一类; . C1 A0 L* b* X) Z6 l. s" i
Step4 最后,剩下的样本为{w1,w2,w3,w4},w5,只剩最后两类了,所以最后一类为 {w1,w2,w3,w4,w5},类间距以w3/w4与w5的距离4为准。 2 H0 a5 D( y0 b- }" p! W5 I, ^) Z( V1 A
代码如下:%% 编程实现clc;clear;close all [ s/ W/ e2 d' ~
data = [1,0;1,1;3,2;4,3;2,5];%原始数据 4 r! g: ^4 \/ R1 `2 E3 V: f0 o8 a[m, ~] = size(data);6 _9 P2 Z5 i, R- r. l r
d = mandist(data');%求任意两组数据的距离 9 v; h4 G( ^' F* bd = tril(d);%取下三角区域数据 6 ^4 `$ D/ T9 ]8 ]1 f5 ynd = nonzeros(d);%去除0元素/ J- [" g* X* [ k- {3 [. }+ T
nd = unique(nd);%去除重复元素 7 d2 p: z( t2 f$ W4 w for i = 1 : m-1 - B/ @) y D% ] nd_min = min(nd);. J( [. M7 D" s
[row, col] = find(d == nd_min); 9 o( a6 u1 J6 l" i1 _/ b label = union(row,col);%提取相似的类别 $ P# b* F+ U" n/ z label = reshape(label, 1, length(label));%将类别标签转化成行向量8 r( w e- f5 d! G
disp(['第',num2str(i),'次找到的相似样本为:',num2str(label)]); 0 ?/ C8 O8 @# O: w: u! N nd(nd == nd_min) = [];%删除已归类的距离 4 u/ N! [# o; d6 e% F$ n if isempty(nd)%如果没有可分的类就停止% c! j, ]/ J0 a4 e$ ]1 U
break( p- H+ m' c: S3 f3 W0 I( B, z
end ; ?8 z0 ?5 ?" V# l0 X) T( F6 Z5 u end \# ^+ m5 i% T0 F% v1 s
%% 工具箱实现* f7 O5 J2 ~- B! ^, T; Y
clc;clear;close all3 q' u) @% H" ~& \. J
data = [1,0;1,1;3,2;4,3;2,5];%原始数据' X" L/ W1 e$ i6 v; [9 u, y
y = pdist(data,'cityblock');%计算任意两样本的绝对值距离 6 ?; K. b/ B2 s9 Oyc = squareform(y);%将距离转化成对称方阵 ; U4 n2 H, o; H O3 O) Fz = linkage(y);%生成聚类树- q9 U3 j8 t$ u, g# [0 y8 @ ~
[h, t] = dendrogram(z);%画出聚类树 ' Z4 ]( S r8 C6 {n = 3;%最终需要聚成多少类& u2 B" t( ^. o6 |* M' r
T = cluster(z, 'maxclust', n);%分析当分n类时,个样本的标签 7 y5 u+ Z: s2 K1 x# Wfor i = 1 : n 2 }, s- _9 B) V( b label = find(T == i);9 b9 P, E% y1 k& f! w! F7 v5 _; d
label = reshape(label, 1, length(label));0 i' C6 c3 ?# h% e. Y# R. F
disp(['第',num2str(i),'类有:',num2str(label)]);% E, o4 G1 R S& ~( L; D. r
end+ k" ?( C: Y' l3 C1 _9 k! f
结果如下:9 v! z* s h9 |& Q 7 J- i2 f! |) s, k# Z" s: J3 {$ s--------------------- " f, i( v, K( m1 }