前提
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)。
如下:梨的频繁项集:{梨}
香蕉的频繁项集:{香蕉}
芒果的频繁项集:{芒果}、{芒果、苹果}
苹果的频繁项集:{苹果}
总借频繁项集为:{梨}、{香蕉}、{芒果}、{芒果、苹果}、{苹果}