聚类分析的MATLAB实现

更新时间:2024-01-23 15:21:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

聚类分析

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)

绘图 figure plot(X(:,1),X(:,2),'*') for i=1:10 text(X(i,1),X(i,2), num2str(i),'FontSize',15); end

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的距离的计算方法: 'single' 点间的最短距离 'complete' 点间的最远距离 'average' 点间的平均距离 点/聚类编号 点/聚类编号 距离 新聚类编号、组成 2 10 0.4935 11[2 10] 1 4 0.5068 12[1 4] 3 9 0.5846 13[3 9] 11 5 0.6041 14[2 10 5] 6 7 0.6242 15[6 7] 14 13 0.7336 16[2 10 5] [3 9] 15 8 0.8408 17[6 7 8] 16 17 0.9649 18[2 10 5][3 9][6 7 8] 12 18 1.3680 19[1 4] [2 10 5][3 9][6 7 8] dendrogram(Z); %绘制聚类树

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); % 相聚系数 计算方法: C??((Zi?ji,j?z)*(Yi,j?y))22?(Zi?ji,j?z)*?(Yi,j?y)i?j

Yi,j是向量i与向量j的距离, y是距离的均值.

Zi,j是向量i与向量j在合并中的距离,z距离的均值。

一般情形:

Z=linkage(Y,'average'); C=cophenet(Z,Y) % 更合理

本文来源:https://www.bwwdw.com/article/7x6o.html

Top