事务数据库(Transaction Database)
,也称为交易数据库中的关联规则挖掘问题可描述如下:
设
为一个项目集合 (Set of Items, 项集),其中
称为项目 (item, 项)。在超市的交易数据仓库中,每个项
代表一种商品的编号或名称,为计算方便假设
中的项已按字典序排序。
中的每个事务
都是I的一个子集,即
。 在超市等交易数据仓库中,
就代表某个顾客一次购买的所有商品编号或商品名称。
例 8-1 对表8-1所示的交易数据库记录,请给出项集和其中的事务。

解:交易数据库涉及
等4个项,即项集
且其中的项已经按字典序排序。每一个项就代表一种商品,比如
可表示面包,
表示牛奶等。交易数据库可表示为
,其中
,
,
,且它们都是项集
的子集,且按照字典序排序。
定义 8-1 若
且
,则称
为 k-项集,将包含
的事务数
称为
在事务数据库
上的支持数,并将
与
的比值称为
在
上的支持度 (Support),记作
显然,一个 k-项集
的支持度
。
对于例8-1所示的交易数据库
,设有项集
,则
,
。
定义 8-2 若指定
作为刻画支持度是否符合用户期望的阈值,则
称为最小支持度,并将
称为最小支持数,即
是最小支持度
与事务数据库记录数的乘积。
定义 8-3 设
,
且
,称形如
的蕴涵式为关联规则 (Association Rule),其中
和
分别称为关联规则的先导 (Antecedent) 和后继 (Consequent)。
定义 8-4 设
,
且
,令
,则称
为关联规则
的支持度,记作
。
从定义8-1和8-4可知,关联规则
在事务数据库
上的支持度,就是
中同时包含
和
的事务在
中所占的百分比,即:
对于例8-1的交易数据库
,若令
,则
由此可知,在购物篮分析中,
的支持度也可以表示为
定义 8-5 设
和给定的最小支持度
,若
,则称
为频繁项集 (Frequent Item Sets)。若
,则称
为频繁 k-项集。
对例8-1交易数据库
,若最小支持度
,对项集
,因为
, 即
是个频繁项集,且是频繁2-项集。
定义 8-6 设
是
上关于最小支持度
的所有频繁项集,称
为一个最大频繁项目集,若对任意
都有
。
因此,
为最大频繁项集的充分必要条件是,
不是其它任何频繁项集的子集。显然,
上的最大频繁项集通常不唯一。
定义 8-7 关联规则
在
上的置信度 (Confidence),定义为
例 8-2 对例8-1的交易数据库
,令
,试求其置信度。
解:由于
,而
,所以
定义 8-8 若
且指定为刻画置信度的阈值,则称
为最小置信度。
定义 8-9 对于给定的最小支持度
和最小置信度
,如果有
则称
为强关联规则 (Strong Association Rule)。
关联规则挖掘就是按用户指定最小支持度
和最小置信度
,从给定的事务数据库
中寻找出所有强关联规则的过程。
Agrawal 等人在研究事务数据库关联规则挖掘的过程中,发现了关于项集的两个基本性质,并在关联规则挖掘中被广泛应用。
定理 8-1 (频繁项集性质1):如果
是频繁项集,则它的任何非空子集
也是频繁项集。即频繁项集的子集必是频繁项集
定理 8-2 (频繁项集性质2):如果
是非频繁项集,那么它的所有超集都是非频繁项集。即非频繁项集的超集也是非频繁项集。
Apriori 算法是 Agrawal 等学者提出的关联规则的经典挖掘算法,在关联规则挖掘领域具有很大影响力。算法名称源于它使用了关于项集的两个性质,即定理8-1和8-2等先验 (Apriori) 知识。 Apriori算法在具体实现时,将关联规则的挖掘过程分为如下两个基本步骤。
1、发现频繁项集
根据用户给定的最小支持度
,寻找出所有的频繁项集,即满足支持度
不低于
的所有项集。由于这些频繁项集之间有可能存在包含关系,因此,我们可以只关心所有的最大频繁项集,即那些不被其它频繁项集所包含的所有频繁项集。
2、生成关联规则
根据用户给定的最小可信度
,在每个最大频繁项集中,寻找置信度
不小于
的关联规则。
如果
,则
总共有
个非空的子集。若
,则对于每一个事务
都要检查它是否包含这
个子集,其时间复杂性为
。当
很大时,关联规则挖掘的时间开销往往是巨大的。
发现频繁项集需引入以下有关概念和符号。
(1)候选频繁项集:最有可能成为频繁项集的项目集。 (2)
:所有候选频繁 k-项集的集合; (3)
:所有频繁 k-项集构成的集合; (4)
:
中所有 k-项集的集合;
显然,
和
的计算比较容易,只要扫描事务数据库
很容易找出其中的所有候选1-项集以及判断它们是否为频繁1-项集即可。
根据 “频繁项集的子集必为频繁项集” 这一性质,可利用频繁k-项集的集合
,来构造所有候选 (k+1)-项目集的集合
,再通过扫描数据库,从
中找出频繁 (k+1)-项集的集合
。
从前面的分析可知
。
因此,要寻找所有频繁 k-项集的集合
,只需计算候选频繁 k-项集的集合
中每个项集的支持度,而不必计算
中所有 k-项集的支持度,这在一定程度上减少了算法的计算量。
根据以上分析,我们可以得到 Apriori 算法第一部分:
算法8-1: Apriori算法之频繁项集发现算法 输入:项集
,事务数据库
,最小支持数
输出:所有频繁项集构成的集合
(1)求
:① 通过扫描数据库
,找出所有1-项集并计算其支持数作为候选频繁1-项集
; ② 从
中删除低于
的元素,得到所有频繁1-项集所构成的集合
; (2)FOR
(3)连接:将
进行自身连接生成一个候选频繁
项集的集合
,其连接方法如下:对任意
,若按字典序有
且满足
,则把
连接成
项集,即将
作为候选 (k+1)-项集
中的元素。 (4)剪枝:删除
中明显的非频繁 (k+1)-项集,即当
中一个候选 (k+1)-项集的某个 k-项子集不是
中的元素时,则将它从
中删除。 (5)算支持度:通过扫描事务数据库
,计算
中各个元素的支持数。 (6)求
:剔除
中低于最小支持数
的元素,即得到所有频繁 (k+1)-项集构成的集合
。 (7)若
,则转第(9)步 (8)END FOR (9)令
,并输出
。
例 8-3 对表8-2所示的交易数据库,其项集
,设最小支持度
,请找出所有的频繁项目集。

