数据挖掘之关联分析
1、基本概念
(1)通常认为项在事物中出现比不出现更重要,因此项是非对称二元变量。
(2)关联规则是形如X->Y的蕴涵表达式,其中X和Y是不相交的项集,即X交Y=空。
(3)由关联规则作出的推论并不必然蕴涵因果关系。它只表示规则前件和后件中的项明显地同时出现。
(4)通常,频繁项集的产生所需的计算开销远大于规则产生所需的计算开销。
(5)任何具有反单调性的度量都能够结合到数据挖掘算法中,对候选项集的指数搜索空间有效地进行剪枝。
2、Apriori算法
算法主要利用了如下性质:如果一个项集是频繁的,则它的所有子集一定也是频繁的(这个性质也称支持度度量的反单调性)。也就是说如果当前的项集不是频繁的,那么它的超集也不是频繁的。(该算法的计算复杂度依赖于数据中的项数和事物的平均长度等性质)
算法步骤:
(1)算法初始通过单遍扫描数据集,确定每个项的支持度。一旦完成这一步,就得到所有频繁1项集的集合F1;
(2)接下来,该算法使用上一次迭代发现的频繁(k-1)项集,产生新的候选k项集;
(3)为了对候选项的支持度计数,算法需要再次扫描一遍数据库,使用子集函数确定包含在每一个事物t中的Ck中的所有候选k项集;
(4)计算候选项的支持度计数后,算法将删除支持度计数小于minsup的所有候选项集;
(5)当没有新的频繁项集产生时,算法结束。
Apriori算法第一它是逐层算法,第二它使用产生—测试策略来发现频繁项集。
注意:在由k-1项集产生k项集的过程中有以下几点注意:
(1)新产生的k项集先要确定它的所有的k-1项真子集都是频繁的(其实如果k个子集中的m个用来产生候选项集,则在候选项集剪枝时只需检查剩下的k-m个子集),如果有一个不是频繁的,那么它可以从当前的候选项集中去掉。
(2)候选项集的产生方法:
A)蛮力法:从2项集开始以后所有的项集都从1项集完全拼出来。如:3项集有3个一项集拼出(要列出所有的3个一项集拼出的可能)。然后再按照剪枝算法剪枝(确定当前的项集的所有k-1项集是否都是频繁的)。
B)Fk-1*F1法:顾名思义由1项集和k-1项集生成k项集,然后再剪枝。(这种方法是完全的,因为每一个k频繁项集都是由一个频繁k-1项集和一个频繁1项集产生的)但是,这种方法会产生大量重复的k频繁项集(由于顺序的关系)。避免产生重复的候选项集的一种方法是确保每个频繁项集中的项以字典序存储,每个频繁k-1项集X只用字典序比X中的所有项都大的频繁项进行扩展。(还可以使用一些启发式方法进一步减少候选项集的数量,如:对于每一个幸免于剪枝的候选k项集,它的每一个项必须至少在k-1个k-1项集中出现);
C):Fk-1*Fk-1法:由两个频繁k-1项集生成候选k项集,但是两个频繁k-1项集的前k-2项必须相同,最后一项必须相异。(由于每个候选是由一对频繁k-1项集合并而成,所以需要附加的候选剪枝步骤来确保该候选的其余k-2个子集是频繁的)。
注意:(1)在支持度计数时除了传统的方法外还可以将候选项集划分为不同的桶,并存放在Hash树中。在支持度计数期间,包含在事物中的项集也散列到相应的桶中。(2)随着频繁项集最大长度的增加,算法需要扫描数据库的次数也将增多。
3、规则的产生:
提取规则:将一个频繁项集Y划分成两个非空的子集X和Y-X,使得X->Y-X满足置信度阈值。计算关联规则的置信度并不需要再次扫描事物数据集,因为这两个项集的支持度计数已经在频繁项集产生时得到。
性质:如果规则X->Y-X不满足置信度阈值,则形如X1->Y-X1的规则一定也不满足置信度阈值,其中X1是X的子集。根据该性质假设由频繁项集{a,b,c,d}产生规则,假设规则{b,c,d}->{a}具有低置信度,则可以丢弃后件包含a的所有规则,如{c,d}->{a,b}。
4、最大频繁项集:
由事物数据集产生的频繁项集的数量可能非常大,因此,从中识别出可以推导出其他所有的频繁项集的、较小的、具有代表性的项集是有用的。
最大频繁项集是这样的频繁项集,它的直接超集都不是频繁的。最大频繁项集有效的提供了频繁项集的紧凑表示。换句话说,最大频繁项集形成了可以导出所有频繁项集的最小项集的集合。
最大频繁项集的缺点:
(1)仅当存在一种有效的算法,可以直截了当的发现最大频繁项集而不需要枚举它们的所有子集时,这种方法才是有效的;
(2)最大频繁项集却不包含它们子集的支持度信息(为此提出了频繁闭项集)。
5、频繁闭项集:
频繁闭项集提供了项集的一种最小的表示,该表示不丢失支持度的信息。闭项集:项集X是闭的,如果它的直接超集都不具有和它相同的支持度计数(超集小于它的支出度计数)。
频繁闭项集:如果它是闭的,并且它的支持度大于或等于最小支持度阈值。可以使用频繁闭项集的支持度来确定一些非闭的频繁项集的支持度。
对于删除冗余的关联规则,频繁闭项集是非常有用的。关联规则X->Y是冗余的,如果存在另一个关联规则 X1->Y1使得两个关联规则的支持度和置信度都相同,其中,X1是X的子集,并且Y1是Y的子集。
注意:最大频繁项集都是闭的,因为任何最大频繁项集都不可能与它的直接超集具有相同的支持度计数。
6、产生频繁项集的其他方法:
可以把频繁项集的产生搜索过程按照不同的分类就出现不同的方法:
(1)一般到特殊与特殊到一般(或者双向搜索,但是双向搜索需要更多的空间存储候选项集)。
(2)等价类。首先将格划分为两个不想交的结点组(或等价类)。频繁项集产生算法依次在每个等价类内搜索频繁项集。
(3)宽度优先与深度优先。通常,深度优先搜索方法用于发现最大频繁项集的算法。这种方法比宽度优先方法更快地检测到频繁项集边界。
(4)事物数据库的表示方法有多种。表示方法的选择可能影响计算候选项集支持度的I/0开销。
7、不产生候选项集的频繁项集产生方法
FP增长算法。该算法思想:先扫描数据库,然后对每一项(1项集)计数,然后再根据前面的计数排序每个事物中的项(按递减顺序)。然后再按照排序后的事物生成FP树,最后根据FP树生成频繁项集(生成频繁项集的方法见hai jiaweiP157-158)。
注意:
(1)FP树的大小也依赖于项如何排序;
(2)FP增长以一种自底向上方式探索树,由FP树产生频繁项集的算法。
3.8、关联模式的评估
(1)兴趣度的客观度量。支持度的缺点在于许多潜在的有意义的模式由于包含支持度小的项而被删除。置信度的缺陷在于该度量忽略了规则后件中项集的支持度,高置信度的规则有时可能误导。解决置信度问题的一种方法是使用称作提升度的度量:(注意:只有非零值才是重要的二元属性是非对称二元属性)
它计算规则置信度和规则后件中项集的支持度之间的比率。
对于二元变量,提升度等价于另一种称作兴趣因子的客观度量,其定义如下:
量,IS度量也可以表示为从一对二元变量中提取出的关联规则的置信度的几何均值(两个 数的几何均值总是接近于较小的数)。IS度量的局限性:即使不相关或负相关的模式,度量值也可能很大。
另外还有许多分析二元变量之间联系的度量方法,一般将他们分为两类:对称的和非对称的。
(2)多个二元变量的度量
方法一:将二元度量中能够扩展到多元变量的度量扩展到多远变量(使用多维相依表)。
方法二:是将客观度量定义为模式中项对之间关联的最大值、最小值和平均值。然而,由于该度量只考虑逐对之间的关联,所以它可能不能捕获模式中的隐含关系。
(3)辛普森悖论
在某些情况下,隐藏的变量可能会导致观察到的一对变量之间的联系消失或逆转方向,这种现象就是所谓的辛普森悖论。例如:在组合数据情况下存在正相关,但是在分层数据情况下却存在负相关,这种关联方向上的逆转就是辛普森悖论。所以有时需要适当的分层才能避免因辛普森悖论产生虚假的模式。
(3)倾斜支持度分布的影响
关注具有倾斜支持度分布的数据集,其中大多数据具有较低或中等频率,但是少数项具有很高的频率。但是可能少数项中的模式也是感兴趣的。交叉支持模式:交叉支持模式是一个项
率总是小于hc,因此这类模式的h置信度也一定小于hc。因此通过确保模式的h置信度值超过hc就可以消除交叉支持模式。注意h置信度也是反单调的。即:h({i1,i2,…ik}) h({i1,i2,…ik+1})。从而可以直接将它并入挖掘算法。此外,h置信度能够确保项集中的项之间是强关联的。这种强关联模式又称超团模式。
9 处理分类属性
这种类型的变换可以通过为每个不同的属性-值对创建一个新的项来实现,这个过程成为二元化。将关联分析用于二元化后的数据时,需要考虑如下问题:
(1)有些属性值可能不够频繁,不能成为频繁模式的一部分。对于具有许多可能属性值的标称属性(如州名),这个问题更为明显。更实际的做法是,将相关的属性值分组,形成少数类别。例如:每个州名都可以用对应的地理区域取代。另一种可能性是,将不太频繁的属性值聚合成一个称作其他的类别。
(2)某些属性值的频率可能比其他属性高很多。由于高频度的项对应于属性的典型值,因此他们很少携带有助于更好理解模式的新信息。因此,在使用标准的关联分析算法之前,删除这样的项可能是有好处的。
(3)尽管每个事物的宽度与原始数据中属性的个数相同,但是计算时间可能增加,特别是新创建的项是频繁项时,这是因为需要更多时间处理由这些项产生的候选项集。一种减少计算时间的方法是,避免产生包含多个来自同一属性的项的候选项集。
10 处理连续属性
包含连续属性的关联规则通常称为量化关联规则。对连续属性进行关联分析主要有三种方法:第一、基于离散化的方法;第二、基于统计学的方法;第三、非离散化方法。
(1)基于离散化的方法。将连续属性的邻近值分组,形成有限个区间。离散化一般的方法有等区间宽度、等频率、基于熵或聚类实现,离散的区间可以映射到非对称的二元属性。
(2)基于统计学的方法(验证规则的有趣性用假设检验的方法)。思想:先确定一个目标属性,然后使用已有的算法,从二元化数据中提取频繁项集。每个频繁项集确定一个有趣总体段。使用诸如均值、中位数、方差或绝对偏差等统计量,可以对目标属性在每个段内的分布进行汇总。
min-Apriori:类似于传统的关联分析,项集是词的汇集,而其支持度度量词之间的关联程度。min-Apriori中,给定文档中词之间的关联通过取它们的规范化频率的最小值得到。
(3)非离散化方法。分析者更感兴趣的是发现连续属性之间的关联,而不是连续属性的离散区间之间的关联。
11 处理概念分层
将概念分层纳入关联分析的主要优点如下:
(1)位于层次结构下层的项可能没有足够的支持度,从而不在任何频繁项集中出现。
(2)在概念分层的较低层发现的规则倾向于过于特殊,可能不如较高层的规则令人感兴趣。(扩展事物的概念)。
缺点如下:
(1)处于较高层的项比处于较低层的项趋向于具有较高的支持度计数。
(2)概念分层的引入增加了关联分析的计算时间,因为项的个数更多,事物宽度更大。(3)概念分层的引入可能产生冗余规则。
12 序列模式
对于识别动态系统的重要特征或预测特定事件的未来发生,序列信息可能是非常有价值的。
数据序列是指与单个数据对象相关联的有序列表。序列s的支持度是包含s的所有数据序列所占的比例。如果序列s的支持度大于或等于用户指定的阈值minsup,则称s是一个序列模式(或频繁模式)。序列模式发现:给定序列数据集D和用户指定的最小支持度阈值minsup,序列模式发现的任务是找出支持度大于或等于minsup的所有序列。可以使用Apriori算法来挖掘。过程一样,只是由频繁k-1项集产生候选k项集时,两个k-1项集合并成k项集的方法不一样(但是前提和条件是一样,即前k-2项集是相同的)。
(1)时限约束:模式的事件和元素都施加了时限约束。时限约束包括最大跨度约束、最小间隔和最大间隔约束和窗口大小约束:
最大跨度约束:整个序列中所允许的事件的最晚和最早发生的最大时间差。一般的最大跨度约束越长,在数据序列中检测到模式的可能性就更大。然而,较大的最大跨度约束也可能捕获不真实的模式,因为这增加了两个不相关的事件的可能性。此外,模式也可能涉及陈旧事件。最大跨度约束影响序列模式发现算法的支持度计数,施加最大时间跨度约束之后,有些数据序列就不支持候选模式。
最小间隔和最大间隔约束:通过限制序列中两个相继元素之间的时间差来指定。与最大跨度一样,这些约束也影响序列模式发现算法的支持度计数。因为当最小间隔和最大间隔约束存在时,有些数据序列就不在支持候选模式。使用最大间隔约束的一个庞效是可能违反先验原理,使用邻接子序列可以避免这个问题。使用邻接子序列的概念,可以用如下方法修改先验原理,来处理最大间隔约束:
修订的先验原理:如果一个K-序列是频繁的,则它的所有邻接(k-1)-子序列也一定是频繁的。(只需少量改动,就可以将修订的先验原理用于序列模式发现算法)。
窗口大小约束:可以定义一个窗口大小阈值(ws)来指定序列模式的任意元素中事件最早和最晚出现之间的最大允许时间差。窗口大小约束也影响序列模式发现算法的支持度计数
(2)可选计数方案:有一些方法可以用来由序列数据库对候选k-序列的支持度计数。主流算法有:
COBJ:每个对象出现一次。该方法在对象时线中查找给定的序列至少出现一次。
CWIN:每个滑动窗口出现一次。在该方法中,将一个固定长度的滑动时间窗口移过时线,一次移动一个时间单位。序列在滑动窗口中遇到一次,支持度计数就增值一次。
CWINWIN:最小出现窗口数。最小出现窗口是给定时限约束下序列出现的最小窗口。换言之,最小出现窗口是这样的时间间隔,使得序列在该时间间隔中出现,但不在其任何真子集中出现。该定义可以视为CWIN的限制版本,因为其效果是收缩或坍塌被CWIN计数的某些窗口。
CDIST_O:允许事件——时间戳重叠的不同出现。序列的不同出现定义为事件——时间戳对的集合,使得至少有一个新的事件——时间戳对不同于以前统计过的出现。
CDIST:不允许事件——时间重叠的不同出现。在上一方法中,允许序列的两次出现具有重叠的事件——时间对。该方法不允许重叠。当一个事件——时间戳对在计数时用过之后,将它标记为已使用,并且在对相同的序列计数时不再使用。
关于计数方法最后要说明的是,需要确定计算支持度度量的基线(可能达到的最大值)。
13 子图模式
在图的集合中发现一组公共子结构,这样的任务称作频繁子图挖掘。频繁子图挖掘:给定图
但是候选子图的个数实际上少得多,因为有许多是不连通的子图(应该去掉)。用一种Apriori方法来找出频繁子图:
方法一:数据变换。将图变换成类似于于事物的形式,使得我们可以使用诸如Apriori等已有的算法。在这种情况下,边标号l(e)与对应的顶点标号(l(vi),l(vj))组合被映射到一个”项”。”事物”的宽度由图的边数决定。尽管很简单,但是仅当图中每条边都具有唯一的顶点和边标号组合时,该方法才可行。
方法二:挖掘频繁子图算法的一般结构:
(1)候选产生。合并频繁(k-1)-子图对,得到候选k-子图。
(2)候选剪枝:丢弃包含非频繁的(k-1)-子图的所有候选k-子图。
(3)支持度计数:统计G中包含每个候选的图的个数
(4)候选删除:丢弃支持度小于minsup的所有候选子图。
候选产生:
当k是图中顶点的个数时,通过添加一个顶点,迭代地扩展子图的方法称作顶点增长。当k是图中边的个数。添加一条边到已有的子图中来扩展子图的方法称作边增长。为了避免产生重复的候选,我们可以对合并施加附加的条件:两个(k-1)-子图必须共享一个共同的(k-2)-子图。共同的(k-2)-子图称作核。
(1)通过顶点增长产生候选。顶点增长方法可以看作合并一对(k-1)*(k-1)的邻接矩阵,产生k*k邻接矩阵的过程。
(2)通过边增长产生候选。与顶点增长不同,边增长子图的一步顶点个数不一定增加(加0或1)。
注意:A):边增长是要考虑图的拓扑等价。
B):当与一对(k-1)-子图相关联的核有多个时,还可能产生多个候选子图。尽管边增长过程可能产生多个候选子图,但是候选子图的数量倾向于比顶点增长策略产生的少。
候选剪枝:
相继从k-子图删除一条边,并检查对应的(k-1)-子图是否连通且频繁,如果不是,则该候选k-子图可以丢弃。为了检查(k-1)-子图是否频繁,需要将它与其他频繁(k-1)-子图匹配。判定两个图是否拓扑等价称为图同构问题。
处理图同构:
处理图同构的标准方法是:将每个图都映射为唯一的串表达式,称作代码或规范标号。规范标号具有如下性质:如果两个图是同构的,则它们的代码一定相同。这个性质使得我们可以通过比较图的规范标号来检查图同构。构造图的规范标号的第一步是找出图的邻接矩阵表示。原则上,一个图可以有多种邻接矩阵表示,因为存在多种确定顶点次序的方法。第二步是确定每个邻接矩阵的串表示。由于邻接矩阵是对称的,因此只需要根据矩阵的上三角部分构造串表示就足够了。一个例子是代码是通过逐列连接矩阵的上三角元素得到。最后一步是比较所有的串表达式,并选出具有最小(最大)字典次序的串。这个算法需要考察图的所有可能的邻接矩阵,并计算他们串表达式,以便找出规范标号。更具体的,对于一个包含K个顶点的图,要考虑K!中排列。已经开发了一些方法来降低该任务的复杂度,包括存放先前的规范标号。
注意:要找一个图的所有邻接矩阵是因为两个同构的图可能顶点标号完全不同。
支持度计数:
关关联规则统称负相关模式。非频繁模式和负相关模式只涉及包含正项的项集和模式,而负模式涉及包含正项和负项的项集和模式。三个概念存在一定的共性:首先,许多非频繁模式有对应的负模式。其次,许多负相关模式也具有对应的负模式。由于 X并上Y 的支持度越底,该模式就越负相关,因此非频繁的负相关模式倾向于比频繁的负相关模式更令人感兴趣。
挖掘有趣的非频繁模式的方法:
(1)将每个项看做对称的二元变量,通过负项增广,将事务数据二元化。即将原始数据变换成具有正项和负项的事物,对增广的事务使用已有的频繁项集产生算法(如:Apriori),可以推导出所有的负项集。仅当只有少量变量被视为对称的二元变量(即负模式仅涉及少量负项),该方法才是可行的。
(2)不用负项增广数据集,而是根据对应的正项集的计算负项集的支持度。可以用若干优化策略来进一步提高挖掘算法的性能。首先,可以限制被视为对称二元变量的变量数。更具体地说,仅当y频繁时才认为负项是有趣的。另一种策略是限制负模式的类型。
(3)仅当非频繁模式的支持度显著小于期望支持度时,才认为它是有趣的。对于负相关模式,期望支持度根据统计独立性假设计算。计算期望支持度的方法:使用概念分层和基于近邻的方法,称作间接关联。间接关联的一个解释如下图:其中Y称作中介集。如果一对项a,b是通过中介集Y间接关联的,下列条件成
间接关联可以用如下方法产生。首先,使用诸如Apriori和FP增长等标准算法产生频繁项集。然后,合并每对频繁k-项集得到候选间接关联(a,b,Y),其中a和b一对项,而Y是他们的公共中介。例如,若{p,q,r}和{p,q,s}是频繁3-项集,则通过合并这对频繁项集得到候选间接关联(r,s,{p,q})。一旦产生候选,就要验证它是否满足上面条件中的项对支持度和中介依赖条件。然而,中介支持度条件不必验证,因为候选间接关联是通过合并一对频繁项集得到的。