简介
FP-Growth算法是韩嘉炜等人在2000年提出的关联分析算法,它采取如下分治策略:将提供频繁项集的数据库压缩到一棵频繁模式树(FP-tree),但仍保留项集关联信息。
在算法中使用了一种称为频繁模式树(Frequent Pattern Tree)的数据结构。FP-tree是一种特殊的前缀树,由频繁项头表和项前缀树构成。FP-Growth算法基于以上的结构加快整个挖掘过程。
众所周知,Apriori算法在产生频繁模式完全集前需要对数据库进行多次扫描,同时产生大量的候选频繁集,这就使Apriori算法时间和空间复杂度较大。但是Apriori算法中有一个很重要的性质:频繁项集的所有非空子集都必须也是频繁的。但是Apriori算法在挖掘额长频繁模式的时候性能往往低下,Jiawei Han提出了FP-Growth算法。
FP-Tree:将事务数据表中的各个事务数据项按照支持度排序后,把每个事务中的数据项按降序依次插入到一棵以 NULL为根结点的树中,同时在每个结点处记录该结点出现的支持度。
1、FPGrowth使用场景
FPGrowth关联规则算法主要用于发现频繁项集。如:沃尔玛啤酒加尿布。
2、FPGrowth基本概念
FPGrowth算法通过构造一个FPTree树结构来压缩数据记录,使得挖掘频繁项集只需要扫描两次数据记录,而且该算法不需要生成候选集合,所以效率会比较高。
那么,如何从购物篮里面发现尿布+啤酒这样的最佳组合呢?
我们以以下数据集为例,假设有如下的一张购物清单表,每条记录代表一次购物记录:
|TID|Items|
|-|-|
| T1 | { 面包 , 牛奶 } |
| T2 | { 面包 , 尿布 , 啤酒 , 鸡蛋 }|
| T3 | { 牛奶 , 尿布 , 啤酒 , 可乐 }|
| T4 | { 面包 , 牛奶 , 尿布 , 啤酒 }|
| T5 | { 面包 , 牛奶 , 尿布 , 可乐 }|
其中:
牛奶、面包叫做项;
{ 牛奶、面包}叫做项集;
项集出现的次数叫做支持度。
T* 表示用户每次的购物清单。
3、算法思想
该算法的核心就是生成一棵FPTree。前面提到过,FPTree是一种树结构。
构建的过程需要将表中的数据以及关系进行保存,我们先来看构建过程:
假设我们的最小支持度是3,这相当于是一个阈值。接下来我们开始按如下的步骤处理数据。
3.1、step1
扫描数据记录,生成一级频繁项集,并按出现次数由多到少排序,如下所示:
ItemCount
牛奶4
面包4
尿布4
啤酒3
可乐2(<3,删除)
鸡蛋1(