CLOPE:针对交易的数据快速有效聚类算法摘要本文研究分类数据的聚类问题,特别针对多维和大型的交易数据。
从增加聚簇直方图的高宽比的方法得到启发,我们开发了一种新的算法---CLOPE,这是一种非常快速、可伸缩,同时又非常有效的算法。
我们展示了算法对两个现实数据集聚类的性能,并将CLOPE与现有的聚类算法进行了比较。
关键词数据挖掘,聚类,分类数据,可伸缩性1.简介聚类是一种非常重要的数据挖掘技术,它的目的是将相似的交易[12, 14, 4, 1]分组在一起。
最近,越来越多的注意力已经放到了分类数据[10,8,6,5,7,13]的聚类上,分类数据是由非数值项构成的数据。
交易数据,例如购物篮数据和网络日志数据,可以被认为是一种特殊的拥有布尔型值的分类数据,它们将所有可能的项作为项。
快速而精确地对交易数据进行聚类的技术在零售行业,电子商务智能化等方面有着很大的应用潜力。
但是,快速而有效聚类交易数据是非常困难的,因为这类的数据通常有着高维,稀疏和大容量的特征。
基于距离的算法例如k-means[11]和CLARANS[12]都是对低维的数值型数据有效。
但是对于高维分类数据的处理效果却通常不那么令人满意[7]。
像ROCK这类的分层聚类算法在分类数据聚类中表现的非常有效,但是他们在处理大型数据库时表现出先天的无效。
LargeItem[13]算法通过迭代优化一个全局评估函数对分类数据进行聚类。
这个评估函数是基于大项概念的,大项是在一个聚簇内出现概率比一个用户自定义的参数——最小支持度大的项。
计算全局评估函数要远比计算局部评估函数快得多,局部评估函数是根据成对相似性定义的。
这种全局方法使得LargeItem算法非常适合于聚类大型的分类数据库。
在这篇文章中,我们提出了一种新的全局评估函数,它试图通过增加聚簇直方图的高度与宽度之比来增加交易项在聚簇内的重叠性。
此外,我们通过引用一个参数来控制聚簇紧密性的方法来泛化我们的想法,通过修改这个参数可以得到不同的聚簇划分个数。
实验表明,我们的算法运行速度比Largeltem快得多,聚类的质量与ROCK算法[7]相当接近。
为了解释算法的一些基本思想,我们采用一个非常小的交易数据库,其中包含5条交易数据{(苹果,香蕉),(苹果,香蕉,蛋糕),(苹果,蛋糕,盘子),(盘子,鸡蛋),(盘子,鸡蛋,鱼)}。
为简单起见,交易(苹果,香蕉)被简称为ab,以此类推。
对于这个小型数据库,比较下面两个聚类划分(1){{ab,abc,acd},{de,def}};(2){{ab,abc},{acd,de,def}}。
对于每一个聚簇,我们计算每一个不同项的出现次数,然后得到聚簇的高度(H)和宽度(W)。
例如,聚簇{ab,abc,acd}中a:3,b:2,c:2,d:1,H=2.0,W=4,图1将这些结果显示为几何上的直方图,按项出现频率降序排列,这样做只是为了更容易直观展示。
图1 两个聚簇的直方图我们通过分析聚簇的高度和宽度,从几何学上来评判这两个聚类的质量。
不算{de,def}和{ab,abc}这两个拥有相同直方图的聚簇,另两个直方图的质量不同。
聚簇{ab,abc,acd}的直方图8块区域(H=2.0, H/W=0.5)只有4个不同项,但是聚簇{acd,de,def}对于相同的块数却有5个不同的项(H =1.6,H/W=0.32)。
很明显,聚类(1)比较好,因为我们更希望同一个聚簇中的交易有更多的重叠。
从上面的例子中,我们可以看到,拥有更大高宽比的直方图具有更好的簇内相似性。
我们应用这一简单的直觉作为聚类算法的基础,用簇的直方图的几何性质定义全局评估函数。
我们把这种新的算法叫做CLOPE——带有倾斜的聚类。
CLOPE算法不仅非常有效,在聚类形如市场交易数据和网络服务器日志这类高维的大型交易数据时也非常之快而且具有较好的可拓展性。
本文的其它部分安排如下。
第2节将更加正式地分析分类数据聚类问题,并提出我们的评估函数。
第3节详细介绍CLOPE算法以及其实现问题。
在第4节,将CLOPE与Largeltem对现实数据集聚类的实验结果进行比较。
第5节介绍相关工作后,第6节对文章进行总结。
2.CLUSTERING WITH SLOPE(具有倾斜的聚类)符号:在整篇文章中,我们使用以下符号。
交易数据集D是一组交易{t1, ...,t n}的集合。
每条交易是一些项{i1, ..., im}的集合。
一个聚簇{C1, ... Ck}是{t1, ...,t n }的一个划分,也就是说,C1∪…∪ Ck={t1, ..., tn}而且对任意1 ≤i, j ≤k,满足C i≠φ∧ C i∩C j = φ。
每一个C i叫做一个簇。
除非其它说明,n,m,k分别表示交易的个数、项的个数和聚簇的个数。
一次好的聚类应该将相似的交易分到同一组。
大部分聚类算法定义一些评估函数并且优化它们,最大化簇内的相似度和簇间相异。
评估函数可以定义为局部的的或者全局的两种类型。
在定义为局部的方式中,评估函数建立在交易对相似性基础上。
这种方式已经被广泛地应用于数值数据的聚类中,使用对相似性例如L p((Σ|xi-yi|p)1/p)作为两点之间的相似度量。
常见的分类数据的相似度量有Jaccard系数(|t1∩t2|/|t1∪t2|),Dice系数(2×|t1∩t2|/(|T1|+|T2|))或者简单地为两个交易的公共项数[10]。
然而,对于大型的数据,相比于全局方法,这些局部方法在计算上的成本是非常巨大的。
在Wang等在他们的LargeItem算法[13]中首创的全局相似测度也可以用于分类数据的聚类。
在全局方法中,不需要个别交易之间的两两相似度量。
聚类质量在簇级测定,它利用了聚簇中大项集和小项集这样的信息。
既然这些全局度量的计算要比两两相似度的计算要快得多,所以全局方法对大型分类数据库的聚类处理中是非常有效的。
与LargeItem相比,CLOPE使用一个更简单而有效的全局测度来聚类交易数据集。
更高的高宽比的生动形象地反映了更好的聚类结果。
给一个聚簇C,我们可以找到其中所有不同的项以及每个项对应的出现次数,即包含了项的交易数。
我们用D(C)表示不同项的集合,Occ(i,C)表示项i 在聚簇C中的出现次数。
然后我们可以画出聚簇C的直方图,项作为X轴,以它们出现次数的降序排列,项出现的次数作为Y轴。
我们定义聚簇C的大小S(C)和宽度W(C),如下:聚簇的高度定义为H(C)=S(C)/W(C)。
当聚簇C不重要或者能从上下文推出时,我们将H(C),S(C),W(C)简写为S,W和H。
为了阐明,我们下面详细解释图1中最后一个聚簇的直方图。
请注意,几何图2中,直方图与具有高度H和宽度W的虚线矩形具有相同的大小S.图2 聚簇 {acd, de, def }的直方图详解很明显,一个更大的高度表示在聚簇中项之间有更多的重叠,这样聚簇中的交易就有更多的相似性。
在我们运行的例子中,{ab,abc,acd}的高度是2,而{acd,de,def }的高度是1.6。
既然两个聚类的所有其它的特征是相同的,我们认为聚类(1)更好。
然而,为了定义我们的评估函数,单独定义高度是不够的。
取一个非常简单的数据库{ abc,def },两个交易中没有重叠,但是聚簇{{abc,def}}和聚簇{{abc},{def}}有相同的高度1。
另一个做法对这个例子更合适。
我们可以用梯度G(C)= H(C)/ W(C)= S(C)/ W(C)2代替H(C)作为聚簇C的质量测度。
.现在,聚簇{ { abc },{ def } }更好,因为其中两个聚簇的梯度都是1/3,大于聚簇{ abc def }的梯度1/6。
为了定义聚类评估函数,,我们需要考虑每个聚簇的形状以及其中的交易数。
对于聚类C = { C1,……,Ck},我们使用以下公式作为一个评估函数的直观定义。
事实上,这个评估函数可以用一个幂参数r而不是2进行泛化,如下所示。
上式中,r是一个正实数1,称为排斥因子,用来控制聚簇内的相似度等级。
当r很大时,同一个聚簇内的交易必须共享大部分共同的项。
否则,将这些交易分到不同的聚簇中会得到更大的收益值。
例如,比较数据库{ abc,abcd,bcde,cde }的两个聚类:(1) {{abcd,abcd,bcde,cde } },(2) { { abc,abcd },{ bcde,cde } }。
为了聚类(2)得到更大聚类收益值,它的收益值必须大于聚簇(1)的聚类收益值这意味着必须使用一个大于ln(14/7)/ln(5/4) ≈ 3.106的排斥因子。
相反,可以使用小的排斥因子来分组稀疏数据。
共享少量公共项的交易可能被放到相同的聚簇中。
对于数据库{abc,cde,fhg,hij,},想要聚类{{abc,cde},{fgh,hij,}}的聚类收益值大于聚类{{abc},{cde},{fgh},{hij}}的聚类收益值,需要一个小于ln(6/3)/ln(5/3) ≈ 1.357的排斥因子。
现在,我们表述聚类交易数据的问题如下。
问题定义:给定D和r,找到一个聚类C使Profitr(C)最大。
图3. CLOPE算法的概要描述3、实现像绝大多数基于划分的聚类方法一样,我们通过迭代扫描数据库来趋近最佳的方案。
然而,由于我们的评估函数是定义为全局的,函数中只有一些轻松可计算的测度,比如大小和宽度,方法的执行速度比局部方法快得多。
我们的实现方案需要一个初次扫描数据库以构建初始聚类,由评估函数驱动。
然后,需要通过多次扫描来完善聚类、优化评估函数。
如果相比Profitr上一次扫描,聚类划分没有发生改变,算法将停止,最终聚类划分作为输出。
输出是只是简单地为每条交易形成的整数标签,指明交易所属的聚簇id。
算法的示意图如图3所示。
内存数据结构:在有限的内存空间里,我们对每一个聚簇仅仅保留当前交易和少量的信息。
这些信息,称为聚簇特性,包括交易数量N,不同项的项数(或宽度)W ,<项,出现次数>的哈希值occ ,和一个预先计算好的整数S 来快速访问聚簇的大小。
我们记C.occ[i]为聚簇C 中项i 出现的次数,以此类推。
备注:事实上,CLOPE 相当节约内存,甚至对于大多数交易数据库以数组形式表示出现的数据都是可行的。
如果使用4字节的数组,项出现次数所需的总内存大约是M*K*4字节,M 是维数,K 是聚簇数。
有着10K 不同项、1K 个聚簇的数据库可以装到40M 的RAM 。
聚类收益值计算:在添加或删除一条交易时更新簇特征很简单,通过簇特征,使用每一个聚簇的S ,W 和N 计算聚类收益值也很简单。
算法中最花时间的部分(图3中的步骤3和步骤10)是比较添加交易到所有聚簇(包括空的聚簇)的不同收益。