频繁项集挖掘算法之FPGrowth

背景:

        频繁项集挖掘算法用于挖掘经常一起出现的item集合(称为频繁项集),通过挖掘出这些频繁项集,当在一个事务中出现频繁项集的其中一个item,则可以把该频繁项集的其他item作为推荐。比如经典的购物篮分析中啤酒、尿布故事,啤酒和尿布经常在用户的购物篮中一起出现,通过挖掘出啤酒、尿布这个啤酒项集,则当一个用户买了啤酒的时候可以为他推荐尿布,这样用户购买的可能性会比较大,从而达到组合营销的目的。

        常见的频繁项集挖掘算法有两类,一类是Apriori算法,另一类是FPGrowth。Apriori通过不断的构造候选集、筛选候选集挖掘出频繁项集,需要多次扫描原始数据,当原始数据较大时,磁盘I/O次数太多,效率比较低下。FPGrowth算法则只需扫描原始数据两遍,通过FP-tree数据结构对原始数据进行压缩,效率较高。

        FPGrowth算法主要分为两个步骤:FP-tree构建、递归挖掘FP-tree。FP-tree构建通过两次数据扫描,将原始数据中的事务压缩到一个FP-tree树,该FP-tree类似于前缀树,相同前缀的路径可以共用,从而达到压缩数据的目的。接着通过FP-tree找出每个item的条件模式基、条件FP-tree,递归的挖掘条件FP-tree得到所有的频繁项集。算法的主要计算瓶颈在FP-tree的递归挖掘上,下面详细介绍FPGrowth算法的主要步骤。


FPGrowth的算法步骤:

  • FP-tree构建

    1. 第一遍扫描数据,找出频繁1项集L,按降序排序
    2. 第二遍扫描数据:
      • 对每个transaction,过滤不频繁集合,剩下的频繁项集按L顺序排序
      • 把每个transaction的频繁1项集插入到FP-tree中,相同前缀的路径可以共用
      • 同时增加一个header table,把FP-tree中相同item连接起来,也是降序排序
      •  ==> 
  • 频繁项挖掘
    1. 从header table的最下面的item开始,构造每个item的条件模式基(conditional pattern base)

      • 顺着header table中item的链表,找出所有包含该item的前缀路径,这些前缀路径就是该item的条件模式基(CPB)
      • 所有这些CPB的频繁度(计数)为该路径上item的频繁度(计数)
      • 如包含p的其中一条路径是fcamp,该路径中p的频繁度为2,则该CPB fcam的频繁度为2
    2. 构造条件FP-tree(conditional FP-tree)
      • 累加每个CPB上的item的频繁度(计数),过滤低于阈值的item,构建FP-tree
      • 如m的CPB{<fca:2>, <fcab:1>},f:3, c:3, a:3, b:1, 阈值假设为3,过滤掉b
    3. FP-Growh:递归的挖掘每个条件FP-tree,累加后缀频繁项集,直到找到FP-tree为空或者FP-tree只有一条路径(只有一条路径情况下,所有路径上item的组合都是频繁项集)

注意点:

  • FP-Tree中header table按item降序排序原因
    1. 共用前缀:不排序会造成不能共用前缀

    2. 更多的共用前缀:频繁的item会在树的上层,可以被更多的共享;升序排序会造成那些频繁出现的item出现在树的分支中,不能更多的共用前缀

参考文献:

时间: 2024-08-22 13:40:59

频繁项集挖掘算法之FPGrowth的相关文章

基于PFP-Growth算法的海量频繁项集挖掘

基于PFP-Growth算法的海量频繁项集挖掘 江雨燕, 李平 随着互联网技术的发展,网络数据变得越来越巨大,如何从中挖掘有效信息成为人们研究的重点.近年来频繁项集挖掘由于其在关联规则挖掘.相关挖掘等任务中的相关重要作用,越来越受到人们的重视.本文针对分布式计算环境下频繁项集挖掘算法的研究,对PFP-Growth算法进行了改进,通过MapReduce编程模型对改进的PFP-Growth算法进行了实现和应用,使用户可以从海量数据中高效地获得所有需要的频繁项集,实验结果表明算法在针对海量数据时具有较

[文档]基于MapReduce的频繁项集挖掘方法

基于MapReduce的频繁项集挖掘方法 戎翔,李玲娟 为了改进关联规则挖掘的经典Apriori算法,设计一种基于Map/Reduce的频繁项集挖掘方法.通过搭建Hadoop平台,可使该方法得以实现,并籍此对该方法与Apriori算法的性能进行比较研究.实验结果表明该方法在对大数据集进行频繁项集挖掘时,可充分利用云计算的优势,从而能获得更好的时效性. 关键词:云计算:Hadoop Apriori:MapReduce [下载地址]http://bbs.chinacloud.cn/showtopic

