有了FP树之后,就可以抽取频繁项集了。这里的思路与Apriori算法大致类似,首先从单元素项集合开始,然后在此基础上逐步构建更大的集合。这里将利用FP树来做实现上述过程,不再需要原始数据集。
从FP树中抽取频繁项集的三个基本步骤如下:
1、从FP树中获得条件模式基;
2、利用条件模式基,构建一个条件FP树;
3、迭代重复步骤1、2,直到树包含一个元素项为止。
抽取条件模式基
首先从已经保存在头指针表中的单个频繁元素项开始。对于每一个元素项,获得其对应的条件模式基。条件模式基是以所查找元素项为结尾的路径集合。每一条路径其实都是一条前缀路径。简而言之,一条前缀路径是介于所查找元素项与树根节点之间的所有内容。
以之前的数据为例,符号r的前缀路径是{x,s}、{z,x,y}和{z}。每一条前缀路径都与一个计数值关联。该计数值等于起始元素项的计数值,该计数值给了每条路径上r的数目。下表列出了每个频繁项的所有前缀路径:
前缀路径将被用于构建条件FP树。为了获取这些前缀路径,可以对树进行穷举式搜索,直到获得想要的频繁项集为止,或者使用一个更有效的方法来加速搜索过程。可以利用先前创建的头指针表来得到一种更有效的方法。头指针表包含相同类型元素链表的起始指针。一旦到达了每一个元素项,就可以上溯这棵树直到根节点为止。
下面是前缀路径发现的代码:
def as