聚类分析的MATLAB实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
聚类分析
1 预备数据
对以下10个向量进行聚类。
X = [ % X=rand(10,2)*5
4.4988 1.5465
4.1081 4.1925
3.2246 2.8404
4.0899 1.8521
3.3011 3.5137
1.7099
2.7329
1.4486
2.2244
1.7060 3.4728
2.6704
3.1066
3.6356 3.9741]
在聚类前,应标准化数据。设X的每个列向量为V,被标准化为(V-mean(V))./std(V)
X=zscore(X)
绘图
2 计算向量之间的相似性
Y是距离(对称)矩阵的向量表示形式
Y = pdist(X, 'euclidean');
% 还原为对称矩阵,便于调试
H=squareform(Y)
更高级的距离计算方式:带权的欧氏距离
Y = pdist(X, @DISTFUN,[.1 .3 .3 .2 .1]); function d = DISTFUN(XI, XJ, W)
d = sqrt((XI-XJ).^2 * W');
3 聚类树的计算与显示
Z=linkage(Y,'single')
聚类C1和聚类C2的距离的计算方法:
4 聚类结果
对聚类树,按照指定数目确定子集。
T=cluster(Z,2);
1 2 2 1 2 2 2 2 2 2 T=cluster(Z,3);
3 1 1 3 1 2 2 2 1 1 T=cluster(Z,4);
4 3 3 4 3 1 1 2 3 3 4 3 3 4 3 1 1 2 3 3
5 聚类评价
C=cophenet(Z,Y); % 相聚系数
计算方法: ∑∑∑<<<----=j i j i j i j i j i j i j i y Y z Z
y Y z Z C 2,2,,,)(*)())
(*)((
j i Y ,是向量i 与向量j 的距离, y 是距离的均值. j i Z ,是向量i 与向量j 在合并中的距离,z 距离的均值。
一般情形:
Z=linkage(Y,'average'); C=cophenet(Z,Y) % 更合理