Fpgrowth /FP Tree算法原理总结(附测试代码)

本文详细介绍了FPGrowth算法,包括如何构建FP树、频繁项集的挖掘过程,以及如何通过mlxtend库实现代码实例。重点讲解了频繁项集的计算、关联规则的生成及其参数设置。

引言

  • Fpgrowth算法又叫fp tree,通俗来讲是计算特征之间关联程度的,Fp树是其核心
    • FP树(Frequent Pattern Tree)是一种用于高效挖掘频繁项集的数据结构。它通过将事务数据集转换为一棵树形结构来实现,其中每个节点表示一个项,每个路径表示一个事务。
    • 如下图,事物就是列,项就是行数据,更通俗的理解就是事物大概对应的就是序号,编号,项就是序号对应的每行数据(如果感觉抽象可以往下看详解时候的例子)

算法详解

基本步骤:

  • 1 扫描一次事物集,找出频繁1项集,并按频度降序排列得到列表L。
  • 2 基于L,再扫描一次事务集,对每个原事务进行处理:删去不在L中的项,并按照L中的顺序排列,得到修改后的事务集T’。
  • 3 构造FP树
  • 4 在FP树上递归地找出所有频繁项集
    • 注1:左边就是数据,其中a b c d都是表示特征,项就是这些特征的组合; 然后需要找出频繁 1 项集,啥意思呢,通俗解释就是,比如下图中{A:8}集合离只有一个键值对就是 1 项集,几个键值对就是几项集,这个 1 项集其实就是特征在事物中总共出现的次数
    • 注2: 得到每个特征的出现次数进行降序排列,并根据支持度(就是特征出现次数/总特证数)筛选不符合支持度的特征得到项头表,也就是 L(可以看到O,I 不满足所以不在 L 中)
    • 注3: 根据 L 得到修改后的事物集T‘,其实就是去掉了项特征不在 L 表中的特征

建立 FP Tree

  • 此处是理解的一个难点之一,看下图
  • 首先我们根据 T’还有项头表来建立节点,可以理解成画树的分叉,比如第一条数据 ACEBF(因为 ACEBF 目前都只出现了一次,所以第一条分叉只有一条,此为根节点):
  • 然后插入第二条数据 ACG,因为第一条数据中已经有AC项了,所以第一条分支上的 AC都+1,而 G 是没有的,所以建立一个新节点
  • 同理插入剩余数据(此处详细每条数据插入后的图片可以点击参考资料 1)

  • 最终建立的 Fp 树如下图

FP tree 的挖掘

  • 建立好 fp tree 后就该挖掘频繁项集了,此处也是一个难点,或者说是比较容易一头雾水的地方
  • 例如我们先找特征 F 相关的节点,如下图所示,左边就是所有 F 相关的分叉和节点了,中间这个 F 的条件模式基听起来过于拗口难以理解,可以这么来理解
    • 首先左侧的分叉只有一条,那就是 ACEGBF
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

矮人三等

秀儿,是你吗秀儿?

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

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

打赏作者

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

抵扣说明:

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

余额充值