本文主要基于Anand Rajaraman和Jeffrey David Ullman合著,王斌翻译的《大数据-互联网大规模数据挖掘与分布式处理》一书。

KMeans算法是最常用的聚类算法,主要思想是:在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,所有点分配完毕之后,根据一个类簇内的所有点重新计算该类簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的步骤,直至类簇中心点的变化很小,或者达到指定的迭代次数。

KMeans算法本身思想比较简单,但是合理的确定K值和K个初始类簇中心点对于聚类效果的好坏有很大的影响。

1. 确定K个初始类簇中心点

最简单的确定初始类簇中心点的方法是随机选择K个点作为初始的类簇中心点,但是该方法在有些情况下的效果较差,如下(下图中的数据是用五个二元正态高斯分布生成的,颜色代表聚类效果):

《大数据》一书中提到K个初始类簇点的选取还有两种方法:1)选择彼此距离尽可能远的K个点 2)先对数据用层次聚类算法或者Canopy算法进行聚类,得到K个簇之后,从每个类簇中选择一个点,该点可以是该类簇的中心点,或者是距离类簇中心点最近的那个点。

1) 选择批次距离尽可能远的K个点

首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。

该方法经过我测试效果很好,用该方法确定初始类簇点之后运行KMeans得到的结果全部都能完美区分五个类簇:

2) 选用层次聚类或者Canopy算法进行初始聚类,然后利用这些类簇的中心点作为KMeans算法初始类簇中心点。

常用的层次聚类算法有BIRCH和ROCK,在此不作介绍,下面简单介绍一下Canopy算法,主要摘自Mahout的Wiki:

首先定义两个距离T1和T2,T1>T2.从初始的点的集合S中随机移除一个点P,然后对于还在S中的每个点I,计算该点I与点P的距离,如果距离小于T1,则将点I加入到点P所代表的Canopy中,如果距离小于T2,则将点I从集合S中移除,并将点I加入到点P所代表的Canopy中。迭代完一次之后,重新从集合S中随机选择一个点作为新的点P,然后重复执行以上步骤。

Canopy算法执行完毕后会得到很多Canopy,可以认为每个Canopy都是一个Cluster,与KMeans等硬划分算法不同,Canopy的聚类结果中每个点有可能属于多个Canopy。我们可以选择距离每个Canopy的中心点最近的那个数据点,或者直接选择每个Canopy的中心点作为KMeans的初始K个类簇中心点。

2. K值的确定。

《大数据》中提到:给定一个合适的类簇指标,比如平均半径或直径,只要我们假设的类簇的数目等于或者高于真实的类簇的数目时,该指标上升会很缓慢,而一旦试图得到少于真实数目的类簇时,该指标会急剧上升。

类簇的直径是指类簇内任意两点之间的最大距离。

类簇的半径是指类簇内所有点到类簇中心距离的最大值。

废话少说,上图。下图是当K的取值从2到9时,聚类效果和类簇指标的效果图:

左图是K取值从2到7时的聚类效果,右图是K取值从2到9时的类簇指标的变化曲线,此处我选择类簇指标是K个类簇的平均质心距离的加权平均值。从上图中可以明显看到,当K取值5时,类簇指标的下降趋势最快,所以K的正确取值应该是5.为以下是具体数据:

 1 2 个聚类
 2 所有类簇的半径的加权平均值 8.51916676443
 3 所有类簇的平均质心距离的加权平均值 4.82716260322
 4 3 个聚类
 5 所有类簇的半径的加权平均值 7.58444829472
 6 所有类簇的平均质心距离的加权平均值 3.37661824845
 7 4 个聚类
 8 所有类簇的半径的加权平均值 5.65489660064
 9 所有类簇的平均质心距离的加权平均值 2.22135360453
10 5 个聚类
11 所有类簇的半径的加权平均值 3.67478798553
12 所有类簇的平均质心距离的加权平均值 1.25657641195
13 6 个聚类
14 所有类簇的半径的加权平均值 3.44686996398
15 所有类簇的平均质心距离的加权平均值 1.20944264145
16 7 个聚类
17 所有类簇的半径的加权平均值 3.3036641135
18 所有类簇的平均质心距离的加权平均值 1.16653919186
19 8 个聚类
20 所有类簇的半径的加权平均值 3.30268530308
21 所有类簇的平均质心距离的加权平均值 1.11361639906
22 9 个聚类
23 所有类簇的半径的加权平均值 3.17924400582
24 所有类簇的平均质心距离的加权平均值 1.07431888569

参考文献:

[1] 《大数据-互联网大规模数据挖掘与分布式处理》 Anand Rajaraman,Jeffrey David Ullman著,王斌译。

[2]  Mahout Wiki-Canopy

