FPGrowth 在频繁模式挖掘中仍然被认为是“最先进的”吗?

数据挖掘 大数据 数据挖掘 效率 最先进的
2021-09-16 03:28:04

据我所知,解决频繁模式挖掘(FPM)问题的算法的发展,改进的道路有一些主要的检查点。首先,Agrawal 等人在 1993 年提出了Apriori算法。,以及问题的形式化。该算法能够通过使用格子来维护数据,从集合(幂集)中剥离出一些集合。该方法的一个缺点是需要重新读取数据库来计算每个扩展集的频率。2^n - 1

后来,在 1997 年,Zaki 等人。提出了算法Eclat,该算法将每个集合的结果频率插入到晶格内。这是通过在网格的每个节点上添加一组事务 ID 来完成的,该集合具有从根到被引用节点的项目。主要贡献是不必重新读取整个数据集即可知道每个集合的频率,但构建此类数据结构所需的内存可能会超过数据集本身的大小。

2000 年,韩等人。提出了一个名为FPGrowth的算法,以及一个名为 FPTree 的前缀树数据结构。该算法能够提供显着的数据压缩,同时还允许仅产生频繁项集(不生成候选项集)。这主要是通过按降序对每个事务的项目进行排序来完成的,因此最频繁的项目是树数据结构中重复次数最少的项目。由于频率仅在深入遍历树时才会下降,因此该算法能够剥离非频繁项集。

编辑

据我所知,这可能被认为是最先进的算法,但我想知道其他提出的解决方案。FPM 还有哪些其他算法被认为是“最先进的”?这种算法直觉/主要贡献是什么?

FPGrowth 算法在频繁模式挖掘中是否仍然被认为是“最先进的”?如果不是,什么算法可以更有效地从大型数据集中提取频繁项集?

2个回答

最先进的技术:在实践中使用还是在理论上进行?

除了开发新的频繁项集算法外,APRIORI 无处不在。它很容易实现,并且很容易在非常不同的领域中重用。您会发现数百个不同质量的 APRIORI 实现。事实上,APRIORI 很容易出错。

FPgrowth 实现起来要困难得多,但也更有趣。所以从学术的角度来看,每个人都在努力提高 FPgrowth —— 现在让基于 APRIORI 的工作被接受将非常困难。

如果你有一个好的实现,那么在我看来,每个算法都有它的好和坏的情况。一个好的 APRIORI 实现需要扫描数据库k次即可找到所有长度为k的频繁项集特别是如果您的数据适合主内存,这很便宜。可以杀死 APRIORI 的是太多频繁的 2 项集(特别是当您不使用 Trie 和类似的加速技术等时)。它最适用于具有少量频繁项集的大数据。

Eclat 在柱子上工作;但它需要更频繁地阅读每一列。有一些关于差异集的工作以减少这项工作。如果您的数据不适合主内存,Eclat 可能比 Apriori 遭受的损失更大。通过深度优先,它还能够比 Apriori 更早地返回第一个有趣的结果,您可以使用这些结果来调整参数;所以你需要更少的迭代来找到好的参数。但是按照设计,它不能像 Apriori 那样巧妙地利用修剪。

FPGrowth 将数据集压缩到树中。当您有大量重复记录时,此方法效果最佳。如果您可以对数据进行预分类并将重复项合并到加权向量中,您可能也可以从 Apriori 和 Eclat 中获得相当多的收益。FPGrowth 做到了极致。缺点是实现起来要困难得多;一旦这棵树不再适合内存,它就会变得一团糟。

至于性能结果和基准——不要相信它们。有很多事情要执行不正确。尝试 10 种不同的实现,你会得到 10 种截然不同的性能结果。特别是对于 APRIORI,我的印象是大多数实现都被破坏了,因为缺少了 APRIORI 的一些主要贡献......并且在这些部分正确的情况下,优化的质量差异很大。

实际上甚至有关于如何有效地实现这些算法的论文:

Apriori 和 Eclat 的高效实现。
Christian Borgelt
频繁项目集挖掘实施研讨会(FIMI 2003,墨尔本,佛罗里达州,美国)。

您可能还想阅读有关此域的这些调查:

  • 戈塔尔斯,巴特。“关于频繁模式挖掘的调查。” 大学。赫尔辛基 (2003)。

  • Ferenc Bodon,关于频繁项集挖掘的调查,技术报告,布达佩斯科技经济大学,2006,

  • 频繁项集挖掘
    Christian Borgelt
    Wiley 跨学科评论:数据挖掘和知识发现 2(6):437-456。2012

我在文献中看到的大多数最近的频繁模式方法都是基于优化 FPGrowth。我不得不承认,多年来我在 FPM 的文献中没有看到太多的发展。

这本 wikibook重点介绍了 FPGrowth 上的许多变体。