Statistics 当KMeans返回的集群少于K个时,该怎么办?

Statistics 当KMeans返回的集群少于K个时,该怎么办?,statistics,k-means,Statistics,K Means,我已经用Java实现了K-Means,有点让人头疼。我通过在数据点的值范围内的每个维度中选择一个随机值来选择初始质心。我遇到过这样的情况,其中一个或多个质心最终不是任何数据点的最接近的质心。那么下一次迭代我该怎么做呢?就让它保持原来的随机值?选择一个新的随机值?计算其他质心的平均值?在最初的算法中似乎没有考虑到这一点,但可能我遗漏了一些东西。我使用它的方式是,初始值作为数据集中的随机点,而不是跨空间中的随机点。这意味着每个集群最初至少有一个点。对于异常值,您仍然可能会很不走运,但如果运气好,您将

我已经用Java实现了K-Means,有点让人头疼。我通过在数据点的值范围内的每个维度中选择一个随机值来选择初始质心。我遇到过这样的情况,其中一个或多个质心最终不是任何数据点的最接近的质心。那么下一次迭代我该怎么做呢?就让它保持原来的随机值?选择一个新的随机值?计算其他质心的平均值?在最初的算法中似乎没有考虑到这一点,但可能我遗漏了一些东西。

我使用它的方式是,初始值作为数据集中的随机点,而不是跨空间中的随机点。这意味着每个集群最初至少有一个点。对于异常值,您仍然可能会很不走运,但如果运气好,您将能够检测到这一点并以不同的点重新启动。(前提是“K个点簇”是对数据的充分描述)

而不是选择随机值(如果与簇相比,可能值的空间较大,则随机值可能毫无意义),许多实现从数据集中选取随机点作为初始质心。

大多数k-means实现使用实际数据点,而不是变量绘制的边界框中的随机点来定义初始质心。然而,下面是一些解决实际问题的建议

您可以随机选取另一个数据点,使其成为新的群集质心。这是非常简单和快速的实现,不应该影响算法的不利影响

您还可以尝试使用更智能的初始选择簇质心。该算法随机选择第一个质心,并选取剩余的K-1质心,尝试最大化质心间距离。通过选择更智能的质心,您不太可能遇到质心被指定为零数据点的问题

如果您想稍微聪明一点,可以使用kmeans++算法在质心被指定为零数据点时创建一个新的质心