mahout之canopy算法简介

 K 均值聚类算法的最大的优点是:原理简单,实现起来也相对简单,同时执行效率和对于大数据量的可伸缩性还是较强的。然而缺点也是很明确的,首先它需要用户在执行聚类之前就有明确的聚类个数K的设置,这一点是用户在处理大部分问题时都不太可能事先知道的,一般需要通过多次试验找出一个最优的 K 值;其次就是,由于算法在最开始采用随机选择初始聚类中心的方法,所以算法对噪音和孤立点的容忍能力较差。所谓噪音就是待聚类对象中错误的数据,而孤立点是指与其他数据距离较远,相似性较低的数据。对于 K 均值算法,一旦孤立点和噪音在最开始被选作簇中心,对后面整个聚类过程将带来很大的问题,那么我们有什么方法可以先快速找出应该选择多少个簇,同时找到簇的中心,这样可以大大优化 K 均值聚类算法的效率,下面就介绍另一个聚类方法:Canopy 聚类算法。

Canopy聚类算法是一个将对象分组到类的简单、快速、精确地方法。每个对象用多维特征空间里的一个点来表示。这个算法使用一个快速近似距离度量和两个距离阈值 T1>T2来处理。基本的算法是,从一个点集合开始并且随机删除一个,创建一个包含这个店的Canopy,并在剩余的点集合上迭代。对于每个点,如果它的距离第一个点的距离小于T1,然后这个点就加入这个聚集中。除此之外,如果这个距离<T2,然后将这个点从这个集合中删除。这样非常靠近原点的点将避免所有的未来处理。这个算法循环到初始集合为空为止,聚集一个集合的Canopies,每个可以包含一个或者多个点。每个点可以包含在多于一个的Canopy中。


Canopy聚类经常被用作更加严格的聚类技术的初始步骤,像是K均值聚类。通过一个初始聚类,可以将更加耗费的距离度量的数量通过忽略初始canopies的点显著减少。

Canopy 聚类算法经常用于 K 均值聚类算法的预处理,用来找合适的 k 值和簇中心。

K 均值的最大问题是要求用户必须事先给出 k 的个数,k 的选择一般都基于一些经验值和多次实验结果,对于不同的数据集,k 的取值没有可借鉴性。另外,K 均值对“噪音”和孤立点数据是敏感的,少量这类的数据就能对平均值造成极大的影响。

虽然Canopy 聚类算法的引用有效的解决了初始选K的个数这一问题,可以看到在org.apache.mahout.clustering.syntheticcontrol.kmeans.job中是先调用了CanopyDriver.run方法来进行初始选K及中心点,然后再调KMeansDriver.run方法进行Kmeans聚类。

可是引进Canopy算法后,会带来新的问题,对于Canopy算法来说,阈值T1和T2的选择又是一大问题,网上也查不到相关资料,直是让人头痛...

参考资料:

1. http://blog.csdn.net/airinsoul/article/details/6659647
2. http://blog.sina.com.cn/s/blog_62a9902f0100mr27.html
3. https://cwiki.apache.org/MAHOUT/canopy-clustering.html
4.Mahout_in_Action

你可能感兴趣的:(优化,算法,action)