7

我有一个简单的二维数据集,我希望以凝聚的方式进行聚类(不知道要使用的最佳聚类数)。我能够成功地对数据进行聚类的唯一方法是给函数一个“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 个集群对于这个数据集来说是最佳的情况下,我如何对这些数据进行集群?

谢谢

4

2 回答 2

7

这个方法的全部意义在于它代表了在层次结构中找到的集群,由你决定你想要获得多少细节。

凝聚的 树状图

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

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

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

于 2011-11-05T01:35:04.880 回答
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

在此处输入图像描述

于 2011-11-04T23:17:31.840 回答