[机器学习]频繁项集 FP-growth 算法理解

42 阅读3分钟

名词解释

  • 频繁项集
  • 支持度
  • 置信度

算法步骤

一、数据整理

1.题目给出原始数据项

有 9 条数据项,令最小支持度为 2\color{red}{2}

交易号购买商品项
T1a, b, e
T2b, d
T3b, c
T4a, b, d
T5a, c
T6b, c
T7a, c
T8a, b, c, e
T9a, b, c

2.建立项头表

这一步包括两个子步骤:
(1) 将全部项里的每个元素按出现频率降序排序
(2) 根据置信度,删去低于最小支持度 2\color{red}{2} 的元素

元素频次降序
b7
a6
c6
d2
e2

3.按照第2步所得的元素次序,重新排列数据集

交易号购买商品项重排清单
T1a, b, eb, a, e
T2b, db, d
T3b, cb, c
T4a, b, db,a d
T5a, ca, c
T6b, cb, c
T7a, ca, c
T8a, b, c, eb, a, c, e
T9a, b, cb, a, c

注意:重排清单中应当剔除不满足最小置信度的元素

二、构建 FP 树

1.绘制 FP 树

绘制原则:
当前路径和已有路径 有相同的前缀时,路径可以复用。
当前路径和已有路径 有不同的结点时,应该重新画一个 feq =1 的结点,不可以把箭头画到已绘制路径的结点上\color{red}{不可以把箭头画到已绘制路径的结点上}

  • 数字表示从根节点到该元素的这条路径出现的次数,
  • 结点 a -> 结点 b 的连线代表数据集的一条数据项中存在<a,b>的组合

image.png

2.联结同号结点

image.png

  • 蓝色线条表示不同结点在同一条数据项中共同出现,接下来的构建条件模式基会用到。
  • 橘色线条表示连接同号结点。

构建过程我做了一个PPT:

链接:pan.baidu.com/s/1RsE7j0-n… 提取码:aeor

三、找出频繁项集

将 Head Table 中的 item 倒序放在下面的表中,并且删去频次最大的 b 项。
为什么要删去频次最大的项呢?因为它的前缀就是根节点{},不存在前缀路径。

1.构建条件模式基

条件模式基就是头部链表中某一节点的前缀路径组合
由若干个键值对组成,

  • key表示「到达本结点的路径
  • value表示该路径重复了多少次,即根节点上的数值。
    以 e 举例:

image.png

上图中有两个 e 。
根节点出发,经由b>a到达,该路径终点的c只出现1次。记作ba:1\color{red}{根节点{}出发,经由 b->a 到达,该路径终点的 c 只出现 1 次。记作ba:1 }
根节点出发,经由b>a>c到达,该路径终点的c只出现1次。记作bac:1\color{pink}{根节点{}出发,经由 b->a->c 到达,该路径终点的 c 只出现 1 次。记作bac:1}

条件模式基
e{ba:1,bac:1} 
d {b:1,ba:1} 
c  {b:2,a:2,ba:2} 
a{b:4}

2.构建条件 FP 树

条件模式基可看做每个结点专属的子数据集,构建步骤如下:
1.只保留 FP 树中当前叶节点及其直系祖先,
2.删除所有叶节点及指向这些叶节点的箭头,
3.删除频次低于最小支持度的结点, 4.记录每条路径,用<>表示,并且路径上每个节点都要记录下数值。

image.png

条件模式基条件 FP 树
e{ba:1,bac:1}  {b:2,a:2} 
d {b:1,ba:1}  {b:2}
c  {b:2,a:2,ba:2} {b:4,a:2},{a:2} 
a{b:4}{b:4}

3.构建频繁项集

频繁项集是当前 叶结点 及其 所有条件 FP 树 的排列组合。对应的频次是该条件 FP 树上 结点的频次。

条件模式基条件 FP 树频繁项集
e{ba:1,bac:1}  {b:2,a:2} {be:2,ae:2,bae:2}
d {b:1,ba:1}  {b:2}{bd:2} 
c  {b:2,a:2,ba:2} {b:4,a:2},{a:2} {ac:4,bc:4,bac:2}
a{b:4}{b:4}{ba:4}

c项的从条件 FP 树构建频繁项集有 2 个细节:

c 的条件 FP 项:

  • {b:4,a:2}
  • {a:2}

和 叶节点c组合为:

  • {bc:4}、{ac:2}、{bac:2}
  • {ac:2}

细节1: ba 作为一个整体和 c 组合为 bac 时,频次要看最小的a:2
细节2:要合并两个同类项ac:2 因此结果为:

{ac:4,bc:4,bac:2}