关联规则挖掘算法研究
杨光 王瑞
(大连交通大学 软件学院, 116028)
摘 要 Apriori算法是发现频繁项目集的经典算法,但是该算法需反复扫描数据库,因此效率较低。本文介绍了Apriori算法的思想,并分析了该算法的性能瓶颈。在此基础上,针对Apriori算法提出了一种改进方法,该方法采用转置矩阵的策略,只扫描一次数据库即可完成所有频繁项目集的发现。与其他经典的算法相比,本文提出的算法在项目集长度较大时,性能明显提高。
关键字 关联规则,支持度,置信度,Apriori
1 引言
关联规则挖掘就是在海量的数据中发现数据项之间的关系,是数据挖掘领域中研究的热点问题。1993年Agrawal等人
[1]首先提出了交易数据库中不同商品之间的关联规则挖掘,并逐渐引起了专家、学者的重视。关联规则挖掘问题可以分为:发现频繁项目集和生成关联规则两个子问题,其中发现所有的频繁项目集是生成关联规则的基础。近年来,发现频繁项目集成为了关联规则挖掘算法研究的重点,在经典的Apriori算法的基础上提出里大量的改进算法。Savasere等
[2]设计了基于划分(partition)的算法,该算法可以高度并行计算,但是进程之间的通信是算法执行时间的主要瓶颈;Park等
[3]通过实验发现寻找频集主要的计算是在生成频繁2-项集上,利用这个性质Park等引入杂凑(Hash)技术来改进产生频繁2-项集的方法,该算法显著的提高了频繁2-项集的发现效率;Mannila等
[4]提出:基于前一遍扫描得到的信息,对此仔细地作组合分析,可以得到一个改进的算法了。针对Mannila的思想Toivonen
[5]进一步提出:先使用从数据库中抽取出来的采样得到一些在整个数据库中可能成立的规则,然后对数据库的剩余部分验证这个结果。Toivonen的算法相当简单并显著地减少了I/O代价,但是一个很大的缺点就是产生的结果不精确,存在数据扭曲(data skew)。
上述针对经典Apriori算法的改进算法在生成频繁项目集时都需要多次扫描数据库,没有显著的减少I/O的代价。本文在分析了经典的Apriori算法的基础上,给出了一种改进的方法,该方法采用转置矩阵的策略,只扫描一次数据库即完成频繁项目集的发现,在项目集长度较大时,性能明显提高。
2 Apriori算法
2.1 基本概念
设I={i
1, i
2,…, i
m}是二进制文字的集合,其中的元素称为项(item)。定义交易(transaction)T为项的集合,并且TÍI,定义D为交易T的集合。设X是I中若干项的集合,如果XÍT,那么称交易T包含X。项目集中包含项的个数成为项目集长度。
关联规则是形如XÞY的蕴涵式,这里XÌI, YÌI,并且XÇY=F。
规则XÞY在交易数据库D中的支持度(support)是交易集合中包含X和Y的交易数与所有交易数之比,记为support(XÞY),即support(XÞY)=|{T:XÈYÍT,TÎD}|/|D|。
规则XÞY在交易集中的置信度(confidence)是指包含X和Y的交易数与包含X的交易数之比,记为confidence(XÞY),即confidence(XÞY)=|{T: XÈYÍT,TÎD}|/|{T:XÍT,TÎD}|。给定一个交易集D,挖掘关联规则就是找出支持度和置信度分别大于用户给定的最小支持度(minsup)和最小置信度(minconf)的关联规则。
2.2 基本思想
1994年Agrawal等人在项目集格空间理论的基础上提出了用于发现频繁项目集的Apriori算法。该算法采用“逐层搜索”的迭代方法,用k-项集生成(k+1)-项集。首先,扫描数据库计算出频繁1-项集的集合(记为:L
1);然后,执行下面的迭代过程计算频繁k-项集,直到生成频繁k-项集的集合(记为:L
k)为空:
①连接:L
k-1进行自连接运算,生成候选k-项集的集合(记为:C
k)。所有的频繁k-项集都包含在C
k集合中。
②剪枝:①生成的C
k是L
k的超集,扫描数据库计算C
k中每个候选项目集的支持度,支持度大于用户给定最小支持度的候选k-项目集就是频繁k-项目集。
通过上述的迭代过程,可以发现项目集I在给定数据库D中满足最小支持度的所有频繁项目集。
2.3 算法分析
Apriori算法在执行“连接-剪枝”的迭代过程中,需要多次扫描数据库,如果生成的频繁项目集中含有10-项集,则需要扫描10遍数据库,增大了I/O负载。并且在迭代过程中,候选项目集合C
k是以指数速度增长的,L
k-1自连接会产生大量的候选k-项目集,例如有10
4个1-项集,自连接后就可以产生大约10
7个候选2-项集。这些都严重影响了Apriori算法的效率。
3 改进的Apriori算法
3.1 改进思想
Apriori算法在迭代过程中多次扫描数据库和产生大量的候选项目集形成了算法的性能瓶颈。为了提高算法的效率本文进行如下改进:
数据库D中每个交易T都有一个唯一的编号TID。定义K-项集R
k=<X
k,TIDS(X
k)>,其中X
k=(i
j1, i
j2, …, i
jk),i
j1, i
j2, …, i
jk ÎI,j1<j2< …<jk,TIDS(X
k)是数据库中所有包含X
k的交易T的编号TID的集合,即为:TIDS(X
k)={TID : X
kÍT,<TID,T> ÎD}。根据上面的定义k-项目集R
k的支持度可以表示为:support(R
k)=|TIDS(X
k)|/|D|=|{TID : X
kÍT,<TID,T> ÎD}| / |D|。R
k的支持数supNum(R
k)=support(R
k)*|D|=|TIDS(X
k)|。L’
k表示k-项集的集合。
改进的Apriori算法依然采用“逐层搜索”的迭代方法,迭代过程的“连接-剪枝”运算定义如下:
①连接:设两个(k-1)-项集:L’
k-1 (i)=< X
k-1,TIDS(X
k-1) >Î L’
k-1,L’
k-1 (j)=< Y
k-1,TIDS(Y
k-1) >Î L’
k-1,i<j。如果X
k-1和Y
k-1的前k-2项相等,即:X
k-1[k-2] ≡Y
k-1[k-2],则(k-1)-项集连接:L’
k-1 (i)∞L’
k-1 (j)= < X
k-1∪Y
k-1, TIDS(X
k-1) ∩TIDS(Y
k-1)>= <X
k,TIDS(X
k)>=R
kÎ L’
k;否则,不进行连接运算,因为产生的结果不是重复,就是非频繁项目集,这样可减少计算量。
②剪枝:计算k-项集的支持数,根据上面的定义supNum(R
k)=|TIDS(X
k)|,该计算过程不需要再扫描数据库,避免了I/O操作,提高了算法的效率。如果supNum(R
k)≥minSupNum,则< X
k , |TIDS(X
k)|> Î L;否则,从集合L’
k中删除R
k。
3.2 改进的算法描述
输入:数据库D,最小支持数minSupNum
输出:D中的频繁项目集L
算法描述:
① L’
1 = findFrequentOneItemSets(D); //扫描数据库D生成1-项集的集合L’
1。
② for each OneItemSet <X
1, TIDS(X
1)>ÎL’
1 //生成频繁1-项集的集合
if (|TIDS(X1)| ≥ minSupNum)
L = L ∪ {<X
1, |TIDS(X
1)|>};
else
L’
1 = L’
1 - {<X
1, TIDS(X
1)>};
③ for (k=2; L’
k-1≠Ф; k++)
L’
k = L’
k-1∞L’
k-1;
For each k_ItemSet <X
k, TIDS(X
k)> ÎL’
k
if (|TIDS(X
k)| ≥ minSupNum)
L = L ∪ {<X
k, |TIDS(Xk)|>};
else
L’
k = L’
k - {<X
k, TIDS(X
k)>};
④ return L;
3.3 例举
设数据库D表1所示,最小支持数minSupNum=4,运行改进的算法的过程如图所示:
4 总结
改进的Apriori算法,只是在生成L’
1时进行了一次数据库扫描,在之后的迭代过程中不需要扫描数据库。与文献2,3,4,5中提出的改进算法相比,使用本文提出的算法大大降低了I/O负载,使得频繁项目集的发现速度大大提高,尤其是在项目集长度较大的情况下。算法的迭代过程不需要复杂的计算,项目集连接仅仅使用集合的并、交运算即可完成,使得该算法易于实现,相信该算法具有一定的理论与实用价值。
但是该算法也有不足:为了减少I/O负载,要求在第一次扫描时把所有的信息装入内存,虽然本算法对数据库进行编码,以二元组的形式存储项集,但是数据挖掘都是基于海量数据的,因此,算法运行时需要大量内存,对此将在今后的研究中进行改进。
参考文献
[1] R. Agrawal, T. Imielinski, and A. Swami. Mining association rules between sets of items in large databases. Proceedings of the ACM SIGMOD Conference on Management of data, pp. 207-216, 1993
[2] A. Savasere, E. Omiecinski, and S. Navathe. An efficient algorithm for mining association rules in large databases. Proceedings of the 21
st International Conference on Very large Database, 1995
[3] J. S. Park, M. S. Chen, and P. S. Yu. An effective hash-based algorithm for mining association rules. Proceedings of ACM SIGMOD International Conference on Management of Data, pages 175-186, San Jose, CA, May 1995
[4] H. Mannila, H. Toivonen, and A. Verkamo. Efficient algorithm for discovering association rules. AAAI Workshop on Knowledge Discovery in Databases, 1994, pp. 181-192
[5] H. Toivonen. Sampling large databases for association rules. Proceedings of the 22
nd International Conference on Very Large Database, Bombay, India, September 1996
[6] 罗可, 贺才望. 基于Apriori算法改进的关联规则提取算法. 计算机与数字工程. 2006, 34(4):48-51,55
[7] 蔡伟杰,杨晓辉等.关联规则综述.计算机工程.2001, 27(5):31-33,49
收稿日期:11月3日 修改日期:11月15日
作者简介: 杨光 男 1976-2 助教(硕士);王瑞 女 1978 助教(硕士)。