FP-growth算法
Apriori原理是说如果一个元素项是不频繁的,那么那些包含该元素的超集也是不频繁的。Apriori算法从单元素项集开始,通过组合满足最小支持度要求的项集来形成更大的集合。支持度用来度量一个集合在原始数据中出现的频率。
FP-growth算法基于Apriori构建,但采用了高级的数据结构减少扫描次数,大大加快了算法速度。FP-growth算法只需要对数据库进行两次扫描,而Apriori算法对于每个潜在的频繁项集都会扫描数据集判定给定模式是否频繁,因此FP-growth算法的速度要比Apriori算法快。
如何产生频繁项集
1 构建FP-tree
2 对FP-tree进行挖掘,产生频繁项集
一:构造FP-tree
FP树时一种输入数据的压缩表示,它通过逐个读入事务,并把事务映射到FP树中的一条路径来构造,由于不同的事务可能会有若干个相同的项,因此它们的路径可能部分重叠。路径相互重叠越多,使用FP树结构获得的压缩效果越好,如果FP树足够小,能够存放在内存中就可以直接从这个内存中的结构提取频繁项集,而不必重复地扫描存放在硬盘上的数据。
构建步骤
(1)扫描一次数据集,确定每个项的支持度计数。丢弃非频繁项,而将频繁项按照支持
度的递减排序。
(2)算法第二次扫描数据集,构建FP树。读入第一个事务后,创建一个根结点用符号null
标记,然后创建路径包含该事务。
(3)依次读取事务。直到每个事务都映射到FP树的一条路径。读入所有的事务后形成FP树。
下图显示了一个数据集,它包含10个事务和5个项。(第一次扫描)
(可以把一条事务都直观理解为超市的顾客购物记录,我们利用算法来发掘那些物品或物品组合频繁的被顾客所购买。)
二:FP增长算法的频繁项集产生
FP-growth是一种以自底向上方式探索树,由FP树产生频繁项集的算法,给定上面构建的FP树,算法首先查找以e结尾的频繁项集,接下来是b,c,d,最后是a,由于每一个事务都映射到FP树中的一条路径,因为通过仅考察包含特定节点(例如e)的路径,就可以发现以e结尾的频繁项集,使用与节点e相关联的指针,可以快速访问这些路径,下图显示了所提取的路径,后面详细解释如何处理这些路径,以得到频繁项集。
FP增长采用分治策略将一个问题分解为较小的子问题,从而发现以某个特定后缀
结尾的所有频繁项集。例如,假设对发现所有以e结尾的频繁项集感兴趣,为了实
现这个目的,必须首先检查项集{e}本身是否频繁,如果它是频繁的,则考虑发
现以de结尾的频繁项集子问题,接下来是ce,be和ae,依次,每一个子问题可以进
一步划分为更小的子问题,通过合并这些子问题的结果,就可以找到所有以e结尾
的频繁项集,这种分治策略是FP增长算法采用的关键策略。
为了更具体地说明如何解决这些子问题,考虑发现所有以e结尾的频繁项集的任务。
第一步收集所有包含e结点的所有路径。这些初始的路径称为前缀路径,如下图所示。
(2)由上图所显示的前缀路径,通过把与结点e相关的支持度计数相加得到e的支持度计数,之前假设最小支持度计数为2。因为e的支持度计数为3所以它是频繁项集。
(3)由于{e}是频繁的,因此算法必须解决发现以de、ce、be、ae结尾的频繁项集的子问题。在解决这些子问题之前,必须先将前缀路径转化为条件FP树。用于发现以某特定后缀结尾的频繁项集。通过以下步骤得到:
(a)首先必须更新前缀路径上的支持度计数。因为某些计数并不包含项e的事务。对其重新调整。
(b)删除e的结点,修改前缀路径。删除这些结点是因为,沿这些前缀路径的支持度计数已经更新,以反映包含e的那些事务,并且发现以de,ce,be,和ae结尾的频繁项集的子问题不在需要结点的信息。
(c)更新沿前缀路径上的支持度计数之后,某些项可能不再是频繁的。例如,结点b只出现了1次,它的支持度计数等于1,这就意味着只有一个事务同时包含b和c。因为所有以be结尾的项集一定都是频繁的,所以在其后的分析中可以安全的忽略b.
e的条件FP树显示在下图中,该树看上去与原来的前缀路径不同,因为
频度计数已经更新,并且结点b和e已经删除。
(4)FP增长使用e的条件FP树来解决发现de,ce,be和ae结尾的频繁项集的子问题。为了发现以de结尾的频繁项集,从项e的条件FP树收集d的所有前缀路径如下图1;
通过将与结点d相关联的频度计数求和,得到项集{d,e}的支持度计数。大于2,所以为频繁项集。接下来用第三步介绍的方法构建de的条件FP树。更新支持度计数并删除了非频繁项c之后,de的条件FP树如图2。因为该树包含一个支持度等于最小支持度的项a,算法提取出频繁项集{a,d,e}。
继续产生以ce结尾的频繁项集。处理c的前缀路径后,只发现项集{c,e}是频繁的。接下来,算法继续解决下一个子问题并发现项集{a,e}是剩下唯一的频繁项集
处理完以e结尾的频繁项集之后。算法继续处理,以d,b,c,和a相关联的路径为止他们所对应的频繁项集汇总在下表