(关联分析)FP-growth算法

FP树算法简介

FP树(Frequency Pattern Tree)算法是一种用于挖掘频繁项集的算法,它通过构建一种特殊的数据结构来压缩数据库中的信息,从而加快频繁项集的挖掘过程。

FP-growth算法只需要对数据集进行两次遍历。而Apriori算法对于每个潜在的频繁项集都会扫描数据集判定给定的模式是否频繁,因此FP-growth算法要比Apriori算法快。

下面是FP树算法的详细解析:

FP树算法步骤

步骤1:收集频繁项集
  1. 遍历数据集项:遍历数据集中的所有项,计算每个项的支持度(即出现次数)。
  2. 筛选频繁项集:根据用户指定的最小支持度阈值,筛选出频繁项集。
    例如,假设我们有一个超市的交易数据集,我们想要找出顾客经常一起购买的商品组合。如果我们设置最小支持度阈值为5%,那么只有那些在至少5%的交易中出现的商品组合才会被认为是频繁项集。

假设我们有以下事务数据集(每个T可以理解为超市每次购物的订单,以及其中的物品):

T1 = {r, z, h, j, p}
T2 = {z, y, x, w, v, u, t, s}
T3 = {z}
T4 = {r, x, n, o, s}
T5 = {y, r, x, z, q, t, p}

我们设置最小支持度为3(即一个项至少在3个事务中出现)。根据这个阈值,我们筛选出频繁项集:{r:4, z:5, x:4, y:3, p:3}。

步骤2:构建FP树
  1. 初始化FP树:创建一个空树,树的根节点记为null。
  2. 第二次扫描数据集:再次遍历数据集中的所有事务。
  3. 重排事务中的项:对于每个数据集,按照频繁项集的顺序重排事务中的项。
  4. 插入事务到FP树:将重排后的事务插入到FP树中。如果树中已经存在相同的路径,则增加该路径的计数;否则,创建新的路径。
  5. 更新头表:头表是一个用于快速访问FP树中相同项的指针列表。在插入事务时,更新头表中的指针。

我们按照上例频繁项集的顺序重排每个事务中的项,并插入到FP树中。

这里,我们来展示如何将事务插入到FP树中。

事务数据库:
T1 = {r, z, h, j, p}
T2 = {z, y, x, w, v, u, t, s}
T3 = {z}
T4 = {r, x, n, o, s}
T5 = {y, r, x, z, q, t, p}
频繁项集和支持度:
{r:4, z:5, x:4, y:3}

我们设置最小支持度为3,并根据支持度降序排列频繁项集的顺序为:z, r, x, y
现在,我们将按照这个顺序重排每个事务中的项,并插入到FP树中。我们从一个空的FP树开始:

FP树初始状态:
null

接下来,我们逐个插入重排后的事务到FP树中:

  1. 重排并插入T1:{z, r, h, j, p}{z, r}(去掉不频繁的项,并按照频繁项集的顺序排序)

    • 插入z:创建新的节点z,计数为1
    • 插入r:创建新的节点r,计数为1

    FP树更新为:

    null
    |
    z(1)
    |
    r(1)
    
  2. 重排并插入T2:{z, y, x, w, v, u, t, s}{z, x, y}

    • 插入z:增加现有节点z的计数到2
    • 插入x:创建新的节点x,计数为1
    • 插入y:创建新的节点y,计数为1
      FP树更新为:
    null
    |
    z(2)
    |   \
    r(1) x(1)
          |
          y(1)
    
  3. 重排并插入T3:{z}{z}

    • 插入z:增加现有节点z的计数到3
      FP树更新为:
    null
    |
    z(3)
    |   \
    r(1) x(1)
          |
          y(1)
    
  4. 重排并插入T4:{r, x, n, o, s}{r, x}

    • 插入r:增加现有节点r的计数到2
    • 插入x:增加现有节点x的计数到2
      FP树更新为:
          null
     	 /     \
    z(3)   		r(1)
    |   \        |
    r(1) x(1)	x(1)
          |
          y(1)
    
  5. 重排并插入T5:{y, r, x, z, q, t, p}{z, r, x, y}

    • 插入z:增加现有节点z的计数到4
    • 插入r:增加现有节点r的计数到3
    • 插入x:增加现有节点x的计数到3
    • 插入y:增加现有节点y的计数到2

    FP树最终更新为:

          null
      /     	\
    z(4)   		r(1)
    |   \        |
    r(2) x(1)	x(1)
    |      |
    x(1)  y(1)
    |
    y(1)
    

