FP-growth算法是一种高效发现频繁集的方法。例如你在搜索引擎中搜索一个词,它会自从补全查询词项,该处用到了FP-growth算法,通过查看互联网上的用词来找出经常在一块出现的词。【FP(Frequent Pattern)】

FP-growth算法基于Apriori算法,但是比Apriori算法执行速度快,通常性能要好两个数量级以上。FP-growth算法虽然能更高效地发现频繁项集,但是不能用于发现关联规则。

FP-growth算法将数据集存储在一个特定的FP树的结构之后发现频繁项集或频繁项对,即常在一块出现的元素项的集合FP树。FP-growth算法只需要对数据库进行两次扫描,而Apriori算法对于每个潜在的频繁项集都会扫描数据集判定给定模式是否频繁,因此FP-growth算法速度比Apriori算法快。

FP-growth发现频繁项集的过程如下:

(1)构建FP树

(2)从FP树中挖掘频繁项集

一、创建FP树的数据结构

FP树要比其他数更加复杂,因此要创建一个类来保存树的每一个节点。一个元素可以在一颗FP树中出现多次,FP树会存储项集的出现频率,每个项集会以路径的方式存储在树中,存在相似元素的集合会共享树的一部分,只有当集合之间完全不同时,树才会分叉。树节点上给出集合中的单个元素及其在序列中的出现次数,路径会给出该序列的出现次数。

二、创建PF树

创建FP树,需要对原始数据集扫描两遍。

(1)创建一个头指针表(字典型),保存每类元素的总数及指向每类元素第一个元素项的指针。头指针表数据结构:(元素:元素出现次数,相似元素指针)。利用头指针表可以快速访问FP树中一个给定类型的所有元素。

(2)第一次遍历数据集,获得每个元素项的出现频率,保存到头指针表中。

(3)遍历头指针表,去掉不满足最小支持度的元素。

(4)第二次遍历数据集,只考虑那些频繁项。将每个事务的频繁项抽取出来,并对频繁项进行降序排序,用排序后的频繁项来构建FP树。一条事务一条事务的往FP树中填充。排序原因是:只有排序后才有利于对FP树填充,因为假设有集合{z,x,y}和{y,z,r},那么FP树中相同项会只表示一次,都从z开始。

(5)怎么填充树,让树生长。对于每个事务(频繁项集),看第一个元素是否作为根节点的子节点存在,存在则计数增加,不存在则新建子节点,并更新头指针表该元素的指针。

(6)怎么更新头指针表的指针。如果指针为None,说明该元素第一次出现,将指针指向该节点元素,如果指针不为None,说明该元素已经出现过在其他子节点下面,这里第一次作为根节点的子节点,那么将指针沿着链表到尾部,使尾部节点指针指向这里的新节点。

(7)每条事务处理完第一个元素后,重复(5)和(6)将后面的元素按照该方法依次加入FP树中。

(8)将每条事务按照(5)(6)(7)的方法依次添加到FP树中。

最后得到的结果为:

三、从一颗FP树中挖掘频繁项集

基于FP树抽取频繁项集的思路与Apriori算法类似,首先从单个元素项集合开始,再逐步构建更大的集合。

(1)首先从FP树中获取条件模式基(conditional pattern base)。

从单个频繁元素开始。条件模式基是以所查找元素项为结尾的路径集合。每条路径都是一条前缀路径(prefix path),即介于所查找元素项与树根节点之间的所有内容,每条前缀路径都与一个计数值关联。所以,条件模式基就是前缀路径的集合。

获取条件模式基的方法是从头指针表(保存着单个频繁元素起始指针)开始,沿着相同类型元素链表向后找,直到链表为空为止。找到每一个相同类型元素就沿着FP树向上回溯,收集所有遇到的元素项名称。最后条件模式基的结果为:

(2)针对每一个频繁项,都要创建一颗条件FP树。

以条件模式基作为输入数据,通过创建FP树的方法创建条件FP树。这里只是输入数据不同,是以频繁项的条件模式基为输入数据的。创建完条件FP树的结果是得到以查找元素为前提的频繁项FP树和频繁项头指针表,再将这些频繁项FP树中的元素(如x,y)与查找元素(如t)组合构建更大的频繁项(如(x, t)和(y, t))。再在这颗条件FP树中沿着x(或y)发现条件模式基,比如又发现了z,那么又构成更大的频繁项(z, x, t),直到条件FP树没有元素为止。