机器学习-KMeans聚类 K值以及初始类簇中心点的选取相关推荐

  1. kmeans python自定义初始聚类中心_机器学习-KMeans聚类 K值以及初始类簇中心点的选取...

    本文主要基于Anand Rajaraman和Jeffrey David Ullman合著,王斌翻译的<大数据-互联网大规模数据挖掘与分布式处理>一书. KMeans算法是最常用的聚类算法, ...

  2. 机器学习-KMeans聚类 K值以及初始类簇中心点的选取

    本文主要基于Anand Rajaraman和Jeffrey David Ullman合著,王斌翻译的<大数据-互联网大规模数据挖掘与分布式处理>一书. KMeans算法是最常用的聚类算法, ...

  3. KMeans算法的K值以及初始类簇中心点的选取

    KMeans算法是最常用的聚类算法,主要思想是:在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,所有点分配完毕之后,根据一个类簇内的所有点重新计 ...

  4. KMeans聚类 K值的确定以及初始类簇中心点的选取

    KMeans算法是最常用的聚类算法,基本思想是:在给定K值和K个初始类簇中心点的情况下,把每个样本点分到离其最近的簇中,然后重新计算每个簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的 ...

  5. python 机器学习——Kmeans之K值的选取原理

    Kmeans之K值的选取 参考 一般而言,没有所谓最好的选择聚类数的方法,通常情况下是需要根据不同的问题,人工进行选择的.选择的时候思考我们运用 K-means 算法聚类的动机是什么,然后选择能最好服 ...

  6. K-means聚类K值的选择、Calinski-Harabasz准则

    K-means聚类K值的选择.Calinski-Harabasz准则 目录 K-means聚类K值的选择.Calinski-Harabasz准则 K-means聚类K值的选择 Calinski-Har ...

  7. Kmeans聚类K值选择Parametric Bootstrap方法,以及数据重抽样方法Bootstrapping

    常用的K值选择方法是通过寻找"拐点"确认,或者下游业务需求确定.下文介绍了另一种选择方法. 评论:原始该K值选择法只有在数据为"gaussian-like"时才 ...

  8. Kmeans聚类K值的确定

    通过手肘法确定Kmeans聚类的最优K值 SSE = [] # 存放每次结果的误差平方和 for k in range(5,50):estimator = KMeans(n_clusters=k,ma ...

  9. 讨论k值以及初始聚类中心对聚类结果的影响_K均值聚类需要标准化数据吗

    摘要:进入二十一世纪以来,科学技术的不断发展,使得数据挖掘技术得到了学者越来越多的关注.数据挖掘是指从数据库中发现隐含在大量数据中的新颖的.潜在的有用信息和规则的过程,是一种处理数据库数据的知识发现. ...

  10. R语言Kmeans聚类、抽取聚类簇:fpc包的kmeansruns函数通过Calinski-Harabasz准则和平均轮廓系数(ASW)为Kmeans选择最优的聚类K值、并与层次聚类的最优K值进行比较

    R语言Kmeans聚类.抽取Kmeans聚类找到的聚类簇:fpc包的kmeansruns函数通过Calinski-Harabasz准则和平均轮廓系数(Average average silhouett ...

最新文章

  1. rsync使用sudo权限
  2. 学python爬虫需要什么基础-学习python爬虫需要具备的基本功
  3. python安装包-几种Python包的安装方式
  4. Pytho-SyntaxError: Non-ASCII character '\xe7' in file解决方法
  5. nyoj985带通配符的数
  6. ipython和python怎么用_如何使用IPython重新加载和自动加载?
  7. 按钮传值给ajax,用jquery和ajax实现分页时,按钮怎么给jquery传值?
  8. android 在线设计工具,21个免费的UI界面设计工具、资源及网站
  9. Javascript中的事件对象和事件源
  10. 《大学章句》光剑续编
  11. 屏幕缩放和Origin缩放不一致如何解决?
  12. 视频教程-【深入理解计算机网络】入门计算机网络基础视频课程(下)-计算机网络
  13. 起得比鸡早,睡得比狗晚,干得比驴多,吃得比猪差
  14. oracle应付创建会计科目,求助: EBSR12应付发票取消后创建不成会计科目
  15. vue transition淡入淡出
  16. Linux Mint 21编译Android kernel,遇到 multiple definition of `yylloc‘ 的错误解决
  17. 网页突然乱码_网页中乱码怎么办?
  18. orbot android教程,Android Orbot malformed reply from SOCKS server
  19. 智能网联汽车 自动驾驶地图数据质量规范
  20. 如何检查内存泄露问题

热门文章

  1. IOS错误---“A valid provisioning profile for this executable was not found”
  2. 在三层交换上配置ciscoVTP实验
  3. android rfid 数据解析_基于RFID技术的标签数据完整性与安全性解析
  4. root用户被删除怎么进phpmyadmin
  5. 【html5和css3】animation属性整理
  6. Linux执行U盘里内程序,Linux 最小系统挂载U盘(SD、TF卡)并执行程序
  7. 文件异步加载读取 php,js文件的异步加载的方法总结(附代码)
  8. euraka有哪些组件_SpringCloud及其五大常用组件之Eureka和Zuul
  9. 缩放浏览器不会换行_深入解析 EventLoop 和浏览器渲染、帧动画、空闲回调的关系...
  10. 伪类如何动态在html设置样式,VUE项目中对伪类动态设置样式