忽略那些前件或后件为空的规则,每个频繁k-项集能够产生多达 2k - 2个关联规则。
关联规则的提取:将一个项集 Y 划分成两个非空的子集 X 和 Y - X ,使得 X -> Y - X 满足置信度阈值。
- 首先这样的规则必然已经满足支持度阈值,因为它们是由频繁项集产生的。
如何有效的从频繁项集中产生关联规则?
- 一般,计算关联规则的置信度并不需要再次扫描事务数据集。规则{ A, B,C } —> { D }的置信度为支持度之比,(SABCD/ SABC),因为这两个项集的支持度计数已经在频繁项集产生时得到,因此不必再扫描整个数据库。
- 如果规则 X -> Y-X 不满足置信度阈值,则形如 X’ -> Y -X '的规则一定也不满足置信度阈值,其中 X‘ s是 X 的子集。
频繁项集的紧凑表示
为什么需要紧凑表示?
实践中,由事务数据集产生的频繁项集的数量可能非常大,因此,从中识别出可以推导出其他所有的频繁项集的、较小的、具有代表性的项集是有用的。
极大频繁项集(maximal frequent itemset)
它的直接超集都是不频繁的。
极大频繁项集的特点:
极大频繁项集有效地提供了频繁项集的紧凑表示。即形成了可以导出所有频繁项集的最小的项集的集合。
从图中,可以看出,所有的频繁项集是最大频繁项集 {A,D}, {A,C,E}, {B,C,D,E}的子集。
- 缺点:尽管极大频繁项集提供了一种紧凑表示,但是它却不包括它们子集的支持度信息。
频繁闭项集
- 闭项集(Closed itemset): 项集 X 是闭的,如果它的直接超集都不具有和它相同的支持度计数。
- 频繁闭项集:一个项集是频繁闭项集,如果它是闭的,并且它的支持度大于或等于最小支持度阈值。
产生频繁项集的其他方法
项集格遍历:概念上,可以把频繁项集的搜索看作遍历项集格,算法使用的搜索策略指明了频繁项集产生过程中如何遍历格结构。
- 一般到特殊 VS 与特殊到一般
一般到特殊: Apriori 算法使用了一般到特殊的搜索策略,合并两个频繁 (k-1)-项集得到 候选 k- 项集。
只要频繁项集的最大长度不是太长,这种“一般到特殊”的搜索策略是有效的,
特殊到一般:在发现更一般的频繁项集之前,先寻找更特殊的频繁项集。这种策略对于发现稠密事务中的极大频繁项集是有用的,稠密事务中频繁项集的边界靠近格的底部。
FP增长算法——用于发现频繁项集 重点
与 Apriori算法的“产生—测试”范型。而是使用一种称作 FP 树的紧凑数据结构组织数据。并直接从该结构中提取频繁项集。
FP树是一种输入数据的压缩表示,它通过逐个读入事务,并把每个事务映射到FP 树中的一条路径来构造。
以下为构造 FP 树的步骤:
-
扫描一次数据集,确定每个项的支持度计数。丢弃非频繁项,而将频繁项按照支持度的递减排序。
-
算法第二次扫描数据集,构建FP树。读入第一个事务{a,b}之后,创建标记为a和b的结点。然后形成null->a->b路径,对该事务编码。该路径上的所有结点的频度计数为1.
-
读入第二个事务{b,c,d}之后,为项b,c和d创建新的结点集。然后,连接结点null->b->c->d,形成一条代表该事务的路径。该路径上的每个结点的频度计数也等于1.尽管前两个事务具有一个共同项b,但是它们的路径不相交,因为这两个事务没有共同的前缀。
继续过程,直到每个事务都映射到 FP 树的一条路径。
- 通常, FP树的大小比未压缩的数据小,因为购物篮数据的事务常常共享一些共同项。如果共同项较少, FP树对存储空间的压缩效果将不明显。
- FP 树的大小也依赖于项如何排序。一般按照支持度计数递减序可以导致较小的FP 树。但也有例外。
- FP 树还包含一个连接具有相同项的结点的指针列表。这些指针有助于方便快捷地访问树中的项。
频繁项集的产生——FP增长算法
FP增长是一种自底向上方式探索树,由 FP 树产生频繁项集的算法。
由于每一个事务都映射到FP树中的一条路径,因而**通过仅考察包含特定结点(例如 e)的途径,就可以发现以 e结尾的频繁项集。**使用与结点 e 相关联的指针,可以快速访问这些路径。
FP增长采用分治策略将一个问题分解为较小的问题,从而发现以某个特定后缀结尾的所有频繁项集。例如,假设对发现所有以 e 结尾的频繁项集感兴趣。为了实现这个目的,必须首先检查项集{ e }本身是否频繁,如果它是频繁的,则考虑以 de 结尾的频繁项集子问题,接下来是 ae 和 ce ,依次,每一个子问题可以进一步划分成更小的子问题。通过合并这些子问题得到的结果,就可以找到所有以 e 结尾的频繁项集。这种分治策略是FP 增长算法采用的关键策略。
为了更具体地说明如何解决这些子问题,考虑发现所有以 e 结尾的频繁项集的任务。
- 第一步收集包含 e 结点的所有路径,这些初始的路径称为前缀路径(prefix path)
- 由图所示的前缀路径,通过把结点 e 相关联的支持度计数相加得到 e 的支持度计数,进而判断 e 是否频繁。
- 由于 { e }是频繁的,因此算法必须解决发现以 de , ce ,be 和 ae 结尾的频繁项集的子问题,
在解决子问题之前,必须先将前缀路径转化为条件 FP 树(conditional FP-tree)。除了用于发现以特定问题后缀结尾的频繁项集之外,条件FP树的结构与 FP 树相同
转化为条件FP树的方法步骤:
(a)首先,必须更新前缀路径上的支持度计数,因为某些计数包括那些不含 e 的事务。并重新调整前缀路径的支持度计数。
(b)删除 e 的结点,修剪前缀路径。删除这些结点是因为,沿这些前缀路径的支持度计数已经更新,以反映包含 e 的那些事务,并且发现以 de、ce 、be 和 ae 结尾的频繁项集的子问题不再需要结点 e 的信息。
(c)更新沿前缀路径上的支持度计数之后,某些项可能不再是频繁的,所以之后的分析可以安全地忽略。
- FP 增长使用 e 的条件FP 树来解决发现以 de,ce,be 和 ae 结尾的频繁项集的子问题。根据是否频繁不断剔除,并最终提取频繁项集。
FP 增长中使用的分治方法,每一次递归,都要通过更新前缀路径中的支持度计数和非频繁的项来构建 FP 树,由于子问题是不相交的,所有FP增长不会产生任何重复的项集。此外,与结点相关联的支持度计数允许算法在产生相同的后缀项时进行支持度计数。
FP增长的特点——不产生候选频繁项集的算法
FP增长展示了如何使用事务数据集的压缩表示来有效地产生频繁项集。此外对于某些事务数据集,FP 增长算法比标准的 Apriori算法要快几个数量级。FP增长算法的运行性能依赖于数据集的压缩因子(compaction factor)。
如果生产的条件 FP 树非常茂盛(在最坏的情况下,是一棵满前缀树),则算法的性能显著下降,因为算法必须产生大量的子问题。并且需要合并每个子问题返回的结果。
优点:只扫描数据库二次,并且不用产生候选项集,提高了效率。
Apriori 算法的主要开销:
- 可能要产生大量的候选项集
- 104个频繁1-项集会导致107个频繁2-项集
对长度为100的频繁模式,会产生2100个候 - 重复扫描数据库,通过模式匹配检查一个很大的候选集合。
FP树结构的好处:
完整性:
- 不会打破任何事务数据中的长模式
- 为频繁模式的挖掘保留了完整的信息
紧凑性
- 减少了不相关的信息——非频繁的项被删除
- 按频率递减排列——使得更频繁的项更容易在树结构中被共享
- 数据量比原数据库要小