FP-growth算法,fpgrowth算法详解

下面使用的最小支持度是2,也就是说最小等于2算达标,对应代码中则是>minSup=1

使用FP-growth算法来高效发现频繁项集

前言

你用过搜索引擎挥发现这样一个功能:输入一个单词或者单词的一部分,搜索引擎酒会自动补全查询词项,用户甚至实现都不知道搜索引擎推荐的东西是否存在,反而会去查找推荐词项,比如在百度输入“为什么”开始查询时,会出现诸如“为什么我有了变身器却不能变身奥特曼”之类滑稽的推荐结果,为了给出这些推荐查询慈祥,搜索引擎公司的研究人员使用了本文要介绍的一个算法,他们通过查看互联网上的用词来找出经常在一块出现的词对,这需要一种高效发现频繁集的方法。该算法称作FP-growth,又称为FP-增长算法,它比Apriori算法要快,它基于Apriori构建,但在完成相同任务时采用了一些不同的技术。不同于Apriori算法的”产生-测试”,这里的任务是将数据集存储在一个特定的称做FP树的结构之后发现频繁项集或者频繁项对,即常在一块出现的元素项的集合FP树,这种做法是的算法的执行速度要快于apriori,通常性能要好两个数量级以上。

FP树表示法

FP树时一种输入数据的压缩表示,它通过逐个读入事务,并把事务映射到FP树中的一条路径来构造,由于不同的事务可能会有若干个相同的项,因此它们的路径可能部分重叠。路径相互重叠越多,使用FP树结构获得的压缩效果越好,如果FP树足够小,能够存放在内存中,就可以直接从这个内存中的结构提取频繁项集,而不必重复地扫描存放在硬盘上的数据。

下图显示了一个数据集,它包含10个事务和5个项。(可以把一条事务都直观理解为超市的顾客购物记录,我们利用算法来发掘那些物品或物品组合频繁的被顾客所购买。)

下图绘制了读入三个事务之后的FP树的结构以及最终完成构建的FP树,初始,FP树仅包含一个根节点,用符号null标记,随后,用如下方法扩充FP树:




通常,FP树的大小比未压缩的数据小,因为购物篮数据的事务常常共享一些共同项,在最好的情况下,所有的事务都具有相同的项集,FP树只包含一条节点路径,当每个事务都具有唯一项集时,导致最坏情况发生,由于事务不包含任何共同项,FP树的大小实际上与原数据的大小一样,然而,由于需要附加的空间为每个项存放节点间的指针和技术,FP树的存储需求增大。

FP树还包含一个连接具有相同项的节点的指针列表,这些指针再上图中用虚线表示,有助于快速访问树中的项。

FP增长算法的频繁项集产生

FP-growth是一种以自底向上方式探索树,由FP树产生频繁项集的算法,给定上面构建的FP树,算法首先查找以e结尾的频繁项集,接下来是b,c,d,最后是a,由于每一个事务都映射到FP树中的一条路径,因为通过仅考察包含特定节点(例如e)的路径,就可以发现以e结尾的频繁项集,使用与节点e相关联的指针,可以快速访问这些路径,下图显示了所提取的路径,后面详细解释如何处理这些路径,以得到频繁项集。





上面的图演示了讲频繁项集产生的问题分解成多个子问题,其中每个子问题分别涉及发现以e,d,c,b和a结尾的频繁项集

发现以e结尾的频繁项集之后,算法通过处理与节点d相关联的路径,进一步寻找以d为结尾的频繁项集,继续该过程,直到处理了所有与节点c,b和a相关联的路径为止,上面的图分别显示了这些项的路径,而他们对应的频繁项集汇总在下表中

FP增长采用分治策略将一个问题分解为较小的子问题,从而发现以某个特定后缀结尾的所有频繁项集。例如,假设对发现所有以e结尾的频繁项集感兴趣,为了实现这个目的,必须首先检查项集{e}本身是否频繁,如果它是平凡的,则考虑发现以de结尾的频繁项集子问题,接下来是ce和ae,依次,每一个子问题可以进一步划分为更小的子问题,通过合并这些子问题的结果,就可以找到所有以e结尾的频繁项集,这种分治策略是FP增长算法采用的关键策略。

为了更具体地说明如何解决这些子问题,考虑发现所有以e结尾的频繁项集的任务。





这个例子解释了FP增长算法中使用的分治方法,每一次递归,都要通过更新前缀路径中的支持度计数和删除非频繁的项来构建条件FP树,由于子问题时不相交的,因此FP增长不会产生任何重复的项集,此外,与节点相关联的支持度计数允许算法在产生相同的后缀项时进行支持度计数。

