数据挖掘之关联分析二(频繁项集的产生)

频繁项集的产生

格结构(lattice structure)常常用来表示所有可能的项集。

发现频繁项集的一个原始方法是确定格结构中每个候选项集的支持度。但是工作量比较大。另外有几种方法可以降低产生频繁项集的计算复杂度。

  1. 减少候选项集的数目。如先验(apriori)原理,是一种不用计算支持度而删除某些候选项集的方法。
  2. 减少比较次数。利用更高级得到数据结构或者存储候选项集或者压缩数据集来减少比较次数。

先验原理(Apriori)

使用支持度对候选项集进行剪枝。
先验原理:如果一个项集是频繁的,则它的所有子集也一定是频繁的。

相反,如果一个项集是非频繁的,则它所有的超集都是非频繁的,这种基于支持度度量修剪指数搜索空间的策略称为基于支持度的剪枝,依赖于一个性质,即一个项集的支持度决不会超过它的自己的支持度,这个性质称为反之尺度度量的反单调性(anti-monotone)。

Apriori算法的频繁项集产生

Apriori算法是第一个关联规则挖掘算法,它开创性地使用基于支持度的剪枝技术,系统地控制候选项集指数增长。

算法

  1. 初始通过单遍扫描数据集,确定每个项的支持度,得到所有频繁1-项集的集合F1.
  2. 迭代地使用上一步得到的k-1项集,产生新的候选k项集。
  3. 为了对候选项的支持度技术,算法需要再次扫描一遍数据集。
  4. 计算候选项的支持度,山区支持度小于minsup的左右后选集。
  5. 当没有新的频繁项集产生,算法结束。

Apriori算法的频繁项集产生的部分有两个重要的特点:(1)逐层算法,从频繁1-项集到最长的项集,每次遍历项集格中的一层。(2)它使用产生-测试(generate-and-test)策略来发现频繁项集,每次迭代后的候选项集都由上一次迭代发现的频繁项集产生。算法总迭代次数为\(k_{max+1}\),其中\(k_{max}\)为频繁项集最大长度。

候选的产生与剪枝

剪枝:考虑候选k项集\(X={i_1,i_2,i_3……}\),如果X的一个真子集非频繁,则X将会被剪枝。对于每一个候选k-项集,确保\(X-{i_n}\)都是频繁的,该操作的复杂度是O(k),然而并不需要检查给定候选项集的所有k个子集。如果k个子集中的m个用来产生候选项集,则候选项集剪枝时只需要检查剩下的k-m个子集。如{a, b, c, d}项集,正常情况下需要检查{a, b, c}, {a, b, d}, {a, c, d}, {b, c, d}都是频繁项集,但是如果a,b 是用来产生后选集的,则说明它们是频繁的,因此主要检查{a, b, c}和{a, b, d}是频繁项集。

候选产生

  1. 应当避免产生太多不必要的后选集,如果一个候选项集的子集是非频繁的,则该后选集肯定是非频繁的。
  2. 确保候选项集的集合完整性,即产生候选项集过程没有遗漏任何频繁项集。
  3. 不应当产生重复的候选项集。

蛮力方法:把所有的k-项集都看做可能的候选集,然后使用候选剪枝除去不必要的候选。但是剪枝开销比较大。
\(F_{k-1} \times F_1\)方法:用其他频繁项来扩展每个频繁k-1项集。但是这种方法很难避免产生重复的后选集。其中一种方法是每个频繁项集的项使用字典序存储。

使用这种方法得到了些许的改进,但是还是会产生大量不必要的候选,如当{b, c}是不频繁时,{a, b}和{c}合并是不必要的。有几种启发式方法可以减少不必要的后选集。如每个频繁k项集,它的每一个项都必须在频繁k-1项集中出现,否则该候选就是非频繁。
的。
\(F_{k-1} \times F_{k-1}\)方法:当它们的前k-2个项都相同时,合并一对频繁k-1项集。
令$ A = {a_1, a_2, \cdots, a_{k-1}} \(,满足\)a_i = b_i (i = 1, 2, \cdots , k-2)$ 并且$ a_{k-1} \neq b_{k-1} $

k-2集合项顺序也要相同,并确保是频繁的。

支持度计数

一种方法是将每个事务所有的候选项集进行比较,并且更新包含正在事务中的候选项集的支持度计数。这种计算的代价是昂贵的。
另一种方法是枚举每个事务所包含的项集,并利用它们更新对应的候选项集的支持度。

使用Hash树进行支持度计数
在Apriori算法中,候选集划分为不同的桶,并存放在hash树中。在支持度计数时,将包含在事务中的项集也散列在相应的桶中,将事务中的每个项集与同一个桶中的候选项集进行匹配。

如下图所示,将候选集散列在Hash树的叶结点中,计数时,将事务的项集散列到Hash树中,如果叶结点包含该项,则计数加一

Apriori计算复杂度

支持度阈值,降低支持度阈值将会导致更多的频繁项集。随着支持度阈值的降低,频繁项集的最大长度将增加,因而扫描数据的次数也将增加。
项数(维度),项数增加,需要更多空间来存储支持度。
事务数,由于Apriori算法反复扫描数据集的时间增加。
事务平均宽度

时间复杂度

频繁1-项集产生,需要更新每个项支持度,因而时间为\(O(Nw)\),其中w为事务平均宽度,N为事务数。
候选产生,为了产生k项集,需要合并一对频繁k-1项集,最好情况是每次能产生一个可行的候选k项集,最坏情况是必须合并上次迭代发现的每对k-1项集。因此开销为

\[\sum_{k=2}^{w}(k-2)|C_k| <合并开销< \sum_{k=2}^w (k-2)|F_{k-1}|^2 \]

Hash树在候选产生时构造,以存放候选项集,由于Hash树的最大深度为k,将候选项集散列到Hash树的开销为\(O( \sum_{k=2}^w k |C_k| )\)。在候选项剪枝的过程中,需要检验每个候选k项集的k-2项集时候频繁,由于在Hash树上查找一个候选的花费是O(k),因此候选剪枝的时间需要\(O( \sum_{k=2}^w k(k-2) |C_k| )\)
支持度计数,每个长度为t的事务将差生\(C_{|t|}^k\)个k项集,这也是每个事务遍历Hash树的有效次数,若更新每个候选集的支持度计数的开销是,则支持度计数的总开销为\(O(N \sum_k C_w^k \alpha_k)\)

数据挖掘之关联分析一(基本概念)
数据挖掘之关联分析二(频繁项集的产生)
数据挖掘之关联分析三(规则的产生)
数据挖掘之关联分析四(连续属性处理)
数据挖掘之关联分析五(序列模式)
数据挖掘之关联分析六(子图模式)
数据挖掘之关联分析七(非频繁模式)

posted @ 2015-08-18 21:58  Beavers  阅读(25791)  评论(0编辑  收藏  举报