一、FP-growth 概述
FP-Growth(Frequent Pattern Growth,频繁模式增长)算法是一种高效的数据挖掘算法,主要用于解决频繁项集挖掘和关联规则发现的问题。
与传统的Apriori算法相比,FP-Growth算法通过构建一种称为FP-Tree(频繁模式树)的数据结构,极大地减少了搜索空间,提高了挖掘效率。
FP-Growth算法不仅适用于处理大规模数据集,还能有效应对数据稀疏性问题,因此在电子商务、社交网络分析、金融风控等多个领域有着广泛的应用。
|
FP-Growth算法 |
Apriori算法 | |
|
提出时间 |
2000年 |
1993年 |
|
基本思想 |
基于频繁模式树(FP-Tree)挖掘频繁项集 |
基于候选集生成和向下封闭检测挖掘频繁项集 |
|
数据结构 |
FP-Tree(频繁模式树) |
无特定数据结构,使用集合和列表 |
|
扫描数据库次数 |
两次 |
多次(随频繁项集长度的增加而增加) |
|
效率 |
较高,特别是对于大规模数据集 |
较低,特别是对于长频繁项集 |
|
内存使用 |
较低,因为FP-Tree是紧凑的数据结构 |
较高,因为需要存储大量候选集 |
|
算法复杂度 |
较低,构建FP-Tree和挖掘频繁项集过程相对简单 |
较高,尤其是候选集生成和剪枝过程 |
|
适应场景 |
适用于大规模数据集和稀疏数据集 |
适用于小规模数据集或特定场景 |
|
发现关联规则 |
需要额外步骤从频繁项集中生成关联规则 |
可以直接从频繁项集中生成关联规则 |
|
优点 |
1. 只需扫描数据库两次,效率高。2. 占用内存少。3. 适用于大规模数据集。 |
1. 算法简单明了,易于实现。2. 广泛应用于各个领域。 |
|
缺点 |
不能直接用于发现关联规则,需要额外步骤 |
1. 扫描数据库次数多,效率低。 2. 产生大量候选集,占用内存大。 3. 对于长频繁项集挖掘性能低下。 |
二、FP-Growth实现原理
假设你的超市有以下几笔交易记录(即顾客购买的商品列表):
- 交易1: 牛奶, 面包, 尿布
- 交易2: 面包, 尿布, 啤酒, 鸡蛋
- 交易3: 牛奶, 尿布, 啤酒, 可乐
- 交易4: 面包, 牛奶, 尿布, 可乐
步骤1:构建FP树
- 统计频率:数据库的第一次扫描与Apriori算法相同,它导出频繁项(1项集)的集合,并得到它们的支持度计数(频度)。
|
商品 |
支持度 |
|
尿布 |
4 |
|
面包 |
3 |
|
牛奶 |
3 |
|
啤酒 |
2 |
|
可乐 |
2 |
|
鸡蛋 |
1 |
- 排序和过滤:假设我们设定最小支持度为2,根据统计的支持度,对每笔交易中的商品进行排序(通常按支持度降序),并删除非频繁项。
|
商品 |
支持度 |
|
尿布 |
4 |
|
面包 |
3 |
|
牛奶 |
3 |
|
啤酒 |
2 |
|
可乐 |
2 |
- 构建FP树:
- 创建一个根节点(通常标记为“null”或“root”)
- 对于每笔过滤后的交易,按照排序后的顺序插入到FP树中。如果树中已存在某个节点,则增加其计数;如果不存在,则创建新节点(构造FP树时,会排查非频繁项)。


步骤2:挖掘频繁项集
在FP树构建完成后,数据库频繁模式的挖掘问题就转换成挖掘 FP树的问题。算法会递归地从树中挖掘频繁项集。
- 从树底开始:从FP树的底部(即叶子节点)开始,对每个节点,找到其条件模式基(即包含该节点的所有前缀路径)。
- 构建条件FP树:基于条件模式基,为每个节点构建一个条件FP树。这个新树只包含与当前节点一起出现的项。
- 递归挖掘:对每个条件FP树,重复上述过程,直到找到所有频繁项集。
通过创建条件(子)模式基挖据 FP树
|
商品 |
条件模式基 |
条件FP树 |
产生的频繁模式 |
|
可乐 |
{{尿布,面包,牛奶:1},{尿布,牛奶,啤酒:1} |
<尿布,牛奶:2> |
{尿布,牛奶,可乐:2},{尿布,可乐:2},{牛奶,可乐:2} |
|
牛奶 |
{{尿布,面包:2},{尿布:1}} |
<尿布,面包:2>,<尿布:3>,<面包:2> |
{尿布,面包,牛奶:2},{尿布,牛奶:3},{面包,牛奶:2} |
|
啤酒 |
{{尿布,面包:1},{尿布,牛奶:1}} |
<尿布:2> |
{尿布,啤酒:2} |
|
面包 |
{{尿布:3}} |
<尿布:3> |
{尿布,面包:3} |
最后,产生的频繁模式为表中最后一列的数据加上1-频繁项集的集合。
附录:FP-Grawth算法原理

2140

被折叠的 条评论
为什么被折叠?



