K-means不是基于距离的聚类算法。
K-means 搜索最小平方和分配total_SS
,即它通过将点分配给聚类中心来最小化非归一化方差 (= )。
为了使 k-means 收敛,您需要两个条件:
- 重新分配点会减少平方和
- 重新计算平均值会减少平方和
由于只有有限数量的组合,您不能无限减少该值,算法必须在某个点收敛到局部最优值。
每当您打算更改分配函数时,都有使算法不再终止的风险,就像狗追逐自己的尾巴一样。本质上,这两个步骤都必须就目标函数达成一致。我们确实知道算术平均值是关于平方和的最佳选择。第一步,我们可以计算∑i(xi−μji)2对于每个平均值j并选择最小的。从技术上讲,这里没有距离计算。在数学上,通过最小平方和分配等于通过接近平方欧几里得距离进行分配,这(如果您浪费 CPU 周期进行计算sqrt
)等于最小欧几里得距离分配。所以将每个点分配给最接近的平均值的直觉是正确的,但不是优化问题的作用。
between_SS
可能是两个平均值之间的加权平方和,以衡量聚类中心的分离程度(注意:聚类中心,它不比较实际的聚类 - 从技术上讲,聚类 Voronoi 细胞接触相邻聚类 Voronoi 细胞)。
请注意,使用 k-means,您可以通过增加 k 来提高朴素聚类质量。这里测量的质量是一个数学值,可能与用户要求不匹配。Iris 实际上是一个很好的例子,其中 k-means 经常收敛到不太令人满意的结果,即使外部信息应该正好有 3 个集群。
如果您想要k-means 的基于距离的变体,请查看k-medoids。通过用中心点替换均值来确保收敛:
- 每个对象都被分配到最近的集群(通过任意距离测量)
- 聚类中心更新为聚类的最中心对象,即与所有其他对象的平均距离最小。
在每一步中,距离总和都会减少;组合的数量是有限的,因此算法必须在某个局部最小值处终止。