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

散记知识点

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


1. 基本概念

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

(1) 支持度和置信度
L = I 1 , I 2 , . . . , I 3 的集合 D 是数据库事务的集合包含每个事务 T ( T 是一个非空项集, T L ),设项集 A A B 的关联规则在事务集 D 中成立,该条规则具有支持度 s (表示 D 中包含 A B 的概率),置信度 c (表示 D 中包含 A 的事务同时也包含 B 的事务的概率)。

s = s u p p o r t ( A B ) = P ( A B ) c = c o n f i d e n t ( A B ) = P ( B | A ) = s u p p o r t ( A B ) s u p p o r t ( A ) = c o u n t ( A B ) c o u n t ( A )

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

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

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

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

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

  1. 找出所有的频繁项集:满足最小支持度的所有项集。
  2. 由频繁项集产生强关联规则:这些规则必须满足最小支持度和最小置信度。

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


2. 频繁项集挖掘方法

2.1 Apriori算法

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

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

(2) 两个重要步骤

L k 1 为第 k 1 步的频繁项集合, C k 为下一步的候选项集合。为从 L k 1 找出 L k ,经历以下两个步骤:

  1. 连接步:为找出 L k ,通过将 L k 1 与自身连接产生候选 k 项集合 C k 。设 l i L k 1 的项集,记 l i [ j ] 表示 l i 的第 j 项(例如 l i [ k 1 ] 表示 l i 的倒数第2项)。对于 ( k 1 ) 项集 l i ,把项排序,使得 l i [ 1 ] < l i [ 2 ] < . . . < l i [ k 1 ] 。执行连接 L k 1 L k 1 ;如果 l 1 l 2 ( k 2 ) 项相同,并且满足: ( l 1 [ 1 ] = l 2 [ 1 ] ) ( l 1 [ 2 ] = l 2 [ 2 ] ) . . . ( l 1 [ k 2 ] = l 2 [ k 2 ] ) ( l 1 [ k 1 ] < l 2 [ k 1 ] ) ,则能连接 l 1 l 2 形成新的项集 { l 1 [ 1 ] , l 1 [ 2 ] , . . . , l 1 [ k 1 ] , l 2 [ k 1 ] }
  2. 剪枝步 C k 是候选 k 项集合包含所有的频繁 k 项集,同时也是 L k 的超集。扫描数据库,确定 C k 中每个候选的支持度。选择满足最小支持度阈值的项集,删除不满足的。此外利用第2条先验性质,如果一个候选 k 项集的 ( k 1 ) 项子集不在 L k 1 中,则该候选也不可能是频繁的。以此来加快压缩 C k ,从而能迅速的得到 L k

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

这里写图片描述

主要过程:
这里写图片描述

  • s t e p 1 : 算法第一次迭代,遍历事务集 D 中的所有项对每个项计算其支持度,每个项都是候选1项集,共同构成候选集合 C 1
  • s t e p 2 : 假设最小支持度计数为2,则可以从 C 1 中确定频繁1项集的集合 L 1
    这里写图片描述
  • s t e p 3 : L 1 与自身连接(里面的项集相互取并集),得到候选2项集的集合 C 2 C 2 ( | L 1 | 2 ) 个2项集组成。
  • s t e p 4 : 再次扫描 D 中的事务,计算 C 2 中的每个候选项集的支持度。
  • s t e p 5 : 选择满足最小支持度阈值的候选2项集,确定频繁2项集的集合 L 2
    这里写图片描述
  • s t e p 6 : 由 L 2 产生 C 3 ,首先在连接步,本来 C 3 = L 2 L 2 = { { I 1 , I 2 , I 3 } , { I 1 , I 2 , I 5 } , { I 1 , I 3 , I 5 } , { I 2 , I 3 , I 4 } , { I 2 , I 3 , I 5 } , { I 2 , I 4 , I 5 } } ,然后根据先验性质,频繁项集的所有子集必频繁,可以确定后4个候选不可能是频繁的,将他们从 C 3 中删除。注意:Apirori算法采用逐层搜索技术,给定一个候 k 项集,只需检查它们的 ( k 1 ) 项子集是否频繁。
  • s t e p 7 : 扫描 D 中事务数,计算剩下项集的支持度,挑选满足最小支持度阈值的3项集来确定 L 3
  • s t e p 8 : 算法最后连接 L 2 L 2 ,此时只产生一个4项集 { { I 1 , I 2 , I 3 , I 5 } } ,但由于 { I 2 , I 3 , I 5 } 不是频繁项集,则此时不存在候选项集 C 4 = ,算法终止。

