深入机器学习系列之:Bisecting KMeans

2018 年 12 月 11 日 数据猿

导读

k-means算法分为两步,第一步是初始化中心点,第二步是迭代更新中心点直至满足最大迭代数或者收敛。

来源: 星环科技丨作者:智子AI

数据猿官网 | www.datayuan.cn

今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区

二分k-means算法


二分k-means算法是分层聚类(Hierarchical clustering)的一种,分层聚类是聚类分析中常用的方法。 分层聚类的策略一般有两种:


  • 聚合。这是一种自底向上的方法,每一个观察者初始化本身为一类,然后两两结合

  • 分裂。这是一种自顶向下的方法,所有观察者初始化为一类,然后递归地分裂它们


二分k-means算法是分裂法的一种。


二分k-means的步骤


二分k-means算法是k-means算法的改进算法,相比k-means算法,它有如下优点:


  • 二分k-means算法可以加速k-means算法的执行速度,因为它的相似度计算少了

  • 能够克服k-means收敛于局部最小的缺点


二分k-means算法的一般流程如下所示:


  • (3)使用k-means算法将可分裂的簇分为两簇。

  • (4)一直重复(2)(3)步,直到满足迭代结束条件。


以上过程隐含着一个原则是:因为聚类的误差平方和能够衡量聚类性能,该值越小表示数据点越接近于它们的质心,聚类效果就越好。 所以我们就需要对误差平方和最大的簇进行再一次的划分,因为误差平方和越大,表示该簇聚类越不好,越有可能是多个簇被当成一个簇了,所以我们首先需要对这个簇进行划分。


二分k-means的源码分析


spark在文件org.apache.spark.mllib.clustering.BisectingKMeans中实现了二分k-means算法。在分步骤分析算法实现之前,我们先来了解BisectingKMeans类中参数代表的含义。

上面代码中,k表示叶子簇的期望数,默认情况下为4。如果没有可被切分的叶子簇,实际值会更小。maxIterations表示切分簇的k-means算法的最大代次数,默认为20。 minDivisibleClusterSize的值如果大于等于1,它表示一个可切分簇的最小点数量;如果值小于1,它表示可切分簇的点数量占总数的最小比例,该值默认为1。


BisectingKMeans的run方法实现了二分k-means算法,下面将一步步分析该方法的实现过程。


(1)初始化数据

(2)将所有数据初始化为一个簇,并计算代价

在上述代码中,第一行给每个向量加上一个索引,用以标明簇在最终生成的树上的深度,ROOT_INDEX的值为1。summarize方法计算误差平方和,我们来看看它的实现。

这里的d表示特征维度,代码对assignments使用aggregateByKey操作,根据key值在分区内循环添加(add)数据,在分区间合并(merge)数据集,转换成最终ClusterSummaryAggregator对象,然后针对每个key,调用summary方法,计算。 ClusterSummaryAggregator包含三个很简单的方法,分别是add,merge以及summary。

这里计算误差平方和与第一章的公式有所不同,但是效果一致。这里计算聚类代价函数的公式如下所示:

获取第一个簇之后,我们需要做的就是迭代分裂可分裂的簇,直到满足我们的要求。迭代停止的条件是activeClusters为空,或者numLeafClustersNeeded为0(即没有分裂的叶子簇),或者迭代深度大于LEVEL_LIMIT。

这里,LEVEL_LIMIT是一个较大的值,计算方法如下。

(3)获取需要分裂的簇

在每一次迭代中,我们首先要做的是获取满足条件的可以分裂的簇。

这里选择分裂的簇用到了两个条件,即数据点的数量大于规定的最小数量以及代价小于等于MLUtils.EPSILON * summary.size。并且如果可分解的簇的个数多余我们规定的个数numLeafClustersNeeded即(k-1), 那么我们取包含数量最多的numLeafClustersNeeded个簇用于分裂。


(4)使用k-means算法将可分裂的簇分解为两簇


我们知道,k-means算法分为两步,第一步是初始化中心点,第二步是迭代更新中心点直至满足最大迭代数或者收敛。下面就分两步来说明。


  • 第一步,随机的选择中心点,将可分裂簇分为两簇

在上面的代码中,用splitCenter方法将簇随机地分为了两簇,并返回相应的中心点,它的实现如下所示。

  • 第二步,迭代更新中心点

这段代码中,updateAssignments会根据更新的中心点将数据分配给距离其最短的中心点所在的簇,即重新分配簇。代码如下:

重新分配簇之后,利用summarize方法重新计算中心点以及代价值。


(5)处理变量值为下次迭代作准备


数据猿读者亲启:


名企&大佬专访精选

向下滑动启阅

以下文字均可点击阅读原文


跨国外企:

谷歌大中华及韩国区数据洞察与解决方案总经理郭志明IBM中国区开发中心总经理吉燕勇微软中国CTO官韦青前微软中国CTO黎江VMware中国区研发中心总经理任道远


