写在前面:该算法相较于 Apriori 算法首先是不需要产生候选集,其次是利用分治思想来减少搜索空间。该算法是真正构建了一棵树(不同于之后的 HUI-MIner 等,它们只是借用树这种结构来理解),但这也是这类算法的不足之处
Mining Frequent Patterns without Candidate Generation: A Frequent-Pattern Tree Approach
样例
交易项数据集
最低支持度
投影数据集
投影策略
频繁模式树
项_m_的频繁树
定义
-
项集(Itemset):由一组项(item) 构成,其中各项之间互不相同
-
交易项(Transaction):由多个项()或项集()构成
-
数据集(Database):由多条交易项()构成
-
支持度(Support):是对于某个项或项集在数据集(DB)中出现的频次,当频次不低于我们设定的阈值 ,我们认定该项或项集是频繁的
-
排序(Sort):根据支持度的大小,对各个一元项进行从大到小排序(排序的目的在于能够方便数据处理)
-
投影(Projection):又称为“剪枝”,是一种减少内存消耗的策略,通过将非频繁一元项删除,在原数据集上映射与被投影项直接相关联的路径(即包含被投影项的分支),将这些投影出来的分支组成新的子数据集,再在这子数据集上进行构造FP-tree,完成挖掘工作,可以参考样例图投影数据集(需要注意的是:在投影之前必须对各个项进行排序)
-
平行投影(Paralle Projection):针对每一条交易项进行投影,投影出来的结果互不相干,可以参考样例图投影策略(a)(这种策略很浪费内存)
-
分组投影(Partition Projection):一方面利用之前的投影结果,进行下一轮投影,一方面遍历那些之前没有被投影的交易项进行投影,避免了许多重复动作,可以参考样例图投影策略(b)
-
频繁模式树(Frequent-pattern Tree):通过一层层遍历交易项,以 root 为根节点,不断地构造项前缀子树(分支)。每个节点由 item-name,count 和 node-link 组成。特别地,每个节点(项)之间是已排好序的。根据样例提供的数据,我们可以得到样例中的结果图
-
前缀路径(Prefix Path):在一个各个节点已排序的 FP-tree 中,每条路径都是有规律存在。如上图频繁模式树中的节点 m 的前缀路径是 。需要注意的是,前缀路径上各个节点的出现频次是和 m 的频次直接相关联,比如路径 有 ,而 ,自然前后出现频次要保持一致,即 (因为是一条路径上的),对比交易项数据集中的最右列结果也是一样的
-
条件模式(Conditional Pattern):指的是在构造 FP-tree 时,可以观测到一个项(节点)的前缀路径(prefix path)是怎么样的,自然这些前缀路径就是多元项组成的项集了。例如参照上图频繁模式树中的节点 ,它有两条前缀路径 和 ,言外之意就是项集 支持度为2, 的支持度为1。这两条路径构成关于项 的子树,在这个子树中我们还可以找到新的前缀路径
-
条件频繁树(Conditional FP-tree):在条件模式下,由某个项或项集的所有前缀路径组成的子树叫做 Conditional FP-tree,同样举例项 ,当最低支持度为 3 时,我们只能得到路径 符合条件。还可以参考样例中的项 m 的条件频繁树加深理解
-
单前缀路径频繁树(Single Prefix-Path FP-tree):指的是可以被划分为单路径子树和多路径子树的频繁树,可参照下图。注意的是,必须切割部分是从根节点到第一个产生分支的节点处。这样做的好处是可以针对不同情况采取不同的组合方法,最后只要把这两个频繁集进行汇总组合得到的就是由这个分支产生的所有频繁集
算法
FP-tree construction
主要工作是构造一元项频繁树,完成一些基础数据采集,为后续构造多元频繁项集做铺垫
FP-growth algorithm
这部分是整个算法的核心,在已经构造FP-tree的情况下,由一元项不断组合生成多元项集