本文已参与「新人创作礼」活动,一起开启创作之路。

前言

最近正在学习数据挖掘,前两天学习了频繁项集的挖掘方法:Apriori算法,紧接着又学习了FP-growth算法,感觉比较复杂,在网上看人家的文章也还是一头雾水,无从下手,幸亏老师讲的通俗易懂,才勉强掌握,下面我就分享一下具体的细节

FP-growth简介

FP-growth是一种经典的频繁项集和关联规则的挖掘算法,在较大数据集上Apri数据库原理ori需要花费大量的运算开销,而FP-growth利用了数据结构,只需要遍历扫描两次数据集,大大降低了Aproir挖掘算法的代价。

过程如下:

  1. 第一次扫描数据集或者是数据库,导出频繁项(一项集)的集合,并统计出各自的支持度计数(频度),按照支持度计数,将所有数据结构有哪些的一项集从大到小排列成一个结果集L。
  2. 第二次扫描数据集或者是数据库,将每个事务中的项都按照L中的次序排列。
  3. 针对于每个频繁项,构造它的条件模式基,然后再构造它的条件FP-树。
  4. 在新构造的条件FP-事务局是什么单位树上重复上一过程,直到结果条件FP-树为空,或者它只包含一条路径(事务单个路事务所是干什么的径将产生其子路径的所有组合,每个子路大数据修仙径是一个频繁模式)

举例说明:

如下图的数据表单L1,该数据库有9个事务,第一列为购买I数据结构与算法d,第二列为购买的物品。
最小支持度计算法是指什么数:2。

FP-growth 算法的简单学习

▲第一步,扫描数据库,得出结果集L算法导论:{ { I算法设计与分析2 : 7 } , { I1 : 6 } ,数据库设计 { I3 : 6 } , { I4 : 2 } , { I5 : 1 } ,}
其中,{ I2 : 7 } 表示 I2 出现 7次。
因此我们得出一个顺序:②①数据库有哪几种③④⑤。
▲第二步,再次扫描数据库,将items里面的事务按照上一步的顺序进行排列,得数据结构c语言版出以下表L2:
FP-growth 算法的简单学习

算法分析的目的是第三步,接下来我们开始构造每个单项集的条件模式基(一个“子数据库”,由FP树中与该后缀模式一起出现的前缀路数据库系统概论径集数据结构c语言版严蔚敏第二版答案组成)。

  • 我们从支持度最小的I5开始:

    我们在L2表中寻找以I5为后缀的项集:{I数据库原理2 , I1大数据与会计 , I5} ,{I2 , I1 , I3 , I5}
    去掉后缀I5,得出I5条件模式基{I2 , I1} ,{I2 , I1大数据是干什么的 , I3 } ——> {I2 , I1 :1} ,{I2 , I1 , I3 :1},后面的1代表计数,意思就是两者均出现一次。
    然后我们根据{I2 , I1 :1} ,{I2 , I1 , I3 :1}构造条件FP树
    第一次{I2 , I1 :1} 创建节点I2,I1并计数,第二次延续节点I2,I1并创建节点I3,计数。

FP-growth 算法的简单学习

因为I3支持算法的时间复杂度取决于度计数是1,小于最小支持度计数2,故将I3去掉,剩下数据库有哪几种I2和I1。
该分支是以I5为后缀,并且该分支为单路径,所以该单个路径产生频繁模式的所有组合是:
{I2,I5:2}、{I1,I5:2}大数据是干什么的、{I2,I1,I5:2}。
根据上述步骤我们可以找到 I4的频繁大数据是干什么的项集:{I数据库系统概论第五版课后答案2,I4:2}
以上I5和I4这种单个路径的可以依据这个过程求出频繁项集,如果遇到多个路径呢?我们来看一下I3:
首先还是找出I3的条件模式基:寻找以I3为后缀的项集并计数,得出{I2,I1:2}、{I2:2}、{I1:2}。
然后构造条件FP树,如下图

FP-growth 算法的简单学习

当添加{I1:2}项的时候由于没有I2为前缀,所以产生了分支。
这下该怎么找频繁项集呢?不急,按数据结构c语言版第二版课后答案照前面的模式我们先把当前的频繁项集找出来:I2出现了四次,I1也出现了四次(两数据结构实验报告个I1相加),因为我们是以I3为后缀的,所以得出频繁项集数据库设计事务隔离级别
{I2,I3:4}、{I1,I3:4}。
此时频繁项集还没有找完,因为是多分支,所以我们需要将树往上“推事务文书”,原先我们的后缀大数据与会计是I3,这个时大数据是干什么的候我们要再增加一个树中最底层的I1,也就是把{I1,I3}当作后缀,此时右边的分支就“推”没了,左边的分支只剩下I2,原来的两条路径变成了单个路径,所以得出频繁项集:{I2,I1,I3:2}。
这个时候以I3为后缀的所有频繁项集我们就都找出来了:{I2,I3:4}、数据结构题库{I1,I3:4}、{I2,I1,I3:2}。

  • 最后,I1产生的频繁项集是{I2,I1:4},由于数据中没有以I2为后缀的项集,故I2没有产生频繁项集。

文中侧重于算法的理解,并无代码实现,还望小伙伴们多多包涵!