中国名企:

联想集团副总裁田日辉首汽租车COO 魏东

阿里巴巴数据经济研究中心秘书长潘永花

搜狗大数据研究院院长李刚易观CTO郭炜

前上海证券交易所副总裁兼CTO白硕携程商旅亚太区CMO 邱斐艾瑞集团CTO郝欣诚泰康集团大数据部总经理周雄志上海链家研究院院长陈泽帅蓝色光标首席数据科学家王炼


知名学者:

北大新媒体研究院副院长刘德寰中科院基因研究所方向东

 

创业明星:

地平线机器人创始人兼CEO余凯天工科仪董事长王世金ZRobot CEO乔杨天眼查创始人兼CEO柳超第四范式联合创始人兼首席架构师胡时伟天云大数据CEO雷涛Kyligence联合创始人兼CEO韩卿数之联创始人兼CEO周涛明略数据董事长吴明辉91征信创始人兼CEO 薛本川智铀科技创始人、CEO及首席科学家夏粉丨易宝支付联合创始人兼总裁余晨海云数据创始人兼CEO冯一村星环科技COO佘晖碳云智能联合创始人兼首席科学家李英睿

 

知名投资人:

前IDG创始合伙人、火山石资本创始人章苏阳

华创资本合伙人熊伟铭六禾创投总裁王烨

信天创投合伙人蒋宇捷青域基金执行总裁牟颖

蓝驰创投合伙人朱天宇


——数据猿专访部


(可上下滑动启阅)







▲向上滑动


采访/报道/投稿

yaphet.zhang@datayuan.cn


商务合作

18600591561(微信)



长按右方二维码

关注我们ˉ►


登录查看更多
0

相关内容

K-MEANS算法是输入聚类个数k,以及包含 n个数据对象的数据库,输出满足方差最小标准k个聚类的一种算法。k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。
【新书册】贝叶斯神经网络,41页pdf
专知会员服务
174+阅读 · 2020年6月3日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
126+阅读 · 2020年3月15日
机器学习速查手册,135页pdf
专知会员服务
336+阅读 · 2020年3月15日
谷歌机器学习速成课程中文版pdf
专知会员服务
143+阅读 · 2019年12月4日
【机器学习课程】Google机器学习速成课程
专知会员服务
162+阅读 · 2019年12月2日
备战AI求职季 | 100道机器学习面试题(下)
七月在线实验室
9+阅读 · 2019年3月22日
sklearn 与分类算法
人工智能头条
7+阅读 · 2019年3月12日
深入机器学习系列之:高斯混合模型
数据猿
6+阅读 · 2019年1月10日
动手写机器学习算法:K-Means聚类算法
七月在线实验室
5+阅读 · 2017年12月6日
机器学习(28)【降维】之sklearn中PCA库讲解与实战
机器学习算法与Python学习
8+阅读 · 2017年11月27日
机器学习(27)【降维】之主成分分析(PCA)详解
机器学习算法与Python学习
9+阅读 · 2017年11月22日
机器学习(26)之K-Means实战与调优详解
机器学习算法与Python学习
4+阅读 · 2017年11月19日
文本分类实战: 机器学习vs深度学习算法对比(附代码)
机器学习研究会
35+阅读 · 2017年10月25日
机器学习(16)之支持向量机原理(二)软间隔最大化
机器学习算法与Python学习
6+阅读 · 2017年9月8日
Bivariate Beta LSTM
Arxiv
5+阅读 · 2019年10月7日
Neural Speech Synthesis with Transformer Network
Arxiv
5+阅读 · 2019年1月30日
Arxiv
4+阅读 · 2018年10月31日
Arxiv
3+阅读 · 2017年12月14日
VIP会员
相关资讯
备战AI求职季 | 100道机器学习面试题(下)
七月在线实验室
9+阅读 · 2019年3月22日
sklearn 与分类算法
人工智能头条
7+阅读 · 2019年3月12日
深入机器学习系列之:高斯混合模型
数据猿
6+阅读 · 2019年1月10日
动手写机器学习算法:K-Means聚类算法
七月在线实验室
5+阅读 · 2017年12月6日
机器学习(28)【降维】之sklearn中PCA库讲解与实战
机器学习算法与Python学习
8+阅读 · 2017年11月27日
机器学习(27)【降维】之主成分分析(PCA)详解
机器学习算法与Python学习
9+阅读 · 2017年11月22日
机器学习(26)之K-Means实战与调优详解
机器学习算法与Python学习
4+阅读 · 2017年11月19日
文本分类实战: 机器学习vs深度学习算法对比(附代码)
机器学习研究会
35+阅读 · 2017年10月25日
机器学习(16)之支持向量机原理(二)软间隔最大化
机器学习算法与Python学习
6+阅读 · 2017年9月8日
相关论文
Top
微信扫码咨询专知VIP会员