我们如何发现频繁子结构?
频繁子结构的发现通常包括两个步骤。第一步,它可以生成频繁子结构候选。在第二步中测试每个候选的频率。大多数关于频繁子结构发现的研究都集中在第一步的优化上,因为第二步涉及计算复杂度过高(即NP-完全)的子图同构测试。
有多种频繁子结构挖掘的方法如下-
基于Apriori的方法-基于Apriori的频繁子结构挖掘算法发送与基于Apriori的频繁项集挖掘算法相同的特征。频繁图的搜索从小“尺寸”的图开始,并通过使候选具有额外的顶点、边或路径以自下而上的方式进行。图大小的表示基于所使用的算法。
基于Apriori的子结构挖掘算法的主要设计复杂性是候选生成步骤。频繁项集挖掘中的候选产生是真实的。例如,假设我们有两个大小为3的频繁项集:(abc)和(bcd)。
从它们生成的大小为4的频繁项集候选很容易(abcd),从连接中改变。然而,频繁子结构挖掘中的候选生成问题比频繁项集挖掘中的要困难,因为有很多方法可以连接两个子结构。
Pattern-GrowthApproach-基于Apriori的方法必须使用广度优先搜索(BFS)策略,因为它是逐级生成的。要确定大小为(k+1)的图是否频繁,它必须检查其所有对应的大小为k的子图以获得其频率的上限。因此,在挖掘任何大小-(k+1)子图之前,类Apriori方法通常必须完成对大小-k子图的挖掘。
因此,BFS对于类Apriori方法是必要的。相比之下,模式增长方法在其搜索方法方面更具动态性。它可以使用广度优先搜索以及深度优先搜索(DFS),后者消耗更少的内存。
模式增长图很简单,但效率不高。瓶颈在于扩展图的效率低下。可以多次找到相同的图形。例如,可能存在n个不同的(n-1)边图,可以扩展到相同的n边图。同一图的重复发现在计算上是低效的。我们将第二次发现的图称为重复图。
它可以减少重复图的产生,每个频繁图都应该尽可能保守地扩展。这一原则导致了几种新算法的设计。生成算法旨在减少重复图的生成。它不需要搜索先前发现的频繁图来进行重复检测。它不扩展任何重复图,但仍保证发现完整的频繁图集。