PFP(Parallel FPGrowth)

分布式FP-tree

1.首先还是对购物篮数据进行排序,计数,假设min_sup=3.去掉支持度小于3的项。

2.按照fp-tree的画法,对第二列整理过的项建树,fcamp,fcabm,fb,cbp,fcamp,建立fp-tree如下:

3.第三列是从右向左遍历第二列,得到至某点的路径,例如,到p的路径为fcam,到m的是fca,到a的是fc,到c的是f,该过程发生在map端,购物篮数据存放在各个节点上,产生如上图所示的第三列的<k,v>

4.通过shuffle过程,发送至reducer,在reduce端很容易就发现了频繁模式

为了验证上述结果,用fp-tree挖掘频繁模式:

p:第一条路径上p计数为2,小于min_sup,则去掉所有计数为2的项(f,a,m),最右边的路径上c,p各出现1次,加上第一条路径上的p:2,c:2,最终为p:3,c:3

m:第一条路径上f2-c2-a2-m2,第二条路径f1-c1-b1-m1,过滤掉b之后,总共是f3-c3-a3-m3,最终模式是:f:3,c:3,a:3,m:3

b:挖不出任何东西

同理:

a:f:3,c:3,a:3

c:f:3,c:3

命理得证。

PFP算法瓶颈:

在reduce端,mapshuffle过后将所有数据放在了reduce端,同样很容易将reduce节点的内存撑爆

http://infolab.stanford.edu/~echang/recsys08-69.pdf给出了一种方法

1.假设分成两组G1和G2,G1包含商品c,a,p;G2包含商品f,b,m,

2.对每一个购物篮数据进行处理

第一个购物篮数据:f,c,a,m,p,分成G1,G2两组,上面的思想是根据商品映射出许多<k,v>,在这里不再根据商品映射,而是根据分组映射,第一个购物篮中,G1组,最右边的是p,则自右向左写下购物篮fcamp,这里key是G1,value是fcamp;同理G2为key时,value是fcam,即<G1,fcamp><G2,fcam>;

第二个购物篮数据:f,c,a,b,m,分成G1,G2两组,<G1,fca><G2,fcabm>

第三个购物篮数据:f,b,分成G1,G2两组,<G1,null><G2,fb>

第四个购物篮数据:c,b,p分成G1,G2两组,<G1,cbp><G2,cb>

第五个购物篮数据:c,b,p分成G1,G2两组,<G1,fcamp><G2,fcam>

过程如下图:

3.上面的<k,v>会映射到G1,G2两台机,分别重构出fp-tree

时间: 2025-01-12 13:18:27

PFP(Parallel FPGrowth)的相关文章

Mahout源码分析:并行化FP-Growth算法

FP-Growth是一种常被用来进行关联分析,挖掘频繁项的算法.与Aprior算法相比,FP-Growth算法采用前缀树的形式来表征数据,减少了扫描事务数据库的次数,通过递归地生成条件FP-tree来挖掘频繁项.参考资料[1]详细分析了这一过程.事实上,面对大数据量时,FP-Growth算法生成的FP-tree非常大,无法放入内存,挖掘到的频繁项也可能有指数多个.本文将分析如何并行化FP-Growth算法以及Mahout中并行化FP-Growth算法的源码. 1. 并行化FP-Growth 并行

关联规则之频繁模式树及其并行计算

Frequent Pattern Tree(频繁模式树)是Jiawei Han在文章<Mining Frequent Patterns without Candidate Generation >中提出的. ---------------------------------------------------- 下面给出一些定义: 设项集(set of items),交易数据库(transaction database),其中交易(transaction),,是 中的元素组成的集合.模式(Pa

关联规则( Association Rules)之频繁模式树(FP-Tree)

Frequent Pattern Tree(频繁模式树)是Jiawei Han在2004年的文章<Mining Frequent Patterns without Candidate Generation >中提出的. ---------------------------------------------------- 以下给出一些定义: 设项集(set of items),交易数据库(transaction database).当中交易(transaction).,是中的元素组成的集合.

数据挖掘算法之关联规则挖掘(二)FPGrowth算法

之前介绍的apriori算法中因为存在许多的缺陷,例如进行大量的全表扫描和计算量巨大的自然连接,所以现在几乎已经不再使用 在mahout的算法库中使用的是PFP算法,该算法是FPGrowth算法的分布式运行方式,其内部的算法结构和FPGrowth算法相差并不是十分巨大 所以这里首先介绍在单机内存中运行的FPGrowth算法 还是使用apriori算法的购物车数据作为例子,如下图所示: TID为购物车项的编号,i1-i5为商品的编号 FPGrowth算法的基本思想是,首先扫描整个购物车数据表,计算

大量数据快速插入方法探究[nologging+parallel+append]

大量数据快速插入方法探究 快速插入千万级别的数据,无非就是nologging+parallel+append. 1     环境搭建 构建一个千万级别的源表,向一个空表insert操作. 参考指标:insert动作完成的实际时间. SQL> drop table test_emp cascadeconstraints purge; Table dropped. SQL> create table test_emp as select *from emp; Table created. SQL&

使用Apriori算法和FP-growth算法进行关联分析(Python版)

===================================================================== <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记也包含一些其他python实现的机器学习算法 算法实现均采用python github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python ==================================

机器学习实战精读--------FP-growth算法

从数据集获取有趣信息的方法:常用的两种分别是频繁项集和关联规则. FP-growth:虽然可以高效的发现频繁项集,但是不能用于发现关联规则. FP-growth算法只需要对数据库进行两次扫描,速度要比Apriori算法块. FP-growth发现频繁项集的基本过程: ① 构建FP树 第一遍 对所有元素项的出现次数进行技术,用来统计出现的频率. 第二遍 只考虑哪些频繁元素 ② 从FP树种挖掘频繁项集. 从FP树种抽取频繁项集的三个基本步骤: ① 从FP树种获得条件模式基 ② 利用条件模式基,构建一

SMON: Parallel transaction recovery tried 引发的问题--转载

SMON: Parallel transaction recovery tried 这个一般是在具有在跑大数据量的 transaction的时候kill掉了进程而导致 smon 去清理 回滚段时导致的. 这个在业务高峰期的时候,如果发现这个,有可能导致 SMON 占用了 100% cpu 而导致 系统 hang 在那边.即使你shutdown immediate ,oracle 也会等待 smon 清理完毕才能关机,而这个等待过程也许是漫长的.如果你 shutdown abort,那么oracl

【狼窝乀野狼】Parallel浅尝辄止

前段时间看到园子里面有同学在用Parallel进行批量插入数据库.后面也有很多同学针对这一事件给出了自己的看法和见解.我在这里不评论内容的好坏,至少能将自己东西总结分享这个是要靠勇气和毅力. 闲话少说,我在最近看崔鹏飞的github的时候,发现他对这块也做了一定的总结,那么我就他这块进行板书与展示.案例是怎么回事呢?话说我有一个公司,里面需要统计一下总收入,另外有一个公司被我收购了,我一起计算总收入.当一天我收购了N个公司,计算总收入的时候,我们采用并行计算. 1 internal class