码迷,mamicode.com
首页 > 编程语言 > 详细

K均值算法总结

时间:2015-01-08 11:11:01      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

这几天在一个项目上需要用到K均值聚类算法,以前都是直接利用百度老师copy一个Kmeans算法代码,这次想自己利用已知的算法思想编写一下,编写才知道,虽然熟悉了算法思想,真正实现时,还是遇到不少bug,这就是小学老师说的"眼高手低",还是需要亲自动手实现一下,才算真正的掌握思想。

回顾一下Kmeas算法思想,将若干元素聚为k类,使之,每一类内的元素相似度较高,类间的元素相似度较低,达到将若干元素划分的目的,具体如下:

1.初始化质心,初始化质心有多种初始化方法,我熟知的有两种,随机选择k个元素,作为k个初始质心;利用最大最小原则初始化质心。

前者简单,不做解释,重点解释一下后者,"最大最小"

这里,两个元素距离较近,认为是相似的,距离较远,相似度低

1)第一个质心是随机选取的,这里用随机数作为第一个质心

2)第二个质心的选择:选取剩下的元素到第一个质心的相似度的最小值,作为第二个质心(通俗理解是找一个距离第一个质心最远的元素)

3)第三个质心的选择:找一个距离第一个,第二个质心最远的元素(剩下的元素到第一个,第二个质心的相似度=max(sim(元素,第一个质心),sim(元素,第二个质心))),然后min(max(sim(元素,第一个质心),sim(元素,第二个质心))),这就是最大最小的具体体现。

4)剩下的质心选择同3)

2.在确定了K个初始质心之后,然后对剩下的n-k个元素,划分到距离最近的质心中,这样每个簇中就多于1个元素

3.更新每一个簇中的质心

4.求每个簇的误差,进而求总误差,如果满足阈值要求,就终止算法,不满足进入5.

5.迭代对每个元素执行2中的划分,质心不再变化,就终止算法,否则就继续更新质心,执行5.

下面是算法代码,测试类在mytest中

http://yunpan.cn/cySnTBESmU8En  提取码 5acf

K均值算法总结

标签:

原文地址:http://www.cnblogs.com/yuwenfeng/p/4210007.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!