下图表示使用先验性质,由 L 2 连接自身和剪枝产生候选3项集合 C 3 的过程:
这里写图片描述

(4) Apriori算法的伪代码

这里写图片描述

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

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

  • 对于每个频繁项集 l ,产生 l 的所有非空子集。
  • 对于 l 的每个非空子集 s ,如果 s u p p o r t c o u n t ( l ) s u p p o r t c o u n t ( s ) m i n c o n f ,则输出规则” s ( l s ) “,其中 m i n c o n f 是最小置信度阈值。

例如,对于上述Apriori过程,最终产生的一个频繁项集有 X = { I 1 , I 2 , I 5 } ,则 X 的所有非空子集可以产生如下的关联规则:
这里写图片描述
如果最小置信度阈值为70%,则只有第2、3和5条规则可以输出。

2.3 提高Apriori算法的效率

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

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

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

  • 需要产生大量的候选项集。假如有 10 4 个频繁1项集,则Apriori算法能产生多达 10 7 个候选2项集。
  • 需要重复地扫描整个数据库,在剪枝过程中,Apriori重复检查数据库中的每个事务来确定候选项集的支持度开销很大。

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

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

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

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

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

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

这里写图片描述

  • s t e p 1 : 扫描数据库 D ,导出所有的频繁项(1项集)的集合,计算支持度取阈值以上,按照支持度递减的顺序排序。排序结果为 L = { { I 2 : 7 } , { I 1 : 6 } , { I 3 : 6 } , { I 4 : 2 } , { I 5 : 2 } }
  • s t e p 2 : 构造FP树。首先,创建树的根节点,用”null”标记。再次扫描数据库 D ,对每个事务 T I D 中的项按照 L 中次序处理形成结点。事务”T100”可以构造树中的第一个分支包含三个结点: < I 2 : 1 > < I 1 : 1 > < I 5 : 1 > ,其中 I 2 链接根结点, I 1 链接到 I 2 I 5 链接到 I 1 。事务”T200”可以形成两个结点 < I 2 : 1 > < I 4 : 1 > ,与”T100”共享结点 < I 2 : 1 > ,故结点 I 2 : 1 的计数加1变成 < I 2 : 2 > ,然后创建一个新结点 < I 4 : 1 > 链接到 I 2 。以此类推,最终构成FP树。
    这里写图片描述
  • s t e p 3 : FP树挖掘,自底向上,由长度为1的频繁模式开始,构造它的条件模式基(一个子数据库,由改后缀模式与其前缀路径集组成)。然后构建它的(条件)FP树,依次递归在该树上进行挖掘。模式增长通过后缀模式与条件FP树产生的频繁模式连接实现。举例说明:首先考虑 I 5 为后缀,对应的前缀路径是 < I 2 , I 1 : 1 > < I 2 , I 1 , I 3 : 1 > 形成 I 5 条件模式基。使用这些条件模式基作为新的事务数据库,构造 I 5 的条件FP树,由于最小支持度为2, I 3 的支持度计数为1,则该树只包含单个路径 < I 2 : 2 , I 1 : 2 > 。最后该单个路径产生频繁模式的所有组合: I 2 , I 5 : 2 I 1 , I 5 : 2 I 2 , I 1 , I 5 : 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,项集 { I 1 , I 4 } { I 3 , I 5 } 都只包含一个事务,则它们都不属于频繁2项集的集合。重复执行上述步骤,最后产生了两个频繁3项集: { I 1 , I 2 , I 3 : 2 } { I 1 , I 2 , I 5 : 2 }

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


