PFP算法

产生原因:由于无论数据集规模大小,使用的频繁项集挖掘算法所占内存的使用和计算成本代价过大,因此产生了并行式FP-Growth算法,该算法将挖掘数据集的任务分配在多个计算机上,每个计算机相互独立并行的计算与通信。

FIM(频繁项集挖掘)的定义:I={a1,a2,…am}是一个项目的集合,一个事务数据库DB是I的一个子集,DB={T1,T2,…Tn},每一个Ti属于I(1<=i<=n),Ti属于一个事务。模式A(属于I)的支持度为supp(A),是这个某些事务(包含模式A)在整个DB中的个数。A是一个频繁模式且supp(A)>=ξ(ξ被定义为最小支持度阈值)。给定一个DB和ξ,这个问题就可以描述为在DB中寻找频繁模式集合,即为频繁项集挖掘问题。

FP-Growth体现了一种分治的策略。该算法需要扫描两次数据库,第一次扫描数据库时计算所有项目的频数,并按照此频数的降序排序生成一个F-List。在第二次扫描中所有数据库中的数据都被压缩为一个FP-tree。接着FP-Growth就开始挖掘这个FP-tree,即针对每一个满足supp(A)>ξ的项目递归的生成一个条件FP-tree。然后递归的挖掘这个FP-tree。所以就把寻找频繁项目集转换为递归地查找和创建树的过程。

FP-Growth算法的不足

1.存储。对于一个非常大的DB来说,其相应的FP-tree也是十分大的,以至于不能存储内存中。所以生成比较小的DB就很有必要,所以可以把DB分为比较小的DB,然后每个DB创建本地的可以被放入内存中的FP-tree;

2.分配计算。所有的FP-Growth可以被并行化,特别是递归的调用Growth();

3.通信成本。分布式FP树可能是相互依赖的,因此可能在并行执行线程之间引起频繁同步。

4.支持度阈值。阈值越大生成的树储存的就越小,相应的时间就越少;反之亦然;

改进

针对上述FP-Growth算法的不足,PFP-Growth算法进行了改进,即对计算进行分区,使每一台计算机执行一组独立的挖掘任务,这种划分消除了计算机之间的依赖性,从而消除了计算机之间的通信。

并行式FP-Growth算法流程

Step1:分割。分割DB到P台不同的电脑,每台电脑的部分数据称为分片(shard);
Algorithm 1: FP-Growth Algorithm

Procedure: FPGrowth(DB, ξ)

Defifine and clear F-List : F[];

foreach Transaction Ti in DB do

foreach Item aj in Ti do

F[ai] ++;

end

end

Sort F[];

Defifine and clear the root of FP-tree : r;

foreach T transaction Ti in DB do

​ Make Ti ordered according to F;

​ Call Construct Tree(Ti, r);

end

foreach item ai in I do

​ Call Growth(r, ai, ξ);

end

Step2:并行计算。使用MapReduce计算所有项目的支持度。每个Mapper计算一个分片,最后的结果存储在F-list中;

Algorithm 2: The FP-Growth Algorithm.

Procedure: Growth(r, a, ξ)

if r contains a single path Z then

​ foreach combination(denoted as γ) of the nodes in

​ Z do

​ Generate pattern β = γ ∪ a with support = minimum support of nodes in γ;

​ if β.support > ξ then

​ Call Output(β);

​ end

​ end

else

​ foreach bi in r do

​ Generate pattern β = bi ∪ a with support =

​ bi.support;

​ if β.support > ξ then

​ Call Output(β);

​ end

​ Construct β0s conditional database ;

​ Construct β0s conditional FP-tree T reeβ;

​ if T reeβ = φ then

​ Call Growth(T reeβ, β, ξ);

​ end

​ end

end

Step3:划分项目组。把F-list分为Q组(每组为一个G-list),每组赋予一个唯一的组ID(gid),这个过程在一个电脑上完成;

Algorithm 3: The Parallel Counting Algorithm

Procedure: Mapper(key, value=Ti)

foreach item ai in Ti do

​ Call Output(hai,0 10i);

end

Procedure: Reducer(key=ai, value=S(ai))

C 0;

foreach item 010 in Ti do

​ C C + 1;

end

Call Output(hnull, ai + Ci);

Step4:并行FP-Growth。PFP的关键的一步,其Mapper和Reducer都是不同的操作;

Mapper:产生由组分配的事务集,事先读入G-list,输出一个或者多个key-value对,其中key为gid,value为由组分配的事务集;

Reducer:每个Reducer操作一个或者多个由组分配的分片,对于一个分片这个reducer建立一个本地的FP-tree,接着递归的建立条件FP-tree并且在递归的过程中输出发现的模式组合;

