MapReduce改造fp-growth算法

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《一线架构师实践指南》—— 读后总结

之前总觉得架构是一件很高大上的工作&#xff0c;跟普通的编码设计不太一样。前一段实践&#xff0c;自己也尝试做过架构的工作&#xff0c;可惜经验不足导致架构非常混乱。这里读完这本书&#xff0c;大体上对架构的工作有所了解&#xff0c;也稍微摸清了些门道。 我理解的架构…

随机排列实现 -shuffle算法

随机排列实现 -shuffle算法 洗牌算法&#xff08;shuffle&#xff09;&#xff1a;原理是&#xff0c;一个数A&#xff0c;随机选一个在这个数A之前的下标&#xff0c;将这个下标对应数字与A对换&#xff1b;之后不再考虑最后的这一个数&#xff1b; 类似于无放回的抽签问题&…

前端学习(2008)vue之电商管理系统电商系统之获取静态属性列表

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

转载_递归树求递归算法的时间复杂度

递归算法时间复杂度的计算方程式一个递归方程&#xff1a; 在引入递归树之前可以考虑一个例子&#xff1a; T(n) 2T(n/2) n2 迭代2次可以得&#xff1a; T(n) n2 2(2T(n/4) (n/2) 2) 还可以继续迭代&#xff0c;将其完全展开可得&#xff1a; T(n) n2 2((n/2) 2 2((n/2…

前端学习(2011)vue之电商管理系统电商系统之初步使用upload上传组件

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

为什么使用Deque而不使用Stack构造栈

为什么使用Deque而不使用Stack构造栈 Class Stack<E> java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.Vector<E> java.util.Stack<E> 实现的所有接口 Serializable &#xff0c; Cloneable &#xff…

前端学习(2012)vue之电商管理系统电商系统之手动为upload组件添加请求头

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

计算器、中文转数字

计算器 1.字符串转整数 string s "458";int n 0; for (int i 0; i < s.size(); i) {char c s[i];n 10 * n (c - 0); } // n 现在就等于 458 2.处理加减法 我们拿字符串算式1-123为例&#xff0c;来说一个很简单的思路&#xff1a; 1、先给第一个数字加…

前端学习(2009)vue之电商管理系统电商系统之渲染商品属性的结构

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

浏览器上请求URL的全部过程

分为六步 1. 域名解析   浏览器首先要做去获得想访问网页的IP地址&#xff0c;浏览器会发送一个UDP的包给DNS域名解析服务器。DNS就会返回给我们百度的IP地址&#xff0c;通常来说浏览器会把访问过的网站的IP保存下来&#xff0c;这样下次访问的时候就会快很多&#xff0c;能…

前端学习(2013)vue之电商管理系统电商系统之监听on-success事件

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

常见算法复习整理1

数据结构笔记 1.迭代与递归 递归过程中的递归因子本身可以被忽略&#xff08;被计入它自己的过程中了&#xff09; 递归跟踪、递推方程。递归基 减而治之&#xff1a;Decrease and Conquer 线性递归的模式 T(n) T(n-1) O(1) 分而治之&#xff1a;Divide and Conquer 一般…

前端学习(2014)vue之电商管理系统电商系统之监听on-remove事件

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

HIT计网笔记

一、实践课笔记 1. 路由器连接的是两个不同的网络&#xff0c;交换机连接的是同一个网络。路由器负责在不同网段转移数据&#xff0c;交换机看mac地址&#xff0c;路由器看ip地址。 2. 子网掩码可以分离出IP地址中的网络地址和主机地址&#xff0c;同一个网络的网络地址相同&…

前端学习(2015)vue之电商管理系统电商系统之实现图片的预览效果

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

几种排序与最大K问题

图片链接 0. 链表归并和快排 链表排序常用归并&#xff0c;但是快排面试常出&#xff1b; 一定要理解归并的本质&#xff1a; 两步走&#xff1a; 1. 先切分成(有序)两部分&#xff0c;此处各部分都是有序的 2. 两部分有序合并 切分成两部分的最小粒度是一个元素&#…

前端学习(2016)vue之电商管理系统电商系统vue-quill-editor

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

经典算法题:字典树、并查集、单调栈、二分、带标记函数dp、树、全排列、字符串问题等常用算法

0. Tips 1. 位运算 如何枚举一个二进制状态数字k的子集, 方法就是针对中的二进制为1的位开始进行减法&#xff0c;判断数字k的二进制子集, 像枚举(2^k-1) ~ 0一样枚举其子集&#xff1b; int sub k;do {sub (sub - 1) & k;} while(sub ! k); 比如k 10101的二进制子集…

web窗体的内置对象

内置对象&#xff1a;1、Response - 响应请求对象 Response.Redirect("Default2.aspx"); //重定向 Response.Write("<script>window.open(Default2.aspx);</script>"); ---可以书写任何东西&#xff0c;直接输出出去2、Request - 接收请求对象…

前端学习(2017)vue之电商管理系统电商系统实现表单的预先认证

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…