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算法以适应大规模数据的算法过程。

MapReduce改造fp-growth算法相关推荐

  1. MapReduce框架下的FP Growth算法概述

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebi.html 前面的博客分析了关联分析中非常重要的一个算法-FP Growth.该算法根据数据库在内 ...

  2. MapReduce框架下的FP Growth算法详解

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebk.html Sharding 这一步没什么好讲的,将数据库分成连续的大小相等的几个块,放置在不同的 ...

  3. FP Growth算法

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebg.html FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法 ...

  4. FP Growth算法详解

    看了n多资料,就这篇说的比较详细,适合初学者 FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对 ...

  5. Frequent Pattern 挖掘之二(FP Growth算法)(转)

    FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对.为了达到这样的效果,它采用了一种简洁的数据结 ...

  6. FP Tree算法原理总结(转)

    FP Tree算法原理总结 转自: https://www.cnblogs.com/zhengxingpeng/p/6679280.html 总结得太好了. FP Tree算法原理总结 在Aprior ...

  7. FP Tree算法原理

    作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题,FP Tree算法(也称FP Growth算法)采用了一些技巧,无论多少数据,只需要扫描两次数据集 ...

  8. Hadoop MapReduce的模式、算法和用例

    本文英文原文发表于知名技术博客<Highly Scalable Blog>,由@juliashine 进行翻译投稿.感谢译者的共享精神! 译者介绍:Juliashine是多年抓娃工程师,现 ...

  9. 基于R的FP树fp growth 关联数据挖掘技术在煤矿隐患管理

    研究煤矿隐患数据的挖掘以实现海量隐患数据的有效利用,在分析矿山数据挖掘枝术和煤矿隐患数据特点的基础上,提出煤矿隐患数据挖掘是矿山数字化的重要组成部分,给出煤矿隐患数据挖掘的概念,设计了煤矿隐患数据挖掘 ...

最新文章

  1. 【转】Visio画用例模型图竟然没有include关系
  2. Opencv常见用法和常见错误(一)
  3. 简单有效!在CV/NLP/DL领域中,有哪些修改一行代码或者几行代码提升性能的算法?...
  4. boost::smart_ptr模块collector相关的测试程序
  5. python中name没有定义_python中__name__的使用
  6. 哨兵2号波段_分布式框架之高性能:Redis哨兵模式
  7. java大数据开发是做什么的_3年Java开发转型大数据,如何跳出CRUD舒适区?
  8. 内网穿透工具的原理与开发实战
  9. 甲骨文裁员900多人,赔偿N+6,有人获赔100万,被裁也能致富?
  10. 下载慢怎么办?(域名遭到dns污染处理方法)
  11. 阿里巴巴的安全能力究竟是什么水平?
  12. 目前人工智能技术,主要有应用于哪些领域?
  13. ANDROID集成支付宝SDK_APP应用支付宝开发DEMO
  14. 论文阅读——Aspect Sentiment Quad Prediction as Paraphrase Generation
  15. Guitar Pro教程之记谱法简介
  16. win7右键计算机没有注册类,win7系统提示没有注册类别的解决方法
  17. 智能分析最佳实践——指标逻辑树
  18. oracle中笛卡尔积怎么用,Oracle的表连接方法(四)笛卡尔积
  19. 监控视频服务器协议,教你用Spcaserv架设网络视频监控 - 网络协议 - 电子发烧友网...
  20. 不用向日葵 teamview 利用云服务器部署FRP穿透内网实现控制远程桌面

热门文章

  1. 前端学习(2362):上拉加载
  2. 前端学习(2185):tabberitem的颜色动态
  3. 前端学习(1484):json-server工具使用
  4. 第七期:Python 从入门到精通:一个月就够了!
  5. 2020年周记(1/50)
  6. mybatis字符串转成数字_Python字符串三种格式化输出
  7. 工业机器人工具中心点标定的意义_如何理解工业机器人的工具中心点
  8. Dev Express Report 学习总结(五)在分组中使用聚集表达式AggregateExpression
  9. 使用贝赛尔路径(UIBezierPath)创建画板
  10. 实例1.2:获得应用程序主窗口指针