zoukankan      html  css  js  c++  java
  • Apriori算法与PFPGrowth算法推演比较

        Apriori算法是机器学习的一个基础算法,用于找出频繁项集,也即为购物篮算法。但是Apriori算法要多次遍历全量数据,效率较低,FP-Growth算法是对Apriori算法的改进(见韩家炜《数据挖掘:概念与技术》),而PFP-Growth算法是对FP-Growth进行了Map-Reduce化,使FP-Growth能够处理海量的数据。

        PFP-Growth算法论文见http://infolab.stanford.edu/~echang/recsys08-69.pdf,该算法的说明如下图

        为验证PFP-Growth算法,使用《数据挖掘:概念与技术》书中例6.1的购物篮数据,进行手工推演,并检验与Apriori算法能否得到同样的结果。

    购物篮数据如下,需找出所有的频繁项集(支持度为2):

    ---------------------------------------

    ---购物篮-          项目

    T100                  I1,I2,I5              

    T200                  I2,I4

    T300                  I2,I3

    T400                  I1,I2,I4

    T500                  I1,I3

    T600                  I2,I3

    T700                  I1,I3

    T800                  I1,I2,I3,I5

    T900                  I1,I2,I3


    步骤1:计算所有购物篮中每个项目出现的次数,并删除出现次数小于支持度的项目(本例中支持度为2)

    I2:7, I1:6, I3:6, I4:2, I5:2。 

    步骤2:按照项目出现的总次数对每个购物篮中的项目排序(map)

    ---------------------------------------

    ---购物篮-          根据项目                         生成Key-value对,

                         出现总次数排序                    即每个项目的上级项路径

    T100                  I2,I1,I5                             I5:I2 I1         I1:I2              

    T200                  I2,I4                                 I2:I4

    T300                  I2,I3                                 I2:I3

    T400                  I2,I1,I4                             I4:I2 I1        I1:I2

    T500                  I1,I3                                 I1:I3

    T600                  I2,I3                                 I2:I3        

    T700                  I1,I3                                 I1:I3

    T800                  I2,I1,I3,I5                         I5:I2 I1 I3     I3:I2,I1       I1:I2

    T900                  I2,I1,I3                             I3:I2,I1         I1:I2   

    步骤3:按项目进行汇总,得到每个项目的所有路径(reduce)

    I1 : { I2/ I2/ I2/ I2  }                            ---> {(I2:4)}|I1

    I2 : {  }                                                --->  { }|I2

    I3 : { I2/ I1/ I2/ I2 / I2I1 /I2I1 }          --->  {( I2:4, I1:4, I2I1:2 )}|I3

    I4 : { I2/ I2I1 }                                    --->  {( I2:2 )}|I4

    I5 : { I2I1/ I2I1I3 }                              --->  {( I2:2, I1:2, I2I1:2 )}|I5

    步骤4:得到频繁项集

    --集合----------支持度计数--

    (I2, I1)               4

    (I2, I3)               4

    (I1, I3)               4

    (I2, I1, I3)          2

    (I2, I4)               2

    (I2, I5)               2

    (I1, I5)               2

    (I2,I1, I5)           2


    结论:Apriori算法与PFP算法的结果一致。






  • 相关阅读:
    Oracle ASH报告生成和性能分析
    Oracle AWR报告生成和性能分析
    oracle和mysql批量合并对比
    Oracle
    Delphi
    Delphi
    Delphi
    Delphi
    Delphi
    Delphi
  • 原文地址:https://www.cnblogs.com/digging4/p/3635559.html
Copyright © 2011-2022 走看看