mahout中的聚类算法(Canopy的主场)

聚类算法的定义:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。(From:百度百科)现实生活中有很多聚类的例子,比如对疾病的分类,或者所谓的物以类聚,人以群分都是聚类的直接体现。


聚类算法在mahout中分为很多种,例如canopy,kmeans,层次聚类等。传统的聚类算法对于小数据量的应用问题基本上可以解决,但当数据记录变大和维数变高后,就会显得力不从心。项目期间,曾利用mahout中的聚类算法对健康大数据进行挖掘,用于发现疾病的种类。mahout中是一个机器学习的算法库,算法采用了mapreduce编程模型,因此特别适用于在hadoop云计算平台上对大数据进行处理。但是使用mahout比较郁闷的一点是必须严格按照所要求的IPO格式,因此当某些地方不适用或者具体功能需要修改时,需要对mahout中的算法进行二次开发。

简单列一下当时所用到的软硬件环境:

Java,Hadoop,HDFS,Mapreduce,Mahout,CentOs,Oracle,Sqlite其中mahout和hadoop的具体的版本号有点忘记,貌似是2.6.0和和0.9


mahout的0.9和之前的0.7版本有点地方发生更改,包括最后生成的文件格式有所区别,当时还是走一点的弯路的【捂脸哭】


这篇就先说下mahout中的canopy的个性吧(翻开之前的笔记,实验室的日常历历在目 快哭了

mahout  Canopy算法

Canopy算法的基本思想是将聚类分为两个阶段,

阶段一是选择简单、计算代价较低的方法计算两个对象之间的相似性,然后将相似的对象放在同一个canopy中,通过一系列的计算后将得到若干个Canopy,并且Canopy之间是存在重叠现象的,如图1-1,但是不会存在某个对象孤立不属于任何Canopy的现象

                                                                                                 

图1-1 Canopy聚类图

Canopy算法的阶段一过程如下:

step1:原始数据集合List放入内存后,初始化两个距离阈值T1,T,2,并且T1>T2。这个距离值的设置可以根据经验值,用户的需要或者交叉验证获取。

step2:在List集合中任选一点A,使用一个粗糙的、低成本的距离计算公式获得List中其他点与A点的距离值d

step3:根据第2步中的距离值d,把小于T1的样本点加入该Canopy中,同时把小于T2的样本点从list集合中删除,因为距离很近,因此它不可以再做其它Canopy的中心了

step4:重复2,3步,直至List集合为空结束。


阶段二:

该阶段是为了处理Canopy的重叠部分,通过使用一个精准、严格的距离计算方法来计算出现在同一个Canopy中的样本点,例如K-means算法


小结:

Canopy最大的特点在于不必事先知道K值,并且使用了两种距离计算方式,同时因为只计算了重叠部分的样本点,因此减少了很多的计算量。

和其他的聚类算法相比,它的精度较低,但速度较快,可以用于聚类前的准备,例如对于需要指定K值的K均值算法来说,它可以用于算法执行前的粗聚类,得到K值,然后再使用其他的聚类算法提高结果的精度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值