数据挖掘导论学习笔记 第六章 关联分析:基本概念和算法

6.1问题定义

关联分析(association analysis) 用于发现隐藏在大型数据集中有意义的联系,所发现的联系可以用关联规则或者频繁项集的形式表示

项集和支持度计数

以购物篮数据集为例

TID 面包 牛奶 尿布
1 1 1 0
2 1 0 1
5 1 1 1

I={i1,i2,,id}I=\{i_1,i_2,\ldots,i_d\}表示所有项的集合,T={t1,,tN}T=\{t_1,\ldots,t_N\}表示所有事务的集合。在关联分析中包含0个或多个项的集合被称为项集(itemset).如果一个项集包含k个项,则称他为k-项集。事物的宽度定义为事务中出现的项的个数。项集的另一个重要性质是支持度系数,即包含特定项集的事务数,可以表示为:σ(X)={tiXti,tiT}\sigma(X)=|\{t_i|X \subseteq t_i,t_i\in T\}|其中|·|表示为集合中元素的个数。

关联规则(association rule)

关联规则是形如XYX\to Y的蕴含表达式,其中X和Y是不相交的项集。关联规则的强度可以用支持度(support)和置信度(confince)度量.支持度可以用于给定数据集的频繁程度,而置信度确定Y在包含X的事务中出现的频繁程度。s(XY)=σ(XY)Nc(XY)=σ(XY)σ(X)s(X\to Y)=\frac{\sigma(X\cup Y)}{N}\\ c(X\to Y)=\frac{\sigma(X\cup Y)}{\sigma(X)}支持度低的规则可能是偶然出现的,置信度低的规则Y,在出现X的事务中出现的可能性较低。

关联规则挖掘任务分解为两个子任务

  • 频繁项集产生:发现满足最小支持度阈值的所有项集。
  • 规则的产生:从上一步发现的频繁项集中提取所有的高置信度的规则,这些规则称为强规则。也就是说这些规则XY同时出现的概率很高

6.2频繁项集的产生

通过格结构(lattice structure)来枚举可能的项集,经过每个候补项集与事务进行比较筛选出频繁项集。
为了减少频繁项集的计算复杂度:

  • 减少候选项集的数目。运用先验原理
  • 减少比较次数。可以使用更高级的数据结构或者存储候选项集或者压缩数据集
    这些方法在后面的章节会有讨论

6.2.1先验原理

如果一个项集是频繁的,那么他的所有子集一定也是频繁的。相反如果一个项集是非频繁的,那么他的超集一定也是非频繁的。
一旦发现一个项集是非频繁的,整个包含它的超集的子图可以被立刻剪枝。这种基于支持度度量剪枝的策略称为基于支持度的剪枝。这种策略依赖于一个关键性质,即一个项集的支持度绝不会超过它的子集的支持度

6.2.2Apriori算法的频繁项集产生


|k=1k=1
|Fk={iiIσ{i}N×minsup}F_k=\{i|i\in I\land\sigma\{i\}\ge N\times minsup\} (1)(发现所有的频繁1-|项集)
|repeatrepeat
| k=k+1\quad k=k+1
| Ck=apriorigen(Fk1)\quad C_k=apriori-gen(F_{k-1}) ()(产生候选项集)
| fortTdo\quad for 每个事务t∈T do
| Ci=subject(Ck,t)\qquad C_i=subject(C_k,t) (t)(识别属于t值的所有候选)
| forcCt\qquad for 每个候选项集c \in C_t do
| σ(c)=σ(c)+1\qquad \sigma(c)=\sigma(c)+1 ()(支持度计数增值)
| end for\qquad end\ for
| end for\quad end\ for
| Fk={ccCkσ(c)N×minsup}(k)\quad F_k=\{c|c\in C_k \land \sigma(c)\ge N \times minsup\}(提取频繁k-项集)
| until Fk=ϕuntil\ F_k=\phi
| Resulet=FkResulet =\cup F_k


6.2.3候选的产生与剪枝

