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