频繁关联规则挖掘之FP树

机器学习(十一):FP增长(FP-growth) 引言:     FP增长(FP-growth)算法是一种高效发现频繁项集的方法,只需要对数据库进行两次扫描。它基于Apriori构建,但在完成相同任务时采用了一些不同的技术。该算法虽然能更为高效地发现频繁项集,但不能用于发现关联规则。       本文用到的部分术语已在简介中介绍(具体看‘基本概念-关联分析’),这里不再重述。 一、FP-growth算法 FP-growth算法发现频繁... 阅读详情

一. FP树构造

      FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,它不需要不断地生成候选项目队列和不断得扫描整个数据库进行比对。为了达到这样的效果,它采用了一种简洁的数据结构,叫做frequent-pattern tree(频繁模式树)。请看下面这个例子:

      先看数据集如下:

      

      这张表描述了一张商品交易清单,abcdefg代表商品,(ordered)frequent items这一列是把商品按照降序重新进行了排列,这个排序很重要,我们操作的所有项目必须按照这个顺序来,这个顺序的确定非常简单,只要对数据库进行一次扫描就可以得到这个顺序。由于那些非频繁的项目在整个挖掘中不起任何作用,因此在这一列中排除了这些非频繁项目。我们在这个例子中设置最小支持阈值(minimum support threshold)为3。我们的目标是为整个商品交易清单构造一颗树。

      我们首先定义这颗树的根节点为null,然后我们开始扫描整个数据库的每一条记录开始构造FP树。

      第一步:扫描数据库的第一个交易,也就是TID为100的交易。那么就会得到这颗树的第一个分支<(f:1),(c:1),(a:1),(m:1),(p:1)>。注意这个分支一定是要按照降频排列的。

      

      第二步:扫描第二条交易记录(TID=200),我们会有这么一个频繁项目集合<f,c,a,b,m>。仔细观察这个队列,你会发现这个集合的前3项<f,c,a>与第一步产生的路径<f,c,a,m,p>的前三项是相同的,也就是说他们可以共享一个前缀。于是我们在第一步产生的路径的基础上,把<f,c,a>三个节点的数目加1,然后将<(b:1),(m:1)>作为一个分支加在(a:2)节点的后面,成为它的子节点。看下图:

      

      第三步:接着扫描第三条交易记录(TID=300),你会看到这条记录的集合是<f, b>,与已存在的路径相比,只有f是共有的前缀,那么f节点加1,同时再为f节点生成一个新的字节点(b:1).就会有下图:

      

      第四步:继续看第四条交易记录,它的集合是<c,b,p>,哦,这回不一样了。你会发现这个集合的第一个元素是c,与现存的已知路径的第一个节点f不一样,那就不用往下比了,没有任何公共前缀。直接将该集合作为根节点的子路径附加上去。就得到了下图(图1):

       

      第五步:最后一条交易记录来了,你看到了一条集合<f,c,a,m,p>。你惊喜得发现这条路径和树现有最左边的路径竟然完全一样。那么,这整条路径都是公共前缀,那么这条路径上的所有点都加1好了。就得到了最终的图(图2)。

       

      好了,一颗FP树就已经基本构建完成了。等等,还差一点。上述的树还差一点点就可以称之为一个完整的FP树啦。为了便于后边的树的遍历,我们为这棵树又增加了一个结构-头表,头表保存了所有的频繁项目,并且按照频率的降序排列,表中的每个项目包含一个节点链表,指向树中和它同名的节点。罗嗦了半天,可能还是不清楚,好吧直接上图,一看你就明白:

        

      以上就是整个FP树构造的完整过程。聪明的读者一定不难根据上述例子归纳总结出FP树的构造算法。这里就不再赘述。详细的算法参考文献1。

 

