版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ACBattle/article/details/81515961
背景
apriori算法 需要多次扫描数据,I/O 大大降低了时间效率
1. fp-tree数据结构
1> 项头表
记录所有的1项频繁集出现的次数,并降序排列
2> fp tree
根据项头表,构建fp树
3> 节点链表
所有项头表的1项频繁集都是一个节点链表的头,依次指向fp树中的位置,而且方便查找和更新
2. 项头表的建立
排序后的数据集进行了两步操作:
1> 删除每行关键字中支持度小于minSup的
2> 对关键字中剩下的元素按照支持度排序
3. fp tree和节点链表一起构建
开始节点为空
首先插入第一行关键字
接着插入第二行关键字,如果有重复的前缀路径,则路径上的节点+1
.
.
.
,
,
.
.
类似的我们插入所有的数据之后,fptree和链表也都建好了,下图即为最后的tree和节点链表
4.FP Tree的挖掘
对项头表从底部依次向上挖掘频繁集,对于项头表对应于fp树的每一项,我们要找到它的条件模式基(所有的路径前缀),更新该路径的节点数目。
F:
D:
…
最后是A,因为条件模式基为空,所以可不用挖掘
由此,我们得到了所有的频繁集(> 0.2),如果只要最大的频繁k项集,从上面分析可以看出,最大的是5项集,A----C----E----B----F
5.FP Tree步骤总结
1> 扫描数据,得到所有频繁一项集的计数,按照支持度保留满足的项,将频繁一项集放入项头表,并按降序排列
2> 扫描数据,重置原始数据(删除非频繁一项集,并按支持度排序)
3> 读入排序后的数据集,插入FP树,并构建节点链表
4> 挖掘频繁信息,按照项头表,从底向上依次寻找频繁集。
参考博主