FP增长是一个有趣的算法,它展示了如何使用事务数据集的压缩表示来有效的产生频繁项集,此外对于某些事务数据集,FP增长算法比标准的Apriori算法要快几个数量级,FP增长算法的运行性能取决于数据集的“压缩因子”。如果生成的FP树非常茂盛(在最坏的情况下,是一颗完全二叉树)则算法的性能显著下降,因为算法必须产生大量的子问题,并且需要合并每个子问题返回的结果

FPgrwoth详解(转载+修改一处图片问题)相关推荐

  1. 使用svnsync备份详解[转载+修改]

    使用svnsync备份很简单,步骤如下: 一.在备份机上创建一个空库:svnadmin create SMP 二.更改该库的钩子脚本pre-revprop-change(因为svnsync要改这个库的 ...

  2. DIV css中cursor属性详解-鼠标移到图片变换鼠标形状 (转)

    css中cursor属性详解-鼠标移到图片变换鼠标形状 语法:  cursor : auto | all-scroll | col-resize| crosshair | default | hand ...

  3. linux命令优先级设置,linux renice命令参数及用法详解(linux修改程序运行优先级命令)...

    linux renice命令参数及用法详解(linux修改程序运行优先级命令) 发布时间:2012-07-21 12:45:32   作者:佚名   我要评论 renice指令可重新调整程序执行的优先 ...

  4. python英语字典程序修改_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  5. 详解用backgroundImage解决图片轮播切换

    详解用backgroundImage解决图片轮播切换 css媒体查询有一个 宽高比很方便,aspect-ratio ,可以直接使用宽/高 来进行页面适配 使用样例如下: 单dom节点实现轮播 利用ba ...

  6. python字典修改键所对应值_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  7. spring依赖注入原理详解(转载)

    spring依赖注入原理详解----转载 所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中.当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它.所 ...

  8. php图片涂鸦,IOS_详解iOS App中图片的线段涂鸦功能的添加方法,接下来我们要讲图片的涂鸦, - phpStudy...

    详解iOS App中图片的线段涂鸦功能的添加方法 接下来我们要讲图片的涂鸦,我们分开一点一点拓展,先给图片上划线 创建项目 起名testAddLine 接下来我们在默认生成的ViewControlle ...

  9. mip-img 不启用css,百度mip-img图片详解 如何修改图片MIP

    百度mip-img 图片详解,我们先来看下完整的标签 mip-img layout = responsive width = 350 height = 263 popup alt = www.xhcs ...

最新文章

  1. transformer面试总结 模型中BN batchNormalize LN layerNormalizer区别
  2. LeetCode Longest Substring with At Least K Repeating Characters(递归)
  3. 18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?
  4. struts2常见错误及解决总结
  5. boost::hana::make_map用法的测试程序
  6. qhfl-5 redis 简单操作
  7. APP运营如何找到精准用户,提升品牌知名度
  8. xp中mysql优化_XP加速技巧大盘点 看看那个最实用
  9. ubuntu xfce下面两个终端合并为一个终端
  10. [计算机网络][HTTP]
  11. 大数据城市规划 杨东_AI为智慧城市规划做建设
  12. pandas 如何删掉第一行_Pandas-数据筛选
  13. kafka报org.apache.kafka.common.errors.RecordTooLargeException
  14. 2021年,中国程序员前景一片灰暗,真的是这样吗?
  15. TD阵营折大将 芯片商凯明将面临倒闭[转]
  16. 【ZZULIOJ】1116: 删除元素
  17. 2020ICPC·小米 网络选拔赛第一场(Matrix Subtraction (二维差分))
  18. Nginx禁止使用IP访问
  19. 计算H时M分S秒以后是_消防考试必会计算题汇总!
  20. java解决撞库的问题_Web安全开发之验证码设计不当引发的撞库问题

热门文章

  1. 将所有用户设置隐私选项更新为从不向Microsoft发送Microsoft Dyanmics Error Report
  2. 删除WSS卸载后遗留的数据库
  3. 《WebGIS开发实践手册》2.2 ArcIMS服务器组件[1]
  4. [转]web测试技术经典案例
  5. Java代码生成同一色系颜色_求大侠帮忙给这段JAVA代码 设置个背景颜色!
  6. (四)JS基础知识一(深入分析变量类型和计算)【不会变量,别说你会JS】
  7. typescript基本类型demo
  8. border-image用法
  9. linux启动Spark本地模式(Local模式)
  10. Spark的协同过滤.Vs.Hadoop MR