k-means算法把N个点聚集成K个组合的算法,要求任意输入K各对象作为初始中心点,这个人的最大疑问就是怎么能够通过这随便选择的K个点来达到满足要求的K个组合呢。
K-means算法其实每次迭代都会改变中心,也就是初始的K各对象作为中心点在每一次迭代后都会更新。首先以这K各顶点作为初始K个聚类的中心顶点,第一轮计算所有的其他顶点与这个K个顶点的相似度,取相似度最大的或者说与这K个顶点中某个顶点距离最近的顶点加入这个顶点所代表的cluster中,注意在第一轮检测所有顶点的距离并判断其属于哪个簇的过程中,这K各簇的中心仍然是以这K个顶点作为代表的。
第一轮计算完毕之后,相当于形成了以这K个顶点为中心的K个聚类,此时计算这K个聚类的聚集度,即各个顶点与其中心顶点的距离和作为考察条件,在进行下一轮的迭代的时候,中心顶点就变了,此时就变成第一轮生成的K个聚类的中心顶点作为新的中心顶点并按照第一轮迭代的方法进行重新聚类,并计算各个聚类的聚合度,当聚合度不变的时候或者定义了最大迭代次数的时候,算法表示运算完毕。
初学者容易犯的算法上理解的错误是认为在迭代过程中每加入一个新顶点到某个簇中就实时改变簇的中心点,这种想法是不对的。只有在一轮结束后即所有顶点都有其归属簇的时候才更新这个簇的中心点,并作为下次迭代的初始条件。