二. FP树的挖掘

 

      下面就是最关键的了。我们已经有了一个非常简洁的数据结构,下一步的任务就是从这棵树里挖掘出我们所需要的频繁项目集合而不需要再访问数据库了。还是看上面的例子。

 

      第一步:我们的挖掘从头表的最后一项p开始,那么一个明显的直接频繁集是(p:3)了。根据p的节点链表,它的2个节点存在于2条路径当中:路径<f:4,c:3,a:3,m:2,p:2>和路径<c:1,b:1,p:1>.从路径<f:4,c:3,a:3,m:2,p:2>我们可以看出包含p的路径<f,c,a,m,p>出现了2次,同时也会有<f,c,a>出现了3次,<f>出现了4次。但是我们只关注<f,c,a,m,p>,因为我们的目的是找出包含p的所有频繁集合。同样的道理我们可以得出<c,b,p>在数据库中出现了1次。于是,p就有2个前缀路径{(fcam:2),(cb:1)}。这两条前缀路径称之为p的子模式基(subpattern-base),也叫做p的条件模式基(之所以称之为条件模式基是因为这个子模式基是在p存在的前提条件下)。接下来我们再为这个条件子模式基构造一个p的条件FP树。再回忆一下上面FP树的构造算法,很容易得到下面这棵树:

      

      但是由于频繁集的阈值是3。那么实际上这棵树经过剪枝之后只剩下一个分支(c:3),所以从这棵条件FP树上只能派生出一个频繁项目集{cp:3}.加上直接频繁集(p:3)就是最后的结果.

      第二步:我们接下来开始挖掘头表中的倒数第二项m,同第一步一样,显然有一个直接的频繁集(m:3).再查看它在FP树中存在的两条路径<f:4,c:3,a:3,m:2>和<f:4,c:3,a:3,b1,m:1>.那么它的频繁条件子模式基就是{ (fca:2),(fcab:1)}.为这个子模式基构造FP树,同时舍弃不满足最小频繁阈值的分支b,那么其实在这棵FP树中只存在唯一的一个频繁路径<f:3,c:3,a:3>.既然这颗子FP树是存在的,并且不是一颗只有一个节点的特殊的树,我们就继续递归得挖掘这棵树.这棵子树是单路径的子树,我们可以简化写成mine(FP tree|m)=mine(<f:3,c:3,a:3>|m:3).

      下面来阐述如何挖掘这颗FP子树,我们需要递归.递归子树也需要这么几个步骤:

      1 这颗FP子树的头表最后一个节点是a,结合递归前的节点m,那么我们就得到am的条件子模式基{(fc:3)},那么此子模式基构造的FP树(我们称之为m的子子树)实际上也是一颗单路径的树<f:3,c:3>,接下也继续继续递归挖掘子子树mine(<f:3,c:3>|am:3). (子子树的递归分析暂时打住.因为再分析子子树的递归的话文字就会显得太混乱)

      2 同样,FP子树头表的倒数第二个节点是c,结合递归前节点m,就有我们需要递归挖掘mine(<f:3>|cm:3).

      3 FP子树的倒数第三个节点也是最后一个节点是f,结合递归前的m节点,实际上需要递归挖掘mine(null|fm:3),实际上呢这种情况下的递归就可以终止了,因为子树已经为空了.因此此情况下就可以返回频繁集合<fm:3>

      注意:这三步其实还包含了它们直接的频繁子模式<am:3>,<cm:3>,<fm:3>,这在每一步递归调用mine<FPtree>都是一样的,就不再罗嗦得一一重新指明了.

      实际上这就是一个很简单的递归过程,就不继续往下分析了,聪明的读者一定会根据上面的分析继续往下推导递归,就会得到下面的结果.

        mine(<f:3,c:3>|am:3)=><cam:3>,<fam:3>,<fcam:3>

        mine(<f:3>|cm:3)=><fcm:3>

        mine(null|fm:3)=><fm:3>

      这三步还都包含了各自直接的频繁子模式<am:3>,<cm:3>,<fm:3>.

      最后再加上m的直接频繁子模式<m:3>,就是整个第二步挖掘m的最后的结果。请看下图:

      

      第三步:来看看头表倒数第三位<b:3>的挖掘,它有三条路径<f:4,c:3,a:3,b:1>,<f:4,b:1>,<c:1,b:1>,形成的频繁条件子模式基为{(fca:1),(f:1),(c:1)},构建成的FP树中的所有节点的频率均小于3,那么FP树为空,结束递归.这一步得到的频繁集就只有直接频繁集合<b:3>

      第四步:头表倒数第四位<a:3>,它有一条路径<f:4,c:3>,频繁条件子模式基为{(fc:3)},构成一个单路径的FP树.实际上可能有人早已经发现了,这种单路径的FP树挖掘其实根本不用递归这么麻烦,只要进行排列组合就可以直接组成最后的结果.实际上也确实如此.那么这一步最后的结果根据排列组合就有:{(fa:3),(ca:3),(fca:3),(a:3)}

      第五步:头表的倒数第五位<c:4>,它只有一条路径<f:4>,频繁条件子模式基为{(f:3)},那么这一步的频繁集也就很明显了:{(fc:3),(c:4)}

      第六步:头表的最后一位<f:4>,没有条件子模式基,那么只有一个直接频繁集{(f:4)}

      这6步的结果加在一起,就得到我们所需要的所有频繁集.下图给出了每一步频繁条件模式基.

      

      其实,通过上面的例子,估计早有人看出来了,这种单路径的FP树挖掘其实是有规律的,根本不用递归这么复杂的方法,通过排列组合可以直接生成.的确如此,Han Jiawei针对这种单路径的情况作了优化.如果一颗FP树有一个很长的单路径,我们将这棵FP树分成两个子树:一个子树是由原FP树的单路径部分组成,另外一颗子树由原FP树的除单路径之外的其余部分组成.对这两个子树分别进行FP Growth算法,然后对最后的结果进行组合就可可以了.

