前提
apriori存在以下不足,每次计算项集都会产生大量的候选项集,使计算资源和储存空间产生浪费。而树模型是一种很好的储存数据的方式,故FPGrowth算法由此而生。FPGrowth算法是优化版的apriori算法。
算法原理
某家水果店的订单清单如下:
购物单号 | 购买的水果 |
---|---|
1 | 苹果、香蕉、梨 |
2 | 苹果、香蕉、梨、芒果 |
3 | 香蕉、梨、芒果、水蜜桃 |
4 | 苹果、芒果 |
5 | 苹果、芒果、水蜜桃、橘子 |
FPGrowth算法原理:
step1:
扫描一遍数据集,计算k=1的项集支持度,按从大到小进行排序,提出不满足最小支持度的项集。(假设min_support = 0.5)
得到如下
水果 | N |
---|---|
苹果 | 4 |
芒果 | 4 |
香蕉 | 3 |
梨 | 3 |
step2:
将原始表每条交易记录也按从大到小产生的顺序排序。
得到如下
购物单号 | 购买的水果 |
---|---|
1 | 苹果、香蕉、梨 |
2 | 苹果、芒果、香蕉、梨 |
3 | 香蕉、芒果、梨 |
4 | 苹果、芒果 |
5 | 苹果、芒果 |
step3:
将交易记录结果记录到FP树上。
step4:从下往上,从梨到苹果,进行查找,(假设min_support = 0.5)。
如下:梨的频繁项集:{梨}
香蕉的频繁项集:{香蕉}
芒果的频繁项集:{芒果}、{芒果、苹果}
苹果的频繁项集:{苹果}
总借频繁项集为:{梨}、{香蕉}、{芒果}、{芒果、苹果}、{苹果}