有不止一种 k-means 算法。
您可能参考了Lloyds algorithm,它仅取决于初始聚类中心。但也有 MacQueen 的,它取决于顺序,即点的顺序。然后是 Hartigan,Wong,Forgy,...
当然,不同的实现可能会有实现和优化的差异。他们也可能以不同的方式对待关系!例如,许多简单的实现总是在绑定时将元素分配给第一个或最后一个集群。其他人将保留当前的聚类分配。因此,当对整数值进行聚类时,在这种情况下关联更为常见,但在 Iris 数据集上也是如此,您可能会看到由此引起的伪影和差异。
此外,在完成 k-means 之后,集群最终可能会按内存地址重新排序,因此即使 k-means 在第一次迭代后收敛,您也不能安全地假设集群 1 仍然是集群 1。其他人将按集群大小重新排序集群(这实际上对 k-means 有意义,因为这更有可能在不同的随机初始化时返回相同的结果)
但是假设所有迭代 Lloyd 直到收敛(原始的 MacQueen k-means 没有!)它们至少都应该达到局部最优。只会有那么多的局部最优...
例如,考虑由生成的数据集,让可以被。会有很多局部最优解。使用不同的随机种子运行 k-means 确实会给您非常不同的解决方案。对于适当的参数,我相信同一簇中的两个不同元素在另一个结果中再次出现在同一簇中的机会将在。在更高的维度上,您可能可以进一步减少这个数字。例如在维数据集中,对于和pj=(sin(2πjn),cos(2πjn))nj50%npjj=1pij=0i≠j,所有点都是等距的。很容易看出这会对 k-means 造成严重破坏......