Canopy算法

转自: 聚类-Canopy算法,保存在此以学习。
Canopy一般用在K均值之前的粗聚类。考虑到K均值在使用上必须要确定K的大小,而往往数据集预先不能确定K的值大小的,这样如果K取的不合理会带来K均值的误差很大(也就是说K均值对噪声的抗干扰能力较差)。总之基于以下三种原因,选择利用Canopy聚类做为Kmeans的前奏比较科学、也是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的关键是以下公式:
  (???原文没有)
        S0  表示Canopy包含点的权重之和   
        S1 表示 各点的加权和     
         S2 表示各点平方的加权和   
        聚类分析的抽象是计算: NumPoint、Radius、Center、(其中 Radius、Center 均是N维向量)
   计算公式推导如下:
  (???原文没有)
        NumPoint  =  S0
         Center       =  S1/S0    
         Radius      =   Sqrt(S2*S0-S1*S1)/S0 推导过程如下:
        (???原文没有)
       单机版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均值是什么意思呢?)
 
   个人理解而已。望读者不吝赐教。
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Canopy算法是一种用于优化K-means算法的聚类方法。它通过先进行一次"粗聚类",确定K-means算法中的k值,来解决K-means算法对于k值敏感的问题。具体来说,Canopy算法通过比较样本点和两个阈值t1和t2的距离来划分聚类中心。首先,选择一个样本点作为第一个聚类中心,然后计算所有样本点与该中心的距离。如果距离小于t1,则将该样本点归为该聚类中心的一部分;如果距离小于t2但大于t1,则将该样本点作为一个新的聚类中心。重复这个过程,直到所有样本点都被归类。这样,通过Canopy算法确定的聚类中心的数量就是K-means算法中的k值。然后,将这个确定的k值代入K-means算法中进行进一步的聚类。这样就可以有效地优化K-means算法并解决k值敏感的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [机器学习算法:知道canopy、K-means++、二分K-means、K-medoids的优化原理](https://blog.csdn.net/itcast_cn/article/details/126061877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [canopy+kmeans聚类模式](https://blog.csdn.net/zkkkkkkkkkkkkk/article/details/125674121)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值