Apriori算法与PFP-Growth算法推演比较
2016-10-17 18:07
169 查看
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算法的结果一致。
注意:FP算法需要占用交大的内存开销,所以用PFP更好,发展过程:Apriori算法-FP算法-PFP算法。
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算法的结果一致。
注意:FP算法需要占用交大的内存开销,所以用PFP更好,发展过程:Apriori算法-FP算法-PFP算法。
相关文章推荐
- Apriori算法和FP-growth算法比较
- 使用Apriori算法和FP-growth算法进行关联分析
- 使用Apriori算法和FP-growth算法进行关联分析
- 使用Apriori算法和FP-growth算法进行关联分析
- 使用Apriori算法和FP-growth算法进行关联分析
- Apriori算法改进--FP-Tree(FP-Growth)算法
- 《机器学习实战》使用Apriori算法和FP-growth算法进行关联分析(Python版)
- 立方体画家消隐算法与Z-Buffer消隐算法 比较
- 关于python3.6和3.5版本下一种圆周率算法的速度比较
- 分类算法概述与比较
- 爱因斯坦谜题解答(三种算法比较)
- 点在多边形内算法比较
- Java不同压缩算法的性能比较
- RGB2GRAY 各种算法速度比较,整形乘法比查表法快!
- 一些比较重要的算法
- 【测试】两种数据库,四种分页算法的效率比较
- 【算法设计与分析】5个数7次比较排序的算法
- 数据挖掘十大经典算法之Apriori算法
- DES_3DES_AES_IDES_RSA密码算法比较
- 游戏版本比较的算法[ZZ]