FP Tree算法原理总结

FP Tree一个挖掘频繁项集的算法,但它和Apriori算法有一定的区别。Apriori要多次扫描数据集,而FP Tree只需要扫描两次数据集,提高了算法运行的效率。

FP Tree数据结构

1.第一部分是一个项头表。里面记录了所有的1项频繁集出现的次数,按照次数降序排列。

2.第二部分是FP Tree,它将我们的原始数据集映射到了内存中的一颗FP树。

3.第三部分是节点链表。所有项头表里的1项频繁集都是一个节点链表的头,它依次指向FP树中该1项频繁集出现的位置。这样做主要是方便项头表和FP Tree之间的联系查找和更新,也好理解。

项头表的建立

第一次扫描数据,得到所有频繁一项集的的计数。然后删除支持度低于阈值的项,将1项频繁集放入项头表,并按照支持度降序排列。接着第二次也是最后一次扫描数据,将读到的原始数据剔除非频繁1项集,并按照支持度降序排列。

FP Tree的建立

FP Tree的建立依赖项头表的建立。有了项头表和排序后的数据集,我们就可以开始FP树的建立了。开始时FP树没有数据,建立FP树时我们一条条的读入排序后的数据集,插入FP树,插入时按照排序后的顺序,插入FP树中,排序靠前的节点是祖先节点,而靠后的是子孙节点。如果有共用的祖先,则对应的公用祖先节点计数加1。插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点。直到所有的数据都插入到FP树后,FP树的建立完成。

FP-tree挖掘(挖掘频繁项集)

条件模式基就是把挖掘的节点作为叶子节点所对应的FP子树。

条件模式基怎么找:挖掘的顺序不是从上往下去挖掘的而是从项表头最底下的节点开始,向上搜索,在一条链表上的除去首个节点,就是它的条件模式基,树形结构会有分支,分支节点跟之前一样查找条件模式基,然后两个条件模式基相加。例如下面这个例子

以b为例子,假设最小支持度为2,在b这一条链上有E、C、A,因为E、C、A出现次数都大于最小支持度,所以b的条件模式基为ECA

在以E为例,最小支持度还是2,我们发现有两个E,这时候这两个E分来重复上一个的做法,在E6上他的条件模式基为CA,E2为null两者相加E的条件模式基为CA。

产生频繁项集

每一个节点通过条件模式基,看条件模式基大于或者小于最小支持度,小于最小支持度的删除,大于的则保留下来然后一层一层递归下去,直到为空。在全部节点产生出的频繁项集中,选择这个数据的最大频繁项集。

算法归纳

1、扫描数据,得到所有频繁一项集的的计数。然后删除支持度低于阈值的项,将1项频繁集放入项头表,并按照支持度降序排列。

2、扫描数据,将读到的原始数据剔除非频繁1项集,并按照支持度降序排列。

3、读入排序后的数据集,插入FP树,插入时按照排序后的顺序,插入FP树中,排序靠前的节点是祖先节点,而靠后的是子孙节点。如果有共用的祖先,则对应的公用祖先节点计数加1。插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点。直到所有的数据都插入到FP树后,FP树的建立完成。

4、从项头表的底部项依次向上找到项头表项对应的条件模式基。从条件模式基递归挖掘得到项头表项项的频繁项集(可以参见第4节对F的条件模式基的频繁二项集到频繁5五项集的挖掘)。

5、如果不限制频繁项集的项数,则返回步骤4所有的频繁项集,否则只返回满足项数要求的频繁项集。

参考文章: 刘建平FP Tree     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值