您的位置:首页 > 其它

数据挖掘读书笔记--第六章:频繁模式挖掘、关联及相关性

2018-04-03 21:53 627 查看

散记知识点

——“哪些商品组合频繁地被顾客同时购买?”

1. 基本概念

1.1 频繁项集、闭项集和关联规则

(1) 支持度和置信度

设L=I1,I2,...,I3L=I1,I2,...,I3是的集合DD是数据库事务的集合包含每个事务TT(TT是一个非空项集,T⊆LT⊆L),设项集AA有A→BA→B的关联规则在事务集DD中成立,该条规则具有支持度ss(表示DD中包含A⋃BA⋃B的概率),置信度cc(表示DD中包含AA的事务同时也包含BB的事务的概率)。

c=confident(A→B)=s=support(A→B)=P(A⋃B)P(B|A)=support(A⋃B)support(A)=count(A⋃B)count(A)s=support(A→B)=P(A⋃B)c=confident(A→B)=P(B|A)=support(A⋃B)support(A)=count(A⋃B)count(A)

规则的支持度置信度是规则兴趣度的两种度量,分别反映了所发现规则的有用性和确定性。

(2) 项集、频繁项集和闭频繁项集

项的集合称为项集。包含k个项的项集称为kk项集如{computer, cell phone}为一个2项集。项集出现的频度是包含项集的事务数,简称为项集的频度、(绝对)支持度(计数)。(1)中定义的是项集的相对支持度,如果一个项集的相对支持度满足于预定义的最小支持度阈值,则该项集是频繁项集

挖掘关联规则的问题可以归结为挖掘频繁项集

关联规则的挖掘过程一般有两步

找出所有的频繁项集:满足最小支持度的所有项集。

由频繁项集产生强关联规则:这些规则必须满足最小支持度和最小置信度。

如果项集XX在数据集DD中不存在真超项集YY(即X⊂YX⊂Y)使得YY与XX在DD中具有相同的支持度,则项集XX是闭的。如果XX在DD中是闭的和频繁的,则称XX是闭频繁项集。如果不存在超项集YY使得X⊂YX⊂Y并且YY在DD是频繁的,则称XX是极大频繁项集

2. 频繁项集挖掘方法

2.1 Apriori算法

(1) 两条经典的先验性质:

频繁项集的所有非空子集一定是频繁的。

非频繁项集的所有超集一定不是频繁的。

(2) 两个重要步骤

设Lk−1Lk−1为第k−1k−1步的频繁项集合,CkCk为下一步的候选项集合。为从Lk−1Lk−1找出LkLk,经历以下两个步骤:

连接步:为找出LkLk,通过将Lk−1Lk−1与自身连接产生候选kk项集合CkCk。设lili为Lk−1Lk−1的项集,记li[j]li[j]表示lili的第jj项(例如li[k−1]li[k−1]表示lili的倒数第2项)。对于(k−1)(k−1)项集lili,把项排序,使得li[1]<li[2]<...<li[k−1]li[1]<li[2]<...<li[k−1]。执行连接Lk−1⋈Lk−1Lk−1⋈Lk−1;如果l1l1和l2l2前(k−2)(k−2)项相同,并且满足:(l1[1]=l2[1])∧(l1[2]=l2[2])∧...∧(l1[k−2]=l2[k−2])∧(l1[k−1]<l2[k−1])(l1[1]=l2[1])∧(l1[2]=l2[2])∧...∧(l1[k−2]=l2[k−2])∧(l1[k−1]<l2[k−1]),则能连接l1l1和l2l2形成新的项集{l1[1],l1[2],...,l1[k−1],l2[k−1]}{l1[1],l1[2],...,l1[k−1],l2[k−1]}。

剪枝步:CkCk是候选kk项集合包含所有的频繁kk项集,同时也是LkLk的超集。扫描数据库,确定CkCk中每个候选的支持度。选择满足最小支持度阈值的项集,删除不满足的。此外利用第2条先验性质,如果一个候选kk项集的(k−1)(k−1)项子集不在Lk−1Lk−1中,则该候选也不可能是频繁的。以此来加快压缩CkCk,从而能迅速的得到LkLk。

(3) 举例说明Apriori算法的过程:

下面举一个例子来说明Apriori算法的过程:



主要过程:



step1step1: 算法第一次迭代,遍历事务集DD中的所有项对每个项计算其支持度,每个项都是候选1项集,共同构成候选集合C1C1。

