Kev*_*_TA 7 matlab classification cluster-analysis dendrogram
我有一个简单的二维数据集,我希望以凝聚的方式聚类(不知道要使用的最佳聚类数).我能够成功聚类数据的唯一方法是给函数一个'maxclust'值.
为简单起见,我们假设这是我的数据集:
X=[ 1,1;
1,2;
2,2;
2,1;
5,4;
5,5;
6,5;
6,4 ];
Run Code Online (Sandbox Code Playgroud)
当然,我希望这些数据形成2个集群.我明白,如果我知道这一点,我可以说:
T = clusterdata(X,'maxclust',2);
Run Code Online (Sandbox Code Playgroud)
并找出每个群集中的哪些点我可以说:
cluster_1 = X(T==1, :);
Run Code Online (Sandbox Code Playgroud)
和
cluster_2 = X(T==2, :);
Run Code Online (Sandbox Code Playgroud)
但是,如果不知道2个群集对于此数据集是最佳的,我该如何对这些数据进行聚类?
谢谢
要选择最佳簇数,一种常用方法是绘制类似于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')
Run Code Online (Sandbox Code Playgroud)
>> plotScree(X, 5)
ans =
54.0000 4.0000 3.3333 2.5000 2.0000
Run Code Online (Sandbox Code Playgroud)
