基于间隔链表改进的频繁项集挖掘算法.docVIP

  • 4
  • 0
  • 约5.43千字
  • 约 7页
  • 2017-03-21 发布于北京
  • 举报

基于间隔链表改进的频繁项集挖掘算法.doc

基于间隔链表改进的频繁项集挖掘算法.doc

基于间隔链表改进的频繁项集挖掘算法 摘要:针对PrePost算法中需要建立复杂的前序和后序编码树(PPCtree)和节点链表(Nlist)的问题,提出一种基于间隔链表(Ilist)改进的高效频繁项集挖掘算法。首先,该算法采用了比频繁模模式树(FPtree)更加压缩的数据存储结构间隔编码的频繁模式树(IFPtree),无需迭代地建立条件FPtree;其次,该算法利用更简洁的Ilist代替了PrePost中复杂的Nlist,从而提高了建树和挖掘速度;最后,对于单分支路径的情况,该算法通过组合的方法,直接求得某些频繁项集,以提高算法的时间性能。实验结果表明:一方面,对于同一数据集在相同支持数下挖掘的结果相同,验证了改进算法的正确性;另一方面,无论在时间还是空间上改进算法的整体性能均比PrePost算法提高约10%;且对于稀疏型数据库或密集型数据库的挖掘都有较好的应用。 关键词:数据挖掘;关联规则;频繁项集;频繁模式树;间隔链表 中图分类号:TP311.13 文献标志码:A 0引言 数据挖掘是从海量数据中提取具有潜在利用价值的信息和知识的过程,其中关联规则挖掘是数据挖掘的关键问题之一。关联规则挖掘一般分为挖掘频繁项集和产生关联规则两步,其中最关键和最耗时的一步是挖掘频繁项集,因为一旦挖掘出所有的频繁项集,关联规则通过简单的数学计算便可得到。因此,频繁项集挖掘的性能决定了关联规则挖掘的总体性能。频繁项集挖掘最早是在1993年被Agrawal等[1-2]提出,自此,大量的频繁项集挖掘算法被提出。一般地,它们主要分为以下三类: 1)Apriori类算法。Apriori类算法采用层次迭代的思想,需要不断地扫描事务数据库以及递归地自连接产生候选项集并对其进行剪枝,最终挖掘出所有的频繁项集。但是它存在重复地扫描数据库和产生大量的候选项集两个严重缺陷。对于长度为N的频繁项集,最大可能要枚举2N-2个子集,算法的计算效率太低,甚至有时根本无法计算。为了解决这一问题,研究者们提出了一些改进算法。例如, 基于直接散列和修剪(Direct Hashing and Pruning,DHP)的频繁项集挖掘算法[3]在生成候选项集时,将K维子集放入Hash桶中,减少候选项集的数量;BitTableFI算法[4]采用一种特殊的BitTable数据结构加快候选项集的产生以及项集支持度的计算。但是这类算法仍然存在产生候选项集的问题。 2)频繁模式增长(Frequent Patter Growth, FPGrowth)类算法。FPGrowth算法采用分而治之的策略[5],只需要遍历两次数据库,便可挖掘出全部的频繁项集。FPGrowth算法将数据压缩到频繁模模式树(Frequent Pattern tree, FPtree)中,然后挖掘由FPtree导出的条件数据库。FPGrowth需要递归地构建条件FPtree,消耗大量的时间,并且此算法不太适合稀疏型数据集。Sucahyo等[6]对FPGrowth算法加以优化提出基于高压缩频繁模式树(Compressed FPtree,CFPtree)的CTPRO算法,该算法避免了递归生成条件FPtree的开销;但是需要对每个频繁项目建立局部CFPtree,因此,当数据量较大时,CTPRO算法可能会出现内存崩溃的问题。 3)垂直数据结构的算法。Apriori类算法和FPGrowth类算法通常采用水平数据结构挖掘。一般采用垂直数据结构的挖掘性能要优于水平数据结构的挖掘性能[7]。Eclat算法[8]采用垂直数据结构Tidset,但当Tidset的规模庞大时将会出现一下两个问题:①Tidset的交集运算消耗大量时间,影响了算法的效率;②消耗系统大量的内存。 最近,Deng等[9]提出了一种基于节点链表(Node list,Nlist)和前序和后序编码树(Preorder and Postorder Code tree,PPCtree)的高效频繁项集挖掘算法――PrePost算法。该算法结合了FPGrowth算法和Eclat算法的优点,利用Nlist的交集运算求得项集支持数,避免了条件树的建立和候选项集的产生。但是PrePost算法需要前序和后序两次遍历初始PPCtree来得到完整的PPCtree,消耗了建树时间。另外,PrePost算法在建立Nlist时需要为每个节点保存计数值,占用了内存空间。针对PrePost算法的问题,本文在PrePost算法的基础上进行了改进:一方面,本文采用了一种利用间隔编码的频繁模式树(Interval FPtree,IFPtree),在改进算法中只需要遍历一次初始IFPtree便可得到完整的IFPtree,提高了建树速度;另一方面,采用了较Nlist简单的间隔链表Ilist,在求项集支持数的过程中,不需要为项

文档评论(0)

1亿VIP精品文档

相关文档