通过上面博主不厌其烦,孜孜不倦,略显罗嗦的分析,相信大家已经知道FP Growth算法的最终奥义.实际上该算法的背后的思想很简单,用一个简洁的数据结构把整个数据库进行FP挖掘所需要的信息都包含了进去,通过对数据结构的递归就可以完成整个频繁模式的挖掘.由于这个数据结构的size远远小于数据库,因此可以保存在内存中,那么挖掘速度就可以大大提高.

      也许有人会问?如果这个数据库足够大,以至于构造的FP树大到无法完全保存在内存中,这该如何是好.这的确是个问题. Han Jiawei在论文中也给出了一种思路,就是通过将原来的大的数据库分区成几个小的数据库(这种小的数据库称之为投射数据库),对这几个小的数据库分别进行FP Growth算法.还是拿上面的例子来说事,我们把包含p的所有数据库记录都单独存成一个数据库,我们称之为p-投射数据库,类似的m,b,a,c,f我们都可以生成相应的投射数据库,这些投射数据库构成的FP树相对而言大小就小得多,完全可以放在内存里.





fp-growth理解及应用 针对餐饮订单数据进行关联规则提取,关联规则的数据量大的时候计算非常耗时,主要是在频繁项集产生的过程中,目前比较经典的两种算法分别是Apriori和Fp-growth(也是基于apriori),两种算法都尝试了,测试fp-growth的计算速度比apriori的速度要快不少,那么显然选择fp-growth进行操作;   FP-growth算法主要包括以下步骤(详细讲解可以查看):   1)扫描数据,得到所有频繁一项集的的计数。然后删除支持度低于阈值的项,将1项频繁集放入项头表,并按照支持度降序排列。   阅读详情

相关推荐

FP Growth算法简介+实例

算法背景:找出关联规则的一种方法是,先找出所有频繁项集,即满足support>=minsup的项集,然后再从频繁项集中选出置信度满足要求的,最后得到强关联规则。问题是,找出所有频繁项集的过程,计算量是极大的。解决这一问题的思路之一是减少候选集。从这一思路出发,有两种较为成熟的解决方案。其中之一是Apriori算法,另一个则是FP Growth算法,也叫做FP Tree算法。也就是说,FP Growth算法是一个挖掘频繁项集的算法。 参考文档:添加链接描述 ...

行步至春深 1万+

FP-growth:FP树的构建