step2step2: 假设最小支持度计数为2,则可以从C1C1中确定频繁1项集的集合L1L1。



step3step3: L1L1与自身连接(里面的项集相互取并集),得到候选2项集的集合C2C2。C2C2由(|L1|2)(|L1|2)个2项集组成。

step4step4: 再次扫描DD中的事务,计算C2C2中的每个候选项集的支持度。

step5step5: 选择满足最小支持度阈值的候选2项集,确定频繁2项集的集合L2L2。



step6step6: 由L2L2产生C3C3,首先在连接步,本来C3=L2⋈L2={{I1,I2,I3},{I1,I2,I5},{I1,I3,I5},{I2,I3,I4},C3=L2⋈L2={{I1,I2,I3},{I1,I2,I5},{I1,I3,I5},{I2,I3,I4}, {I2,I3,I5},{I2,I4,I5}}{I2,I3,I5},{I2,I4,I5}},然后根据先验性质,频繁项集的所有子集必频繁,可以确定后4个候选不可能是频繁的,将他们从C3C3中删除。注意:Apirori算法采用逐层搜索技术,给定一个候kk项集,只需检查它们的(k−1)(k−1)项子集是否频繁。

step7step7: 扫描DD中事务数,计算剩下项集的支持度,挑选满足最小支持度阈值的3项集来确定L3L3。

step8step8: 算法最后连接L2⋈L2L2⋈L2,此时只产生一个4项集{{I1,I2,I3,I5}}{{I1,I2,I3,I5}},但由于{I2,I3,I5}{I2,I3,I5}不是频繁项集,则此时不存在候选项集C4=∅C4=∅,算法终止。

下图表示使用先验性质,由L2L2连接自身和剪枝产生候选3项集合C3C3的过程:



(4) Apriori算法的伪代码



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

引入置信度,关联规则由以下两点产生:

对于每个频繁项集ll,产生ll的所有非空子集。

对于ll的每个非空子集ss,如果supportcount(l)supportcount(s)⩾minconfsupportcount(l)supportcount(s)⩾minconf,则输出规则”s→(l−s)s→(l−s)“,其中minconfminconf是最小置信度阈值。

例如,对于上述Apriori过程,最终产生的一个频繁项集有X={I1,I2,I5}X={I1,I2,I5},则XX的所有非空子集可以产生如下的关联规则:



如果最小置信度阈值为70%,则只有第2、3和5条规则可以输出。

2.3 提高Apriori算法的效率

基于散列的技术事务压缩划分抽样以及动态项集计数技术都能够作为Apriori算法的变形来提高原算法的效率。具体不再赘述。

2.4 挖掘频繁项集的模式增长方法

Apriori算法有两笔很大的开销:

需要产生大量的候选项集。假如有104104个频繁1项集,则Apriori算法能产生多达107107个候选2项集。

需要重复地扫描整个数据库,在剪枝过程中,Apriori重复检查数据库中的每个事务来确定候选项集的支持度开销很大。

频繁模式增长(Frequent-Pattern Growth)采取分治的策略可以有效地减少Apriori的开销。

(1) 频繁模式增长主要思路

首先,将频繁项集的数据库压缩到一颗频繁模式树(FP-Tree),该树保留项集的关联信息。

然后,将压缩后的数据库划分为一组条件数据库,每个数据库关联一个频繁项或“模式段”,并分别挖掘每个条件数据库。

对于每个“模式片段”,只需考察与它相关联数据集。因此,随着被考察的模式的“增长”,这种方法可以显著地压缩被搜索的数据集的大小。

(2) 举例说明频繁模式增长挖掘过程



step1step1: 扫描数据库DD,导出所有的频繁项(1项集)的集合,计算支持度取阈值以上,按照支持度递减的顺序排序。排序结果为L={{I2:7},{I1:6},{I3:6},{I4:2},{I5:2}}L={{I2:7},{I1:6},{I3:6},{I4:2},{I5:2}}。

step2step2: 构造FP树。首先,创建树的根节点,用”null”标记。再次扫描数据库DD,对每个事务TIDTID中的项按照LL中次序处理形成结点。事务”T100”可以构造树中的第一个分支包含三个结点:<I2:1>、<I1:1>、<I5:1><I2:1>、<I1:1>、<I5:1>,其中I2I2链接根结点,I1I1链接到I2I2,I5I5链接到I1I1。事务”T200”可以形成两个结点<I2:1>、<I4:1><I2:1>、<I4:1>,与”T100”共享结点<I2:1><I2:1>,故结点I2:1I2:1的计数加1变成<I2:2><I2:2>,然后创建一个新结点<I4:1><I4:1>链接到I2I2。以此类推,最终构成FP树。



step3step3: FP树挖掘,自底向上,由长度为1的频繁模式开始,构造它的条件模式基(一个子数据库,由改后缀模式与其前缀路径集组成)。然后构建它的(条件)FP树,依次递归在该树上进行挖掘。模式增长通过后缀模式与条件FP树产生的频繁模式连接实现。举例说明:首先考虑I5I5为后缀,对应的前缀路径是<I2,I1:1><I2,I1:1> 和<I2,I1,I3:1><I2,I1,I3:1>形成I5I5的条件模式基。使用这些条件模式基作为新的事务数据库,构造I5I5的条件FP树,由于最小支持度为2,I3I3的支持度计数为1,则该树只包含单个路径<I2:2,I1:2><I2:2,I1:2>。最后该单个路径产生频繁模式的所有组合:I2,I5:2、I1,I5:2、I2,I1,I5:2I2,I5:2、I1,I5:2、I2,I1,I5:2。考虑所有的频繁1项集,则挖掘FP形成下表的结果:



(3) FP-growth方法算法总结



FP-growth方法将发现长频繁模式的问题转换成在较小的条件数据库中递归地搜索一些较短模式,然后连接后缀。它使用最不频繁的项做后缀,提供了较好的选择性。该方法显著地降低了开销。对于挖掘长的频繁模式和短的频繁模式,它都是有效的和可伸缩的,且比Apriori大约快一个数量级。

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

Apriori算法和FP-growth算法都从TID(事务标识符 )项集格式的事务集中挖掘频繁模式,项集itemset为事务TID中购买的商品,这种数据格式称为水平数据格式。可以将数据格式转换为垂直数据格式的项-TID集格式({item: TID_set}),转换结果如下:



通过取每对频繁项的TID交集,实现在数据集上的挖掘。上表总共能进行10次交集运算,导致8个非空2项集如下表所示:



设最小支持度计数为2,项集{I1,I4}{I1,I4}和{I3,I5}{I3,I5}都只包含一个事务,则它们都不属于频繁2项集的集合。重复执行上述步骤,最后产生了两个频繁3项集:{I1,I2,I3:2}{I1,I2,I3:2}和{I1,I2,I5:2}{I1,I2,I5:2}

评价:这种垂直数据格式挖掘,除了在产生候选(k+1)(k+1)项集时利用先验性质外,这种方法的另一个优点是不需要扫描数据库来确定(k+1)(k+1)项集的支持度。这是因为每个kk项集的TID集都携带了计算支持度的完整信息。然而,TID可能很长,需要大量的内存空间,长集合的交运算还需要大量的计算时间,可以使用差集技术解决。

3. 模式评估方法

——”大部分关联规则挖掘算法都使用支持度-置信度框架。尽管最小支持度和置信度阈值有助于排除大量无趣规则的探查,但仍然会产生一些用户不感兴趣的规则。”



3.1 从关联分析到相关分析

支持度和置信度不足以过滤掉无趣的关联规则,为解决这个问题,可以使用相关性度量扩充的支持度-置信度关联规则框架,即相关规则:

A→B[support,confidence,correlation]A→B[support,confidence,correlation]

提升度是一种简单的相关行度量,定义如下:

lift(A,B)=P(A⋃B)P(A)P(B)=P(B/A)P(B)lift(A,B)=P(A⋃B)P(A)P(B)=P(B/A)P(B)

如果lift<1lift<1,则AA的出现与BB的出现呈负相关,意味着一个出现可能导致另一个的不出现。等于1表示二者相互独立。大于1表示二者正相关,意味着一个的出现蕴涵另一个的出现。

3.2 模式评估度量比较

给定两个项集AA和BB,下面考虑几个相关性度量:

(1) 全置信度

all_conf(A,B)=sup(AUB)max{sup(A),sup(B)}=min{P(A|B),P(B|A)}all_conf(A,B)=sup(AUB)max{sup(A),sup(B)}=min{P(A|B),P(B|A)}

all_conf(A,B)all_conf(A,B)又称两个与AA和BB相关的关联规则”A→BA→B”和”B→AB→A”的最小置信度。与之相对应的*最大置信度*定义为:

(2) 最大置信度

max_conf(A,B)=max{P(A|B),P(B|A)}max_conf(A,B)=max{P(A|B),P(B|A)}

(3) Kulczynski(Kulc)度量

Kulc(A,B)=12(P(A|B)+P(B|A))Kulc(A,B)=12(P(A|B)+P(B|A))

(4) 余弦度量

cosine(A,B)=P(A⋃B)P(A)×P(B)−−−−−−−−−−−√=sup(AUB)sup(A)×sup(B)−−−−−−−−−−−−−−√=P(A|B)×P(B|A)−−−−−−−−−−−−−−√cosine(A,B)=P(A⋃B)P(A)×P(B)=sup(AUB)sup(A)×sup(B)=P(A|B)×P(B|A)

以上4个度量仅受AA、BB和A⋃BA⋃B的支持度的影响,或者说仅受条件概率P(A|B)、P(B|A)P(A|B)、P(B|A)的影响,而不受事务总个数的影响,而且取值都介于0~1之间,值越大二者联系越紧密。

举例比较6种模式评估度量

考察牛奶和咖啡两种商品购买之间关系,历史记录汇总在如下的相依表中:



下表包含了一组事务数据集、它们对应的相依表和6个评估度量的值:



仅从上表数据集(牛奶和咖啡销量)中可以看出,对于D1−D4D1−D4,D1D1和D2D2是正关联的,D3D3负关联,D4D4中性。

考虑6种度量

对于D1D1和D2D2,后4种相关度量的度量值均为0.91表示m和c是强正关联的。而χ2χ2度量却在D1D1、D2D2上产生两种相差甚远的值,这是由于卡方度量对mc¯¯¯¯¯¯¯mc¯也就是除我们感兴趣以外的事务比较敏感。好的度量不应该受不包含感兴趣项的事务影响,这一轮,卡方完败。

对于D3D3, 后4种度量都正确地表明了m和c是强负相关的。然而,提升度和卡方都错误地表明m和c是正相关的且对于D2D2这两个度量的值本应该在D1D1和D3D3之间的,这一轮,提升度和卡方都输了。

对于D4D4, 后4种度量普遍表明m和c关系呈中性,而提升度和卡方都显示m和c强正关联。这一轮,又败了。

针对提升度和卡方的在上述三轮性能不如后4种度量的问题,引入零事务。零事务是不包含任何考察项集的事务。上述例子中,mc¯¯¯¯¯¯¯mc¯表示零事务的个数。而提升度和卡方由于受mc¯¯¯¯¯¯¯mc¯影响很大,很难识别有趣的模式关联关系。因此,度量值的计算有必要独立于零事务。引入零不变性的概念。

零不变性:如果度量的值不受零事务的影响,则称该度量具有零不变性。零不变性是一种度量大型事务数据库中的关联模式的重要性质。

下面比较后4种度量的性能

首先引进不平衡比(Imbalance Ratio)评估两个项集AA和BB的不平衡程度,定义为:

IR(A,B)=|sup(A)−sup(B)|sup(A)+sup(B)−sup(A⋃B)IR(A,B)=|sup(A)−sup(B)|sup(A)+sup(B)−sup(A⋃B)

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

对于D5D5和D6D6,m和c具有不平衡的条件概率,即mc与c的比值大于0.9,表明c出现强烈暗示m也出现。mc与m比值小于0.1,表明m蕴涵c很可能不出现。全置信度和余弦度量都把两种情况看作是负关联的,而Kulc度量把二者都视为中性,最大置信度表明两种情况强正关联。

由于数据“平衡地”倾斜,很难说两个数据集的关联性是正的还是负的。比如在D5D5中,只有mc/m=mc/(mc+mc¯)=9.09%mc/m=mc/(mc+mc¯)=9.09%的概率说明与牛奶有关是事务包含咖啡,表明牛奶与咖啡负关联。而另一方面,D5D5有mc/(m¯c+mc)=%99.9mc/(m¯c+mc)=%99.9的概率说明与咖啡有关的事务包含牛奶,表明牛奶与咖啡正关联。结论出现分歧。

对于这种“平衡的”倾斜,把它看作中性是合理的。用Kluc与IR可以很好地描述这种情况,对于D4D4,IR(m,c)=0IR(m,c)=0,是一种很好的平衡情况;对于D5D5,IR(m,c)=0.89IR(m,c)=0.89,是一种很不平衡的情况;D6D6亦是。因此两个度量Kluc和IR一起,为3个数据集D4D4~D6D6提供了很清晰的描绘。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