FP-tree

FP-tree

  FP-growth算法(Frequent Pattern-growth)使用了一种紧缩的数据结构来存储查找频繁项集所需要的全部信息。采用算法:将提供频繁项集的数据库压缩到一棵FP-tree来保留项集关联信息,然后将压缩后的数据库分成一组条件数据库(一种特殊类型的投影数据库),每个条件数据库关联一个频繁项集。

编辑本段FP-tree定义

  (1)频繁模式树(Frequent Pattern tree)简称为FP-tree,是满足下列条件的一个树结构:它由一个根节点(值为null)、项前缀子树(作为子女)和一个频繁项头表组成。
  (2)项前缀子树中的每个结点包括三个域:item_name、count和node_link,其中:
  item_name记录结点表示的项的标识;count记录到达该结点的子路径的事务数;
  node_link用于连接树中相同标识的下一个结点,如果不存在相同标识下一个结点,则值为“null”。
  (3)频繁项头表的表项包括一个频繁项标识域:item_name和一个指向树中具有该项标识的第一个频繁项结点的头指针:head of node_link。
  对于包含在FP-tree中某个结点上的项α,将会有一个从根结点到达α的路径,该路径中不包含α所在结点的部分路径称为α的前缀子路径(prefix subpath),α称为该路径的后缀。在一个FP-tree中,有可能有多个包含α的结点存在,它们从频繁项头表中的α项出发,通过项头表中的head of node_link和项前缀子树中的node_link连接在一起。FP-tree中每个包含α的结点可以形成α的一个不同的前缀子路径,所有的这些路径组成α的条件模式基(conditional pattern base)。用α的条件模式基所构建的FP-tree称为α的条件模式树(conditional FP-tree)。
    

编辑本段FP-tree构造算法

   输入:事务数据库D和最小支持度阈值minσ。
   输出:D所对应的FP-tree。
  方法:FP-tree是按以下步骤构造的:
  (1)扫描事务库D,获得D中所包含的全部频繁项集1F,及它们各自的支持度。对1F中的频繁项按其支持度降序排序得到L。
  (2)创建FP-tree的根结点T,以“null”标记。再次扫描事务库。对于D中每个事务,将其中的频繁项选出并按L中的次序排序。设排序后的频繁项表为[p|P],其中p是第一个频繁项,而P是剩余的频繁项。调用insert_tree([p|P],T)。insert_tree([p|P],T)过程执行情况如下:如果T有子女N使N .item_name=p.item_name,则N的计数增加1;否则创建一个新结点N,将其计数设置为1,链接到它的父结点T,并且通过node_link将其链接到具有相同item_name的结点。如果P非空,递归地调用insert_tree(P,N)。FP-tree是一个高度压缩的结构,它存储了用于挖掘频繁项集的全部信息。FP-tree所占用的内存空间与树的深度和宽度成比例,树的深度一般是单个事务中所含项目数量的最大值;树的宽度是平均每层所含项目的数量。由于在事务处理中通常会存在着大量的共享频繁项,所以树的大小通常比原数据库小很多。频繁项集中的项以支持度降序排列,支持度越高的项与FP-tree的根距离越近,因此有更多的机会共享结点,这进一步保证了FP-tree的高度压缩。

编辑本段FP-tree的相关的性质定理

  基于FP-tree挖掘频繁闭项集,需要了解FP-tree如下性质和定理:
  性质2.1(结点链性质)对于任何频繁项ia,从FP-tree的头表对应ia项的头指针(headof node_link)开始,通过遍历ia的结点链(node_link)可以挖掘出所有包含ia的频繁模式。
  性质2.2(前缀路径性质)为了计算以ia为后缀的频繁模式,仅仅需要在FP-tree中计算ia结点的前缀路径,并且前缀路径中每个结点的频繁计数等于ia结点的频繁计数。
  定理2.3(分段增长)设α为事务数据库D中的一个项集,B是α的条件模式基,而β是B中的一个项集,那么在D中α∪β的支持度等于B中β的支持度。
  推论2.1(模式增长)设项α为事务数据D中的一个项集,B是α的条件模式基,13而β是B中的一个项集,那么α∪β为频繁项集的充分必要条件是β也为频繁项集。
  定理2.4(单路径频繁项集产生)如果FP-treeT包含一条单路径P,那么T包含的所有频繁项集的集合可以通过枚举路径P中结点的所有可能组合得到,其支持度计数为组合中结点的支持度计数的最小值。
  定理2.5给定一个事务数据库D,最小支持度阈值minσ和频繁项头表=<……>nLi,i,,i12。挖掘频繁闭项集的问题可以分解为n个子问题:第j(1≤j≤n)个子问题是找到所有包含ijn+1?但不包含i(n1jkn)k+?<≤的频繁闭项集。
  可以看出,后挖掘到的频繁闭项集不可能包含先前找到的频繁闭项集,但是它可能被已有的一个频繁闭项集所包含,因此在挖掘过程中要对新挖掘的候选频繁闭项集进行检验。如果刚得到的候选频繁闭项集X不是已有的一个频繁闭项集的子集或者两者的支持度不同,那么就说X通过了FCI超集检测,是一个频繁闭项集。
  定理2.6如果X是一个频繁闭项集,那么在X的条件模式基中不存在任何一个项i出现在每一个事务中。
  定理2.7如果Y是一个最大项集合(Y满足:出现在X的条件模式基的每一个事务中,但Y的直接超集不满足这一性质),并且X∪Y通过了FCI超集检测,那么X∪Y是一个频繁闭项集。
  定义2.5单路径候选频繁闭项集:设i是X的条件模式基中的一个频繁项目,如果X的条件模式树中只有一个结点N标记为i,并且N的所有祖先结点只有一个子女,N若满足下列三个条件之一:
  (1)N没有子女。
  (2)N有两个以上的子女。
  (3)N有一个子女,它的支持度计数小于N的。
  那么单路径候选频繁闭项集就是X∪Z,Z包含N和N的祖先(除根结点)。如果条件模式X的条件FP-tree存在单路径,在单路径中提取候选频繁闭项集的个数为单路径中具有不等的频度个数。
  定理2.8对单路径候选频繁闭项集Y,如果Y通过了FCI超集检测,则Y是一个频繁闭项集。
  定理2.9 X和Y是两个频繁项集且具有相同的支持度。如果X?Y且Y是闭项集,那么不存在只包含X不包含Y?X的频繁闭项集。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值