K-means算法算是个著名的聚类算法了,不仅容易实现,并且效果也不错,训练过程不需人工干预,实乃模式识别等领域的居家必备良品啊,今天就拿这个算法练练手。
总结来说,这个算法的步骤如下:
1.随机选取样本中的K个点作为聚类中心
2.计算所有样本到各个聚类中心的距离,将每个样本规划在最近的聚类中
3.计算每个聚类中所有样本的中心,并将新的中心代替原来的中心
4.检查新老聚类中心的距离,如果距离超过规定的阈值,则重复2-4,直到小于阈值
那么,现在,我实现的程序的步骤也是按照上面一步一步来的,
为了方便,我直接在平面上随机产生n个点,选取前K个点作为聚类中心,
距离就定义为平面上的欧式距离,
然后为了形象化地观察过程和结果,我将过程以图像的方式显示。
代码如下:
首先是主体:
int iter_times = 0;//迭代次数
while(!good_result())//检查是否是需要的聚类中心
{
for(int i = 0;i < POINT_NUM;i++)