Matlab中的凝聚聚类

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个群集对于此数据集是最佳的,我该如何对这些数据进行聚类?

谢谢

Amr*_*mro 7

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

凝聚 树状图

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

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

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


Joh*_*lby 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')
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)

在此输入图像描述