CLOPE快速有效的聚类算法.docx
《CLOPE快速有效的聚类算法.docx》由会员分享,可在线阅读,更多相关《CLOPE快速有效的聚类算法.docx(20页珍藏版)》请在冰豆网上搜索。
CLOPE快速有效的聚类算法
CLOPE:
针对交易的数据快速有效聚类算法
摘要
本文研究分类数据的聚类问题,特别针对多维和大型的交易数据。
从增加聚
簇直方图的高宽比的方法得到启发,我们开发了一种新的算法---CLOPE,这是一种非常快速、可伸缩,同时又非常有效的算法。
我们展示了算法对两个现实数据集聚类的性能,并将CLOPE与现有的聚类算法进行了比较。
关键词
数据挖掘,聚类,分类数据,可伸缩性
1.简介
[12,14,4,1]
聚类是一种非常重要的数据挖掘技术,它的目的是将相似的交易
分组在一起。
最近,越来越多的注意力已经放到了分类数据[10,8,6,5,7,13]的聚类上,
分类数据是由非数值项构成的数据。
交易数据,例如购物篮数据和网络日志数据,
可以被认为是一种特殊的拥有布尔型值的分类数据,它们将所有可能的项作为
项。
快速而精确地对交易数据进行聚类的技术在零售行业,电子商务智能化等方
面有着很大的应用潜力。
但是,快速而有效聚类交易数据是非常困难的,因为这类的数据通常有着高
维,稀疏和大容量的特征。
基于距离的算法例如
[11]
[12]
k-means
和CLARANS都是对
低维的数值型数据有效。
但是对于高维分类数据的处理效果却通常不那么令人满
意[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.CLUSTERINGWITHSLOPE(具有倾斜的聚类)
符号:
在整篇文章中,我们使用以下符号。
交易数据集D是一组交易{t1,...,tn}
的集合。
每条交易是一些项{i1,
...,im}的集合。
一个聚簇{C1,...Ck}是{t1,...,
tn}的一个划分,也就是说,C1
∪∪Ck={t1,...,tn}而且对任意
1
≤
i
j≤k,满足i
≠φ∧
C
i∩j
φ。
每一个Ci叫做一个簇。
C
C=
除非其它说明,n,m,k分别表示交易的个数、项的个数和聚簇的个数。
一次好的聚类应该将相似的交易分到同一组。
大部分聚类算法定义一些评估
函数并且优化它们,最大化簇内的相似度和簇间相异。
评估函数可以定义为局部
的的或者全局的两种类型。
在定义为局部的方式中,评估函数建立在交易对相似性
基础上。
这种方式已经被广泛地应用于数值数据的聚类中,使用对相似性例如Lp((Σ
|xi-yi|
p)1/p)作为两点之间的相似度量。
常见的分类数据的相似度量有
Jaccard系数(|t1
∩t
|/|t
∪t|),Dice
系数(2×|t
∩t|/(|T|+|T
2
|))或者简单地为两个交易的公共
2
1
2
1
2
1
项数[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)是比较添加交易到所有聚簇(包括空的聚簇)的
不同收益。
尽管计算聚类收益值需要对所有的聚簇的值进行求和,我们可以使用当前正在测试簇的值变化来取得同样的值判断,这样更快。
图4计算t加到C中后的变化值
我们使用图4中的函数DeltaAdd(C,t,r)计算在增加交易t到聚簇C后
值的变化。
以下的定理保证我们的实现方案的正确性。
定理:
如果DeltaAdd(Ci,t)是最大值,那么将t放到Ci中将会最大化Profitr。
证明:
观察profit函数的定义,我们发现,将t放到不同聚簇中的收益只
会因为公式中分子的不同而不同。
假设在没添加t之前聚类profit的分子为X,从这些新分子中减去常数X,我们得到的恰好是函数DeltaAdd(Ci,t)返回的值。
时间和空间复杂度:
从图4中,我们知道DeltaAdd函数的时间复杂度是O(t.ItemCount)。
假设一个交易的平均长度是A,交易的总数是N,最大聚簇数
为K,一次迭代的时间复杂度是O(N×K×A),表明CLOPE的执行速度与聚簇数成线性关系,I/O代价与数据库大小成线性关系。
既然任何时刻只有一个交易保留在内存中,CLOPE的空间需求近似于聚簇特征的内存大小。
它线性相关于最
大聚簇数K值与维数M的乘积,对绝大多数交易数据库而言,这不是一个很大的
开销。
4、实验
在本节中,我们用两个真实的数据集来分析CLOPE的有效性和执行速度。
对于有效性,我们比较在标签数据集(UCI数据挖掘库中的蘑菇数据)上CLOPE与
[13][7]
LargeItem和ROCK三者的聚类质量。
对于执行速度,我们在一个大型的网络
日志数据集上对比CLOPE和LargeItem的执行速度。
本节中的所有实验在128
内存的PIII450Linux机器上进行。
4.1蘑菇数据(MushRoom)
来自UCI机器学习数据库
(http:
//www.ics.uci.edu/mlearn/MLRepository.html)的蘑菇数据集已
经被ROCK和LargeItem用于有效性测试。
蘑菇数据集包含8124条记录,分为两
类,4208份可食用蘑菇和3916份有毒蘑菇。
通过将每个属性值处理为交易项,
我们将所有的22个分类属性转换为具有116个不同项的交易。
主茎属性的2480
个缺省值在交易中被忽略。
图5CLOPE算法在蘑菇数据集上的运行结果
我们按0.1的增幅尝试了0.5到4之间所有不同的排斥因子,图5展示了
一些结果。
为了对聚类质量有一个一般印象,我们在图中用了两个测度。
纯度通过累
加每个聚簇中可食用蘑菇数和有毒蘑菇数中较大的得到的。
纯度有一个最大值为8124,它是交易的总数。
既然一条交易作为一个聚簇的这个聚类肯定去的最大纯度,所以聚簇数应该尽可能的少,这样所有数据的聚类作为一个聚簇一定会得到最大的纯度。
当r=2.6的时候,聚簇数是27,并且只有一个聚簇拥有混合记录:
32个有毒蘑菇和48个可食用蘑菇(纯度=8092)。
当r达到3.1时,得到完美分类的
30个聚簇(纯度为8124)。
这些结果中的大部分需要至多3次扫描数据库。
当
r=2.6的时候,这些聚簇的交易数为1到1726不等。
上面的结果与ROCK文献[7]中呈现的结果非常接近,在ROCK文献中,给出的唯一结果是:
21个聚簇中只有一个不纯的聚簇包含72个有毒蘑菇和32个可食用蘑菇(纯度=8092),支持度为0.8。
考虑到ROCK的二次方时间和空间复杂度,CLOPE的结果让人非常惊喜。
文献[13]中提出的LargeItem算法对蘑菇数据集上的聚类结果是通过递归聚类不纯的聚簇分层推导得到,并且不能直接比较。
我们尝试实现LargeItem以得到直接结果,[13]中为LargeItem定义的评估函数为:
这里θ是一个项在一个聚簇中为大项的最小支持百分比。
Intra是所有聚簇中不同的小(不大)项数,Inter是重叠的大项数,它等于在所有的大项总数减去所有聚簇中不同的大项数,引入权重w用于控制Intra和Inter的不同重要性。
LargeItem算法试图最小化迭代消耗。
在我们的实验中,当使用默认值w=1时,θ取0.1到1之间的不同值(图6(a))都无法找到好的聚类划分。
通过分析这个结果之后,我们发现对于所有的结果,都有一个Intra的最大值。
我们增大
w来使更大的Intra更有意义。
当w达到10时,我们得到一个纯净的结果:
58
个聚簇,支持度为1。
w=10的结果如图6(b)所示。
图6LargeItem对蘑菇数据集聚类的结果
在蘑菇数据集测试中,我们对蘑菇数据集的实验结果说明非常简单直观,具有线性复杂度的CLOPE是非常有效的。
CLOPE算法对蘑菇数据集的聚类结果比LargeItem算法要好而且非常接近于ROCK算法,但是ROCK算法的复发度是交易数的二次项。
通过与LargeItem算法的对比,还可以看出CLOPE算法背后简单的思想非常出色,甚至不需要对聚簇间的差异做任何明确的约束。
数据顺序的敏感性:
我们还用蘑菇数据集来测试CLOPE对数据输入顺序的敏感性。
图5和图6显示的结果都是由原始数据顺序得出的。
我们使用随机顺序的蘑菇数据集对CLOPE进行测试。
得出的结果有所不同,但是很接近原始数据的结果。
最好的结果是在r取2.9时,纯度为8124,得到28个聚簇;最坏的结果在r取3.9时,纯度为8124,得到45个聚簇。
这表明CLOPE对于输入数据的顺序
是相当不敏感的。
然而,对于随机顺序输入的蘑菇数据集,我们的实验结果表明
LargeItem算法对数据输入顺序比CLOPE更敏感。
4.2Berkeley网络日志
除了市场购物篮数据,网络日志数据是另一类典型的交易数据。
我们选择
http:
//www.cs.berkeley.edu/logs/网站的网络日志作为第二个实验的数据集,
测试CLOPE的扩展性和性能。
我们使用2001年11月的网络日志数据,并且用[3]
中提出的方法进行预处理。
在原始日志文档中有将近700万个条目,将其中的非
html条目删除后剩余200万条。
在这200万个条目中,共有93,665个不同的
页面。
对用户标识使用了唯一可用的客户端IP。
在一个15分钟的会话的空闲时
间内,613,555个会话被识别,平均会话长度是3.34。
在可伸缩性测试中,我们设置最大聚簇数为100,分别对10%,50%和100%
的会话运行CLOPE(r=1.0,1..5,2.0)和LargeItem(θ=0.2,0.6和1,w=1)。
每次迭代平均运行时间如图7所示。
图7CLOPE和LargeItem对Berkeley网络日志数据的运行时间
从图7我们可以看到,CLOPE和LargeItem的执行时间都与数据的大小成线
性关系。
对于非整型排斥因子,CLOPE因为浮点数计算开销而运行得较慢。
所有
的结果都达到了允许的最大聚簇数,除了当r=1时的CLOPE算法,此时,对整个
会话文档只找到了30个聚簇。
这就是能在小于一分钟的时间内能对整个数据集
进行一次迭代如此快速的原因。
LargeItem算法使用了两倍于CLOPE内存空间存
储特征数据,执行时间大约是CLOPE算法的3-5倍。
为了了解CLOPE算法的有效性受噪声数据影响的情况,我们对11月份的会话数据,用r=1.5,聚簇数量最大值为1000运行CLOPE,聚簇的结果按它们所含的交易数进行排序。
表1展示了由CLOPE发现的有20089条交易的最大聚簇
(C1000),和其它两个高纯度的聚簇。
这三个聚簇非常好,但是在许多其它的聚簇中,来自不同路径的页被分到了同一组。
其中的一些可能恰恰展现了一些公
共的访问模式,其它的则可能是因为继承了网页日志的噪声。
然而,LargeItem
算法在实验中的结果并不是十分让人满意。
表1CLOPE对日志数据(r=1.5)的一些聚类簇
5.相关工作
[12][14][4][1]
聚类大数据集的工作有很多,例如CLARANS,BIRCH,DBSCAN,CLIQUE
等。
它们中的绝大部分是为低维的数值型数据设计的,只有CLIQUE是在较高维
数据中找密集子空间的特例。
[10]
小距离的矢量代表一簇分类值。
在k-modes中,距离由两个点共享的公共分类属
[8]
性数来测定。
HANet.al使用关联规则超图划分法对大型交易数据集中的项进
行聚类。
[6]
STIRR以及
[5]
CACTUS也是将分类数据的聚类建模成超图划分问题,但
[7]
是这些方法更适合由元组构成的数据库。
ROCK对相似测度使用了两个交易之间
的邻居数,但是计算的开销非常大,当扩展到大型数据集时不许采用抽样。
与CLOPE最相似的算法是LargeItem[13]。
但是,我们的实验显示,CLOPE能够找到更好的聚簇划分,而且速度更快。
同时,CLOPE只需要一个参数—排斥因子,不熟悉专业知识的用户也能对结果聚簇数的近似值有很多控制。
相比之下,
LargeItem算法中的最小支持度θ和权重w的值更难确定。
我们对这两个算法的
敏感性测试也显示了CLOPE对于数据输入顺序的敏感性弱于LargeItem算法。
此外,许多对文档聚类的算法和交易数据聚类非常相关。
在文档聚类中,每
一个文档表示成其中单词的加权矢量。
聚类也是通过优化一个确定的评估函数来
进行的。
然而,文档聚类倾向于对单词根据它们的出现频率假设不同的权值。
查
阅[15]以了解一些常用的文档聚类算法。
另外,交易数据聚类与关联分析[2】也有些相似。
这两种流行的数据挖掘技术能够揭示一些在交易数据集中的项同时出现和关系方面的有趣性质。
此外,现在用于关联分析的方法[9]只需要少量的数据库扫描。
但是,存在一些差异。
一方面,聚类能够给出数据的一般综合性质,而关联分析只是发现最强的项同现模式。
另一方面,关联规则是可直接进行的,而对大型交易数据的聚类是不足的,并且大部分情况下用于其它数据挖掘任务,例如关联分析处理预处理阶段。
6.总结
本文提出了一种用于分类数据聚类的新型算法CLOPE,它是基于增加聚簇的
直方图的高宽比这个直观思想设计的。
这个思想用一个排斥因子参数控制聚簇中
交易的紧密性,从而控制聚簇划分数,用这种方法进行泛化。
CLOPE的简单思想
使得这个算法对大型、稀疏、高维交易型数据库聚类时快速、可扩展,并且节省
内存。
我们的实验表明:
即使没有明确指出聚簇间的差异测度,CLOPE在发