上述算法中有一个apriori-gen函数,它通过如下两个步骤产生候选项集

  • 候选项集的产生。有上一次频繁项集而来
  • 候选项集的剪枝。通过和支持度阈值比较
    下面介绍几种候选产生过程:
  • 蛮力方法:顾名思义
  • Fk1×F1F_{k-1}\times F_1方法:用1-频繁项集和k-1-频繁项集产生k-候选项集
  • Fk1×Fk1F_{k-1}\times F_{k-1}方法:合并一对(k-1)-项集,这两个项集除了最后一项前面的各项都是相同的,这样合并以后得到一个k-项集。这个方法可以保证候选项产生过程中的完全性,和使用字典序避免了重复的候选。然而由于每个候选都由一对频繁(k-1)-项集合合并而成,因此需要附加的候选剪枝步骤,用来确保该候选的其余k-2个子集是频繁的.

6.2.3 支持度计数

我们可以让每一个项集与每一个事务比较并更新支持度计数,但这样计算量太大,因此我们有另一种方法。
枚举每个事务所包含的项集,并利用他们更新对应的候选项集的支持度
枚举只需要按次序逐层进行即可。下面我们讨论一种支持度计数的方法

使用Hash进行支持度计数

在apriori算法中,把候选项集划分为不同的桶,并存放在Hash树中。树的每个内部节点都用哈希函数来确定应当沿着当前节点的那个分支向下。因此,树的叶节点存放的是候选项集。然后呢,我们再把一个事务按照哈希函数散列下去,这样事务所包含的k-项集也落入了各个桶中。在各个桶内,把候选项集与事务散列下去的项集进行比较,如果是该事物的子集,就增加它的**支持度计数。**注意这种方法不是将事务中每个项集与所有的候选项集进行比较,而是将它与同一桶内的候选项集进行匹配。
可以粗浅的理解为,事务子集与候选项集按照统一规则沿不同分支向下,最终得以完全匹配比较。建议读者对Hash树的原理进行学习,这里不做进一步讲解

6.2.5计算复杂度

Apriori算法的计算复杂度受到如下因素影响。
支持度阈值:支持度阈值越低,频繁项集越多
项数(维度):随着项数的增加,需要更多的空间来存储项的支持度计数。频繁项集也更多
事务数:算法扫描数据集次数
事物的平均宽度:频繁项集的最大长度随之增大而增大,其次随着事务宽度的增加,事务中包含更多项集,这将增加支持度计数时Hash树遍历次数
下面分析算法的时间复杂度
1-频繁项集的产生:假定w是事物的平均宽度,则该操作所需要的 时间为O(Nw),其中N为事务总数。
候选的产生:为了产生候选k-项集,需要合并一对频繁k-1项集,确定他们是否有k-2个项相同。每次合并至多需要k-2次相等比较。合并的总开销为k=2w(k2)Ck<<k=2w(k2)Fk12\sum_{k=2}^w(k-2)|C_k|\lt 合并开销 \lt \sum_{k=2}^{w}(k-2)|F_{k-1}|^2因为最坏的情况下,第一个项集与前k-2个项集比较后都不匹配,当匹配到第k-1个时匹配,k-1个项集中的每个项集都匹配k-1次
Hash树在候选产生时构造,以存放候选集。由于Hash树最大深度为k,将候选项集散列到Has树的开销为O(k=2wkCk)O(\sum_{k=2}^{w}k|C_k|).由于在Hash树上查找一个候选的花费是O(k)O(k),在候选项剪枝过程中,需要检验每个候选k-项集的k-2个子集是否频繁。因此,候选剪枝需要的时间是:
O(k=2wk(k2)Ck)O(\sum_{k=2}^wk(k-2)|C_k|)
支持度计数:支持度计数的总开销为O(NkCwkαk)O(N\sum_kC_w^k\alpha_k),其中w是事物的最大宽度,αk\alpha_k是更新哈希树中一个候选k-项集的支持度计数的开销

6.3 规则产生

本节介绍如何有效地从给定的频繁项集中提取关联规则。关联规则提取的方式之一是:把频繁项集一分为二,使得X→Y-X满足置信度阈值

6.3.1置信度剪枝

定理:如果规则X→Y-X不满足置信度阈值,那么X’→Y-X’也不满足,其中X‘是X的一个子集。

6.3.2Apriori算法中规则的产生

伪代码

ApripriApripri 算法中规则的产生
for kfk,k2,dofor\ 每一个频繁k-项集f_k,k\ge2,do
Hi={iifk}{1}\quad H_i=\{i|i\in f_k\}\qquad \{规则的1-项后件\}
call apgenrules(fk,H1)\quad call\ ap-genrules(f_k,H_1)
endforend for


