关联分析——FP-growth算法

使用FP-growth算法高效发现频繁项集

1. 介绍

FP-growth(Frequent Pattern Tree,频繁模式树)算法是为了解决 Apriori 算法每次增加频繁项集得大小都要遍历整个数据库的缺点,特别是当数据集很大时。FP-growth 算法基于 Apriori 构建,但采用了高级的数据结构减少了扫描次数,加快了算法速度。

FP-growth 算法的任务是:将数据集存储在一个特定的称为 FP 树的结构之后发现频繁项集或者频繁项对,虽然它能够高效地发现频繁项集,但是不能用来发现关联规则,也就是只优化了 Apriori 算法两个功能中的前一个功能。

FP-growth 算法只需要对数据集进行两次扫描,所以即使数据集很大时也不会花费太多的时间在扫描数据集上。该算法发现频繁项集的基本过程如下:
1)构建 FP 树
2)从 FP 树中挖掘频繁项集

2. 算法详解

2.1 FP-growth 的一般流程如下:

  1. 先扫描一遍数据集,得到频繁项为 1 的项目集,定义最小支持度 min_support(项目出现最少次数),删除掉那些小于最小支持度的项目,然后将原数据集中的条目按项目集降序排列。
  2. 第二次扫描,创建项头表(从上往下降序),以及 FP 树。
  3. 对于每一个项目(可以按照从下往上的顺序)找到其条件模式基(CPB,conditional pattern base),递归调用树结构,删除小于最小支持度的项。如果最终呈现单一路径的树结构,则直接列举所有组合;非单一路径的,则继续调用树结构,直到形成单一路径即可。

2.2 示例说明

如下表示的数据清单(第一列为事务 ID,第二列为事务中的元素项):

事务 ID事务中的元素项
1r,z,h,j,p
2z,y,x,w,v,u,t,s
3z
4r,x,n,o,s
5y,r,x,z,q,t,p
6y,z,x,e,q,s,t,m

第一步:构建 FP 树

构建 FP 树是算法的第一步,在 FP 树的基础之上再对频繁项集进行挖掘。为了构建 FP 树,要对数据集扫描两次,对一次对所有元素项出现的次数进行计数,记住:如果一个元素不是频繁的,那么包含该元素的超集也不是频繁的,所以不需要考虑这些超集;第一次扫描只考虑那些频繁项集。

  1. 扫描数据集,对每个事务进行统计:
rzhjpyxwvutsnoqem
35112341113311211
  1. 假若设定最小支持度(即事务最小出现次数)为 3,删除低于最小支持度的事务,按照降序重新排列数据集:
zxyrst
543333
  1. 根据项目出现次数重新调整事务项:
事务 ID事务中的事务项重新排序的事务项
1r,z,h,j,pz,r
2z,y,x,w,v,u,t,sz,x,y,s,t
3zz
4r,x,n,o,sx,s,r
5y,r,x,z,q,t,pz,x,y,r,t
6y,z,x,e,q,s,t,mz,x,y,s,t
  1. 构建 FP 树
    依次加入各条清单{(z,r),(z,x,y,s,t),…,(z,x,y,s,t)},出现相同的节点进行累加,最终得到 FP 树:

第二步:从 FP 树中挖掘频繁项集

从 FP 树中抽取频繁项集的三个基本步骤:
  1)从 FP 树中获得条件模式基
  2)利用条件模式基,构建一个条件FP树
  3)迭代重复步骤1)、2)直到树只包含一个元素项为止。
 
1)抽取条件模式基

首先从头指针表中的每个频繁元素项开始,对每个元素项,获得其对应的条件模式基(conditional pattern base)。条件模式基是以所查找元素项为结尾的路径集合。每一条路径其实都是一条前缀路径(prefix path)。简而言之,一条前缀路径是介于所查找元素项与树根节点之间的所有内容。

则每一个频繁元素项的所有前缀路径(条件模式基)为:

频繁项前缀路径(条件模式基)
z{}:5
x{z}:3,{}:1
y{z,x}:3
s{z,x,y}:2,{x}:1
r{z,x,y}:1,{x,s}:1,{z}:1
t{z,x,y,s}:2,{z,x,y,r}:1

2)构建条件 FP 树

按照从下往上的顺序,对于每一个频繁项,根据其条件模式基,创建一棵条件 FP 树,然后根据最小支持度删除一些节点,最后得到该元素的频繁项集。

例如,对于 t,根据其条件模式基 {z,x,y,s}:2,{z,x,y,r}:1,构造条件 FP 树如下,删除小于支持度的节点:

3)递归查找频繁项集

上例形成单路径后,元素 t 与其条件 FP 树中各元素进行组合,得到 t 的频繁项集:{ {tz:3},{tx:3},{ty:3},{tzx:3},{tzy:3},{txy:3},{tzxy:3} }。
接下来考虑其他元素,依照上述方法执行,即可得到每个元素的频繁项集。

整个过程如下图:

根据 FP-growth 算法,最终得到的支持度不小于3的频繁项集如下:

item条件模式基条件 FP 树产生的频繁项集
z{}:5{}{z:5}
x{z:3},{}:1{z:3}{x:4},{x,z:3}
y{z,x:3}{z:3,x:3}{y:3},{y,z:3},{y,x:3},{y,z,x:3}
s{z,x,y:2},{x:1}{x:3}{s:3},{s,x:3}
r{z,x,y:1},{x,s:1},{z:1}{}{r:3}
t{z,x,y,s:2},{z,x,y,r:1}{z:3,x:3,y:3}{t:3},{t,z:3},{t,x:3},{t,y:3},{t,z,x:3},{t,z,y:3},{t,x,y:3},{t,z,x,y:3}

注意:当条件 FP 树不是单一路径时,则需要递归查找频繁项集。
举例:如果某节点 I3,得到其条件模式基 {I2,I1:3}、{I2:1}、{I1:3} 构造条件 FP 树,由于此树不是单一路径,因此需要递归挖掘 I3。,递归考虑 I3,此时得到 I1 的条件模式基 {I2:2},即 I1I3 的条件模式基为 {I2:2},构造条件 FP 树,由此得到节点 I3 的频繁项目集 {I3:6},{{I3,I2:4},{I3,I1:6},{I2,I1,I3:3}}。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值