以上只是从一个单元素频繁项开始发现更多的频繁项,接着要循环其他单元素项以发现更多更大的频繁项。

FP-growth算法通俗讲解相关推荐

  1. 人工智能算法通俗讲解系列(二):逻辑回归

    2019独角兽企业重金招聘Python工程师标准>>> 今天,我们介绍的机器学习算法叫逻辑回归.它英语名称是Logistic Regression,简称LR. 跟之前一样,介绍这个算 ...

  2. Frequent Pattern 挖掘之二(FP Growth算法)(转)

    FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对.为了达到这样的效果,它采用了一种简洁的数据结 ...

  3. MapReduce框架下的FP Growth算法概述

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebi.html 前面的博客分析了关联分析中非常重要的一个算法-FP Growth.该算法根据数据库在内 ...

  4. FP Growth算法

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebg.html FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法 ...

  5. MapReduce框架下的FP Growth算法详解

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebk.html Sharding 这一步没什么好讲的,将数据库分成连续的大小相等的几个块,放置在不同的 ...

  6. FP Growth算法详解

    看了n多资料,就这篇说的比较详细,适合初学者 FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对 ...

  7. 模拟退火算法通俗讲解

    目录 1. 模拟退火算法基本概念 2. 模拟退火算法基本流程 3. 遗传模拟退火算法matlab代码 1. 模拟退火算法基本概念 自然凝结的.不受外界干扰而形成的晶体拥有整齐规则的几何外形.那么从液态 ...

  8. 朴素贝叶斯分类器算法通俗讲解

    首先会用到贝叶斯决策理论,说一下.贝叶斯决策理论的核心思想是:选择具有最高概率的决策.例如一个点(x, y),属于类别1的概率是p1(x, y),属于类别2的概率是p2(x, y),用贝叶斯决策理论来 ...

  9. AdaBoost算法通俗讲解

    AdaBoost是元算法中最流行的一种,也被认为是最好的监督学习的方法 . 一.元算法 元算法(meta-algorithm),也被称作集成方法(ensemble method),是对其他算法进行组合 ...

最新文章

  1. 架构体系需要进一步研究探索的V2路线图
  2. github上搭建个人博客
  3. java IO之 File类+字节流 (输入输出 缓冲流 异常处理)
  4. WIN32多线程抢红包练习
  5. PURE DORM IS GREAT
  6. 工业定焦镜头的选型公式
  7. PHP 8引入JIT支持,以提高CPU性能
  8. php算法结构,PHP中常用算法以及数据结构
  9. Python 标准库一览(Python进阶学习)
  10. PCB寄生电容和寄生电感的计算
  11. java中榨汁机的代码_《榨汁机食谱大全》(不断更新中)
  12. SAP中的电子数据交换EDI
  13. PAT 7-14 电话聊天狂人
  14. java计算机毕业设计用户行为自动化书籍推荐系统MyBatis+系统+LW文档+源码+调试部署
  15. Photoshop Elements 10 All-in-One For Dummies 免积分下载
  16. Lottie Android 动画制作与使用
  17. c++后端开发面试题
  18. 合工大宣城计算机科学与技术,2017秋大学计算机(合肥工业大学 宣城校区)
  19. 炒股的最简单方法 炒股的管理和纪律要求
  20. 用 python 实现 简单AI 双人日麻(文字版)之一 建立胡牌逻辑

热门文章

  1. boost::any实现分析
  2. SSL协议的分析及实现
  3. unity植物树木模型
  4. google扩展开发popup.html,chrome扩展开发问题总结
  5. 让中小学生在快乐中学习的创客教育
  6. 现实难题与探索 生命周期法IT服务质量管理
  7. HTML/CSS中的字体样式font-family的中英对照
  8. (二)运行微信小程序:单页面和多页面
  9. 《基于MATLAB的高等数学问题求解》(视频、PPT、源码)
  10. python机器学习 保存/读取模型