参考:http://chiffon.gitcafe.io/2014/12/28/cluster-analysis.html
CANOPY是另外一个不需要指定K的聚类算法,它的速度很快,不过由于它分类比较粗,因此一般用于在K-Means之前用于确定K的值提供参考。
CANOPY算法分为两大步:
生成canopy
- 设定T1(松阈值)>T2(紧阈值)
- 将需要聚类的数据转化为一个list的形式
- 将list中的第一个点从list中删去,转化为一个新的’canopy’的中心.
- 对于每个list中的点,将距离在T1以内的点当作这个’canopy’内的点.
- 对于每个list中的点,将距离在T2以内的点从list中删去.
- 重复步骤3、4、5
canopy内聚类
有了上面的canopy,可以在各自的canopy内进行聚类计算。聚类算法可以是常用的kmeans,也可以是其他算法。因此,可以讲CANOPY看做是一种算法框架。
问题
上面有一个问题,T1和T2需要用户手动设置,不同的设置可能有不同的聚类结果
对于canopy,若第一步将阈值设置非常大,那么最后只能生成一个canopy,然后在这个canopy内进行聚类。只有T1和T2有意义才能生成超过1个canopy,从而在第二步计算距离时只需要计算同一canopy的距离,从而减少计算量。