我正在尝试对一组高维数据点(约50个维度)应用k-means,并想知道是否有任何实现可以找到最优聚类数量。
我记得在某处读到过,算法通常是通过最大化簇间距离和最小化簇内距离来完成这一点,但我不记得在哪里看到的。如果有人能指点我有关此事的任何资源,那将是很好的。我目前正在使用SciPy进行k-means,但任何相关的库也都可以。
如果有其他实现相同或更好算法的替代方法,请告诉我。
我正在尝试对一组高维数据点(约50个维度)应用k-means,并想知道是否有任何实现可以找到最优聚类数量。
我记得在某处读到过,算法通常是通过最大化簇间距离和最小化簇内距离来完成这一点,但我不记得在哪里看到的。如果有人能指点我有关此事的任何资源,那将是很好的。我目前正在使用SciPy进行k-means,但任何相关的库也都可以。
如果有其他实现相同或更好算法的替代方法,请告诉我。
请查看这个维基百科关于确定数据集中簇数量的页面。
此外,您可能想尝试凝聚层次聚类。这种方法不需要知道簇的数量,它将逐步形成簇的簇,直到只剩下一个簇为止。这种技术也存在于SciPy中(scipy.cluster.hierarchy)。
一种有趣的方法是Fred和Jain提出的证据积累。该方法基于将多个具有大量聚类的k-means运行组合成一个整体解决方案。该方法的优点包括:过程中确定聚类数目,最终聚类不必呈球形。
您还应确保每个维度实际上是独立的。许多所谓的多维数据集具有相同事物的多个表示。
在您的数据中拥有这些并不是错误的。但如果使用同一事物的多个版本作为支持聚类论点,则是错误的。
R
)回答了一个类似的问题:stackoverflow.com/a/15376462/1036500 - Ben