一:背景

  http://www.cnblogs.com/aijianiula/p/5397857.html

  上节中,总结了频繁项集挖掘的最基本算法:Apriori算法。这篇文章写下它的改进算法FGrowth算法,记得这个算法是香港一位教授提出来的,其思想非常值得借鉴和思考。

二:FGrowth

  FPGrowth算法采用频繁增长模式,通过建立增长树来产生优化Apriori算法,减少数据库的扫描次数和在必要时候剪枝来减少枚举程度,同样以上面的例子来说明FPGrowth算法优化过程。这里引用《数据挖掘概念和技术》这本书中的图来进行说明。

  这个算法主要分为两个步骤:

  1.FP树的构造,2.FP树中频繁项集的挖掘

  1.FP树的构造

  FP树的构造过程其实也非常简单,首先建立一个只有null节点的树。然后在数据库中拿出第一个事务,按照事务中的1项集支持度进行排序,从大到小。

交易ID

商品ID列表

 

交易ID

商品ID列表

T100

I1,I2,I5

 

T600

I2,I3

T200

I2,I4

 

T700

I1,I3

T300

I2,I3

 

T800

I1,I2,I3,I5

T400

I1,I2,I4

 

T900

I1,I2,I3

T500

I1,I3

     

如上图的事务表中,取出第一条记录,T100事务{I1,I2,I3},在上节中我们统计过1项集的支持度了,如下图:

项集

支持度计数

{I1}

6

{I2}

7

{I3}

6

{I4}

2

{I5}

2

所以它的T100事务的支持度排序之后为:I2,I1,I5,然后开始创建分支<I2,1>,<I1,1>,<I5,1>。I2作为分支连接到根节点null中,I1链接到I2,I5链接到I1.

第2个事务T200按1项集排序分别为I2,I4,为T200创建分支,I2链接到根,I4链接到I2。因为分支中与T100共享了前缀I2,所以I2的计数加1。因此创建一个新节点<I4,1>链接到<I2,2>节点上。

第3个事务T300 {I2,I3}排序后为I2,I3。为此事务创建分支,I2链接到根节点,I3链接到I2,I2的计数加1,因此<I3,1>链接到<I2,3>

第4个事务T400 {I1,I2,I4}排序后为I2,I1,I4。为此事物创建分支,I2链接到根节点,I1链接到I2,I4链接到I1,I2的计数加1,I1的计数加1,创建节点<I4,1>链接到<I1,2>

......

在FP树的左边创建了一个数组,是为了方便树的遍历,创建一个项头表,每项通过一个节点链指向它在树中的位置。

  2.FP树中频繁项集的挖掘

  FP树的挖掘过程是从事务的最后一个开始的,如上图中的fp树,I5是最后一项,那么沿着树的路径,到I5的路径由{I2,I1,I5:1},{I2,I1,I3,I5:1}。那么以I5作为后缀,它的前缀即为{I2,I1:1},{I2,I1,I3:1},也称为I5的条件模式基。使用这些条件模式基来构建I5的fp树,它只包含单个路径{I2:2,I1:2};不包含I3的原因是它的支持度为1,小于我们指定的最小支持度2。那么它的单个路径产生的频繁模式所有组合为:{I2,I5:2},{I1,I5:2},{I2,I1,I5:2}

  对I4,它的两个前缀形成条件模式基{I2,I1:1},{I2:1},产生一个单节点的条件fp树<I2:2>,所以它导出的频繁模式为{I2,I4:2}

  对I3,它的条件模式基伟{I2,I1:2}{I2:2}{I1:2}它的条件fp树有两个分支<I2:4,I1:2>和{I1:2}产生的模式集为{I2,I3:4}{I1,I3:4} {I2,I1,I3:2}

  对于I1,它的条件模式基伟{I2:4},只有一个,所以产生的频繁模式为{I2,I1:4}

条件模式基

条件FP树

产生的频繁模式

I5

{I2,I1:1},{I2,I1,I3:1}

<I2:2,I1:2>

{I2,I5:2},{I1,I5:2},{I2,I1,I5:2}

I4

{I2,I1:1},{I2,1}

<I2:2>

{I2,I4:2}

I3

{I2,I1:2},{I2:2},{I1:2}

<I2:4,I1:2>,<I1:2>

{I2,I3:4},{I1,I3:4},{I2,I1,I3:2}

I1

{I2:4}

<I2:4>

{I2,I1:4}

FGrowth算法的更多相关文章

  1. 频繁项挖掘算法Apriori和FGrowth

    一:背景介绍 最近在公司用spark的平台做了一个购物车的推荐,用到的算法主要是FGrowth算法,它是Apriori算法的升级版,算法的主要目的是找出频繁进行一起购买的商品.本文主要介绍两个算法的背 ...

  2. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  3. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

  4. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  5. 红黑树——算法导论(15)

    1. 什么是红黑树 (1) 简介     上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...

  6. 散列表(hash table)——算法导论(13)

    1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...

  7. 虚拟dom与diff算法 分析

    好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM

  8. 简单有效的kmp算法

    以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说 ...

  9. 神经网络、logistic回归等分类算法简单实现

    最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...

随机推荐

  1. 如何诊断 11.2 集群节点驱逐问题 (文档 ID 1674872.1)

    适用于: Oracle Database - Enterprise Edition - 版本 11.2.0.1 到 11.2.0.2 [发行版 11.2]本文档所含信息适用于所有平台 用途 这篇文档提 ...

  2. Webpack2 视频教程

      原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」.Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本 ...

  3. 操作系统项目:向Linux内核添加一个系统调用

    内容: 向Linux增加一个系统调用 撰写一个应用测试程序调用该系统调用 使用ptrace或类似的工具对该测试程序进行跟踪调 环境: 1.vmware workstation 15.0.0 2.ubu ...

  4. caffe的pad的报错

    CHECK((!conv_param.has_stride() && conv_param.has_stride_h() && conv_param.has_strid ...

  5. Java获取2个日期里面的所有月份

    public static void main(String[] args) { String t1="2018-08-01"; t1 = t1.replaceAll(" ...

  6. apache 报413

    http://www.hostlift.com/apache/modsecurity-request-body-content-length-is-larger-than-the-configured ...

  7. [LUOGU] P1048 采药

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...

  8. MySQL中数组的存储

    1. MySQL中以字符串的形式存储数组 MySQL中无数组类型,通常将数组元素按某个字符分割以字符串形式存储 1.1. 求数组中元素的个数 方法:按指定符号分割字符串,返回分割后的元素个数.方法很简 ...

  9. MYSQL中批量替换某个字段的部分数据

    1.修改字段里的所有含有指定字符串的文字 UPDATE 表A SET 字段B = replace(字段B, 'aaa', 'bbb') example: update  table set url= ...

  10. [图文] Fedora 28 使用 Virt-Manager 制作并优化QCOW2镜像——Windows 10 1709

    实验说明: 云计算的发展使得桌面上云,windows 10就必不可少,这一章就如何制作QCOW2镜像文件并优化进行说明. 实验环境: 宿主机系统   :Fedora 28 WorkStation 虚拟 ...