背景:
        频繁项集挖掘算法用于挖掘经常一起出现的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出现在树的分支中,不能更多的共用前缀
参考文献:
  • Mining Frequent Patterns without Candidate Generation: A Frequent-Pattern Tree Approach∗、PPT
  • mahout并行化FPGrowth实现
7

FPGrowth算法理论相关推荐

  1. 【白话机器学习】算法理论+实战之关联规则

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

  2. 关联分析Apriori算法和FP-growth算法初探

    1. 关联分析是什么? Apriori和FP-growth算法是一种关联算法,属于无监督算法的一种,它们可以自动从数据中挖掘出潜在的关联关系.例如经典的啤酒与尿布的故事.下面我们用一个例子来切入本文对 ...

  3. Spark机器学习(9):FPGrowth算法

    关联规则挖掘最典型的例子是购物篮分析,通过分析可以知道哪些商品经常被一起购买,从而可以改进商品货架的布局. 1. 基本概念 首先,介绍一些基本概念. (1) 关联规则:用于表示数据内隐含的关联性,一般 ...

  4. Apriori算法、FP-Growth算法、顺序分析、PrefixSpan算法

    Apriori算法.FP-Growth算法.顺序分析.PrefixSpan算法 目录 Apriori算法.FP-Growth算法.顺序分析.PrefixSpan算法 Apriori算法 FP-Grow ...

  5. 【机器学习实战】第12章 使用 FP-growth 算法来高效发现频繁项集

    第12章 使用FP-growth算法来高效发现频繁项集 前言 在 第11章 时我们已经介绍了用 Apriori 算法发现 频繁项集 与 关联规则. 本章将继续关注发现 频繁项集 这一任务,并使用 FP ...

  6. 一步步教你轻松学朴素贝叶斯模型算法理论篇1

    一步步教你轻松学朴素贝叶斯模型理论篇1 (白宁超2018年9月3日17:51:32) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受欢迎,对 ...

  7. 【机器学习】Apriori 算法进行关联分析和FP-growth算法

    [机器学习]Apriori 算法进行关联分析和FP-growth算法 文章目录 1 关联分析 2 FP-growth算法理解和实现 3 FP增长算法的频繁项集产生 4 FP-Growth关联分析算法在 ...

  8. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题

    简述 算法设计课这周的作业: 赶紧写了先,不然搞不完了. 文章目录 简述 算法理论部分 变量简单分析 从状态转移概率到状态概率 推导 理解当温度收敛到接近0的时候,收敛到结果 理论部分的后记 pyth ...

  9. 使用FP-growth算法发现频繁项集

    源码如下: #coding=utf-8''' Created on Jun 14, 2011 FP-Growth FP means frequent pattern the FP-Growth alg ...

  10. 频繁项集挖掘之Aprior和FPGrowth算法

    频繁项集挖掘的应用多出现于购物篮分析,现介绍两种频繁项集的挖掘算法Aprior和FPGrowth,用以发现购物篮中出现频率较高的购物组合. 基础知识 项:"属性-值"对.比如啤酒2 ...

最新文章

  1. 用tar来备份Ubuntu操作系统
  2. Python_问题收录总结
  3. 蓝桥杯java第四届决赛第一题--猜灯谜
  4. 树回归源码分析(1)
  5. 不具有继承关系的Delegate如何进行类型转换?
  6. java客户端服务器聊天程序流程图_基于java的socket简单聊天编程
  7. 零基础学python比较好的网课-请问自学 Python 有必要买课程吗?
  8. c语言中有关逗号表达式
  9. linux设置磁盘配额查看目录文件大小命令
  10. BZOJ2434 [Noi2011]阿狸的打字机(AC自动机 + fail树 + DFS序 + 线段树)
  11. OCR图像识别与汽车后市场
  12. 花4个月时间整理出《Spring揭秘》的文字版的感受
  13. 电容电感充电曲线仿真图
  14. 49个Excel常用技巧
  15. aardio Access数据库和所有表
  16. 关于删除某文件需要TrustedInstaller权限的解决方法
  17. php短信不同账号发,php用不同平台批量发短信
  18. 制作openstack系统镜像
  19. C语言验证哥德巴赫猜想
  20. pandas实战训练之招聘信息

热门文章

  1. 数据挖掘导论 笔记3
  2. [Xcode]XcodeGhost问题的检查和验证
  3. MIUI系统刷第三方Recovery+Magisk
  4. Java、python实现啊哈算法 —— chapter3 枚举 炸弹人
  5. 科学计算机算度数,计算器问题科学计算器有分角度制和弧度制,身 – 手机爱问...
  6. springboot添加ojdbc6报错
  7. Oracle P6培训系列:13分配限制条件
  8. 地区与地区编码的相互转换
  9. 数字孪生-使用资产管理壳的IOT案例研究
  10. 去掉高德api上的logo图标