Matlab中的凝聚聚类

时间:2011-11-04 22:13:04

标签: matlab cluster-analysis classification dendrogram

我有一个简单的二维数据集,我希望以凝聚的方式聚类(不知道要使用的最佳聚类数)。我能够成功聚类数据的唯一方法是给函数一个'maxclust'值。

为简单起见,我们假设这是我的数据集:

X=[ 1,1;
    1,2;
    2,2;
    2,1;
    5,4;
    5,5;
    6,5;
    6,4 ];

当然,我希望这些数据形成2个集群。我明白,如果我知道这一点,我可以说:

T = clusterdata(X,'maxclust',2);

并找出哪些点落入每个群集中我可以说:

cluster_1 = X(T==1, :);

cluster_2 = X(T==2, :);

但不知道2个群集对于此数据集是最佳的,我该如何对这些数据进行聚类?

由于

2 个答案:

答案 0 :(得分:7)

此方法的重点在于它表示层次结构中的聚类,您可以自行决定要获取多少详细信息。

agglomerative dendogram

将此视为具有与树形图相交的水平线,其从0开始移动(每个点是其自己的簇)一直到最大值(一个簇中的所有点)。你可以:

  • 当您达到预定数量的群集(example
  • 时停止
  • 手动定位给定一定的高度值(example
  • 根据距离标准选择将它放置在距离太远的地方(即跳到下一个级别)(example

这可以通过使用CLUSTER / CLUSTERDATA函数的'maxclust''cutoff'参数来完成

答案 1 :(得分:6)

要选择最佳簇数,一种常用方法是制作类似于Scree Plot的图。然后你在图中寻找“肘”,这就是你选择的簇数。对于此处的标准,我们将使用簇内的平方和:

function wss = plotScree(X, n)

wss = zeros(1, n);
wss(1) = (size(X, 1)-1) * sum(var(X, [], 1));
for i=2:n
    T = clusterdata(X,'maxclust',i);
    wss(i) = sum((grpstats(T, T, 'numel')-1) .* sum(grpstats(X, T, 'var'), 2));
end
hold on
plot(wss)
plot(wss, '.')
xlabel('Number of clusters')
ylabel('Within-cluster sum-of-squares')
>> plotScree(X, 5)

ans =

   54.0000    4.0000    3.3333    2.5000    2.0000

enter image description here