FP-growth算法

当搜索引擎输入一个单词的时候,会自动补全查询词项。用的就是FP-growth算法,一种用来高效发现频繁集的方法。比Apriori算法更快。

应用:用于识别经常出现的元素相,制定决策、推荐元素或进行预测等。

任务:将数据集存储在一个特定的称作FP树的结构之后发现频繁项对,即常在一块出现的元素项的集合FP树。执行速度比Apriori性能要好两个数量级以上。

每次增加频繁项集的大小,Apriori算法都会重新扫描整个数据集,而FP-growth算法只需要对数据库进行两次扫描。

过程:

(1)构建FP树

  • 1)第一遍对所有元素项的出现次数进行计数。
  • 2)第二遍扫描去掉不满足最小支持度的元素,按序读入每个项集并添加到一个存在的路径中,构建FP树。
事务数据集(最小支持度为3)
事务ID事务中的元素项过滤及重排后的元素项
001r,z,h,j,pz,r
002z,y,x,w,v,u,t,sz,x,y,s,t
003zz
004r,x,n,o,sx,s,r
005y,r,x,z,q,t,pz,x,y,r,t
006y,z,x,e,q,s,t,mz,x,y,s,t
从空集开始,将过滤和重排序后的频繁项集一次添加到树中。如果树中已存在现有元素,则增加现有元素的值;如果现有元素不存在,则向树添加一个分支。

实现带头指针的FP树

(2)从FP树中挖掘(抽取)频繁项集

从FP树中抽取频繁项集的三个基本步骤如下:

  • 1)从FP树中获得条件模式基;
  • 2)利用条件模式基,构建一个条件FP树;
  • 3)迭代重复步骤1步骤2,直到树包含一个元素项为止。
从头指针表中的每个频繁元素项开始,对每个元素项,获得其对应的条件模式基。条件模式基是以所查找元素项为结尾的路径集合(前缀路径)。
频繁项前缀路径
z{}5
r{x,s}1,{z,x,y}1,{z}1
x{z}3,{}1
y{z,x}3
s{z,x,y}2,{x}1
t{z,x,y,s}2,{z,x,y,r}1
前缀路径用于构建条件FP树,递归发现频繁项、发现条件模式基及条件树。
以频繁项t为例:

元素项s以及rs和r不满足最小支持度的条件,它们并不属于条件FP树。

递归查找频繁项集:
输入:我们有当前数据集的FP树(inTree,headerTable)
1. 初始化一个空列表preFix表示前缀
2. 初始化一个空列表freqItemList接收生成的频繁项集(作为输出)
3. 对headerTable中的每个元素basePat(按计数值由小到大),递归:
  • 记basePat + preFix为当前频繁项集newFreqSet
  • 将newFreqSet添加到freqItemList中
  • 计算的条件FP树(myCondTree、myHead)
  • 当条件FP树不为空时,继续下一步;否则退出递归
  •  以myCondTree、myHead为新的输入,以newFreqSet为新的preFix,外加freqItemList,递归这个过程
以频繁项t为例:

图中红色加粗的部分即实际添加到freqItemList中的频繁项集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值