解:因支持度
,事务数据库有5条记录,即最小支持数
。
算法(1)求
:扫描事务数据库,可得候选频繁1-项集及其支持数计算结果。

第一轮循环:对
执行算法的(3)至(6)步。
算法(3)连接:由
自身连接生成候选频繁2-项集的集合
,其结果由表8-4左侧第1列给出,且已按字典序排序。
与
分别连接生成
和
。
与
分别连接生成
。……

算法(4)剪枝:由于
中所有1-项集都是频繁的,因此
无需进行剪枝过程。
算法(5)算支持数:扫描数据库,计算其支持数。
算法(6)求
:删除支持数小于等于2的候选2-项集,最终得到所有的频繁2-项集。
算法(7)
第二轮循环:对
执行算法的(3)至(6)步获得
。
,
被剪枝。

第三轮循环:对
执行算法的(3)至(6)步获得
。

第四轮循环:由于
仅有一个频繁4-项集,故已不能生成候选频繁5-项集
,因此(7)
,转算法(9)步。
算法(9)输出
例 8-4 对于频繁项集构成的集合
请求出它的最大频繁项集的集合。
解:因为最大频繁项集一定不是其它任何频繁项集的子集。因此,可以采用枚举法来寻找
中的最大频繁项集,一般从项最多的频繁项集开始,检查它是否包含在某个频繁项集之中。 (1)因为
中只有一个频繁4-项集
,故它不可能是
中其它2-项集,3-项集的子集,所以它是一个最大频繁项集。 (2)对于
,因为它不是
的子集,也不是
中其它3-项集的子集,更不是其它2-项集的子集,所以是最大频繁项集。 (3)因 为
和
都是
的子集,
和
都是
的子集,
和
都是
的子集,所以它们都不是最大频繁项集。 故
中有2个最大频繁项集,构成
。
设
为一个项集,
,则
称为由
导出的关联规则。 若
是频繁项集,则它导出的关联规则必满足最小支持度要求, 即
因此,只需检查
是否满足最小置信度
,即可判断这个规则是否为强关联规则。
因为频繁项集X的任一子集
和
都是频繁项集,且
和
的值在发现频繁项集的时候已经计算出来。因此有
当
,可知
为强关联规则。
因此,我们可以得到关联规则的生成算法:
算法8-2 Apriori算法之强关联规则生成法 输入:所有频繁项集构成的集合
,最小置信度
输出:所有强关联规则构成的集合
(1)
(2)REPEAT (3)取
中一个未处理元素
(频繁项集) (4)令
(5)REPEAT ① 取
的每一个未处理元素
,计算
② 如果
,
(6)UNTIL
中每个元素都已经处理 (7)UNTIL 集合
中每个元素都已经处理 (8)输出
例 8-5 设最小置信度
,对于例8-4所得到的频繁项集的集合
试求出所有的强关联规则。
解:从
中取出第1个2-频繁项集
,它的两个非空真子集
和
可以生成
和
两个关联规则。
因此,
和
都是强关联规则。
同理,求出
等7个2-频繁项集的关联规则,并判断是否强关联规则。对频繁3-项集
有6个非自身的非空真子集
,故共可生成6个关联规则,其置信度计算结果详见表8-7。

同理,可以计算求出其它频繁3-频繁集的强关联规则,也可以计算由
可以导出
,
等14个关联规则,并找出相应的强关联规则。
穷举法可以通过枚举频繁项集生成所有的关联规则,并通过计算关联规则的置信度来判断该规则是否为强关联规则,但当一个频繁项集包含的项很多时,就会生成大量的候选关联规则,因为一个频繁项目集X能够生成
个候选关联规则。
定理 8-3(关联规则性质1):设
为频繁项集,
且
。若
为强关联规则,则
也必是强关联规则。
比如,令
且已知
是强关联规则,则由定理8-3立即得出
和
都是强关联规则的结论,而不需计算这两个规则的置信度。
定理 8-4(关联规则性质2):设
为频繁项集,
且
。若
不是强关联规则,则
也不是强关联规则。
比如,令
且已知
不是强关联规则,则由定理8-4立即得出
和
都不是强关联规则的结论,也无需计算它们的置信度。
可以逐层生成关联规则,并利用以上性质2(定理8-4)进行剪枝,以减少关联规则生成的计算工作量。其基本思路是,首先产生后件只包含一个项的关联规则,然后两两合并这些关联规则的后件,生成后件包含两个项的候选关联规则,从这些候选关联规则中再找出强关联规则,以此类推。
比如,设
是频繁项集,
和
是两个关联规则,则通过合并它们的后件生成候选规则的后件
,则候选规则的前件为
,由此即得候选规则
。
图8-1显示了由频繁项集
产生关联规则的格结构。如果格中任意结点对应关联规则的置信度低于
,则根据关联规则的性质2,可以立即剪掉该结点所生成的整个子图。
