`

推荐系统:关联规则(3) —— FP-Growth 算法

阅读更多

在 1994 年 Rakesh Agrawal 提出了 Apriori 算法之后,关联规则挖掘技术的可用性得到了很大的提高。而且因为关联规则挖掘与生俱来的商业意义,使得它迅速成为了一个非常热门的研究领域,新的算法也不断地涌现出来。这其中,实用性比较强的一个算法,是由韩家玮教授提出的 FP-Growth 算法。FP-Growth 算法在 2000 年发表的这个 paper 《Mining Frequent Patterns without Candidate Generation》里有详细的介绍。读这篇 paper,我个人建议一定要同时把引文也都看一看,2000 年之前与关联规则挖掘相关的重要 paper,基本上都在里面了。

FP-Growth 算法的核心是 FP-Tree(Frequent Pattern Tree,频繁模式树)的构建,这个特殊的数据结构,是 FP-Growth 算法与 Apriori 算法相比,性能显著提高的原因所在。不过,仔细分析一下 FP-Tree 的实现,可以发现它与字符串处理算法中常用的 Prefix Tree 算法,有着异曲同工之妙。FP-Tree 通过合并一些重复路径,实现了数据的压缩,从而使得将频繁项集加载到内存中成为可能。之后以树遍历的操作,替代了 Apriori 算法中最耗费时间的事务记录遍历,从而大大提高了运算效率。详细的理论讲解可以阅读上面的论文,我这里还是把其中的例子翻译一下。

某数据库 DB 里有 5 条事务记录,取最小支持度(min support threshold)为 3,则生成 FP-Tree 的过程如下:
1、扫描一遍数据库,获取所有频繁项,删除频率小于最小支持度的项。在此操作的过程中,还可以得到每个项的出现频率,供后续步骤使用。这一步完成之后,我们得到以下频繁项, { (c:4), (f:4), (a:3), (b:3), (m:3), (p:3) },“:”之后的数字表示对应项的出现频率。这个结果是排好顺序的,首先按照频率从达到小排序,再按照字母顺序排序。需要注意的是这里的排序非常重要,之后每个事务中的项都要按照这个顺序进行排列,这个是有效合并重复路径的前提。
处理之后的数据库记录为:

TID
原始事务数据
处理后数据
100
f, a, c, d, g, i, m, p
c, f, a, m, p
200
a, b, c, f, l, m, o
c, f, a, b, m
300
b, f, h, j, o
f, b
400
b, c, k, s, p
c, b, p
500
a, f, c, e, l, p, m, n
c, f, a, m, p
2、第二次扫描数据库,在第一次处理完成的结果基础上,构建 FP-Tree。
1) 取出第一条事务数据,构建 FP-Tree 的第一条路径,{ c, f, a, m, p }。注意其中项的排序与第一步中得到的频繁项集合的排序是一致的。
2) 取出第二条事务数据,{ c, f, a, b, m },不难发现,它与第一条路径共享了部分数据{ c, f, a }。因此,可以重复利用已有的路径,只需要将其计数加 1,即{ (c:2), (f:2), (a:2) }。而对于后面不同的部分,我们创建新的路径,{ (b:1), (m:1) },其中,b 为 a 的子节点,m 为 b 的子节点。
3) 取出第三条事务数据,{ f, b },发现没有重复路径存在。但 f 点是存在的,因此,可以重复利用 f 点,新建一个 b 节点,作为 f 的子节点,得到路径{ {f:3}, (b:1) }。注意,之前已经存在的 b 节点无法重复使用,因为其父节点为 a。
4) 取出第四条事务数据,{ c, b, p },发现没有重复路径存在。因此,从现有 c 点出发,构建一条新路径{ (c:3), (b:1), (p:1) }。
5) 取出第五条事务数据,{ c, f, a, m, p },同上原理构建路径,{ (c:4), (f:4), (a:3), (m:2), (p:2) }。

经过两遍数据库扫描,完成了 FP-Tree 的构建。在此例中,c 点为整个 FP-Tree 的唯一根节点,但其实多数情况下,根节点并不是唯一的,即有多棵子树。因此,为了方便树结构的遍历,可以人为添加一个超级根节点,通常标记为 root<null>。参照下图,可以更清楚的理解整个过程。

得到了 FP-Tree 树之后,再遍历整棵树获取满足一定置信度的关联规则,就比较简单了。具体的理论证明,以及与 Apriori 算法的 performance 对比,论文里讲得非常清楚,有兴趣的朋友可以看一下。

原文: http://www.360doc.com/showWeb/0/0/101915981.aspx

分享到:
评论

相关推荐

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

    相比之下,FP-growth算法通过构建一种特殊的树结构——FP树(Frequent Pattern Tree)来大幅减少数据扫描次数。 FP-growth算法主要包括以下三个步骤: 1. 构建FP树:首先,对原始交易数据进行预处理,将所有项按照...

    Python——机器学习实战——FP-growth高效发现频繁项集

    FP-growth算法是一种高效处理频繁项集的方法,尤其在大数据集上表现优秀。本篇将深入探讨FP-growth算法及其在Python中的实现。 FP-growth(Frequent Pattern growth)算法是由Huan Liu等人于2000年提出,它主要解决...

    数据科学——Apriori与FP-Growth算法比较1

    这两种算法都应用于市场篮子分析、推荐系统等领域,以发现消费者购买行为之间的关联性。 1. Apriori算法 Apriori算法基于“频繁项集”的概念,它首先定义了支持度和置信度两个关键指标。支持度是指某项集在所有交易...

    数据挖掘之关联规则挖掘FP-Growth算法

    **关联规则挖掘与FP-Growth算法** 关联规则挖掘是数据挖掘领域的一个重要组成部分,它旨在发现数据集中项集之间的有趣关系。例如,在超市购物数据中,可能会发现“购买尿布”的顾客往往也会“购买啤酒”,这种关系...

    FP-Growth算法从新闻网站点击流中挖掘频繁项.rar

    这个算法的核心思想是构建一个特殊的树形结构——FP树(Frequent Pattern Tree),以此来存储和挖掘频繁项集。它在处理大量数据时表现出色,因为它避免了生成庞大的候选集,并且只需两次遍历原始数据。 首先,我们...

    基于FP-growth的关联规则算法的实现与应用.docx

    本文介绍了关联规则挖掘的概念和经典算法——Apriori算法和FP-growth算法,并提出了基于FP-growth算法的关联规则挖掘方法。实验结果表明,基于FP-growth算法的关联规则挖掘方法可以高效地挖掘出关联规则,并且可以...

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

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

    FP-GROWTH算法

    FP-GROWTH算法的核心思想是构建一个特殊的树状结构——FP树(Frequent Pattern Tree),将所有交易数据压缩到这棵树中。相比Apriori算法,FP-GROWTH避免了重复扫描数据库和生成大量无用的候选项集,因此在处理大规模...

    FP-growth算法python实现

    FP-growth算法广泛应用于市场篮子分析、推荐系统、关联规则学习等。通过挖掘频繁项集,可以发现商品之间的关联性,为企业决策提供依据。此外,还可以通过扩展FP-growth,如使用多线程并行化,或者与其他数据挖掘技术...

    人工智能-项目实践-关联规则挖掘-本项目使用了 FP-Growth 和 K-Means 两种算法,挖掘了我校图书馆借阅记录中的隐

    源代码部分会详细展示如何实现FP-Growth和K-Means算法,以及如何结合这两个算法构建推荐系统。数据集部分可能包括图书馆的借阅记录,其中包含每本书的ID、读者ID、借阅日期等信息。结果分析部分则可能展示了挖掘出的...

    FP-Growth算法的改进

    ### FP-Growth算法的改进分析 #### 一、引言 在大数据时代,高效的数据挖掘技术对于商业决策、科学研究等领域至关重要。其中,关联规则挖掘是一种常用的技术,它可以帮助我们发现数据集中频繁出现的项目组合之间的...

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

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

    清华大学精品数据挖掘&机器学习学习PPT课件(39页)含练习题 第4章 关联规则 Apriori FP-Growth算法.rar

    关联规则学习是一种在交易数据中寻找频繁项集和强关联规则的方法,常用于市场篮子分析、推荐系统等场景。它的基本思想是找出商品之间的购买关联性,例如“如果顾客买了尿布,那么他们很可能也会买啤酒”。关联规则...

    大数据必修课 数据挖掘基础课程 含练习题 第4章 关联规则 Apriori FP-Growth算法 共40页.pptx

    在【第4章 关联规则】中,课程详细讲解了关联规则的基本概念和两种主要的挖掘算法——Apriori和FP-Growth。关联规则是数据挖掘中的一个关键概念,最早由Agrawal等人提出,主要用于发现交易数据中的商品关联规律,...

    纯Rust 中 FP-Growth算法的实现_rust_代码_下载

    FP-Growth 算法是一种在数据挖掘领域广泛使用的关联规则学习算法,它主要用于发现大量交易数据中的频繁项集。这个算法的优点在于其高效的处理能力,尤其在处理大规模数据时,能够有效地减少内存使用和计算时间。在纯...

    mvc.zip_fp-growth_zip

    2. **FP-Tree(频繁模式树)**:FP-Growth 使用一个压缩的数据结构——FP-Tree,存储所有交易的项集。FP-Tree 的每个节点代表一个项,根节点指向最频繁的项,节点间的路径表示项的顺序。 3. **条件模式基...

    FP-Growth核心代码

    FP-Growth算法是一种在大数据集上高效挖掘频繁项集的算法,它主要应用于关联规则学习。这个算法由Huan Liu、Ming-Feng Chen和Jiawei Han在2000年提出,其核心思想是通过构建一种特殊的树结构——FP树(Frequent ...

    fp-growth-rs:纯Rust中FP-Growth算法的实现

    FP-Growth的核心思想是通过构建一种特殊的树结构——FP树(Frequent Pattern Tree),来避免对原始数据的多次扫描,从而极大地提高了处理大数据集时的效率。该算法主要分为三个步骤:交易压缩、FP树构造和反向链接...

    FPGrowth的代码

    总结,FPGrowth算法以其高效的性能和灵活的适应性,在大数据关联规则挖掘中占据了重要地位。理解其原理并能实际编写代码,对于数据挖掘从业者来说,是提升数据分析能力的关键一步。通过实践和不断优化,我们可以更好...

    FP.rar_FPgrowth _FP算法代码java_关联规则_关联规则代码

    在提供的"FP.rar"压缩包中,包含了两个.java文件——FPGrowth.java和另一个未明确命名的.java文件,很可能是用于辅助FP-growth算法执行的辅助类。FPGrowth.java作为程序的入口,负责读取数据、调用FP-growth算法,并...

Global site tag (gtag.js) - Google Analytics