apgenrules(fk,Hm)ap-genrules(f_k,H_m)函数步骤
k=fk{}k=|f_k| \qquad\{频繁项集的大小\}
m=Hm{}m=|H_m|\qquad \{规则后件的大小\}
if k>m+1 thenif\ k\gt m+1\ then
Hm+1=apriorigen(Hm){}\quad H_{m+1}=apriori-gen(H_m)\qquad\{候选项集产生\}
for hm+1Hm+1do\quad for\ 每个h_{m+1}\in H_{m+1} do
conf=σ(fk)/σ(fkhm+1)\qquad conf=\sigma(f_k)/\sigma(f_k-h_{m+1})
if confminconf then\qquad if\ conf\ge minconf\ then
output:(fkhm+1)hm+1\qquad \quad output:规则(f_k-h_{m+1})\to h_{m+1}
else\qquad else
Hm+1 delete hm+1\qquad \quad 从H_{m+1}\ delete\ h_{m+1}
end if\qquad end\ if
endfor\quad end for
callapgenrules(fk,Hm+1)\quad call ap-genrules(f_k,H_{m+1})
end ifend\ if


6.4 频繁项集的紧凑表示

6.4.1 极大频繁项集

定义:极大频繁项集(maximal frequent itemset)的直接超集都不是频繁的。
极大频繁项集形成了所有频繁项集的最小的项集的集合。它提供了频繁项集的边界。如果我们找到一种算法,可以直接发现极大频繁项集而不需要枚举它所有的子集,那么它能极大的减少计算量,事实证明我们可以找到,在后文将会提到。

6.4.2闭频繁项集

定义:闭项集(closed itemset),它的直接超集都不具有和它相同的支持度计数。换句话说,如果至少存在一个X的直接超集,其支持度计数与X相同,X就不是闭的。
定义:闭频繁项集指一个项集是闭的而且支持度大于等于最小支持度阈值。
我们可以使用闭频繁项集来进行”从特殊到一般“的支持度计数。
下面给出伪代码


