K-Means算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。K是我们事先需要给定的聚类数目(K小于样本的个数N)。
K-Means聚类算法主要分为三个步骤:
(1)随机在样本中选取K个样本点作为聚类中心。(2)计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中心的簇中去。
(3)重新计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心
反复执行(2)、(3),直到聚类中心点不再变化或变化很小为止。
下图展示了对n个样本点进行K-Means聚类的效果,这里K=2:
K-Means算法的优点:
- 是解决聚类问题的一种经典算法,简单、快速
- 对处理大数据集,该算法保持可伸缩性和高效率
- 当结果簇是密集的,它的效果较好
K-Means算法的缺点:
- K值需要事先给定,而这个 K 值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。
- K-Means算法对初值敏感,对于不同的初始值,可能会得到不同的结果。(K-Means++算法可以用来解决这个问题,其可以有效地选择初始点)。
- 不适合于发现非凸面形状的簇或者大小差别很大的簇。
- 对躁声和孤立点数据敏感。
故K-Means算法 常常用于其他聚类算法的一个阶段,如谱聚类。