Cluster: ROCK & CLOPE

来源:互联网 发布:照片美图软件 编辑:程序博客网 时间:2024/06/06 02:08

在实际问题中我们经常会碰都一些类别类型的数据,比如电子商务中交易型数据,在这些数据上进行聚类我们无法采用基于距离的空间几何做法,有人便说可以采用相似度来做,比如jaccard系数、互信息等,确实可以如此,这里针对类别型数据讨论两种聚类算法。

1.ROCK
robust clustering using links,不仅针对norminal属性,还有从全局考虑每个cluster的邻域,即相似的点必然有相似的邻域,这里的邻域是指相似度达到预设的阈值

Neighbor:sim(c1,c2)θ
两个cluster的之间的相似度也就是两个cluster共同的邻域大小,通过goodness靠衡量两个cluster的相关关系
这里写图片描述

这里便是link便是聚类i和j的共同邻域大小(点数),分母在这里主要是normalize的作用,避免出现聚类偏执(cluster越到越有机会合并新的cluster进来)。
ROCK在聚类时候不仅考虑两个cluster之间的相似度,而且考虑两个cluster的共同邻域,从而增加了聚类的可靠性。这里有一个简单的经典例子可以体会到这样的好处,购物篮C1和C2中的商品,这时候判断(a,b,c)放在C1中还是C2中合适?

C1: {(a,b,d),(a,b,e),(a,c,d),(a,c,e),(a,d,e),(b,c,e),(b,d,e),(c,d,e)}
Sim((a,b,c),x)ε[0.2,0.5]
C2: {(a,b,f),(a,b,g),(a,f,g),(b,f,g)}
Sim((a,b,c),x)ε[0.2,0.5]

Link: θ=0.5, Link((a,b,c),C1)=5, Link((a,b,c),C2)=3 ,so (a,b,c) belong C1

我们可以看到,(a,b,c)到C1和C2的相似度一样,但是(a,b,c)明显在C1的邻居(neighbor point)更多,所以ROCK很好的结局了这个问题。
ROCK的实现稍微有点复杂,首先得确认哪些点之间是临近关系(neighbor),创建一个稀疏图

这里写图片描述

算法过程如下

这里写图片描述

接下来便是针对每个cluster(初始时候就是个point)建立一个goodness最大堆(堆顶元素便是该cluster到其他任意的cluster最大的那个),这个也称为局部堆,基于所有局部堆的堆顶元素的goodness做一个全局的最大堆即全局堆,每次合并时候取这个这个全局堆的堆顶,然后更新所有堆信息,这里其实类似AGNES过程,算法信息如下

这里写图片描述

我们可以看到ROCK在处理大数据集上效率确实不高。

2.CLOPE
刚开始看到CLOPE算法感觉很惊艳,不用相似度直接用直方图的高宽比进行聚类。
这里给一个简单经典的小例子,对这个小数据集进行聚类划分:
(1) {{ab,abc,acd},{de,def}} (2) {{ab,abc},{acd,de,def}}
对两种划分做直方图分析,采用降序排列

这里写图片描述

我们可以发现,如果高度H越高宽度W越窄的说明重叠越多,即相似度越高,那么形式化得到
这里写图片描述
那么如何衡量最后划分的最优性呢?
这里写图片描述
r在这里是指排斥因子,一个用户可以调节的参数,因为最后我们是要求Profit最大的那个划分,所以r大小说明可以压制每个cluster的多样性的程度,即r越小有利分组稀疏数据,r越大越有利分组稠密数据。
通过对数据不断的扫描划分,每一步考虑该point添加到旧的cluster还是创建新的cluster,通过多次扫描如果数据的划分基本不变则停止。

这里写图片描述

可以看到CLOPE在效率方面还是比较快,而且CLOPE在高维方面找到密集子空间还是很合适的,对数据输入顺序不敏感。

0 0