前言 FP-growth是一个非常好的频繁项集发现算法,广泛应用于搜索引擎中(找出经常在一起出现的词对)相对于Apriori算法,FP-growth算法只用对数据库进行两次扫描,因此更适用于处理大数据。 关于FP-growth的理解,请参照这个网址:https://www.cnblogs.com/pinard/p/6307064.html 我自认是没有这个能力写的这么好的哈哈。本文以代码为主。 F...

weixin_43901558的博客 1万+

FP增长算法(FP Growth Algorithm)

FP增长算法

foryoundsc的博客 5004

FP增长(FP-Growth)算法例题

数据处理与智能决策

CJ_LLLin的博客 8279

Python学习笔记——关联规则(关联分析)

在超市的例子中,如果尿布和啤酒的提升度大于1,那么就说明购买尿布的顾客购买啤酒的概率大于这两个物品独立购买的概率。例如,在超市的数据中,关联分析可能会发现某些商品经常一起被购买,或者在特定的时间段某些商品的销售量会增加。比如,如果我们在所有的购物篮中查看,发现尿布和啤酒一起出现在80%的购物篮中,那么我们就说尿布和啤酒的支持度是80%。如果我们设置的最小支持度是50%,那么只有当尿布和啤酒一起出现在至少50%的购物篮中时,我们才认为这个组合是频繁的。关联分析的目的是找出数据库中的项目之间隐藏的关联性。

Waitind_的博客 4664

关联规则挖掘:FP-growth算法详解

FP-growth(频繁模式增长)算法是一种高效的关联规则挖掘算法,由Jiawei Han等人在2000年提出。与Apriori算法相比,FP-growth算法通过构建FP树(频繁模式树)来减少数据库的扫描次数,从而显著提高挖掘效率。FP-growth算法的核心思想是利用“压缩”的数据库表示,即FP树,来直接发现频繁项集,而无需生成候选集。FP-growth算法通过构建FP树和条件FP树,有效地减少了数据挖掘过程中的计算复杂度,是关联规则挖掘领域的一项重要技术。

kkchenjj的博客 2470

关联规则挖掘

关联规则挖掘可以让我们从数据集中发现项与项(item 与 item)之间的关系,它在我们的生活中有很多应用场景,“购物篮分析”就是一个常见的场景,这个场景可以从消费者交易记录中发掘商品与商品之间的关联关系,进而通过商品捆绑销售或者相关推荐的方式带来更多的销售量。所以说,关联规则挖掘是个非常有用的技术。 搞懂关联规则中的几个概念 我举一个超市购物的例子,下面是几名客户购买的商品列表: 支持度 支持...

qiu_zhi_liao的博客 9760

第6条博客标题:关联规则挖掘实战:电影推荐系统之FPGrowth算法

作者:禅与计算机程序设计艺术 1.简介 随着互联网蓬勃发展,电子商务网站如亚马逊、淘宝等不断涌现出越来越多的用户数据。这些数据对于企业来说无疑是至关重要的资源。有了这些数据之后,企业就可以对消费者行为进行分析,从而帮助他们更好的决策。 大数据时代给予企业更加强大的决策能力,促进了知识的发现

AI天才研究院 939

关联规则算法-FpGrowth的优点与FP树推导实例

转载 + 一些个人解析

一个孤寡90后it学生仔的博客 1254

MATLAB中的FP-Growth关联规则挖掘工具开发

关联规则挖掘是数据挖掘领域中的一个重要组成部分,它的目标是发现大型数据库中变量之间的有趣关系,尤其是那些频繁出现的变量组合。这包括产品间的关联,如超市中顾客购买商品的模式,或者是网络日志中用户行为的模式。关联规则的一个经典应用是购物篮分析,通过识别顾客经常一起购买的商品,超市可以进行更有针对性的销售策略和货架摆放设计。关联规则通常包含三个主要参数:支持度(Support)、置信度(Confidence)和提升度(Lift)。支持度表示规则中所有项目组合在全部交易中出现的概率;

weixin_28787801的博客 962

FP_Growth算法案例讲解和演示