C设C是闭频繁项集的的集合
kmax设k_{max}是闭频繁项集的最大长度
Fkmax={ffC,f=kmax}%{kmax,}F_{k_{max}}=\{f|f\in C,|f|=k_{max} \}\\\%\{找出长度为k_{max}的所有频繁项集,从特殊到一般\}
for k=kmax1 downto 1 dofor\ k=k_{max}-1\ downto\ 1\ do
Fk={ffFk+1,f=k}%{k}\quad F_k=\{f|f\subset F_{k+1},|f|=k\}\\\quad\%\{找出长度为k的所有频繁项集\}
fFk do\quad 每个f\in F_k\ do
if fC then\qquad if\ f\notin C\ then
f.support=max{f.supportfFk+1,ff}\qquad \quad f.support=max\{f'.support|f' \in F_{k+1},f\subset f'\}
%{}\qquad \quad\%\{非闭频繁项集的支持度一定等于它的超集的最大支持度\}
end if\qquad end\ if
endfor\quad end for
endforend for


值得一提的是,如果使用闭频繁集产生规则,则不会产生冗余规则。
冗余规则:对于关联规则X’→Y’,如果和另一个规则X→Y的支持度和置信度都相同,其中X‘是X的子集,Y’是Y的子集,我们称关联规则X→Y是荣誉的。
最后我们总结出一个包含关系。
频繁项集包括闭频繁项集包括极大频繁项集

6.5产生频繁项集的其他方法

对于稠密数据集,由于事务和数据宽度增加,Apriori算法性能显著降低。我们下面简略描述一些替代方法
项集格遍历:概念上我们可以把频繁项集的搜索看做遍历项集格。根据频繁项集在格中的布局,我们需要灵活采取不同的搜索策略。

  • 从一般到特殊与从特殊到一般。Apriori算法采用从一般到特殊,可以理解为从上到下搜索,但如果项集格的频繁项集边界在较下方位置,则开销较大。因此我们可以使用从下到上的策略搜索。此外,我们还可以结合从一般到特殊和从特殊到一般的双向搜索策略,这种策略对特定的布局有奇效。
  • 等价类:先将格化分为两个不相交的结点组(即等价类).频繁项集产生算法依次在每个等价类内搜索频繁项集。
  • 宽度优先与深度优先:Apriori算法即宽度优先。我们主要介绍深度优先,深度优先从第一个节点(比如是a)开始,判断是否频繁,如果是向下扩展,直到到达一个非频繁结点,然后回溯到下一个分支继续搜索。深度优先搜索算法用于发现极大频繁项集。这种算法比宽度优先更快,因为它一旦发现一个极大频繁项集就可以在他的子集上进行剪枝。
  • 事务数据集的表示。大多数算法包括Apriori算法使用水平数据布局。而另一种方法是垂直数据布局,这种布局可以压缩数据,节约空间。下面就介绍一种有效方法

6.6 FP增长算法

该算法不同于Apriori算法,它使用一种称作FP树的紧凑数据结构组织数据,并从该结构中提取频繁项集。

6.6.1FP树表示法

FP树是一种输入数据的压缩表示,他通过逐个读入事务,并把事务映射到FP树中的一条路径来构造。由于不同的事务有相同的项,因此路径可能重叠,重叠越多,压缩的效果越好。如果FP树足够小,能够存放到内存中,就可以直接从这个内存中的结构提取频繁项集,而不必重复的扫描存放在硬盘上的数据。

FP树
具体的构造方法不在此赘述,请点击此处进一步学习

6.6.2 FP增长算法的频繁项集的产生

FP增长是一种自底向上方式探索树。这种用于发现以某一个特定项结尾的频繁项集的自底向上策略等价于6.5节介绍的基于后缀的方法。
由于每个事务都映射到FP树中的一条路径,因而通过仅考察特定节点(比如e)的路径,就可以发现以e结尾的频繁项集。使用与e结点相关联的指针,可以快速访问这些路径。
FP增长采用的分治策略将一个问题分解为较小的子问题,从而发现以某个特定后缀结尾的所有频繁项集。
以考察所有以e结尾的频繁项为例

  1. 第一步收集包含e结点的所有路径,这些初始路径称为前缀路径(prefix path)
  2. 包含e结点的路径数有三条因此{e}的支持符为3,假设最小支持度为2,因此{e}是频繁项集
  3. 由于{e}是频繁项集,我们进一步考察de,ce结尾的频繁项集。首先需要把前缀路径转化为条件FP树。条件FP树通过以下步骤得到。
    (a)必须更新前缀路径的支持度计数,以图中null-b-c-e路径为例,我们要将它的支持度计数更新为1,以表示包含{b,c,e}的事务的实际个数
    (b)删除e结点,修剪前缀路径
    ©更新沿前缀路径的支持度计数之后,某些项可能不再是频繁的。比如b点只出现了1次,意味着只有一个事务同时包含be,因此b点可以忽略
  4. 通过e的条件FP树来发现de,ce,be,ae的条件树

这解释了FP增长算法中的分治方法,每一次递归都要通过更新前缀路径中的支持度计数和删除非频繁的项来构建条件FP树。
FP树增长是一个有趣的算法,他展示了如何使用事务数据集的压缩表示来有效地产生频繁项集。压缩的越狠算法越快,它可能比Apriori算法快好几个数量级。

6.7关联模式的评估

仅凭借支持度和置信度可以产生合乎标准的模式数以千计,因此我们需要更有用的评估标准来筛选优质的模式。
第一组标准可以通过统计论据建立。涉及相互独立的项或覆盖少量事务的模式被认为是不令人感兴趣的,因为他们可能反映数据中的伪联系。这些模式可以使用客观兴趣度量来排除,比如支持度、置信度和相关性
第二组标准可以通过主观论据建立。即模式被主观的认为是无趣的,除非他能够结实料想不到的信息。
比如通过 可视化、基于模板的方法、主观兴趣度度量等方法

6.7.1兴趣度的客观度量

客观度量常常基于相依表中列出的频度来计算

BB Bˉ\bar{B}
AA f11f_{11} f10f_{10} f1+f_{1+}
Aˉ\bar{A} f01f_{01} f00f_{00} f0+f_{0+}
f+1f_{+1} f+0f_{+0} N

置信度的缺点,就是置信度度量忽略了规则后件中项集的支持度
为了避免支持度置信度框架的局限性,我们介绍一些其他的度量;

兴趣因子为解决置信度度量忽略了规则后件中出现的项集的支持度,高置信度规则可能出现误导的问题。引入一种称作提升度(lift)的度量:
lift(AB)=c(AB)s(B)lift(A\to B)=\frac{c(A\to B)}{s(B)}它计算规则置信度和规则后件中项集的支持度之间的比率。对于二元变量,提升度等价于另一种称作
兴趣因子
的客观度量定义如下:I(A,B)=s(A,B)s(A)×s(B)=Nf11f1+f+1I(A,B)=\frac{s(A,B)}{s(A)\times s(B)}=\frac{Nf_{11}}{f_{1+}f_{+1}}兴趣因子比较模式的频率与统计假定下计算的基线频率。对于两相互个独立的变量,基线频率为:
f11N=f1+N×f+1N\frac{f_{11}}{N}=\frac{f_{1+}}{N}\times \frac{f_{+1}}{N}该算式从使用简单比例作为概率估计的标准方法得到。左边是联合概率P(A,B)的估计,右边分别是P(A),P(B)的估计。兴趣因子可做如下解释:如果I(A,B)I(A,B)等于1则是独立的,大于1是正相关的,小于1是负相关的。

相关分析:对于二元变量,相关度可以用ϕ\phi系数度量ϕ=f11f00f01f10f1+f+1f0+f+0\phi=\frac{f_{11}f_{00}-f_{01}f_{10}}{\sqrt{f_{1+}f_{+1}f_{0+}f_{+0}}}
相关分析的局限性在于它把项在事务中同时出现和同时不出现看做同等重要。

IS度量同于处理非对称二元变量。度量定义如下:
IS(A,B)=I(A,B)×s(A,B)=s(A,B)s(A)s(B)IS(A,B)=\sqrt{I(A,B)\times s(A,B)}=\frac{s(A,B)}{\sqrt{s(A)s(B)}}当模式的兴趣因子和模式支持度都很大时IS也很大。
可以证明IS在数学上等价与二元变量的余弦度量。也可以表示为从一对二元变量中提取出的关联规则的置信度的几何均值:
IS(A,B)=s(A,B)s(A)×s(A,B)s(B)=c(AB)×c(BA)IS(A,B)=\sqrt{ \frac{s(A,B)}{s(A)}\times \frac{s(A,B)}{s(B)}}=\sqrt{c(A\to B)\times c(B\to A)}
IS度量的局限性:一对相互独立的A,B及时不相关或负相关的模式,IS值也有可能很大。

1.其他客观兴趣度度量

在这里插入图片描述
其中如果度量M是对称的,那么M(A→B)=M(B→A)

2.客观度量的一致性

对同一组实例,不同的度量值可能会有不同的秩

3.客观度量的性质

反演性:客观度量M在反演操作下是不变的。反演指反转位向量。
零加性:客观度量M在零加操作下是不变的,如果增加f00f_{00}而保持相依表中所有其他频度不变并不影响M值。
缩放不变性:客观度量M在行、列缩放操作下是不变的。
不同的度量值具有某种性质,在应用是要注意讨论,选择最适合的度量值。
辛普森悖论:在某些情况下,隐藏的变量可能会导致观察到的一对变量之间的联系出现不一样的结果(即没有对条件考虑全面);数据需要适当的分层,考虑到更现实的条件才能得到正确的结论

6.8倾斜支持度分布的影响

倾斜支持度对关联分析算法的性能和提取模式的质量有重要影响。
倾斜支持度分布:但大多数项具有低频率,少数项具有很高的频率
规则也是对项的一种相关关系的度量
交叉支持模式:高频项和低频项相关联的虚假模式,其间的相关关系很小,但是支持度阈值的降低使其模式被挖掘;置信度很难区别从是否为交叉支持模式中提取的规则
支持度模式是一个项集X={i1,i2,…ik}r(X)=min[s(i1),...,s(ik)]max[s(i1),...,s(ik)]r(X)=\frac{min[s(i_1),...,s(i_k)]}{max[s(i_1),...,s(i_k)]}小于值得的阈值hch_c
我们可以通过检查由给定项集提取的最低置信度规则来检测交叉支持模式。从频繁项集得到的最低置信度为:
s(i1,,ik)max[s(i1),,s(ik)]\frac{s({i_1,\ldots,i_k})}{max[s(i_1),\ldots,s(i_k)]}这个表达式又称h置信度或全置信度,通过确保模式的h置信度超过hch_c就可以消除交叉支持模式,此外,h置信度能够去报项集中的项之间是强关联的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章