Canopy算法聚类
Canopy一般用在Kmeans之前的粗聚类。考虑到Kmeans在使用上必须要确定K的大小,而往往数据集预先不能确定K的值大小的,这样如果 K取的不合理会带来K均值的误差很大(也就是说K均值对噪声的抗干扰能力较差)。总之基于以下三种原因,选择利用Canopy聚类做为Kmeans的前奏 比较科学、也是Canopy的优点。
一、canopy算法的优缺点
Canopy的优点:
1、Kmeans对噪声抗干扰较弱,通过Canopy对比较小的NumPoint的Cluster直接去掉 有利于抗干扰。
2、Canopy选择出来的每个Canopy的centerPoint作为Kmeans比较科学。
3、只是针对每个Canopy的内容做Kmeans聚类,减少相似计算的数量。
Canopy的缺点:算法中 T1、T2(T2 < T1) 的确定问题 (在并行计算上Maper的T1、T2 可以和Raduce的T1、T2不同)
二、canopy聚类过程
while D is not empty
select element d from D to initialize canopy c
remove d from D
Loop through remaining elements in D
if distance between d_i and c < T1 : add element to the canopy c
if distance between d_i and c < T2 : remove element from D
end
add canopy c to the list of canopies C
end
当距离小于T1大于T2时,这些点会被归入到该中心所在的canopy中,但是它们并不会从D中被移除,也就是说,它们将会参与到下一轮的聚类过程中,成为新的canopy类的中心或者成员。亦即,两个Canopy类中有些成员是重叠的。
三、公式推导
Canopy的关键是以下公式:
S0 表示Canopy包含点的权重之和
S1 表示各点的加权和
S2 表示各点平方的加权和
聚类分析的抽象是计算: NumPoint、Radius、Center、(其中 Radius、Center 均是N维向量)
计算公式推导如下:
NumPoint = S0
Center = S1/S0
Radius = Sqrt(S2*S0-S1*S1)/S0
推导过程如下:
public void computeParameters();
#根据s0、s1、s2计算numPoints、center和Radius,
其中numPoints=(int)s0,
center=s1/s0,
Radius=sqrt(s2*s0-s1*s1)/s0
简单点来,假设所有点权重都是1,
,其中
,其中
四、参数调整
当T1过大时,会使许多点属于多个Canopy,可能会造成各个簇的中心点间距离较近,各簇间区别不明显;
当T2过大时,增加强标记数据点的数量,会减少簇个个数;T2过小,会增加簇的个数,同时增加计算时间
另外:mahout提供了几种常见距离计算的实现 ,均实现org.apache.mahout.common.distance.DistanceMeasure接口
CosineDistanceMeasure:计算两向量间的夹角
SquaredEuclideanDistanceMeasure:计算欧式距离的平方
EuclideanDistanceMeasure:计算欧式距离
ManhattanDistanceMeasure:马氏距离,貌似图像处理中用得比较多
TanimotoDistanceMeasure:Jaccard相似度,T(a, b) = a.b / (|a|^2 + |b|^2 - a.b)
以及带权重的欧式距离和马氏距离。
需要注意:
1. 首先是轻量距离量度的选择,是选择数据模型其中的一个属性,还是其它外部属性这对canopy的分布最为重要。
2. T1, T2的取值影响到canopy重叠率f,以及canopy的粒度。
3. Canopy有消除孤立点的作用,而K-means在这方面却无能为力。建立canopies之后,可以删除那些包含数据点数目较少的canopy,往往这些canopy是包含孤立点的。
4. 根据canopy内点的数目,来决定聚类中心数目k,这样效果比较好
五、算法实现
单机版Canopy算法:
1、从PointList中取一个Point ,寻找已经建立好的Canopy 计算这个点于所有的Canopy的距离。如果和某一个Canopy的距离小于T1, 则把这个点加到Canopy中,如果没有Canopy则选择这个点为一个Canopy的中心。
2、如果这个店Point和某个Canopy的距离小于T2,则把这个点从PointList中删除(这个点以后做不了其他的Canopy的中心了)。
3、循环直到所有的Point都被加入进来,然后计算各个Canopy的Center和Radius。
模型MapReduce版本:
1、把数据整理成SequcnceFile格式(Mahout-InputMapper)作为初始化文件PointFile
2、CanopyMapper阶段本机聚成小的Canopy 中间文件写成SequenceFile 这一步的T1、T2 和Reduce的T1、T2可以是不同的( index、Canpy)
3、所有的Mapper阶段的输出到1个Reducer中 然后Reduce把Map阶段中的Center点再次做聚类算法。聚出全局的Canopy。同时计算每个Canopy的CenterPoint点。写到临时文件CenterPoint中。
4、针对全集合PointFile在CenterPoint上的findClosestCanopy操作(通过传入的距离算法)。然后输出一个SequenceFile。
六、问题总结
有2个问题不知道如何答案:
1、T1、T2 的选择(我需要采样计算出吗?)
2、如何和Kmeans结合?(只在Canopy内做K均值是什么意思呢?)
Reference:
http://trailblizer.blog.163.com/blog/static/59630364201141973937341/
http://www.shahuwang.com/2012/08/14/canopy%E8%81%9A%E7%B1%BB%E7%AE%97%E6%B3%95.html
Canopy算法聚类的更多相关文章
- Canopy算法计算聚类的簇数
Kmeans算是是聚类中的经典算法.步骤例如以下: 选择K个点作为初始质心 repeat 将每一个点指派到近期的质心,形成K个簇 又一次计算每一个簇的质心 until 簇不发生变化或达到最大迭代次数 ...
- mahout中kmeans算法和Canopy算法实现原理
本文讲一下mahout中kmeans算法和Canopy算法实现原理. 一. Kmeans是一个很经典的聚类算法,我想大家都非常熟悉.虽然算法较为简单,在实际应用中却可以有不错的效果:其算法原理也决定了 ...
- Mahout 系列之--canopy 算法
Canopy 算法,流程简单,容易实现,一下是算法 (1)设样本集合为S,确定两个阈值t1和t2,且t1>t2. (2)任取一个样本点p属于S,作为一个Canopy,记为C,从S中移除p. (3 ...
- mahout之canopy算法简单理解
canopy是聚类算法的一种实现 它是一种快速,简单,但是不太准确的聚类算法 canopy通过两个人为确定的阈值t1,t2来对数据进行计算,可以达到将一堆混乱的数据分类成有一定规则的n个数据堆 由于c ...
- 数据挖掘算法之聚类分析(二)canopy算法
canopy是聚类算法的一种实现 它是一种快速,简单,但是不太准确的聚类算法 canopy通过两个人为确定的阈值t1,t2来对数据进行计算,可以达到将一堆混乱的数据分类成有一定规则的n个数据堆 由于c ...
- K-Modes算法[聚类算法]
聚类算法k-Modes的实现 <?php /* *Kmodes算法(聚类算法的实现) */ /* *获取簇的数目 */ //----------------------------------- ...
- K-means算法[聚类算法]
聚类算法k-Means的实现 <?php /* *Kmeans法(聚类算法的实现) */ /* *求误差平方和J */ //----------------------------------- ...
- K-means算法-聚类
算法过程如下: 1)从N个文档随机选取K个文档作为质心 2)对剩余的每个文档测量其到每个质心的距离,并把它归到最近的质心的类 3)重新计算已经得到的个各类的质心 4)迭代2~3步直至新的质心与原质心相 ...
- 机器学习 - 算法 - 聚类算法 K-MEANS / DBSCAN算法
聚类算法 概述 无监督问题 手中无标签 聚类 将相似的东西分到一组 难点 如何 评估, 如何 调参 基本概念 要得到的簇的个数 - 需要指定 K 值 质心 - 均值, 即向量各维度取平均 距离的度量 ...
随机推荐
- 为Ubuntu Server安装gnome图形桌面环境
Ubuntu Server版默认都没有图形桌面(GUI),但是可以安装,以下共有两种安装方法. 一.安装全部Gnome桌面环境 Ubuntu系列桌面实际上有几种桌面应用程序,包括Ubuntu-desk ...
- S5PV210裸板驱动:启动
以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法 ...
- 批处理之命令补充II
网络命令 net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" / ...
- StringUtil
package per.son.utils; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.js ...
- spring容器IOC创建对象<三>
问题?Spring的DI讲解.DI有几种注入方式.一.spring的DI:依赖注入给属性赋值DI定义:一个对象类的属性可以使用springDI(依赖注入)来进行赋值,但是并不是所有的类属性都适合spr ...
- UIView 的粗浅解析
The UIView class defines a rectangular area on the screen and the interfaces for managing the conten ...
- Java中类名与文件名的关系
1.Java保存的文件名必须与类名一致: 2.如果文件中只有一个类,文件名必须与类名一致: 3.一个Java文件中只能有一个public类: 4.如果文件中不止一个类,文件名必须与public类名一致 ...
- HTML5新特性总结
一.HTML5 中的一些有趣的新特性: 用于绘画的 canvas 元素 用于媒介回放的 video 和 audio 元素 对本地离线存储的更好的支持 新的特殊内容元素,比如 article.foote ...
- MVC强类型和弱类型的区别
1 强类型的处理 首先必须要有一个对象的实体类,UserINfo就是一个实体类,如下: public class UserInfo() { public int Id{set;get;} publi ...
- iOS UIWebView清除缓存
UIWebView清除Cookie: //清除cookies NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieSto ...