使用 K-Means 聚类算法时,是否可能有一组数据导致无限循环?

When using the K-Means Clustering Algorithm, is it possible to have a set of data which results in an Infinite Loop?

这个问题比较理论化,并没有专门尝试解决问题。

我最近了解了 K-Means 聚类算法和无监督机器学习算法,我对一些数据集很感兴趣,即使是完全随机的,绘制的平均质心也可以通过不断变化每次迭代。

示例:

我想在这里展示的是,想象一下如果程序在迭代 6 和迭代 9 之间翻转,并且一直这样做下去。

我的代码在使用 K-Means 之前随机挂起,所以我不认为这是不可能的,但是请让我知道这是已知的情况,还是由于算法。

如果您需要更多信息,请在评论中询问我。使用 Python 3.7

tl;dr 不,如果算法编码正确,K-means 算法总会有一个终点。

解释:

思考这个问题的理想方式不是从什么数据点会导致问题的意义上讲,而是从更广泛意义上的 kmeans 是如何工作的。 k-means 算法总是在有限的 space 中工作。对于 N 个数据点,数据点只有 N ^ k 个不同的排列。 (这个数字可能很大,但仍然是有限的)

其次,k-means 算法总是根据每个数据点与其分配的聚类中心之间的平方距离之和来优化损失函数。这意味着两件非常重要的事情:每个 N ^ k 不同的排列都可以按照从最小损失到最大损失的 ascending/descending 顺序排列。此外,K-means 算法永远不会从较低的净损失状态变为较高的净损失状态。

这两个条件保证了算法在有限的space中总是趋向于损失最小的排列,从而保证算法有终点

最后一个边缘情况:如果多个最小状态具有相同的损失怎么办?这是一种极不可能发生的情况,但可能会导致问题 当且仅当 算法针对决胜局的编码不当时。从本质上讲,这可能导致循环的唯一方法是,如果一个数据点对于两个集群具有相等的距离,并且即使在相等的距离上也允许将集群更改为远离其当前集群。可以说,算法通常经过编码,因此数据点永远不会以平局或其他确定性方式交换,从而完全避免这种情况。