Algorithm 4: The Parallel FP-Growth Algorithm

Procedure: Mapper(key, value=Ti)

Load G-List;

Generate Hash Table H from G-List;

a[] Split(Ti);

for j = |Ti| − 1 to 0 do

HashNum ← getHashNum(H, a[j]);

if HashNum = Null then

​ Delete all pairs which hash value is HashNum

​ in H;

​ Call

Output(hHashNum, a[0] + a[1] + + a[j]i);

end

end

Procedure: Reducer(key=gid,value=DBgid)

Load G-List;

nowGroup ← G-Listgid;

LocalF P tree ← clear;

foreach Ti in DB(gid) do

​ Call insert − build − f p − tree(LocalF P tree, Ti);

end

foreach ai in nowGroup do

​ Defifine and clear a size K max heap : HP;

​ Call T opKF P Growth(LocalF P tree, ai, HP);

foreach vi in HP do

​ Call Output(hnull, vi + supp(vi)i);

end

end

Step5:聚集所有的结果;

Algorithm 5: The Aggregating Algorithm

Procedure: Mapper(key, value=v + supp(v))

foreach item ai in v do

​ Call Output(hai, v + supp(v)i);

end

Procedure: Reducer(key=ai, value=S(v + supp(v)))

Defifine and clear a size K max heap : HP;

foreach pattern v in v + supp(v) do

​ if |HP| < K then

​ insert v + supp(v) into HP;

​ else

​ if supp(HP[0].v) < supp(v) then

​ delete top element in HP;

​ insert v + supp(v) into HP;

​ end

​ end

end

Call Output(hnull, ai + Ci);

应用场景

实验证明,并行式FP-Growth算法实现数据量和挖掘速度呈线性关系。即数据量越大,数据挖掘速度越快,该算法适合用于数据量大的数据集。

并行FP-growth算法相关推荐

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

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

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

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

  3. FP Growth算法

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

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

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

  5. FP Growth算法详解

    看了n多资料,就这篇说的比较详细,适合初学者 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. 基于R的FP树fp growth 关联数据挖掘技术在煤矿隐患管理

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

  9. 软件项目规模估算的3种方法---Loc估算法、FP估算法、PERT估算法

    软件项目规模估算的方法 Loc估算法 FP估算法 PERT估算法   软件规模是软件工作量的主要影响因素,常用的软件规模度量方法有三种,分别是Loc估算法.FP估算法.PERT估算法. Loc估算法 ...

  10. 【数据挖掘】:FP增长算法详解

    FP-growth算法,fpgrowth算法详解 使用FP-growth算法来高效发现频繁项集 前言 你用过搜索引擎挥发现这样一个功能:输入一个单词或者单词的一部分,搜索引擎酒会自动补全查询词项,用户 ...

最新文章

  1. 使用VS 自带的打包工具,制作winform安装项目
  2. pyrosim有Linux版本吗,烟气流动分析软件Pyrosim版本 2020.4.092
  3. ActiveRecord使用多数据库
  4. 【论文解读】打破常规,逆残差模块超强改进,新一代移动端模型MobileNeXt来了!精度速度双超MobileNetV2...
  5. mysql 开发复制协议_MySQL组复制MGR(一)– 技术概述
  6. 用户体验报告(Echo)
  7. [Asp.Net web api]基于自定义Filter的安全认证
  8. 论文纠错和管理文献工具
  9. Matlab:实现菲涅尔圆孔衍射仿真
  10. 全网最全的AItium Designer 16下载资源与安装步骤
  11. 8年Android开发教你如何写简历,附超全教程文档
  12. App登陆页面必备(一)
  13. 西安交大2021考研计算机专业复试分数线,西安交通大学2021年研究生复试分数线是多少...
  14. win10开机自动拨号上网
  15. A - Robot Rapping Results Report
  16. 从host端对Windows虚机进行内存dump和分析
  17. rk3328或树莓派开发板系统镜像备份制作剪裁
  18. JavaScript实现更换背景图片
  19. 第二章 03 藤蔓生长
  20. java 表格 列删除_Java 删除Excel表格中的空白行或列

热门文章

  1. 多标签资源管理器哪个最好用
  2. 关于kibana 查询出现 x分片有 x 个失败
  3. Digital Ocean droplet迁移
  4. LTE信号质量类指标
  5. VR的国内研究现状及发展趋势
  6. 不走寻常路 — 第二代灵耀 S 2 代长测
  7. MLSys 2020 | FedProx:异质网络的联邦优化
  8. Remix OS PC 版面向全球开放
  9. vue项目--open打开0.0.0.0网址如何修改
  10. 关于支持原创的声明!