热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Canopy算法聚类

Canopy一般用在Kmeans之前的粗聚类。考虑到Kmeans在使用上必须要确定K的大小,而往往数据集预先不能确定K的值大小的,这样如果K取的不合理会带来K均值的误差很大(也

  >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 ) 的确定问题
(在并行计算上Maper的T1、T2 可以和Raduce的T1、T2不同

  

二、canopy聚类过程

bubuko.com,布布扣src="https://img8.php1.cn/3cdc5/18d35/711/e7b1e147a811f914.jpeg">

 


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类中有些成员是重叠的。

bubuko.com,布布扣src="https://img8.php1.cn/3cdc5/18d35/711/49ca8f4b5cc61e2f.jpeg">

三、公式推导

>        Canopy的关键是以下公式:


>        S0
表示Canopy包含点的权重之和   bubuko.com,布布扣


>        S1
表示各点的加权和      bubuko.com,布布扣 src="http://chart.apis.google.com/chart?cht=tx&chl=s_1%3d%5csum%5climit_%7bi%3d0%7d%5e%7bn%7d%7bx_iw_i%7d+">


   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,

    bubuko.com,布布扣 src="http://chart.apis.google.com/chart?cht=tx&chl=std%3d%5csqrt%7b%5cfrac%7b%5csum%5climit_%7bi%3d0%7d%5e%7bn%7d%7b%28x_i-%5cmu%29%5e2%7d+%7d%7bn%7d%7d">,其中bubuko.com,布布扣 alt="\mu=\frac{1 }{n}\sum\limit_{i=0}^{n}{x_i}" src="http://chart.apis.google.com/chart?cht=tx&chl=%5cmu%3d%5cfrac%7b1+%7d%7bn%7d%5csum%5climit_%7bi%3d0%7d%5e%7bn%7d%7bx_i%7d">

>               bubuko.com,布布扣 alt="=\sqrt{\frac{\sum\limit_{i=0}^{n}({x_i^2}-2\mu x_i+\mu^2) }{n}} " src="http://chart.apis.google.com/chart?cht=tx&chl=%3d%5csqrt%7b%5cfrac%7b%5csum%5climit_%7bi%3d0%7d%5e%7bn%7d%28%7bx_i%5e2%7d-2%5cmu+x_i%2b%5cmu%5e2%29+%7d%7bn%7d%7d%0a%0a">

>               bubuko.com,布布扣 alt="=\sqrt{\frac{\sum\limit_{i=0}^{n}{x_i^2} -2\mu \sum\limit_{i=0}^{n}{x_i} +n\mu^2 }{n}}=\sqrt{\frac{\sum\limit_{i=0}^{n}{x_i^2} -2n\mu^2 +n\mu^2 }{n}}"
src="http://chart.apis.google.com/chart?cht=tx&chl=%3d%5csqrt%7b%5cfrac%7b%5csum%5climit_%7bi%3d0%7d%5e%7bn%7d%7bx_i%5e2%7d+-2%5cmu+%5csum%5climit_%7bi%3d0%7d%5e%7bn%7d%7bx_i%7d+%2bn%5cmu%5e2++%7d%7bn%7d%7d%3d%5csqrt%7b%5cfrac%7b%5csum%5climit_%7bi%3d0%7d%5e%7bn%7d%7bx_i%5e2%7d+-2n%5cmu%5e2+%2bn%5cmu%5e2++%7d%7bn%7d%7d">

>               bubuko.com,布布扣 alt="=\sqrt{\frac{\sum\limit_{i=0}^{n}{x_i^2} }{n}-\mu^2 } " src="http://chart.apis.google.com/chart?cht=tx&chl=%3d%5csqrt%7b%5cfrac%7b%5csum%5climit_%7bi%3d0%7d%5e%7bn%7d%7bx_i%5e2%7d++%7d%7bn%7d-%5cmu%5e2+%7d%0a">,其中bubuko.com,布布扣 alt="s1=s0 \quad \mu" src="http://chart.apis.google.com/chart?cht=tx&chl=s1%3ds0+%5cquad+%5cmu">

>               bubuko.com,布布扣 alt="=\frac{\sqrt{s2\quad s0 -s1\quad s1}}{s0} " src="http://chart.apis.google.com/chart?cht=tx&chl=%3d%5cfrac%7b%5csqrt%7bs2%5cquad+s0+-s1%5cquad+s1%7d%7d%7bs0%7d+%0a">

 

 

四、参数调整

 


>当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/

 

Mahout学习——Canopy
Clustering

mahout下的Canopy
Clustering实现

聚类—
Canopy算法

http://www.shahuwang.com/2012/08/14/canopy%E8%81%9A%E7%B1%BB%E7%AE%97%E6%B3%95.html

Canopy算法聚类,布布扣,bubuko.com


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
author-avatar
九九九丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有