FP-Growth
本文详细介绍FP-Growth构造FP-tree和找频繁项集(笔者研究方向确认为关联规则,作为初学者,若本笔记有错误,还望大家留言指出)
已知强关联规则如下表所示
| TID | Items |
|---|---|
| 0 | a,b |
| 1 | c,d |
| 2 | a,c,d,e |
| 3 | a,d,e |
| 4 | a,b,c |
| 5 | a,b,c,d |
假设置信度为70%,支持度为50%
则最小支持度为:50%*6(6为集数个数)=3(表示Items中的元素满足≥3才为频繁项集)
FP-growth构造FP-tree时需要进行两次处理:
首先进行分类,求出F-list
我们先看表格,遍历一次数据集,统计每个元素出现的次数
a:5(出现5次)
b:3
c:4
d:4
e:2
然后把出现次数较小的滤掉(最小支持度3,将出现次数小于3的元素滤除)
再进行排序,将频率高的放于首位
| F-list | (a:5),(c:4),(d:4),(b:3) |
则新的关联规则为(去除e)
| TID | Items |
|---|---|
| 0 | a,b |
| 1 | c,d |
| 2 | a,c,d |
| 3 | a,d |
| 4 | a,b,c |
| 5 | a,b,c,d |
开始构造FP-tree,对0项集{a,b}进行处理,元素首次出现,需要将头结点赋予它。
再对1项集{c,d}处理,c为新元素出现,创建新的分支。并将头结点赋予新节点。
再对2项集{a,c,d}处理,a已经出现,则a的次数加一,再对a进行分支。
再对3项集{a,d}处理
再对4项集{a,b,c}处理
再对5项集{a,b,c,d}处理
最后,从d、c、b、a元素找相同元素出现在哪?连接同一元素
连接d
连接c
连接b:b只有一个,不需要添加连线
连接a:a只有一个,不需要添加连线
最终连线:
频繁项集:
(先找二元项集)
**第一步:**从底往上看
d出现一次,c出现两次,都不满足最小支持度,则不构成频繁项集。
c出现两次,b出现三次,但c不满足最小支持度,也不构成最小项集。
b出现三次,a出现5次,都满足最小支持度,则{a,b}为频繁项集。
其他分支依次类推。
**第二步:**从整棵树找{a,b,c,d}的组合方式:{a,b}、{a,c}、{a,d}、{b,c}、{b,d}、{c,d}
其中{a,b}在第一步就证明了他是频繁项集,这里就不用考虑。
{a,c}:
{a,c}从整棵树中找,发现只出现两次,不满足最小支持度,则不属于频繁项集。
{a,d}:
{a,d}从整棵树找,发现出现的次数为3,满足最小支持度。
{b,c}:
{b,c}从整棵树找只出现一次,这不是频繁项集。
{b,d}:
{b,d}从整棵树找只出现一次,这不是频繁项集。
{c,d}:
{c,d}从整棵树找,我们发现其中三个分支都含有{c,d},满足最小支持度3,则{c,d}为频繁项集。
依次类推找三元项集
从底往上找{b,c,d}:
从分支中找{b,c,d},发现不满足最小支持度…(依次类推)
从整棵树找:找{a,b,c,d}的组合方式:{a,b,c}、{a,b,d}、{a,c,d}、{b,c,d}。发现并没有满足条件的项集
则这棵树不存在三元频繁项集
依次类推找四元频繁项集(三元都不存在,更何况四元,无意义)
综上所述
频繁项集为
| 频繁项集 |
|---|
| {a,b}、{a,d}、{c,d} |