资源包含了FP-tree算法的演示文本、算法源码的讲解、可执行程序的演示以及可编译程序代码,通过这些资源,你可以掌握fp_tree 算法的原理和树的创建过程。

数据挖掘实战:从期末考题到关联规则FP树算法的深度解析

本文深度解析了关联规则挖掘中的FP树算法,从数据预处理到频繁项集生成的全流程实战技巧。通过超市购物篮等经典案例,详细讲解FP树构建、条件模式基提取及关联规则生成方法,帮助读者掌握这一高效的数据挖掘技术,适用于电商推荐、零售分析等大数据场景。

weixin_29264201的博客 504

CVAT实战:从零搭建高效数据标注流水线

本文详细介绍了如何使用CVAT搭建高效的数据标注流水线,从环境部署到团队协作,再到数据流转和质量把控,全面覆盖了数据标注的各个环节。CVAT作为一款开源的数据标注工具,支持多人协作和丰富的标注类型,特别适合遥感图像等复杂场景的标注需求。通过实战案例和技巧分享,帮助读者快速掌握CVAT的核心功能,提升标注效率。

weixin_30555125的博客 397

FP-growth

FP-growth FP-growth 算法能够更有效地挖掘数据,但不能用于发现关联规则。 FP-growth 基于 Apriori 算法构建,但在完成相同任务时采用了一些不同的技术。 Apriori:在每次循环的连接步中都要扫描数据集,来计算当前组合而成的项集的支持度。 FP-growth:只需要对数据库进行两次扫描,并将数据集存储在一个特定的称作 FP 树的数据结构。这种做法能够使得算法的执...

温染的笔记 1968

使用TBtools进行物种间共线性分析

Sequence Toolkit ---Fasta Tools ----ID Prefix (fasta文件)

sunny_dayone的博客 8749

U盘重装Win10系统

准备工作 准备一个8G或8G以上U盘(32G以内) 请备份好u盘里的资料,在制作过程中会格式化硬盘 请备份好要安装系统的盘的资料,安装时也会对该盘内容进行格式化。 将u盘插入电脑usb接口中,尽可能的插入usb3.0的接口,这样下载和安装速度会更快。 1.到微软官网下载安装包 浏览器输入:微软官网下载win10 懒人请复制粘贴:https://www.microsoft.com/zh-cn/software-download/windows10 ​ 打开之后的界面: 2.下载Media Creat.

Cici$的博客 2115

【算法篇】关联性分析 FP-Growth算法

FP-Growth(Frequent Pattern Growth,频繁模式增长)算法是一种高效的数据挖掘算法,主要用于解决频繁项集挖掘和关联规则发现的问题。与传统的Apriori算法相比,FP-Growth算法通过构建一种称为FP-Tree(频繁模式树)的数据结构,极大地减少了搜索空间,提高了挖掘效率。FP-Growth算法不仅适用于处理大规模数据集,还能有效应对数据稀疏性问题,因此在电子商务、社交网络分析、金融风控等多个领域有着广泛的应用。FP-Growth算法Apriori算法提出时间。

data_disciple的博客 3360

手把手教你学Simulink--双足机器人的反步控制方法仿真

本文介绍了在Simulink中基于反步控制方法进行双足机器人仿真研究的步骤。主要内容包括:1)准备工作,包括MATLAB/Simulink安装和相关工具箱配置;2)构建简化双足机器人模型;3)设计反步控制器,阐述其递归设计原理及Lyapunov函数构造方法;4)通过MATLAB Function块实现控制逻辑并连接模型;5)仿真参数配置和结果分析。文章强调反步控制适用于非线性系统,通过逐步构造虚拟控制律保证系统稳定性,并指出需要多次调试和查阅文献来优化控制效果。该教程为研究双足机器人运动控制提供了实用的仿真

MHD0815的博客 151

机器学习实战——第十二章-FP-growth

