`
ikeycn
  • 浏览: 146222 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

基于FP-tree的关联规则挖掘FP-growth算法基本思想

阅读更多
算法分析:
转载地址:http://hi.baidu.com/shirdrn/blog/category/Data%20Minning

在挖掘关联规则的过程中,无可避免要处理海量的数据,也就是事务数据库如此之大,如果采用Apriori算法来挖掘,每次生成频繁k-项集的时候,可能都需要扫描事务数据库一遍,这是非常耗时的操作。那么,可以想尽办法来减少扫描事务数据库的次数,来改进挖掘频繁关联规则的效率。

FP-tree是频繁模式树,它是将整个事务数据库压缩到一棵频繁模式树上。而且,在构造整个事务数据库的的FP-tree的过程中,只需要扫描一次事务数据库就能生成。比AproriGen算法生成候选频繁项集要节省很多时间。

关联规则挖掘FP-growth算法,是通过遍历上面构造的整个事务数据库的频繁模式树来生成频繁项集。FP-growth算法基本思想描述如下:

第一步:构造整个事务数据库的FP-tree

关于FP-tree的构造可以参考前面的文章 FP- tree的数据结构及其构造 。这里假设已经能够构造出FP-tree,接着就是在整个事务数据库对应的FP-tree的基础上挖掘频繁项集。在下面的步骤中,需要对FP-tree的结构及其内容熟悉。

第二步:挖掘条件模式基

在构造的整个事务数据库的频繁模式树上进行条件模式基的挖掘。

条件模式基,就是选定一个基于支持计数降序排序的频繁1-项集项目,假设为Item,也就是FP-tree的头表中的频繁1-项集项目(已经知道,头表中频繁1-项集项目是按照降序排列的),此时,称该频繁1-项集项目Item为后缀。

纵向沿着头表向上,也就是按照头表中频繁1-项集支持计数的升序方向,优先遍历头表;在遍历头表的过程中同时横向遍历每个频繁1-项集对应的链表域。

通过横向遍历该频繁1-项集项目Item对应的链表域——每个链表中的FPTNode结点都具有一个直接父亲结点的nodeParent指针,纵向向上遍历直到根结点停止,就得到了一个序列(不包含Item对应的横向链表中的结点),这个序列就是条件模式基。

在遍历的过程中,每个条件模式序列中每个FPTNode结点肯定出现一次;以Item频繁1-项集项目横向遍历得到的序列,都是以Item为后缀的。

最后,整棵FP-tree遍历完毕,得到全部的条件模式基。

第三步:根据条件模式基建立局部FP-tree

对上面得到的条件模式基,对每个头表中的频繁1-项集对应的条件模式,作为数据输入源来构造局部FP-tree,也就是条件模式基的FP- tree。因为每个条件模式基的数据量与整个事务数据库相比,显得非常小,建树不会消耗太多时间;而全部的条件模式基就相当于整个事务数据库,所以大约需要扫描两次事务数据库。

建立条件模式基的局部FP-tree,分为单个分支和多个分支两种情况,大体过程是这样的:

(1)对于单个分支:

扫描每个条件模式基,统计在每个单个分支中FPTNode结点中1-项集的支持计数,如果一个头表中的项目Item对应的条件模式基扫描完成,最终的计数不能满足最小支持计数,需要将该结点删除掉,因为它与其他结点组合以后,每个含有该结点的项集一定不满足最小支持计数。

根据上面得到的满足最小支持计数的序列来构造局部FP-tree,因为得到的FPtree是单个分支的,遍历该FP-tree能够得到一个Item 的全部满足最小支持计数的序列,从而将该序列中的全部项目进行组合计算,得到全部组合序列,对于每个序列都将当前头表中Item加入到其中,就得到了包含 Item的全部频繁项集。

(2)对于多个分支:

如果存在分支的,需要递归挖掘频繁项集。因为对于多个分支,递归到出口一定是对应着单个分支的,可以类似上一种情况,处理单个分支,得到频繁项集。

第四步:挖掘频繁关联规则

在上面的步骤中,已经得到了全部的频繁项集,这时挖掘频繁关联规则与Apriori算法的频繁关联规则挖掘的步骤相同。

通过上面的步骤,就完成了频繁关联规则的挖掘。我认为,该算法的思想还是非常清晰的。在基于FP-tree的关联规则挖掘FP-growth算法中,构造整个事务数据库的FP-tree是一个难点,需要保证在构造的过程中不丢失数据结点;另一个难点就是在处理得到的条件模式基的时候,对于具有多个分支的情况,采用递归的思想挖掘,保证不漏掉任何频繁项集。

算法实现:
http://ikeycn.iteye.com/blog/700616
分享到:
评论
1 楼 di1984HIT 2014-06-01  
写的不错!!!

相关推荐

    详解python实现FP-TREE进行关联规则挖掘

    总之,Python提供了一个强大的平台来实现FP-TREE算法,使得关联规则挖掘变得简单易行。通过PIL库的图像支持,我们可以直观地看到数据的结构和挖掘过程,更好地理解算法的运作机制。在实际应用中,可以根据具体需求...

    关联规则挖掘 FP-tree关联规则挖掘 FP-tree

    3. FP-growth 算法:FP-growth 算法是基于 FP-tree 的关联规则挖掘算法。它采用“分而治之”的策略,将提供频繁项目集的数据库压缩成一棵频繁模式树(FP-树)。FP-growth 算法优于 Apriori 算法。 4. FP- 树构造...

    关联规则挖掘之FP-growth算法实现

    在提供的Python实现`fp-growth-0.1.3`中,可能包含了FP-growth算法的Python代码库,用于在实际项目中进行关联规则挖掘。这个库通常会提供函数,如`fp_growth`,用于构建FP树、挖掘频繁项集以及生成关联规则。用户...

    FP-Tree.zip_ fp tree_fp tree_fp-growth_fp-growth算法的源代码_fp-tree

    FP-Tree(频繁模式树)是一种在数据挖掘领域用于挖掘频繁项集的高效算法,它主要应用于关联规则学习。此压缩包包含与FP-Tree相关的源代码和其他支持文件,可以帮助我们理解并实现FP-Tree以及基于它的算法,如FP-...

    使用Apriori和FP-growth进行关联规则挖掘

    本文将深入探讨两种广泛使用的关联规则挖掘算法:Apriori和FP-growth。 **Apriori算法** Apriori算法由Rakesh Agrawal和Ramakrishnan Srikant于1994年提出,它是基于频繁项集(frequent itemsets)的概念。该算法...

    关联规则FP-Growth算法

    "fp-tree"和"java"这两个文件名可能指的是FP-Growth算法的Java实现代码,包括FP树的构建和关联规则的挖掘过程。通过阅读和理解这些代码,开发者可以更好地掌握FP-Growth算法的原理,并将其应用于实际的数据挖掘项目...

    FP-Growth 关联规则挖掘方法 Matlab 频繁项集挖掘

    与Apriori算法一样,FP-Growth 是一种关联规则挖掘方法。该方法名称中的术语 FP 是频繁模式 (Frequent Pattern) 的缩写。FP-Growth采用频繁模式挖掘技术构建频繁模式树(FP-Tree),可用于提取关联规则。与 Apriori ...

    数据挖掘Apriori和FP-tree算法的实现

    数据挖掘是一种从大量数据中发现有价值知识...总的来说,数据挖掘中的Apriori和FP-growth算法是理解和实践关联规则挖掘的关键。通过对比它们的实现,我们可以深入理解数据挖掘的基本原理,同时提升解决实际问题的能力。

    fpgrowth_source.rar_FP-Growth算法_fp-growth_fp-tree_fpgrowth_sourc

    FP-Growth算法是一种在数据挖掘领域广泛使用的关联规则学习算法,尤其适用于处理大规模交易数据集。这个算法的主要优点是高效性和内存效率,它通过构建FP-Tree(频繁模式树)来减少对原始数据的扫描次数,从而大大...

    FP-Tree GDI

    FP-Growth算法是基于FP-Tree的,它改进了传统的Apriori算法,减少了数据扫描的次数。以下是FP-Growth的主要步骤: 1. **构建FP-Tree**:首先,使用原始数据构建FP-Tree。这是FP-Growth的第一步,也是最耗时的步骤。...

    fp.rar_FP-Growth算法_fp_fp tree_fp-growth_fp-tree

    学习FP-Growth算法对于初学者和人工智能爱好者来说是非常有价值的,因为这个算法在很多实际应用中,如推荐系统、市场篮子分析和关联规则挖掘等方面都有广泛的应用。理解并能够实现FP-Growth算法,可以帮助你掌握数据...

    FP-tree 频繁模式挖掘

    FP树算法主要用于解决关联规则学习的问题,即在大量事务数据中找出频繁出现的项集。在C++中实现FP树可以帮助我们更高效地处理大规模数据集,通过良好的注释,可以方便初学者理解和应用。 FP树的核心思想是通过压缩...

    对FP-Tree头表节点数据结构的改进.pdf

    FP-Tree算法是关联规则挖掘中的一种高效算法,它不生成候选集,因此相对于需要生成大量候选集的传统Apriori算法而言,FP-Growth算法更为高效。FP-Growth算法的核心是通过两次数据库扫描构建FP-Tree,第一次扫描用于...

    基于FP-growth算法的数据挖掘实例研究.pdf

    FP-growth算法的核心思想是利用一种称为FP树(Frequent Pattern Tree)的数据结构来存储数据集中的频繁项集信息。在构建FP树的过程中,第一次扫描数据库用于统计各项项集的支持度计数,并根据最小支持度阈值筛选出...

    关联规则fpgrowthc、c#和matlab算法附讲解文档

    关联规则挖掘是一种在数据挖掘领域广泛应用的技术,它用于发现数据集中项集之间的有趣关系,比如“如果用户购买了牛奶,那么他们很可能也会购买面包”。FP-growth(频繁模式树)算法是这种挖掘方法的一种高效实现,...

    FP_Growth算法案例讲解和演示

    FP_Growth算法是一种高效的数据挖掘方法,主要用于关联规则学习,特别是在大规模数据集上。这个算法以其高效率和节省内存的特点而被广泛应用于交易数据库中的频繁项集挖掘。在这个压缩包中,你将找到一系列资源来...

    频繁模式树FP-TREE

    在数据挖掘领域,频繁模式树(FP-Tree)是一种用于高效发现频繁项集的算法,它主要用于处理大规模交易数据中的关联规则挖掘。关联规则挖掘是寻找数据库中项集之间的有趣关系的过程,例如,“如果顾客购买了尿布,...

    FP-Tree算法介绍文档

    FP-Growth算法的核心思想是构建一个FP-Tree,通过FP-Tree来高效地挖掘频繁项集。 ##### 1. FP-Tree的构建 - **构建过程**: - 第一步,扫描事务数据库一次,计算出所有项的支持度,并根据预设的支持度阈值筛选出...

    数据挖掘经典代码之FP-tree合集

    在Java和C++实现中,这些步骤通常会封装在类或函数中,例如`FPtree`类用于表示数据结构,`FPgrowth`类用于执行挖掘过程。代码中可能会包含以下关键部分: 1. `Transaction`类:代表数据集中的一条事务,包含一组项...

Global site tag (gtag.js) - Google Analytics