我们如何发现频繁子结构?

频繁子结构的发现通常包括两个步骤。第一步,它可以生成频繁子结构候选。在第二步中测试每个候选的频率。大多数关于频繁子结构发现的研究都集中在第一步的优化上,因为第二步涉及计算复杂度过高(即NP-完全)的子图同构测试。

有多种频繁子结构挖掘的方法如下 -

基于 Apriori 的方法-基于Apriori 的频繁子结构挖掘算法发送与基于 Apriori 的频繁项集挖掘算法相同的特征。频繁图的搜索从小“尺寸”的图开始,并通过使候选具有额外的顶点、边或路径以自下而上的方式进行。图大小的表示基于所使用的算法。

基于 Apriori 的子结构挖掘算法的主要设计复杂性是候选生成步骤。频繁项集挖掘中的候选产生是真实的。例如,假设我们有两个大小为 3 的频繁项集:(abc) 和 (bcd)。

从它们生成的大小为 4 的频繁项集候选很容易(abcd),从连接中改变。然而,频繁子结构挖掘中的候选生成问题比频繁项集挖掘中的要困难,因为有很多方法可以连接两个子结构。

Pattern-Growth Approach - 基于 Apriori 的方法必须使用广度优先搜索 (BFS) 策略,因为它是逐级生成的。要确定大小为 (k + 1) 的图是否频繁,它必须检查其所有对应的大小为 k 的子图以获得其频率的上限。因此,在挖掘任何大小-(k +1) 子图之前,类Apriori 方法通常必须完成对大小-k 子图的挖掘。

因此,BFS 对于类 Apriori 方法是必要的。相比之下,模式增长方法在其搜索方法方面更具动态性。它可以使用广度优先搜索以及深度优先搜索(DFS),后者消耗更少的内存。

模式增长图很简单,但效率不高。瓶颈在于扩展图的效率低下。可以多次找到相同的图形。例如,可能存在 n 个不同的 (n - 1) 边图,可以扩展到相同的 n 边图。同一图的重复发现在计算上是低效的。我们将第二次发现的图称为重复图。

它可以减少重复图的产生,每个频繁图都应该尽可能保守地扩展。这一原则导致了几种新算法的设计。生成算法旨在减少重复图的生成。它不需要搜索先前发现的频繁图来进行重复检测。它不扩展任何重复图,但仍保证发现完整的频繁图集。