当前位置:   article > 正文

深入剖析FP-Growth原理_fp-growth算法原理

fp-growth算法原理

同步更新公众号:海涛技术漫谈

频繁项挖掘广泛的应用于寻找关联的事物。最经典的就是,电商企业通过分析用户的订单,挖掘出经常被共同购买的商品,用于推荐。

本文首先介绍频繁项挖掘技术的演进,从暴力求解到Aprioir算法。然后,通过一个案例详细的讲解FP-Growth的原理。接下来介绍并行FP-Growth算法怎么通过3次map-reduce实现了并行化。最后通过分析spark mlib包中PFP-Growth的核心实现代码,进一步加深理解。

假设我们的Transaction数据库有5条交易数据,如下表,其中abcde为5个商品。假设设定minSupport = 0.4,即要求至少共同出现2次。

id 购买的商品
1 a b d
2 b c d
3 a b e
4 a b c
5 b c d

                                                                                  表1:交易数据

一:频繁项挖掘的技术演进

1.1  暴力求解

5个sku,一共有2的5次方种购买可能,如下图所示。暴力求解循环每种可能,全量扫描交易数据库计算购买次数,看其是否超过设定的minSupport,进而判断是否是频繁项。

                                                         

                                                                                             图1: 暴力求解

1.2  Apriori算法

上述的暴力求解方式对每种可能都会进行数据库的全表扫描,效率低下。因此有学者提出了Apriori算法。Apriori中文含义是先验的,因为算法基于这么一个先验知识:当购买组合A不是频繁项时,那么包含A的任何超集也必然不是频繁项。

通过这个先验知识,可以避免大量的无效数据库扫描,提高效率,提高的程度取决于交易数据和设置的minsupport。示意图如下所示:

                                     

                                                                                      图2: Apriori算法示意图

二:FP-Growth算法

FP-Growth算法更进一步,通过将交易数据巧妙的构建出一颗FP树,然后在FP树中递归的对频繁项进行挖掘。

FP-Growth算法仅仅需要两次扫描数据库,第一次是统计每个商品的频次,用于剔除不满足最低支持度的商品,然后排序得到FreqItems。第二次,扫描数据库构建FP树。

还是以上面的交易数据作为例子,接下来一步步的详细分析FP树的构建,和频繁项的递归挖掘。

2.1 统计频次

第一步,扫描数据库,统计每个商品的频次,并进行排序,显然商品e仅仅出现了一次,不符合minSupport,剔除。最终得到的结果如下表:

商品 频次
b 5
a 3
c 3
d 3

                                                                       表2: 商品的出现频次

2.2 构建FP树

第二步,扫描数据库,进行FP树的构建。FP树以root节点为起始,节点包含自身的item和count,以及父节点和子节点。

首先是第一条交易数据,a b d,结合第一步商品顺序,排序后为b a d,依次在树中添加节点b,父节点为root,最新的的频次为1,然后节点a,父节点为a,频次为1,最后节点d,父节点为b,频次为1。如下图所示:

                                                                                         

         

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/483087
推荐阅读
相关标签
  

闽ICP备14008679号