3. 模式评估方法

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

这里写图片描述

3.1 从关联分析到相关分析

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

A B [ s u p p o r t , c o n f i d e n c e , c o r r e l a t i o n ]

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

l i f t ( A , B ) = P ( A B ) P ( A ) P ( B ) = P ( B / A ) P ( B )

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

3.2 模式评估度量比较

给定两个项集 A B ,下面考虑几个相关性度量:

  • (1) 全置信度
    a l l _ c o n f ( A , B ) = s u p ( A U B ) m a x { s u p ( A ) , s u p ( B ) } = m i n { P ( A | B ) , P ( B | A ) }

    a l l _ c o n f ( A , B ) 又称两个与 A B 相关的关联规则” A B ”和” B A ”的最小置信度。与之相对应的*最大置信度*定义为:
  • (2) 最大置信度

m a x _ c o n f ( A , B ) = m a x { P ( A | B ) , P ( B | A ) }

  • (3) Kulczynski(Kulc)度量
    K u l c ( A , B ) = 1 2 ( P ( A | B ) + P ( B | A ) )
  • (4) 余弦度量
    c o s i n e ( A , B ) = P ( A B ) P ( A ) × P ( B ) = s u p ( A U B ) s u p ( A ) × s u p ( B ) = P ( A | B ) × P ( B | A )

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

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

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

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

仅从上表数据集(牛奶和咖啡销量)中可以看出,对于 D 1 D 4 D 1 D 2 是正关联的, D 3 负关联, D 4 中性。

考虑6种度量

  • 对于 D 1 D 2 ,后4种相关度量的度量值均为0.91表示m和c是强正关联的。而 χ 2 度量却在 D 1 D 2 上产生两种相差甚远的值,这是由于卡方度量对 m c ¯ 也就是除我们感兴趣以外的事务比较敏感。好的度量不应该受不包含感兴趣项的事务影响,这一轮,卡方完败。
  • 对于 D 3 , 后4种度量都正确地表明了m和c是强负相关的。然而,提升度和卡方都错误地表明m和c是正相关的且对于 D 2 这两个度量的值本应该在 D 1 D 3 之间的,这一轮,提升度和卡方都输了。
  • 对于 D 4 , 后4种度量普遍表明m和c关系呈中性,而提升度和卡方都显示m和c强正关联。这一轮,又败了。

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

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

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

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

I R ( A , B ) = | s u p ( A ) s u p ( B ) | s u p ( A ) + s u p ( B ) s u p ( A B )

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

  • 对于 D 5 D 6 ,m和c具有不平衡的条件概率,即mc与c的比值大于0.9,表明c出现强烈暗示m也出现。mc与m比值小于0.1,表明m蕴涵c很可能不出现。全置信度和余弦度量都把两种情况看作是负关联的,而Kulc度量把二者都视为中性,最大置信度表明两种情况强正关联。
  • 由于数据“平衡地”倾斜,很难说两个数据集的关联性是正的还是负的。比如在 D 5 中,只有 m c / m = m c / ( m c + m c ¯ ) = 9.09 % 的概率说明与牛奶有关是事务包含咖啡,表明牛奶与咖啡负关联。而另一方面, D 5 m c / ( m ¯ c + m c ) = % 99.9 的概率说明与咖啡有关的事务包含牛奶,表明牛奶与咖啡正关联。结论出现分歧。
  • 对于这种“平衡的”倾斜,把它看作中性是合理的。用Kluc与IR可以很好地描述这种情况,对于 D 4 I R ( m , c ) = 0 ,是一种很好的平衡情况;对于 D 5 I R ( m , c ) = 0.89 ,是一种很不平衡的情况; D 6 亦是。因此两个度量Kluc和IR一起,为3个数据集 D 4 ~ D 6 提供了很清晰的描绘。

猜你喜欢

转载自blog.csdn.net/weixin_40170902/article/details/79806715