[聚类算法] K-means 算法
2016-06-30 18:00
232 查看
聚类 和 k-means简单概括。
聚类是一种 无监督学习 问题,它的目标就是基于 相似度 将相似的子集聚合在一起。k-means算法是聚类分析中使用最广泛的算法之一。它把
n个对象根据它们的属性分为
k个聚类,以便使得所获得的聚类满足:
同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。
k - means的算法原理:
(文/qinm08(简书作者) 原文链接:http://www.jianshu.com/p/32e895a940a2)使用K-Means算法进行聚类,过程非常直观:
(a) 给定集合D,有n个样本点
(b) 随机指定两个点,作为两个子集的质心
(c) 根据样本点与两个质心的距离远近,将每个样本点划归最近质心所在的子集
(d) 对两个子集重新计算质心
(e) 根据新的质心,重复操作(c)
(f) 重复操作(d)和(e),直至结果足够收敛或者不再变化
Python demo:
from sklearn.cluster import KMeans model=KMeans(n_clusters=4,random_state=0) X=[ [50.0,50.0,9.0] ,[28.0, 9.0,4.0] ,[17.0,15.0,3.0] ,[25.0,40.0,5.0] ,[28.0,40.0,2.0] ,[50.0,50.0,1.0] ,[50.0,40.0,9.0] ,[50.0,40.0,9.0] ,[40.0,40.0,5.0] ,[50.0,50.0,9.0] ,[50.0,50.0,5.0] ,[50.0,50.0,9.0] ,[40.0,40.0,9.0] ,[40.0,32.0,17.0] ,[50.0,50.0,9.0] ] model.fit(X) for a in X: print(model.predict(a),a)
结果:
(array([1]), [50.0, 50.0, 9.0]) (array([2]), [28.0, 9.0, 4.0]) (array([2]), [17.0, 15.0, 3.0]) (array([3]), [25.0, 40.0, 5.0]) (array([3]), [28.0, 40.0, 2.0]) (array([1]), [50.0, 50.0, 1.0]) (array([0]), [50.0, 40.0, 9.0]) (array([0]), [50.0, 40.0, 9.0]) (array([0]), [40.0, 40.0, 5.0]) (array([1]), [50.0, 50.0, 9.0]) (array([1]), [50.0, 50.0, 5.0]) (array([1]), [50.0, 50.0, 9.0]) (array([0]), [40.0, 40.0, 9.0]) (array([0]), [40.0, 32.0, 17.0]) (array([1]), [50.0, 50.0, 9.0])
两个缺点:
1)初始聚类中心的个数需要事先给定,一般非常困难
2)初始聚类中心的选取很随机,可能导致非常不同的聚类效果
K-means++算法:
改进了2)初始聚类中心的选取(a)从数据集中随机选择一个点,作为第一个中心C1
(b)计算所有点到离它最近的中心的距离D(x),然后在此中心根据概率原则选择距离“比较大”的点作为下一个中心点。
SUM(D(x))*random(0,1)>SUM(D(xi) && SUM(D(x))*random(0,1)<SUM(D(xi-1)
(c)重复操作(b)直到找到k个中心点
缺点:
k个中心点,互相依赖,即内在的有序性。
相关文章推荐
- BlackHat会议上将公布一款免费的汽车黑客工具
- Oracle java.sql.SQLException: 数字溢出
- KindEditor编辑器中的class自动过滤了
- 9-21网页尺寸offsetHeight
- QT对话框实现
- Example 5 : Texturing
- usb摄像头视频数据抓取初探
- 去掉导航栏返回按钮的文字
- spring-AOP基本概念
- java8 lambda排序
- spring-初始化完成后运行指定内容
- mysql 在启动时配置文件的查找方式
- 深入理解Activity的生命周期
- git push遇到的Permission denied (publickey).
- 利用 LeakCanary 来检查 Android 内存泄漏
- Eclipse中10个最有用的快捷键组合
- 9-20网页尺寸scrollHeight
- Solr --- Group查询
- nginx开启ssl
- android 使用Canvas画箭头