我有一个简单的二维数据集,我希望以凝聚的方式聚类(不知道要使用的最佳聚类数)。我能够成功聚类数据的唯一方法是给函数一个'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个群集对于此数据集是最佳的,我该如何对这些数据进行聚类?
由于
答案 0 :(得分:7)
此方法的重点在于它表示层次结构中的聚类,您可以自行决定要获取多少详细信息。
将此视为具有与树形图相交的水平线,其从0开始移动(每个点是其自己的簇)一直到最大值(一个簇中的所有点)。你可以:
这可以通过使用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