FP-growth算法只需要对数据库进行两次扫描,故速度要比Apriori算法快。
发现频繁项集的基本过程:(1)构建FP树;(2)从FP树中挖掘频繁项集。
优点:一般要快于Apriori
缺点:实现比较困难,在某些数据集上性能会下降
适用数据:标称型
1、FP树:用于编码数据集的有效方式
FP代表频繁模式(Frequent Pattern)。FP树看上去与其他树类似,但是它通过链接来连接相似元素,被连起来的元素项可以看成一个链表。一个元素项可以在一棵FP树中出现多次;FP树会存储项集的出现频率,而每个项集会以路径的方式存储在树中。存在相似元素的集合会共享树的一部分;只有当集合之间完全不同时,树才会分叉。树节点上给出集合中的单个元素及其在序列中的出现次数,路径会给出该序列的出现次数。
相似项之间的链接即节点链接,用于快速发现相似项的位置。
算法流程:首先构建FP树,然后利用它来挖掘频繁项集。
构建FP树需要对原始数据集扫描两遍:第一遍对所有元素项的出现次数进行计数,根据Apriori原理,排除非频繁元素项;第二遍只考虑频繁元素构建树。
2、构建FP树
(1)创建存储其的数据结构
利用python类进行定义,具体定义如下:
(2)构建
除了FP树,还需一个头指针表来指向给定类型的第一个实例。
可以使用字典保存头指针表。除了存放指针,头指针表还可以用来保存FP树中每类元素的总数。
为了使相同项不会重复出现在树中,在将集合添加到树之前,需要对每个集合进行排序。排序基于元素项的绝对出现频率来进行。
基本思想:从空集开始,向其中不断添加频繁项集;过滤、排序后的事物依次添加到树中,如果树中已存在现有元素,则增加现有元素的值;如果现有元素不存在,则向树添加一个分枝。
python实现如下:
3、从一棵FP树中挖掘频繁项集
基本步骤:
(1)从FP树中获得条件模式基;
(2)利用条件模式基,构建一个条件FP树;
(3)迭代重复步骤(1)(2),直到树包含一个元素项为止。
1)抽取条件模式基
条件模式基:以查找元素为结尾的路径集合。(均为前缀路径:介于所查找元素项与树根结点之间的所有内容)
每一条前缀路径都与一个计数值关联。该计数值等与起始元素项的计数值。
python实现如下:
2)创建条件FP树
python实现如下:
标签:FP,items,self,元素,关联,学习,算法,inTree,headerTable
来源: https://www.cnblogs.com/zhenpengwang/p/10920604.html