介绍
FP-growth(Frequent Pattern Tree, 频繁模式树), 是韩家炜提出的挖掘频繁项集的方法,是将数据集存储在一个特定的称作 FP 树的结构之后发现频繁项集或频繁项对,即常在一块出现的元素项的集合 FP 树。FP-growth 算法比 Apriori 算法效率更高,在整个算法执行过程中,只需遍历数据集 2 次,就能够完成频繁模式发现,其发现频繁项集的基本过程如下:(1)构建 FP树(2)从 FP 树中挖掘频繁项集
FP-growth 的一般流程如下:1:先扫描一遍数据集,得到频繁项为 1 的项目集,定义最小支持度(项目出现最少次数),删除那些小于最小支持度的项目,然后将原始数据集中的条目按项目集中降序进行排列。2:第二次扫描,创建项头表(从上往下降序),以及 FP 树。3:对于每个项目(可以按照从下往上的顺序)找到其条件模式基(CPB,conditional patten base), 递归调用树结构,删除小于最小支持度的项。如果最终呈现单一路径的树结构,则直接列举所有组合;非单一路径的则继续调用树结构,直到形成单一路径即可。
内容
构造FP树
Tid | Items |
---|---|
1 | I1, I2, I5 |
2 | I2, I4 |
3 | I2, I3 |
4 | I1, I2, I4 |
5 | I1, I3 |
6 | I2, I3 |
7 | I1, I3 |
8 | I1, I2, I3, I5 |
9 | I1, I2, I3 |
扫描数据集,对每个物品进行计数:
项集 | 支持度 |
---|---|
I2 | 7 |
I1 | 6 |
I3 | 6 |
I4 | 2 |
I5 | 2 |
设最小支持度计数为2
扫描数据库,统计支持度计数,得到频繁1-项集,按支持度降序排列
Tid | Items |
---|---|
1 | I2,I1,I5 |
2 | I2, I4 |
3 | I2, I3 |
4 | I2,I1,I4 |
5 | I1, I3 |
6 | I2, I3 |
7 | I1, I3 |
8 | I2,I1,I3,I5 |
9 | I2,I1, I3 |
挖掘FP树
得到了FP树和项头表以及节点链表,我们首先要从项头表的底部项依次向上挖掘。对于项头表对应于FP树的每一项,我们要找到它的条件模式基。所谓条件模式基是以我们要挖掘的节点作为叶子节点所对应的FP子树。得到这个FP子树,我们将子树中每个节点的的计数设置为叶子节点的计数,并删除计数低于支持度的节点。从这个条件模式基,我们就可以递归挖掘得到频繁项集了
从
I
5
I_5
I5开始,对于头表中的每个
I
i
I_{i}
Ii,确定自身为频繁模式,再挖掘以
I
i
I_{i}
Ii为后缀的频繁模式
将所有的祖先节点计数设置为叶子节点的计数
前缀路径/条件模式基:
<
I
2
,
I
1
:
1
>
、
<
I
2
,
I
1
,
I
3
:
1
>
<I2,I1:1>、<I2,I1,I3:1>
<I2,I1:1>、<I2,I1,I3:1>
频繁模式:
{
I
2
,
I
5
:
2
}
\{I2,I5:2\}
{I2,I5:2} (
{
I
2
,
I
5
:
2
}
\{I2,I5:2\}
{I2,I5:2}(2的含义指的是
I
2
,
I
5
I_2,I_5
I2,I5都是2)
{
I
1
,
I
5
:
2
}
\{I1,I5:2\}
{I1,I5:2}
{
I
2
,
I
1
,
I
5
:
2
}
\{I2,I1,I5:2\}
{I2,I1,I5:2}
提取以I4的前缀路径/条件模式基:
<I2,I1:1>、<I2: 1> (I1被砍掉了)
I4为后缀的频繁模式:
{
I
2
,
I
4
:
2
}
\{I2,I4:2\}
{I2,I4:2}
提取以I3为后缀的频繁模式
有两分支,则:
对于条件FP树头表中的每个Ii,与I3连接确定频繁模式
I
i
,
I
3
{Ii, I_3}
Ii,I3,支持度等于Ii的支持度。
递归挖掘条件FP树,提取以
I
i
,
I
3
{I_i, I_3}
Ii,I3为后缀的频繁模式
频繁模式:
{
I
1
,
I
3
:
4
}
\{I1,I3:4\}
{I1,I3:4}
{
I
2
,
I
3
:
4
}
\{I2,I3:4\}
{I2,I3:4}
{
I
2
,
I
1
,
I
3
:
2
}
\{I2,I1,I3:2\}
{I2,I1,I3:2}
以
I
1
I_1
I1为后缀
{
I
2
I
1
:
4
}
\{I2 I1:4\}
{I2I1:4}
I
2
I_2
I2只有前缀,没有后缀
项 | 条件模式基 | 条件FP树 | 产生的频繁模式 |
---|---|---|---|
I5 | {I2 I1:1}, {I2 I1 I3:1} | <I2:2, I1:2> | {I2 I5:2}, {I1 I5:2}, {I2 I1 I5:2} |
I4 | {I2 I1:1}, {I2:1} | <I2: 2> | {I2 I4:2} |
I3 | {I2 I1:2}, {I2:2}, {I1:2} | <I2: 4, I1: 2>, <I1: 2> | {I2 I3:4}, {I1 I3:4}, {I2 I1 I3:2} |
I1 | {I2:4} | <I2: 4> | {I2 I1:4} |