第一部分为我看到的一篇文章https://www.cnblogs.com/pinard/p/6307064.html,让我理解了这个算法,很好,讲的很明白,我引用过来了。 1.FP Tree数据结构     为了减少I/O次数,FP Tree算法引入了一些数据结构来临时存储数据。这个数据结构包括三部分,如下图所示:     第一部分是一个项头表。里面记录了所有的1项频繁集出现的次数,按...

youhuakongzhi的博客 5594

使用Mask2Former和X-Decoder训练自定义数据集及结果复现报告

本报告记录了使用MMDetection框架中的Mask2Former和X-Decoder模型在自定义数据集上的训练过程。报告包含环境配置、数据集准备、模型训练与优化(解决了Mask2Former的PQ值异常问题)、性能评估等关键环节。详细展示了从数据集转换(将客户提供的COCO格式数据适配MMDetection框架)、配置文件修改、到最终模型训练和评估的全流程。特别针对Mask2Former训练中的PQ值异常问题提供了解决方案,并对比了两种模型在自定义数据集上的表现。报告还包含完整的代码实现和技术细节。

huanghm88的专栏 1094

Spring AI Alibaba实战训练营-20 基于注解驱动的MCP快速开发入门指南

本文详细讲解如何使用SpringAiAlibaba快速开发基于注解驱动的MCP应用。文章详细介绍了MCP协议并且重点介绍了Spring AI通过注解驱动的开发方式简化MCP服务开发。具体包括服务端和客户端的注解使用、城市最新时间查询MCP项目结构概览(服务端和客户端模块)以及环境配置要求。

program哲学 295

【数据挖掘】FP-growth算法

FP-growth是一种高效的频繁项集挖掘算法,相比Apriori算法具有显著优势。它通过构建FP树压缩存储频繁项关联信息,仅需扫描数据库两次,无需生成候选项集。算法分为两个阶段:首先构建FP树和项头表,然后自底向上递归挖掘频繁项集。FP-growth在购物篮分析等场景中应用广泛,能有效挖掘商品关联模式。虽然存在内存依赖等缺点,但其高效性和完整性使其成为关联规则挖掘的核心算法之一。本文详细介绍了算法原理、实现步骤和Python代码,为实际应用提供了完整参考。

2401_84149564的博客 1543

LeRobot 入门教程(十六)Isaac Lab LeIsaac 叠衣服、夹橙子仿真环境

LeRobotEnvHub现已支持通过LeIsaac进行机器人模仿学习,提供摘橙子、搬立方体等日常任务仿真环境。用户可通过HuggingFace共享环境,使用一行代码加载任务,支持随机动作测试和远程操控。系统提供云端仿真方案,无需本地GPU即可运行。当前支持4种任务环境,通过make_env函数切换,其中折叠布料任务需先调用initialize()函数。该平台集成了数据采集、转换和训练全流程,为机器人学习提供便捷工具链。

2506_90492529的博客 1483

数据挖掘 | 关联规则

认真复习的第五天 关联规则Apriori、FP感觉会二选一,FP比较绕,我又更新了个做题过程的视频

AI_STRAAY的博客 1011

仿真学习系列(四十一):Sigrity仿真之PDN阻抗提取

电源分配网络(Power Distribution Network,简称PDN)是电子系统中至关重要的部分,主要用于将电源从电源输入端传输到各个组件。PDN的设计质量直接影响到系统的电源完整性和信号稳定性,尤其是在高速设计中,PDN的阻抗特性对电源噪声、地弹(ground bounce)和电源完整性(Power Integrity,简称PI)具有重要影响。

案例文章,高速信号 1133

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据挖掘算法之关联规则挖掘(二)FPGrowth算法

之前介绍的apriori算法中因为存在许多的缺陷,例如进行大量的全表扫描和计算量巨大的自然连接,所以现在几乎已经不再使用 在mahout的算法库中使用的是PFP算法,该算法是FPGrowth算法的分布式运行方式,其内部的算法结构和FPGrowth算法相差并不是十分巨大 所以这里首先介绍在单...

chongxingyao9274的博客 411

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: C语言中程序调试和宏使用技巧
下一篇: Linux内核的引导和启动过程
wustdatamining
博客等级 码龄15年 12粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值