上篇博客讲述了Apriori算法的思想和java实现,http://blog.youkuaiyun.com/u010498696/article/details/45641719 Apriori算法是经典的关联规则算法,但是如上篇博客所述,它也有两个致命的性能瓶颈,一个是频繁集自连接产生候选集这一步骤中可能产生大量的候选集;另一个是从候选集得到频繁项集需要重复扫描数据库。
2000年,Han等提出了一个称为FP-tree的算法,有效解决了以上两个问题,它只需要扫描数据库2次,并不使用候选集,通过构造一棵频繁模式树(Pattern frequent tree,FP-Tree),将所有数据库信息压缩到频繁模式树上,最后通过这棵树生成关联规则。
FP-tree算法主要步骤,1:利用数据库中的数据构造FP-Tree;2:从FP-Tree中挖掘频繁模式。下面先给出算法描述,再举例说明。
---------------------------------------------------------------------------------------------------------------------------------------------------------
算法:FP-Tree 挖掘频繁模式
输入:事务数据库D;最小支持度阈值min_sup.
输出:频繁模式
方法:1.构造FP-Tree
(a)扫描数据库第一次,得到频繁一项集F1,并对F按支持度度排序。-----除了要排序,这一步和Apriori得到频繁一项集完全相同。
(b)创建FP-Tree根节点,以root标记,对于事务数据库D中的每个事务执行如下操作:
选择每个事务中的频繁项并按支持度排序,设排序后的频繁项表为[p|P],其中p是第一个元素,P为剩余元素的表。调用Insert_tree([p|P],root)将p插入到树 中,直到频繁项表为空。
2.挖掘FP-Tree
precedure FP-Tree(Tree,a)