频繁模式增长算法(FP-growth,Frequent-Pattern Growth)
denglo
编辑于 2021年01月24日 11:09

本算法常应用于提取频繁项集,与Apriori算法的“产生-测试”范型不同。

一、FP树表示

FP树是一种输入数据的压缩表示。它逐条读入事务,并将事务映射到FP树中的一条路径上。由于不同事务可能存在若干相同的项,因此它们的路径可能部分重叠。越多的路径相互重叠,使用FP树结构获得的压缩效果越好。当FP树足够小时,就可以将其放入内存,而不必重复读取硬盘中的数据,进而加速频繁项集的计算。如果构成的FP树还是很大,可以采用分区投影的方法。

下面是FP树的一个构造实例。

FP树构造

每个结点都包括一个项标记和一个计数,计数显示映射到给定路径的事务个数,初始时,FP树仅包含一个根结点,用null表示

可见FP树的大小取决于项的排序方式。因此,将业务中的项按其频数排序可能减少树的结构,但不是必然。(高支持度项和其他项没有一起频繁出现的时候)

因此,在FP增长算法里,通常需要对数据集进行两次扫描

首先,扫描数据集,确定每个项的支持度计数,丢弃非频繁项,而数据集中每个事务的频繁项将按照支持度递减排序。

之后,对数据集进行第二次扫描,构建FP树。

此外,FP树还包含一个连接具有相同项的结点的指针列表,即图中的虚线部分,有助于快速访问树中的项。

二、频繁项集的产生

FP树上的频繁项集生成是基于一种分治思想的策略。

例如,在上述FP树中,需要发现所有以e结尾的频繁项集;

1)首先,手机包含e结点的全部路径,这些路径称之为前缀路径prefix-path

2)之后,计算结点e关联的支持度计数,为3,假定最低支持度为2,则e是频繁项集;

由于e是频繁的,算法进一步解决发现de、ce、be、ae结尾的频繁项集这一子问题。

解决子问题之前,必须先将前缀路径转换为条件FP树conditioinal FP-tree。

3)条件FP树的构建:首先,更新前缀路径上的支持度计数,因为某些计数包括那些不含e的事务;之后,删除e结点,修剪前缀路径;更新前缀路径的支持度技术后,某些项可能不在频繁;

4)子问题的解决:FP增长算法使用e的条件FP树来解决发现de、ce、be、ae结尾的频繁项集的子问题,从e的条件FP树上收集d等项的前缀路径,并计算其频度计数,得到对应项集的支持度计数,进而判断其频繁性;以此类推;

三、算法的特点

综上所述,频繁模式增长法具有以下特征

1)完备性,保留了频繁模型挖掘的全部信息;

2)简洁性,去除了非频繁项,频繁项按支持度降序排列;

3)压缩性,占用空间更少;