不知道聚类数量的K均值?

42 投票
7 回答
31958 浏览
提问于 2025-04-16 21:03

我正在尝试对一组高维数据点(大约有50个维度)应用k-means算法,想知道有没有什么方法可以找到最佳的聚类数量。

我记得之前看到过,算法通常是通过最大化聚类之间的距离和最小化聚类内部的距离来实现这个目标,但我不记得具体在哪里看到的。如果有人能给我推荐一些相关的资源,那就太好了。目前我在使用SciPy库来进行k-means,但其他相关的库也可以。

如果有其他方法可以实现同样的目标或者更好的算法,请告诉我。

7 个回答

4

一个有趣的方法是由Fred和Jain提出的证据积累。这个方法是通过多次运行k均值算法,使用很多个聚类,然后把这些结果合并成一个整体的解决方案。这个方法的好处在于,聚类的数量是在这个过程中确定的,并且最后得到的聚类不一定是球形的。

10

你可以看看这个维基百科页面,关于如何确定数据集中聚类的数量

另外,你也可以试试聚合层次聚类。这种方法不需要事先知道聚类的数量,它会逐步形成聚类,直到最后只剩下一个聚类为止。这种技术在SciPy中也有实现(scipy.cluster.hierarchy)。

16

一种方法是交叉验证

简单来说,你可以从你的数据中挑选一部分,然后把它们分成k个组,接着你要看看这些组的效果如何:你分的数据点是不是都被分到同一个组里,还是说它们被分到了不同的组?

如果分组的结果大致相同,说明你的数据很适合分成k个组。否则,你就可以尝试换一个k的值。

另外,你还可以使用主成分分析(PCA)来把50个维度的数据减少到更容易处理的数量。如果PCA的结果显示,大部分变化来自于50个维度中的4个维度,那么你可以根据这个结果来选择k,看看这四个组的分配情况。

撰写回答