Fptree算法:
FP-growth算法,采用的是分而治之的思想,在挖掘的过程中不会像Apriori算法那样,产生大量的候选集,Apriori算法中如果有10^4个频繁一项集会导致10^7个频繁二项集,而对长度为100的频繁模式,会产生2^100个候选,并且在重复扫描数据库的过程中,通过模式匹配检查一个很大的候选集是很耗时间的,FP-tree在经过第一遍扫描之后,会把数据库中的频集压缩进一棵频繁模式树,同时依然保留其中的关联信息 。
Fp树结构的好处:
(1)完整性:
不会打破任何事物数据中的长模式。
为频繁模式的挖掘保留了完整的信息。
(2)紧凑性:
减少了不相关的信息,非频繁的项会被删除。
按频率递减排列,似的更频繁的项更容易在树中被共享。
数据量比原数据库小。
1.Fptree树的构建
(1)首先统计项的出现次数,选取最小支持度,选出事物所有项中的频繁项,构建头表Flist。
(2)创建树的根节点,用null标记。
(3)将每个事物中的项按递减的支持度技术排列,并对每个事物创建一个分枝。
(4)当一个事物考虑增加分枝的时候,沿共同前缀上的每个节点的计数加1,为跟随前缀后的项创建节点并连接。
(5)头表连接每个节点在树中出现的。
1.Fptree树的挖掘
由长度为1 的频繁模式开始,构造他的条件模式基(一个“子数据库”,由FP树中与后
缀模式一起出现的前缀路径集组成)。
构造该初始后缀模式的条件FP树,并递归的在该树上实现挖掘。模式增长通过后缀模式
与条件FP树产生的频繁模式连接实现。
对每个条件模式基比如m的条件模式基fca:2 fcab:1
为基中的每一项累计计数,为模式基中的频繁项构建FP树。
实验数据介绍
本文在验证算法性能时使用的数据是Facebook应用数据集,在前面章节中介绍的基于MapReduce的FP-tree边权值计算算法的详细流程时同样是使用Facebook应用数据集。Facebook应用数据集是加利福尼亚欧文分校收集并发布的,数据集中的数据格式如下:
算法分析和实验结果分析:
本算法分为三个步骤:
(1) 使用一个MapReduce计算每个用户使用app的个数,并放到一起。
Map:计算每个用户的app个数。
Reduce:将每个用户的app个数合并到一起。
结果:
(2) 将用户分组,使fptree能在不同的机器上并行,达到分布式计算。
结果:
(3)分组后对不同的组使用Fptree并行挖掘生成所有的用户对,并计算用户之间的相
似度,用的是jaccard相似度计算。