K-Means是一种最经典也是使用最广泛的聚类方法。
k-means 算法的工作过程说明如下:首先从n个数据对象任意选择k 个对象作为初始
聚类
中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。
K-Means的思想很简单,对于一个聚类任务,具体过程如下:
- 选择K个点作为初始质心
- repeat
- 计算每个点与每个聚类中心的距离(相似度),将每个点指派到最近的聚类,形成K个新的聚类;
- 通过计算新聚类中的所有对象的平均值重新得到每个聚类新的聚类中心;
- until 聚类中心不发生变化或达到最大迭代次数
这里有个误区,我以前一直理解错误,以为每一次迭代是针对一个对象,计算其最近邻聚类,然后将其分配至该聚类,计算并更新该聚类中心,然后再针对下一个对象做同样的处理(。。。傻么。。。)但实质上,这里的每一次迭代过程指的是针对所有对象,即一次迭代对所有对象都计算与K个聚类中心的距离,然后将其分配到最近的聚类,当所有对象都已经被分配到聚类中之后,根据聚类中所有对象的均值计算新的聚类中心。
空间复杂度:O((m+K)n),其中,K为簇的数目,m为记录数,n为维数
参考资料: