您的位置:首页 > 其它

第六章 挖掘频繁模式、关联和相关性:基本概念和方法

2015-05-25 21:49 477 查看
6.1 基本概念

6.1.1 频繁模式

频繁模式是频繁地出现在数据集中的模式(如项集、子序列或子结构)。

频繁项集:频繁地同时出现在交易数据集中的商品(如牛奶和面包)的集合。

频繁子序列:一个子序列,如首先购买PC,然后是数码相机,再后是内存卡,如果它频繁地出现在购物历史数据库中,则称它为一个(频繁的)序列模式。

频繁子结构:一个子结构可能涉及不同的结构形式,如子图、子树或子格,它可能与项集或子序列结合在一起。如果一个子结构频繁地出现,则称它为(频繁的)结构模式。

6.1.2 购物篮分析

频繁项集挖掘的一个典型例子是购物篮分析。该过程通过发现顾客放入他们“购物篮”中的商品之间的关联,分析顾客的购物习惯。



图6.1 购物篮分析

这种关联的发现可以帮助零售商了解哪些商品频繁地被顾客同时购买,从而帮助他们制定更好的营销策略。例如,购物篮分析可以帮助你涉及不同的商店布局。一种策略是:经常同时购买的商品可以摆放近一些,以便进一步刺激这些商品同时销售。另一种策略是:把同时购买的商品摆放在商店的两端,可能诱发这些商品的顾客一路挑选其他商品。购物篮分析也可以帮助零售商规划什么商品降价出售(如果顾客趋向于购买计算机和打印机,则打印机的降价出售可能既促使购买打印机,又促使购买计算机)。

如果我们想象全域是商店中的商品的集合,则每种商品有一个布尔变量,表示该商品是否被顾客购买,则每个购物篮都可以用一个布尔向量表示;可以通过分析布尔向量,得到反映商品频繁关联或同时购买的模式,这些模式就可以用关联规则的形式表示。例如,购买计算机也趋向于同时购买杀毒软件的顾客信息可以用以下的关联规则表示:

computer=>antivirus_software [support=2%,confidence=60%]

规则的支持度和置信度是规则兴趣度的两种度量。它们分别反映所发现规则的有用性和确定性。在典型情况下,关联规则被认为是有趣的,如果它满足最小支持度阈值和最小置信度阈值。

6.1.3 频繁项集

设I={i1, i2,…,im}是项的集合,D是数据库事务的集合,其中每个事务T是一个非空项集,使得T包含于I。每一个事务具有唯一的事务标识符TID。设A是一个项集,事务T包含A,当且仅当A包含于T。如果项集A中包含k个项,则称其为k项集。项集的出现频度是包含项集的事务数,简称为项集的频度、支持度计数或计数。如果项集I的相对支持度满足预定义的最小支持度阈值,则I是频繁项集。

6.1.4 关联规则、关联规则的挖掘

关联规则是形如A=>B的逻辑蕴含式,其中A包含于I,B包含于I,A不等于空集,B不等于空集,并且A交B等于空集。如果事务数据库D中有s%的事务包含A并B,则称关联规则X=>Y的支持度为s%,实际上,支持度是一个概率值。若项集A的支持度记为support(A),规则的置信度为support(A并B)/support (A)。这是一个条件概率P(B|A)。也就是:

support(A=>B)=P(A并B)

confidence(A=>B)=P(B|A)=support(A并B)/support(A)

同时满足最小支持度阈值(min_sup)和最小置信度阈值(min_conf)的规则称为强规则。

为方便计算,用0%~100%之间的值,而不是0.0~1.0之间的值来表示支持度和置信度。



该式表明,规则A=>B的置信度容易从A并B的支持度计数推出。也就是说,一旦得到A、B和A并B的支持度计数,则导出对应的关联规则A=>B和B=>A,并检查它们是否是强规则是直截了当的。因此,挖掘关联规则的问题可以归结为挖掘频繁项集。

一般而言,关联规则的挖掘是一个两步的过程:

(1)找出所有的频繁项集:根据定义,这些项集的每一个频繁出现的次数至少与预定义的最小支持度计数min_sup一样。

(2)有频繁项集产生强关联规则:根据定义,这些规则必须满足最小支持度和最小置信度。

由于第二步的开销远低于第一步,因此挖掘关联规则的总体性能由第一步决定。

从大型数据集中挖掘频繁项集的主要挑战是,这种挖掘常常产生大量满足最小支持度阈值的项集,当min_sup设置得很低时尤其如此。这是因为如果一个项集是频繁的,则它的每个子集也是频繁的。

6.2 频繁项集挖掘方法

6.2.1 Apriori算法:通过限制候选产生发现频繁项集

6.2.2 由频繁项集产生关联规则

上述两节内容请链接

6.2.3 提高Apriori算法的效率

尽管Apriori算法直观,但实现起来需要进行大量计算,包括产生大量候选项集和支持度计算,需要频繁扫描数据库,这些增大了I/O负载和时间开销。

“怎样才能进一步提高基于Apriori挖掘的效率?”已经提出了许多Apriori算法的变形,旨在提高原算法的效率。其中一些变形概述如下:

基于散列的技术(散列项集到对应的桶中):一种基于散列的技术可以用于压缩候选k项集的集合Ck(k>1)。这种基于散列的技术可以显著地压缩需要考察的k项集(特别是,当k=2时)。



事务压缩(压缩进一步迭代扫描的事务数):不包含任何频繁k项集的事务不可能包含任何频繁(k+1)项集。因此,这种事务在其后的考虑时,可以加上标记或删除,因为产生j项集(j>k)的数据库扫描不需要它们

划分(为找候选项集划分数据):只需要两次数据库扫描,就能挖掘频繁项集。它包含两个阶段:在阶段一,算法把D中的事务划分成n个非重叠的分区。对每个分区,找出所有的局部频繁项集;在阶段二,第二次扫描D,评估每个候选的实际支持度,以确定全局频繁项集。



抽样(对给定数据的一个子集上挖掘):选取给定数据库D的随机样本S,然后在S而不是在D中搜索频繁项集。这种方法牺牲了一些精度换取了有效性。也可以进行第二次扫描,找出在第一次扫描时遗漏的频繁项集。当效率最为重要时,如计算密集的应用必须频繁进行时,抽样方法特别合适。

动态项集计数(在扫描的不同点添加候选项集):将数据库划分为用开始点标记的块,可以在任何开始点添加新的侯选项集。

6.2.4 挖掘频繁项集的模式增长方法(FP—Growth算法)

详细内容:请链接

6.2.5 使用垂直数据格式挖掘频繁项集

Apriori算法和FP-Growth算法都从TID-项 集格式的事务集中挖掘频繁模式(TID是事务标识符,项是事务TID中购买的商品)。这种数据格式称为水平数据格式。反过来,数据也可以用项—TID 集格式表示。这种格式称为垂直数据格式。

例子:

事务数据库D的水平数据格式:



垂直数据格式是:



通过对每对频繁项的TID集的交,可以在该数据集上进行挖掘。设最小支持度计数为2,上表中的每个项都是频繁项,总共进行10次交运算。产生的垂直数据格式的2项集是:



其中,{I1,I4},{I3,I5}不是频繁项。

根据先验性质,一个给定的3项集是候选3项集,仅当它的每一个2项集子集都是频繁的。产生的垂直数据格式的频繁3项集是:



垂直数据格式挖掘频繁项集的过程:首先,通过扫描一次数据库,把水平格式的数据转换成垂直格式。项集的支持度计数简单地等于项集的TID集的长度。从k=1开始,可以根据先验性质,使用频繁k项集来构造候选(k+1)项集。通过取频繁k项集的TID集的交,计算对应的(k+1)项集的TID集。重复该过程,每次k增加1,直到不能再找到频繁项集或候选项集。

这种方法的优点是:不需要扫描数据库来确定(k+1)项集的支持度(k>=1)。然而,TID集可能很长,需要大量内存空间,长集合的交运算还需要大量的计算时间。

6.2.6 挖掘闭模式和极大模式

频繁模式挖掘可能产生大量频繁项集,特别是,当最小支持度阈值设置较低或数据集中存在模式时尤其如此。闭频繁项集可以显著地减少频繁模式挖掘所产生的模式数量,而且保持关于频繁项集的集合的完整信息。也就是说,从闭频繁项集的集合,可以很容易地推出频繁项集的集合和它们的支持度。因此,在许多实践中,更希望挖掘闭频繁项集的集合。

闭频繁项集:项集X在数据集D中是闭的,如果不存在真超集Y使得Y与X在D中具有相同的支持度计数。项集X是数据集D中的闭频繁项集,如果X在D中是闭的和频繁的。

极大频繁项集:项集X是D中的极大频繁项集,如果X是频繁的,并且不存在超项集Y使得X包含于Y并且Y在D中是频繁的。

“如何挖掘闭频繁项集?”

一种推荐的方法是在挖掘过程中直接搜索闭频繁项集。这要求在挖掘过程中,一旦识别闭项集就尽快对搜索空间进行剪枝,剪枝包括如下策略。

项合并:如果包含频繁项集X的每个事务都包含项集Y,但不包含Y的任何真超集,则XUY形成一个闭频繁项集,并且不必再搜索包含X但不包含Y的任何项集。

子项集剪枝:如果频繁项集X是一个已经发现的闭频繁项集Y的真子集,并且support_count(X)=support_count(Y),则X和X在集合枚举树中的所有后代都不可能是闭频繁项集,因此可以剪枝。

项跳过:在深度优先挖掘闭项集时,每一层都有一个与头表和投影数据库相关联的前缀项集X。如果一个局部频繁项集p在不同层的多个头表中都具有相同的支持度,则可以将p从较高层头表中剪裁掉。

6.3 哪些模式是有趣的:模式评估方法

6.3.1 强规则不一定是有趣的

规则是否有趣可以主观或客观地评估。最终,只有用户能够评判一个给定的规则是否是有趣的,并且这种判断是主观的,可能因用户而异。然而,根据数据“背后”的统计量,客观兴趣度度量可以用来清除无趣的规则,而不向用户提供。

例子:一个误导的“强关联规则”

假设我们对分析涉及购买计算机游戏和录像的事务感兴趣。在所分析的10000个事务中,半酣计算机游戏:6000个 包含录像:7500个 同时包含:4000个,最小支持度30%、最小置信度60%。



该规则的支持度和置信度都满足最小,是强关联规则。然而,该规则是误导的,因为购买录像的概率是75%,比66%还高。事实上,计算机游戏和录像是负相关的,因为买一种实际上降低了买另一种的可能性。

因此,寻求支持度—置信度框架的替代,对挖掘有趣的数据联系可能是有用的。

6.3.2 从关联分析到相关分析

使用相关性度量来扩充关联规则的支持度-置信度框架。这导致如下的相关规则:



也就是说,相关规则不仅用支持度和置信度度量,而且还用项集A和B之间的相关性度量。

提升度是一种简单的相关性度量。项集A和B之间的提升度可以通过下式计算:



上式中的值<1,负相关 ; >1,正相关; =1,不相关。

它评估一个的出现“提升”另一个的程度,比如:如果A对应于计算机游戏的销售,B对应于录像的销售,则给定当前行情,游戏的销售将增加或者提升上式的返回值因子。

例子:计算机游戏和录像

提升度为P({game,video})/(P({game})×P({video}))=0.4/(0.75×0.6)=0.89 <1负相关,这种负相关不能被支持度-置信度框架识别。

使用卡方进行相关分析:需要表中每个位置上的观测值和期望值(显示在括号内),





由于卡方值大于1,并且位置(game,video )上的观测值等于4000,小于期望值4500,因而购买游戏与购买录像是负相关的。

6.3.3 模式评估度量比较

下面介绍4种这样的度量:全置信度、最大置信度、Kulczynski和余弦。

给定两个项集A和B,A和B的全置信度定义为:



A和B的最大置信度定义为:



A和B的KulczynskiKluc)的度量定义为:



该度量是波兰数学家S.Kulczynski于1972年提出的。

A和B的余弦度量定义为:



余弦度量可以看作调和提升度度量:两个公式类似,不同之处在于余弦对A和B的概率乘积取平方根。然而,这是一个重要区别,因为通过取平方根,余弦值仅受A、B和

A∪B的支持度的影响,而不受事务总个数的影响。

上面介绍的4种度量都具有如下共同性质:度量值仅受A、B和A∪B的支持度的影响,更准确地说,仅受条件概率P(A|B)和P(B|A)的影响,而不受事务总个数的影响;每个度量值都遍取0-1,并且值越大,A和B的联系越紧密。

现在,加上提升度卡方,我们已经介绍了6种模式评估度量。你可能会问“对于评估所发现的模式联系,哪个度量最好?”为了回答该问题,我们在一些典型的数据集上考察它们的性能。

牛奶和咖啡两种商品购买之间的关系把购买历史记录汇总在下表:



下表显示一组事务数据集、它们对应的6个评估度量的值:



先考察D1—D4:m和c在数据集D1和D2中是正关联的,在D3中是负关联的,而在D4中是中性的。新介绍的4种度量在这两个数据集上都产生了度量值0.91,显示m和c是正关联的。然而,对于mc的敏感,提升度和卡方对这两个数据集产生了显著不同的度量值。

类似地,在D3中,4个新度量都正确地表示m和c是强负相关的。然而,提升度和卡方都错误地与此相悖。

对于数据集D4,提升度和卡方都显示了m和c之间强正关联,而其他度量都表示“中性关联”。

“为什么提升度和卡方识别上述事务数据集中的模式关联关系的能力这么差?”为了回答这个问题,我们必须考虑零事务(不包含任何考察项集的事务)。上述的例子中。mc表示零事务的个数。提升度和卡方很难识别有趣的模式关联关系,因为它们受mc的影响很大。另一方面,其他4个度量的定义都消除了mc的影响(即它们不受零事务个数的影响)。

度量值独立于零事务的个数是非常可取的。一种度量是零不变的,如果它的值不受零事务的影响。上面的6种,只有提升度和卡方不是零不变度量。

“对于指示有趣的模式联系,全置信度、最大置信度、Kulczynski和余弦哪个最好?”

为了回答该问题,引进不平衡比,评估规则蕴含式中两个项集A和B的不平衡程度。定义为:



如果A和B的两个方向的蕴含相同,则IR(A,B)为0;否则,两者之差越大,不平衡比就越大。这个比率独立于零事务的个数,也独立于零事务的总数。

考察表中的数据集D5和D6,全置信度和余弦度把两种情况看作负关联的,而Kluc度量把两者都视为中性的。最大置信度度量声称这些情况都是强正关联的。它们给出了不同的结果。

“哪个度量直观地反映了牛奶和咖啡购买之间的真实联系?”

对于这种“平衡的”倾斜,正如Kluc那样,把它看作是中性的可能更公平,同时用不平衡比(IR)指出它的倾斜性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: