这几天在一个项目上需要用到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.

下面是算法代码:

http://yunpan.cn/cyRsyLbzwqekE  提取码 edb0

最新文章

  1. An Introduction to Stored Procedures in MySQL 5
  2. My latest news (--2016.10)
  3. sqlserver 连接远程数据库小结
  4. kernel 模块与简单 hello 模块
  5. SELinux配置不当导致vsftpd系统用户不能登陆
  6. Django搭建及源码分析(三)---+uWSGI+nginx
  7. POJ 1322 Chocolate(母函数)
  8. JAVA正则表达式语法大全
  9. bootstrap-validator使用
  10. 1962-Fibonacci
  11. 【ASP.NET Web API教程】2.3.6 创建产品和订单控制器
  12. #define命令的一些高级用法
  13. sql server 自定义split 标值函数
  14. Win7+QTP10.0+IE9无法启动IE的解决方法
  15. 开涛spring3(6.4) - AOP 之 6.4 基于@AspectJ的AOP
  16. Oracle实战笔记(第七天)之PL/SQL进阶
  17. Java SE之正则表达式六:匹配规则
  18. 题解-poj3682King Arthur's Birthday Celebration
  19. AtCoder Beginner Contest 043 D - アンバランス / Unbalanced
  20. 大数据【六】ZooKeeper部署

热门文章

  1. 乌班图中的ssh服务
  2. Codeforces 920D Tanks
  3. Heritrix3.0.0启动介绍
  4. 此时不应有 \Microsoft (转)
  5. CentOS下Samba使用
  6. 初始化home目录
  7. Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法
  8. 一种极简的异步超时处理机制设计与实现(C#版)
  9. 根据CPU核数合理设置线程池大小
  10. Interactive Extensions简介