聚类 - 6 - Canopy聚类
2016-07-20 14:42
281 查看
本总结是是个人为防止遗忘而作,不得转载和商用。
2,x1, x2, ...,xm形成列表L;构造 xj(1≤j≤m) 的空列表Cj;
3,随机选择L中的样本c,要求c的列表 为空:
4,计算L中样本 xj 与c的距离dj
若 dj < r1,则在L中删除 Xj,将 Cj赋值为{c},即认为Xj的聚类中心就是c了。
若 r1 < dj< r2 ,则将 Cj 增加{c},即c是xj的聚类中心的候选。
5,重复第三步和第四步,若L中没有不满足条件的样本c,算法结束。
![](http://img.blog.csdn.net/20160720144201223)
凡是位于r1圆内的样本点,都被C给吸住了,不能属于其他簇。而位于r2环形带中的样本可以属于簇c,但也可以属于其他簇。
![](http://img.blog.csdn.net/20160720144205682)
于是可以看到,有的样本属于多个簇。
Canopy算法
虽然Canopy算法可以划归为聚类算法,但更多的可以使用Canopy算法做空间索引,其时空复杂度都很出色。算法描述
1,对于给定样本x1,x2, ..., xm,给定先验值 r1, r2,,(r1<r2)2,x1, x2, ...,xm形成列表L;构造 xj(1≤j≤m) 的空列表Cj;
3,随机选择L中的样本c,要求c的列表 为空:
4,计算L中样本 xj 与c的距离dj
若 dj < r1,则在L中删除 Xj,将 Cj赋值为{c},即认为Xj的聚类中心就是c了。
若 r1 < dj< r2 ,则将 Cj 增加{c},即c是xj的聚类中心的候选。
5,重复第三步和第四步,若L中没有不满足条件的样本c,算法结束。
算法解释
Canopy实际上就是以样本C为中心,分别以r1和r2为半径画了两个圆,如下图:凡是位于r1圆内的样本点,都被C给吸住了,不能属于其他簇。而位于r2环形带中的样本可以属于簇c,但也可以属于其他簇。
代码(源自邹博老师)
于是可以看到,有的样本属于多个簇。
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法