机器学习十大算法之k-means

一、概述

k-means算法是一种聚类算法,聚类是指根据相似性原则,将具有较高相似度的数据对象划分在同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类是一种无监督的过程,即待处理对象未经过任何先验知识。在k-means算法中,k是指类簇的个数,means是指簇内数据对象的均值。k-means算法是一种基于划分的聚类算法,以距离作为数据对象间相似性度量的标准,即数据对象间的距离越小,则它们的相似性越高,则它们越有可能在同一个类簇。数据对象间距离的计算有很多种,k-means算法通常采用欧氏距离来计算数据对象间的距离。

二、算法描述

k-means算法思想可描述为:首先初始化KK个类簇中心;然后计算各个数据对象到聚类中心的距离,把数据对象划分至距离其最近的聚类中心所在类簇中;接着根据所得类簇,更新类簇中心;然后继续计算各个数据对象到聚类中心的距离,把数据对象划分至距离其最近的聚类中心所在类簇中;接着根据所得类簇,继续更新类簇中心;……一直迭代,直到达到最大迭代次数TT,或者两次迭代JJ的差值小于某一阈值时,迭代终止,得到最终聚类结果。具体算法描述如下:

1、 随机选取k个聚类质心点(cluster centroids)为clip_image008[6]

2、 重复下面过程直到收敛 {

               对于每一个样例i,计算其应该属于的类

               clip_image009

               对于每一个类j,重新计算该类的质心

               clip_image010[6]

}

K是我们事先给定的聚类数,clip_image012[6]​​​​​​​代表样例i与k个类中距离最近的那个类,​​​​​​​clip_image012[6]的值是1到k中的一个。质心​​​​​​​clip_image014[6]代表我们对属于同一个类的样本中心点的猜测,拿星团模型来解释就是要将所有的星星聚成k个星团,首先随机选取k个宇宙中的点(或者k个星星)作为k个星团的质心,然后第一步对于每一个星星计算其到k个质心中每一个的距离,然后选取距离最近的那个星团作为clip_image012[8]​​​​​​​,这样经过第一步每一个星星都有了所属的星团;第二步对于每一个星团,重新计算它的质心​​​​​​​clip_image014[7](对里面所有的星星坐标求平均)。重复迭代第一步和第二步直到质心不变或者变化很小。

通常我们计算距离采用欧氏距离:

 

总结:k-means算法是比较容易理解的算法,操作起来也比较容易,但聚类结果对初始类簇中心的选择较为敏感,容易陷入局部最优。

参考:

https://blog.csdn.net/zhihua_oba/article/details/73832614

http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006910.html

你可能感兴趣的:(机器学习)