KMeans——之我见

来源:互联网 发布:js前端解析excel 编辑:程序博客网 时间:2024/05/17 22:39

在讲解KMeans算法聚类之前,先推出一个场景:在上政治课的过程中,有N个班级,每个班级为M人,按照正常逻辑,相熟悉的人,会坐在一起。但是,不代表每个班的同学恰巧都坐在一起,为了把每个班的同学聚集在一起,我们需要给每个同学贴一个Label。同时,让每个班的班长站起来,其余同学根据自己身上的Label(即:属于哪个班集体),自动的和身边的人换座,向班长靠拢。这个过程和KMeans所表达的思想基本上是类似的,使结果尽可能收敛(每个班级的同学尽可能坐在一起)。

注:当一个班级中所有的同学都找到班长时,可以向班长做一个手势,该手势只有该班班长能清楚——做这个手势的同学,是属于我们班的。然后,班长为了能够使同学通过移动最小的距离,就聚集在一起,他需要分析自己和每个同学大致的距离,然后尽可能的把自己的位置调整到最中心(使同学们移动的总的距离最小)。

通过模拟以上场景,大家对KMeans算法作用及其操作应该有了一个清晰的认识。好了,让我们具体的去学习它吧!

  聚类算法和分类算法思想是不同的(不要混为一谈)。分类算法是给出一个数据,然后判断这个数据属于已分好的类中的具体哪一个类。聚类算法是给一大堆原始数据,然后通过算法将其中具有相似特征的数据聚为一类。

     在这里,聚类的对象,根据自己定义(本文就不多加干涉了,要不就感觉有了局限性)。

      KMeans算法的思想是随机给定k个簇中心(就是每个班的班长)。按照最近邻原则把待分类样本点(每个班级里的学生)分到各个簇。然后按平均法重新计算各个簇的中心,从而确定新的簇心(班长的位置需要变动,以致同学们总的移动距离最短)。然后,进行迭代,直到簇心的移动距离小于某个给定的值。(收敛的程度,根据实验要求安排)

      主要分为三步:

1) 为待聚类的点寻找聚类中心(一般是随机定义)

2) 计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中心,设置Label.

3) 计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的类中心。(在这里,每个样本就是一个N维向量,每维相加,最后取均值)

     最后:反复执行(2)、(3),直到聚类中心不再进行大范围移动或者聚类次数达到实验要求位置。

 

KMeans主要思想就是以上内容,思想懂了,Code就不难了。各位朋友,如果在做行实验过程中,有什么疑问,可以留言。

0 0
原创粉丝点击