1. FP-Growth算法弊端
FP-Growth算法是挖掘频繁项集最常用的算法之一,其是基于迭代FP-Tree生成频繁项集的关联规则算法。此算法仅进行两次数据集扫描,递归迭代构建FP-Tree(FP条件树),当FP-Tree中只有一个单分支时,递归迭代构建结束,最终得到频繁项集,FP-Growth算法在时间、空间复杂度和数据挖掘的效率上相比Apriori都有明显改善,对于数据量较小的数据挖掘,FP-Growth改进算法具有一定优势。
但随着数据量呈指数级增长时,该算法存在以下问题:①如果事务数据库的数据达到海量级别,FP-Growth算法把所有事务数据中的频繁项都压缩至内存中的频繁模式树,树的高度或宽度将达到内存无法接受的规模,可能导致过程失败;②在挖掘频繁模式过程中,每次递归计算都生成一棵FP-tree,每次遍历时都会产生条件频繁模式树,并消耗大量时间和存储空间。对于大规模的数据集时,传统的Apriori算法和FP-Growth算法都是基于串行计算,其计算时间和空间复杂度较高。
2. Hadoop与MapReduce简介
Hadoop平台是适合大数据的分布式存储和计算的平台,有2个核心组件,分别为分布式存储系统(HDFS)和分布式计算框架(MapReduce): HDFS为分布式计算存储提供底层支持,可实现超大文件的容错和存储;MapReduce是一种分布式编程模式,能够实现对大规模数据进行并行运算。
3. MapReduce改造FP-Growth算法
使用MapReduce改造FP-Growth算法,是采用分而治之的思想,通过负载均衡的分组策略,在Hadoop平台实现FP-Growth算法的并行化,使FP-Growth算法能适应大规模数据的处理要求,同时借助Hadoop平台在分布式处理方面的优势,从而提升计算处理能力。
FP-Growth算法主要分为2个步骤:FP-Tree的构建和从FP-Tree中递归挖掘频繁项集;
用MapReduce任务完成频繁项集的挖掘。其中,结合分布式缓存机制存储F_List表提高访问效率,降低I/O操作,通过负载均衡分组策略,平衡各个节点的压力,充分利用各个节点的计算能力,从而提高该算法的整体性能。
基本思想:FP-Growth算法并行化的基本思想。首先,统计事务数据库中每个项的频繁项集F,并删除小于最小支持度的项,再将剩余的项进行降序排序,得到集合F_List;然后,通过Map过程读入事务项,按负载均衡分组策略分发到不同的Reduce节点上;接着,各节点同步 Reduce过程构造FP-Tree,并对FP-Tree进行FP-Growth挖掘得到局部频繁项集,由局部频繁项集合并成全局频繁项集;最后,由全局频繁项集得到最大频繁项集。
FP-Growth并行化算法的输入输出和 传统的FP-Growth算法相同,输入事务集和最小支持度计数,输出所有支持度计数大于最小支持度计数阈值的频繁项集。该算法包括几个MapReduce任务、2次扫描事务数据库。
第1阶段,挖掘事务数据库的1项频繁集。首先,从分布式文件系统中读入事务数据集,将事务数据集分成M个数据集并行分发至M个Map节点上。然后,进行第1次事务数据库扫描,在各个Map节点中并行计算每个节点上的支持度计数,根据设定的最小支持度阈值,删除小于最小支持度的项。最后,将剩余的项进行降序排序,将所有节点的结果合并得到全局频繁1项集;
F_List全局频繁1项集挖掘模型如下图1所示。
图1 基于MapReduce的并行化全局频繁1项集挖掘模型
第2阶段,负载均衡划分F_List,得到长度为Q的均衡化分组表G_List,即将G_List中的项划分为Q组,为每一组分配一个组号gidi(1≤i≤Q),gidi对应的组记作G_Listgidi,G_Listgidi中的每一项记作αk∈G_Listgidi,1≤k≤G_Listgidi.length。这样每条事务集的组号与G_List的组号相对应。
第3阶段,并行FP-Growth进行第2次事务数据库扫描。
Map阶段:第2次扫描事务数据库,将事务所对应的部分发送到组号为gidi的事务组DB(gidi)中,实现对事务数据库进行分组,得到一组彼此相互独立的事务组。Map函数的输入键值对<key=RowNo,value=s>,根据G_List生成一个HashMap,该函数输出键值对为<key=gidi,value = {itemi...itemj}> ,即把以组号gidi为键、事务itemi...itemj为值的键值对发送到Reduce节点。这样所有包含G_Listgidi项的事务,所对应的部分都被发送到组号为gidi的分组事务集DB(gidi)中。
Reduce阶段:对本地事务集按接收的键值对构造局部FP-Tree,递归挖掘局部频繁项集。 频繁项集挖掘模型如下图2所示。
图2 基于MapReduce的并行化频繁项集挖掘模型
第4阶段,合并局部频繁项集生成全局频繁项集。读取HDFS文件中的局部频繁项集,得到全局支持度,再根据全局支持度进行判断,最后由全局频繁项集得到最大频繁项集。
FP-Growth算法在Hadoop平台上实现并行化的流程见图3。
图3 基于MapReduce的FP-Growth算法并行化实现模型
以上就是使用MapReduce改造Fp-Growth算法以适应大规模数据的算法过程。