当我在我的数据集上运行 Kmeans 时,我注意到一些质心变得陈旧,在一些迭代之后它们不再是离任何点最近的质心。现在我在下一次迭代中跳过这些过时的质心,因为我认为这些质心不再代表任何有用的数据集,但是我想知道是否有其他合理的方法来处理这些质心。
如何处理 K-means 中的过时质心
数据挖掘
聚类
k-均值
无监督学习
2022-02-22 10:14:18
1个回答
k-means只找到一个局部最优值。因此,错误数量的簇或只是吸引力中的某种随机平衡状态可能导致空簇。从技术上讲,k-means 没有为此提供程序,但您可以毫无问题地丰富算法。
我发现有两种有用的方法:
- 删除陈旧的集群,从您的数据集中选择一个随机实例并创建一个质心与所选随机点相等的新集群
- 删除陈旧的集群,选择距任何其他质心最远的点,创建一个质心在该点的新集群
这两个过程都可能导致运行时间不确定,但如果这种调整的次数是有限的(通常是有限的),它会毫无问题地收敛。为了保护自己免受无限运行时间的影响,您可以设置调整次数的上限。
如果您有大量数据集和大量集群,则该过程本身并不实用。运行时间可能变得令人望而却步。
另一个减少这种情况发生的过程是使用更好的初始化过程,比如k-means++。事实上,第二个建议是来自k-means++的一个想法。但是,没有任何保证。
最后是关于实施的说明。如果您无法更改算法代码以即时进行这些改进,那么我想到的唯一选择是开始一个新的聚类过程,在该过程中初始化非陈旧聚类的质心位置,并遵循以下步骤陈旧的集群。