0 问题描述
给定事务集 TS (Transaction Set), 项全集 IUS (Item Universal Set)以及支持度阈值 s0 , 求所有支持度大于 s0 的项集, 即频繁项集.
在 TS 给定以后, 任意项集的支持度 s 和它在事务集中出现的频数
f=s⋅|TS|
因此为了方便叙述, 我使用”支持度”同时代表”项在事务集中出现的频数”以及”项在事务集中出现的频数与事务集大小之比”, 具体代表哪个含义, 可以根据上下文轻易区分.
1 记号
我们知道FP树是一棵前缀树, 树上每个节点关联一个项. 设 i∈IUS 是一个项, fp 表示一棵FP树, 为方便叙述, 我引进以下符号:
- nodesi : FP树上与项 i 相关联的节点的集合, 注意这样的节点可能有多个, 因此
nodei 表示一类节点而不是FP树上特定的某个节点 - fp . root : fp 的根节点, 在前缀树的通常实现方式里, 根节点不关联任何项
- fp . headers : FP增长算法需要遍历一棵FP树上的所有关联到同一个项的节点, 因此我们使用一个链表将 nodesi 中的元素串联在一起.这样, 每个 nodesi 关联一个链表, 所有这些链表的头存储在 fp . headers 中
我们说项是有大小的, 项的大小等于其支持度,, 因此项集是可以排序的. 对于已经排序的项集, 我们说”项集的最后一个元素”是指”项集中最小的项, 即项集中支持度最小的项.
2 从事务集构造一颗FP树
我们假设用于构造FP树的事务集为 ts , 项全集为 ius . FP增长算法的第一步是从 ts , ius 构造一颗FP树 fp , 然后删掉树上所有支持度小于 s0 的单项. 这个过程同时会构造出 fp . heders .
首先, 在算法开始的时候,