linkage
Z=linkage(Y)使用最短距离算法生成具层次结构的聚类树。
输入矩阵Y为pdist函数输出的距离行向量。
Z=linkage(Y,’method’)使用由’method’指定的算法计算生成聚类树。’method’可取表中特征字符串值。
’method’取值及含义
字符串 含 义
’single’ 最短距离(缺省)
’complete’ 最大距离
’average’ 平均距离
’centroid’ 重心距离
’ward’ 离差平方和方法(Ward方法)
输出Z为包含聚类树信息的 (m-1)*3矩阵。聚类树上的叶节点为原始数据集中的对象,由1到m 。它们是单元素的类,级别更高的类都由它们生成。对应于Z中行j 每个新生成的类,其索引为 j+m ,其中m 为初始叶节点的数量。
第1列和第2列,即Z(i,1:2)包含了被两两连接生成一个新类的所有对象的索引。生成的新类索引为 j+m 。共 有 m-1 个级别更高的类,它们对应于聚类树中的内部节点。
第三列,Z(i,3)包含了相应的在类中的两两对象间的连接距离。
cluster
用于划分系统聚类树
T=cluster(Z,'maxclust',n) 其中 Z为上面 linkage 产生的系统聚类树,'maxclust' 为函数如何划定形成聚类阈值或者临界值的方法
n为一共划分为几类
dendrogram
H=dendrogram(Z,P) ,利用产生的系统聚类树产生的数据矩阵Z来画聚类树状图。P是节点数,默认30
举一个例子:
一堆数据,一共:
1
0.366 1
0.242 0.233 1
0.28 0.194 0.59 1
0.36 0.324 0.476 0.435 1
0.282 0.262 0.483 0.47 0.452 1
0.245 0.265 0.54 0.478 0.535 0.663 1
0.448 0.345 0.452 0.404 0.431 0.322 0.266 1
0.486 0.367 0.365 0.357 0.429 0.283 0.287 0.82 1
0.648 0.662 0.216 0.032 0.429 0.283 0.263 0.527 0.547 1
0.689 0.671 0.243 0.313 0.43 0.302 0.294 0.52 0.558 0.957 1
0.486 0.636 0.174 0.243 0.375 0.296 0.255 0.403 0.417 0.857 0.852 1
0.133 0.153 0.732 0.477 0.339 0.392 0.446 0.266 0.241 0.054 0.099 0.055 1
0.376 0.252 0.676 0.581 0.441 0.447 0.44 0.424 0.372 0.363 0.376 0.321 0.627
对其进行聚类
clc,clear
a=textread('ju.txt'); %读入文件
d=1-abs(a); %对数据去完绝对值再距离
d=tril(d); %提出d矩阵的下三角部分
b=nonzeros(d); %去掉d里面的0元素
b=b'; %转置一下
z=linkage(b,'complete') %按最长距离聚类
y=cluster(z,'maxclust',2) %将变量分为两类
dendrogram(z); %画树状图
树状图:
y的取值:
y =
1
1
2
2
2
2
2
1
1
1
1
1
2
2
z的取值:
z =
10.0000 11.0000 0.0430
12.0000 15.0000 0.1480
8.0000 9.0000 0.1800
3.0000 13.0000 0.2680
6.0000 7.0000 0.3370
2.0000 16.0000 0.3640
14.0000 18.0000 0.3730
4.0000 21.0000 0.5230
5.0000 19.0000 0.5480
1.0000 17.0000 0.5520
20.0000 24.0000 0.6550
22.0000 23.0000 0.6610
25.0000 26.0000 0.9680