【机器学习实战】使用FP-growth算法来高效发现频繁项集
FP-growth(Frequent Pattern)算法基于Apriori构建,只是将数据集存储在一个特定的称作FP树的结构之中。一棵FP树与计算机科学中的其他树结构类似,但它是通过链接(link)连接相似元素,被连起来的元素项被称为一个链表。它只需对数据库进行两次扫描,能够更高效的发现频繁项集,但是不能用于发现关联规则。
FP树的构建
1. 事务过滤及整理
1) 遍历所有的数据集合,计算所有项的支持度;
2) 丢弃非频繁的项;
3) 基于支持度降序排序事务项。
2.构建FP树
从空集(符号为∅\emptyset)开始,向其中不断添加频繁项集。过滤、排序后的事务依次添加到树中,如果树中巳存在现有元素,则增加现有元素的值;如果现有元素不存在,则向树添加一个分枝。
头指针表并不是随着FPTree一起创建,而是在第一次扫描时就已经创建完毕。为方便操作,第二次扫描时头指针关键项可以根据事务项计数和字母升序(或降序)排序。
从一棵FP树中发现频繁项集
1)从FP树中获得条件模式基;
2)利用条件模式基,构建一个条件FP树;
3)迭代重复步骤(1)步骤(2 ) ,直到树包含一个元素项为止。
抽取条件模式基
条件模式基是以所查找元素项为结尾的路径集合。每一条路径其实都是一条前辍路径(prefixpath)。简而言之,一条前缀路径是介于所査找元素项与树根节点之间的所有内容。
有两种抽取条件模式基办法:
a)对树进行穷举式搜索,直到获得想要的频繁项为止。
b)头指针表包含相同类型元素链表的起始指针。一旦到达了每一个元素项,上溯这棵树直到根节点为止。
构建条件FP树
对于每个频繁项,都创建一棵条件FP树。使用刚才发现的条件模式基作为输入数据,并通过相同的建树代码来构建这些树。然后,递归地发现频繁项、发现条件模式基,以及发现另外的条件树。举个例子,假定为频繁项 t 创建一个条件FP树,然后对{t, y}、{t, x}、……重复该过程。
以下显示所有的条件树。注意,根据Apriori过滤的思想,{t,y}的条件FP树是在{t}的条件FP树之上,而不是最原始的FP树上进行。避免造成误区不理解。