我正在尝试对一组高维数据点(约50维)应用k-means聚类,我想知道是否有任何实现可以找到最佳的聚类数量。
我记得在某处读到,算法通常通过最大化聚类间距离和最小化聚类内距离来实现这一点,但我忘了在哪里看到的。如果有人能指出任何讨论这个的资源,那就太好了。我目前使用SciPy进行k-means聚类,但任何相关的库都可以接受。
如果有其他方法可以实现相同或更好的算法,请告诉我。
回答:
一种方法是交叉验证。
本质上,你选择数据的一个子集,并将其聚类成k个聚类,然后你询问它与其余数据相比聚类得有多好:你是否将数据点分配到相同的聚类成员中,还是它们落入了不同的聚类中?
如果成员关系大致相同,那么数据适合于k个聚类。否则,你尝试不同的k值。
此外,你可以进行PCA(主成分分析)来将你的50维数据减少到更易处理的数量。如果PCA运行表明大部分方差来自于50维中的4个维度,那么你可以基于此选择k值,来探索这四个聚类成员是如何分配的。