Kmeans不知道集群的数量?

Leg*_*end 34 python machine-learning data-mining k-means

我试图在一组高维数据点(大约50维)上应用k-means,并且想知道是否有任何实现找到最佳簇数.

我记得在某处读取算法通常这样做的方式是使群集间距离最大化并且群集内距离最小化但我不记得我在哪里看到它.如果有人可以指出我讨论这个的任何资源,那将是很棒的.我目前正在使用SciPy进行k-means,但任何相关的库都可以.

如果有其他方法可以实现相同或更好的算法,请告诉我.

Ale*_*lds 15

一种方法是交叉验证.

从本质上讲,您选择数据的一个子集并将其聚类到k个集群中,然后您会询问它与其他数据相比的集群程度:您是将数据点分配给相同的集群成员资格,还是它们属于不同的集群成员资格集群?

如果成员资格大致相同,则数据很好地适合k个集群.否则,你尝试不同的k.

此外,您可以执行PCA(主成分分析)将50维度减少到更易处理的数量.如果PCA运行表明您的大部分差异来自50个维度中的4个,那么您可以在此基础上选择k,以探索如何分配四个集群成员资格.

  • 维度数量和群集数量之间的关系是什么?我可以很容易地建立一个具有k个簇的1维分布,用于任意K. (6认同)
  • "如果成员资格大致相同" - 这假设数据被*均匀*划分为集群,这是一个非常强大的假设. (3认同)

Kev*_*ert 8

请查看此维基百科页面,了解确定数据集中的群集数量.

您也可以尝试使用Agglomerative层次聚类.这种方法不需要知道簇的数量,它将逐渐形成簇的簇,直到只存在一簇.此技术也存在于SciPy(scipy.cluster.hierarchy)中.