《Python数据挖掘:概念、方法与实践》——2.1节什么是频繁项集

2.1 什么是频繁项集寻找频繁项集是一种计数活动.但是和从生成数据集中观测到的项目的简单计数(今天我们卖出了80个胡萝卜和100个马铃薯)相比,寻找频繁项集稍有不同.确切地说,为了找出频繁项集,我们要搜索较大的组中共同出现的项集.有时候可以把这些较大的组视为超市交易或者购物篮,整个活动有时候称为市场篮子分析.我们仍然采用超市的类比,在这些篮子中同时出现的物品有时候被视为在超市中购买的产品组合.例如,已知一组超市交易或者篮子,我们可能对篮子中{胡萝卜,马铃薯}的组合是否比{黄瓜.柠檬}的组合更频繁

R语言数据挖掘2.2.5 基于最大频繁项集的GenMax算法

2.2.5 基于最大频繁项集的GenMax算法 GenMax算法用来挖掘最大频繁项集(Maximal Frequent Itemset,MFI).算法应用了最大性特性,即增加多步来检查最大频繁项集而不只是频繁项集.这部分基于Eclat算法的事物编号集合交集运算.差集用于快速频繁检验.它是两个对应项目的事物编号集合的差. 可以通过候选最大频繁项集的定义来确定它.假定最大频繁项集记为M,若X属于M,且X是新得到频繁项集Y的超集,则Y被丢弃:然而,若X是Y的子集,则将X从集合M中移除. 下面是调用Ge

c# 频繁项集-C#---频繁项集,非常期待大家的解答

问题描述 C#---频繁项集,非常期待大家的解答 如何用C#编写一个程序,用索引法或是其他方法来检测频繁项集是否具有超集,急用,请求大家的帮忙,万分感谢~~~

《中国人工智能学会通讯》——12.3 基于 Apriori 的序列模式挖掘算法

12.3 基于 Apriori 的序列模式挖掘算法 GSP(Generalized Sequential Patterns) [17] 是一种经典的序列模式挖掘算法,它直接从频繁模式挖掘的 Apriori 算法扩展而来.GSP 采用了水平的数据格式,通过生成候选序列及扫描数据库的方法逐层挖掘频繁序列模式.这里的水平数据格式指的是依然以序列作为主要的观察对象.此外,GSP 还采用了序列模式支持度的向下封闭性用于剪枝.与Apriori 不同的是,GSP 在生成候选序列的时候考虑了有序和无序两种情况,

并行化频繁模式挖掘算法FP Growth及其在Mahout下的命令使用

今天调研了并行化频繁模式挖掘算法PFP Growth及其在Mahout下的命令使用,简单记录下试验结果,供以后查阅: 环境:Jdk1.7 + Hadoop2.2.0单机伪集群 +  Mahout0.6(0.8和0.9版本都不包含该算法.Mahout0.6可以和Hadoop2.2.0和平共处有点意外orz) 部分输入数据,输入数据一行代表一个购物篮: 4750,19394,25651,6395,5592 26180,10895,24571,23295,20578,27791,2729,8637 7

《中国人工智能学会通讯》——12.4 基于模式增长的序列模式挖掘算法

12.4 基于模式增长的序列模式挖掘算法 FreeSpan [15] 和 PrefixSpan [22] 都是由 Han 和 Pei等人提出的基于模式增长的序列模式挖掘算法.它们都是基于频繁模式挖掘中的 FP-growth [23] 思想而被提出的.其中,FreeSpan 基于频繁项将数据库划分成若干投影子数据库,然后在各个子数据库中进行序列模式的挖掘.PrefixSpan 则优化了构建投影数据库的过程,它首先检查前缀序列的位置并且只对后缀子序列进行投影,从而进一步缩小了搜索空间.当挖掘出长度的

《大数据算法》一3.5 寻找频繁元素的随机算法

3.5 寻找频繁元素的随机算法 本节重新研究3.3节中讨论的问题,提出寻找频繁元素的随机算法.Misra-Gries算法通过扫描数据一次提供足够的信息,然后通过第二次扫描数据解决频繁元素发现问题,即扫描数据第一次过程中Misra-Gries算法计算一个数据结构,对于j∈[n]该数据结构可以获得其频率fj的足够准确估计fj.本小节提出另外两个频率估计的随机算法. 3.5.1 略图法 1.略图和线性略图 在处理数据流σ的过程中,令表示Misra-Gries算法中所需的数据结构.这种数据结构的一个缺点