生成频繁项集的方法有哪些?
Apriori 算法有效地解决了频繁项集生成中的组合爆炸问题。它利用 Apriori 原理缩短了指数级搜索空间。尽管它显著提高了性能,但由于需要多次遍历事务记录集,该算法仍然会产生相当大的 I/O 开销。
对于稠密数据集,Apriori 算法的效率会因为事务宽度增加而显著下降。为了克服这些缺点并提高 Apriori 算法的效率,已经提出了一些方法。
以下是这些方法的概述:
项集格的遍历 - 寻找频繁项集可以看作是对项集格的遍历。算法使用的搜索方法决定了在频繁项集生成阶段如何遍历格的结构。根据格中频繁项集的组成,一些搜索方法优于其他方法。
从一般到特殊与从特殊到一般 - Apriori 算法采用从一般到特殊(general-to-specific)的搜索方法,其中将频繁 (k-1)-项集对组合起来以获得候选 k-项集。如果频繁项集的最大长度不太长,这种从一般到特殊的搜索方法是有效的。
从特殊到一般(specific-to-general)的搜索方法首先寻找更具体的频繁项集,然后再寻找更一般的频繁项集。这种方法有利于在稠密事务中查找最大频繁项集,其中频繁项集边界位于格的底部附近。
Apriori 原则可以用来剪枝一些最大频繁项集的子集。具体来说,如果一个候选 k-项集是最大频繁的,则不需要检查其任何大小为 k-1 的子集。但是,如果候选 k-项集是不频繁的,则需要在下一轮迭代中检查其所有 k-1 子集。
另一种方法是结合从一般到特殊和从特殊到一般的搜索方法。这种双向方法需要更多的空间来存储候选项集,但它可以帮助快速识别频繁项集边界。
等价类 - 另一种看待遍历的方法是首先将格划分为不相交的节点组(或等价类)。频繁项集生成算法首先在一个特定的等价类中搜索频繁项集,然后再转到另一个等价类。
Apriori 算法中使用的逐层方法可以看作是根据项集大小对格进行划分;即算法首先找到一些频繁 1-项集,然后再处理更大大小的项集。等价类也可以根据项集的前缀或后缀标签来表示。