这样,我们就完成了所有事务的插入。FP树的每个节点都包含一个项和一个计数,计数表示该路径上该项的出现次数。节点之间的链接表示事务中项的顺序。通过这种方式,FP树能够有效地表示数据库中的频繁模式,并用于后续的频繁项集挖掘。

步骤3:挖掘频繁项集
  1. 从头表中的底部项开始挖掘:从头表的底部项开始,挖掘它的条件模式基。
  2. 构建条件FP树:对于每个频繁项,根据其条件模式基构建条件FP树。
  3. 递归挖掘:递归地挖掘条件FP树中的频繁项集,直到找不到频繁项集为止。

从FP树中挖掘频繁项集的过程如下:

  1. 频繁项“z”
    • 条件模式基:{}5
    • 构建条件FP树,并递归挖掘。
  2. 频繁项“r”
    • 条件模式基:{z}2,{}3
    • 构建条件FP树,并递归挖掘。
  3. 频繁项“x”
    • 条件模式基:{z,r}1,{r}2,{z}2
    • 构建条件FP树,并递归挖掘。
  4. 频繁项“y”
    • 条件模式基:{z,r,x}1,{z,x}2
    • 构建条件FP树,并递归挖掘。

通过这种方式,FP树算法可以高效地挖掘出数据库中的频繁项集。FP树算法在大数据集上的优势在于它的压缩技术和减少数据库扫描次数的能力,这使得它非常适合处理大规模数据挖掘任务。

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
FP-growth算法是一种用于频繁项集挖掘的算法,与Apriori算法相比,它不需要生成所有的候选项集,因此在处理大规模数据时具有更高的效率。在这里,我们可以使用Python中的mlxtend库来实现FP-growth算法,对2022年世界杯的数据进行分析。 假设我们已经收集了2022年世界杯的比赛数据,包括比赛结果、进球数、球队等信息。我们可以将每场比赛的数据表示成一个项集,例如: Match1 = {Brazil, Argentina, Win} Match2 = {France, Spain, Draw} Match3 = {Germany, Mexico, Germany Win, 2-0} 其中,Match1表示巴西队与阿根廷队的比赛结果是巴西队获胜,Match2表示法国队与西班牙队的比赛结果是平局,Match3表示德国队与墨西哥队的比赛结果是德国队获胜,且进球数为2。 接下来,我们可以使用Python中的mlxtend库来实现FP-growth算法,以下是示例代码: ```python from mlxtend.frequent_patterns import fpgrowth from mlxtend.frequent_patterns import association_rules # 数据准备 data = [['Brazil', 'Argentina', 'Win'], ['France', 'Spain', 'Draw'], ['Germany', 'Mexico', 'Germany Win', '2-0'], ...] # 将数据转化为0/1矩阵格式 def encode_units(x): if x: return 1 else: return 0 data = pd.DataFrame(data) encoded_data = data.applymap(encode_units) # FP-growth算法 frequent_itemsets = fpgrowth(encoded_data, min_support=0.5, use_colnames=True) # 关联规则 rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1) # 输出频繁项集和关联规则 print(frequent_itemsets) print(rules) ``` 以上代码中,我们首先将数据转化为0/1矩阵格式,然后使用FP-growth算法发现频繁项集和关联规则。在这里,我们同样使用了min_support参数来设置频繁项集的最小支持度,使用metric参数来设置关联规则的评价指标,这里我们使用了lift指标。 通过这些频繁项集和关联规则,我们可以发现一些有趣的趋势和规律,例如哪些球队之间的胜率更高,哪些球队之间的比赛更容易出现进球等等。与Apriori算法相比,FP-growth算法更加高效,可以处理更大规模的数据集,因此在分析大规模的世界杯数据时,FP-growth算法是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶雨 i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值