kmeans均值聚类算法实现

这个算法中文名为k均值聚类算法,首先咱们在二维的特殊条件下讨论其实现的过程,方便你们理解。算法

第一步.随机生成质心

因为这是一个无监督学习的算法,所以咱们首先在一个二维的坐标轴下随机给定一堆点,并随即给定两个质心,咱们这个算法的目的就是将这一堆点根据它们自身的坐标特征分为两类,所以选取了两个质心,何时这一堆点可以根据这两个质心分为两堆就对了。以下图所示:
学习

第二步.根据距离进行分类

红色和蓝色的点表明了咱们随机选取的质心。既然咱们要让这一堆点的分为两堆,且让分好的每一堆点离其质心最近的话,咱们首先先求出每个点离质心的距离。假如说有一个点离红色的质心比例蓝色的质心更近,那么咱们则将这个点归类为红色质心这一类,反之则归于蓝色质心这一类,如图所示:
blog

 

第三步.求出同一类点的均值,更新质心位置

在这一步当中,咱们将同一类点的x\y的值进行平均,求出全部点之和的平均值,这个值(x,y)则是咱们新的质心的位置,如图所示:im

咱们能够看到,质心的位置已经发生了改变。db

第四步.重复第二步,第三步

咱们重复第二步和第三部的操做,不断求出点对质心的最小值以后进行分类,分类以后再更新质心的位置,直到获得迭代次数的上限(这个迭代次数是能够咱们本身设定的,好比10000次),或者在作了n次迭代以后,最后两次迭代质心的位置已经保持不变,以下图所示:img

这个时候咱们就将这一堆点按照它们的特征在没有监督的条件下,分红了两类了!!co

五.若是面对多个特征肯定的一个点的状况,又该如何实现聚类呢?

首先咱们引入一个概念,那就是欧式距离,欧式距离是这样定义的,很容易理解:生成

很显然,欧式距离d(xi,xj)等于咱们每个点的特征去减去另外一个点在该维度下的距离的平方和再开根号,十分容易理解。中文

咱们也能够用另外一种方式来理解kmeans算法,那就是使某一个点的和另外一些点的方差作到最小则实现了聚类,以下图所示:ps

得解,有问题能够在评论区留言!

相关文章
相关标签/搜索