目录
- 一、关联规则的概念
- (一)基本概念
- (二)项集的性质
- 二、关联规则的Apriori算法
- (一)发现频繁项集
- (二)产生关联规则
一、关联规则的概念
(一)基本概念
事务数据库(Transaction Database) T = { t 1 , t 2 , … , t n } T=\{t_1,t_2,…,t_n\} T={t1,t2,…,tn},也称为交易数据库中的关联规则挖掘问题可描述如下:
设 I = { i 1 , i 2 , … , i m } I=\{i_1,i_2,…,i_m\} I={i1,i2,…,im} 为一个项目集合 (Set of Items, 项集),其中 i 1 , i 2 , … , i m i_1,i_2,…,i_m i1,i2,…,im 称为项目 (item, 项)。在超市的交易数据仓库中,每个项ik代表一种商品的编号或名称,为计算方便假设 I I I 中的项已按字典序排序。
T T T 中的每个事务 t j t_j tj 都是I的一个子集,即 t j ⊆ I ( j = 1 , 2 , … , n ) t_j \subseteq I (j=1,2,…,n) tj⊆I(j=1,2,…,n)。 在超市等交易数据仓库中, t j t_j tj 就代表某个顾客一次购买的所有商品编号或商品名称。
例 8-1 对表8-1所示的交易数据库记录,请给出项集和其中的事务。
解:交易数据库涉及 a , b , c , d a,b,c,d a,b,c,d 等4个项,即项集 I = { a , b , c , d } I=\{a,b,c,d\} I={a,b,c,d} 且其中的项已经按字典序排序。每一个项就代表一种商品,比如 a a a 可表示面包, b b b 表示牛奶等。交易数据库可表示为 T = { t 1 , t 2 , t 3 } T=\{t_1, t_2, t_3\} T={t1,t2,t3},其中 t 1 = { a , b } t_1=\{a, b\} t1={a,b}, t 2 = { b , c , d } t_2=\{b, c, d\} t2={b,c,d}, t 3 = { b , d } t_3=\{b, d\} t3={b,d},且它们都是项集 I I I 的子集,且按照字典序排序。
定义 8-1 若 X ⊆ I X\subseteq I X⊆I 且 k = ∣ X ∣ k=|X| k=∣X∣,则称 X X X 为 k-项集,将包含 X X X 的事务数 S p t N ( X ) = ∣ t ∣ X ⊆ t ∈ T ∣ SptN(X)=|{ t | X\subseteq t\in T}| SptN(X)=∣t∣X⊆t∈T∣ 称为 X X X 在事务数据库 T T T 上的支持数,并将 S p t N ( X ) SptN(X) SptN(X) 与 ∣ T ∣ |T| ∣T∣ 的比值称为 X X X 在 T T T 上的支持度 (Support),记作 S u p p o r t ( X ) = ∣ { t ∣ X ⊆ t ∈ T } ∣ / ∣ T ∣ (8-1) Support(X)=|\{ t | X\subseteq t\in T\}| / | T | \tag{8-1} Support(X)=∣{t∣X⊆t∈T}∣/∣T∣(8-1) 显然,一个 k-项集 X X X 的支持度 S u p p o r t ( X ) ∈ [ 0 , 1 ] Support (X)\in [0,1] Support(X)∈[0,1]。
对于例8-1所示的交易数据库 T T T,设有项集 X = { b , d } X=\{b,d\} X={b,d},则 S p t N ( X ) = 2 SptN(X)=2 SptN(X)=2, S u p p o r t ( X ) = 2 / 3 Support (X)=2/3 Support(X)=2/3。
定义 8-2 若指定 M i n S ∈ ( 0 , 1 ) MinS\in(0,1) MinS∈(0,1) 作为刻画支持度是否符合用户期望的阈值,则 M i n S MinS MinS 称为最小支持度,并将 M i n S p t N = M i n S × ∣ T ∣ MinSptN=MinS\times|T| MinSptN=MinS×∣T∣ 称为最小支持数,即 M i n S p t N MinSptN MinSptN 是最小支持度 M i n S MinS MinS 与事务数据库记录数的乘积。
定义 8-3 设 X ⊆ I X\subseteq I X⊆I, Y ⊆ I Y\subseteq I Y⊆I 且 X ∩ Y = ϕ X\cap Y=\phi X∩Y=ϕ,称形如 X ⇒ Y X\Rightarrow Y X⇒Y 的蕴涵式为关联规则 (Association Rule),其中 X X X 和 Y Y Y 分别称为关联规则的先导 (Antecedent) 和后继 (Consequent)。
定义 8-4 设 X ⊆ I X\subseteq I X⊆I, Y ⊆ I Y\subseteq I Y⊆I 且 X ∩ Y = ϕ X\cap Y=\phi X∩Y=ϕ,令 Z = X ∪ Y Z=X\cup Y Z=X∪Y,则称 S u p p o r t ( Z ) Support(Z) Support(Z) 为关联规则 X ⇒ Y X\Rightarrow Y X⇒Y 的支持度,记作 S u p p o r t ( X ⇒ Y ) Support (X\Rightarrow Y) Support(X⇒Y)。
从定义8-1和8-4可知,关联规则 X ⇒ Y X\Rightarrow Y X⇒Y 在事务数据库 T T T 上的支持度,就是 T T T 中同时包含 X X X 和 Y Y Y 的事务在 T T T 中所占的百分比,即: S u p p o r t ( X ⇒ Y ) = 包含 X ∩ Y 的事务数 / ∣ T ∣ (8-2) Support (X\Rightarrow Y)=包含X\cap Y的事务数/ |T|\tag{8-2} Support(X⇒Y)=包含X∩Y的事务数/∣T∣(8-2) 对于例8-1的交易数据库 T T T,若令 X = { b , c } , Y = { d } X=\{b,c\},Y=\{d\} X={b,c},Y={d},则
S u p p o r t ( X ⇒ Y ) = S u p p o r t ( { b , c } ⇒ { d } ) = S u p p o r t ( b , c , d ) = 1 / 3 Support (X\Rightarrow Y)= Support (\{b,c\} \Rightarrow \{d\})=Support (b,c,d)=1/3 Support(X⇒Y)=Support({b,c}⇒{d})=Support(b,c,d)=1/3 由此可知,在购物篮分析中, X ⇒ Y X\Rightarrow Y X⇒Y 的支持度也可以表示为 S u p p o r t ( X ⇒ Y ) = 同时购买商品 X 和 Y 的交易数 总交易数 (8-3) Support (X\Rightarrow Y)=\frac{同时购买商品X和Y的交易数}{总交易数}\tag{8-3} Support(X⇒Y)=总交易数同时购买商品X和Y的交易数(8-3)
定义 8-5 设 X ⊆ I X\subseteq I X⊆I 和给定的最小支持度 M i n S MinS MinS,若 S u p p o r t ( X ) ≥ M i n S Support(X)\geq MinS Support(X)≥MinS,则称 X X X 为频繁项集 (Frequent Item Sets)。若 k = ∣ X ∣ k=|X| k=∣X∣,则称 X X X 为频繁 k-项集。
对例8-1交易数据库 T T T,若最小支持度 M i n S = 0.6 MinS=0.6 MinS=0.6,对项集 X = { b , d } X=\{b,d\} X={b,d},因为 S u p p o r t ( X ) = 2 / 3 ≥ 0.6 Support (X)=2/3\geq 0.6 Support(X)=2/3≥0.6, 即 X = { b , d } X=\{b, d\} X={b,d} 是个频繁项集,且是频繁2-项集。
定义 8-6 设 X 1 , X 2 , ⋯ , X r X_1,X_2,\cdots,X_r X1,X2,⋯,Xr 是 T T T 上关于最小支持度 M i n S MinS MinS 的所有频繁项集,称 X q X_q Xq 为一个最大频繁项目集,若对任意 p ( p = 1 , 2 , ⋯ , r ; p ≠ q ) p(p=1,2,\cdots,r;p\neq q) p(p=1,2,⋯,r;p=q) 都有 X q ⊄ X p X_q\not\subset X_p Xq⊂Xp。
因此, X q X_q Xq 为最大频繁项集的充分必要条件是, X q X_q Xq 不是其它任何频繁项集的子集。显然, T T T 上的最大频繁项集通常不唯一。
定义 8-7 关联规则 X ⇒ Y X\Rightarrow Y X⇒Y 在 T T T 上的置信度 (Confidence),定义为 C o n f i d e n c e ( X ⇒ Y ) = S u p p o r t ( X ∪ Y ) / S u p p o r t ( X ) = S p t N ( X ∪ Y ) / S p t N ( X ) Confidence(X\Rightarrow Y) = Support (X\cup Y )/ Support (X)=SptN (X\cup Y )/ SptN(X) Confidence(X⇒Y)=Support(X∪Y)/Support(X)=SptN(X∪Y)/SptN(X)
例 8-2 对例8-1的交易数据库 T T T,令 X = { b , c } , Y = { d } X=\{b,c\},Y=\{d\} X={b,c},Y={d},试求其置信度。
解:由于 S u p p o r t ( X ∪ Y ) = S u p p o r t ( { b , c , d } ) = 1 / 3 Support (X\cup Y)=Support(\{b,c,d\})=1/3 Support(X∪Y)=Support({b,c,d})=1/3,而 S u p p o r t ( X ) = S u p p o r t { b , c } = 1 / 3 Support(X)= Support\{b,c\}=1/3 Support(X)=Support{b,c}=1/3,所以 C o n f i d e n c e ( X ⇒ Y ) = S u p p o r t ( X ∪ Y ) / S u p p o r t ( X ) = 1 Confidence(X\Rightarrow Y) = Support (X\cup Y )/ Support (X)=1 Confidence(X⇒Y)=Support(X∪Y)/Support(X)=1
定义 8-8 若 M i n C ∈ ( 0 , 1 ) MinC\in(0,1) MinC∈(0,1) 且指定为刻画置信度的阈值,则称 M i n C MinC MinC 为最小置信度。
定义 8-9 对于给定的最小支持度 M i n S MinS MinS 和最小置信度 M i n C MinC MinC,如果有 S u p p o r t ( X ⇒ Y ) ≥ M i n S , C o n f i d e n c e ( X ⇒ Y ) ≥ M i n C Support(X\Rightarrow Y)\geq MinS,Confidence(X\Rightarrow Y)\geq MinC Support(X⇒Y)≥MinS,Confidence(X⇒Y)≥MinC 则称 X ⇒ Y X\Rightarrow Y X⇒Y 为强关联规则 (Strong Association Rule)。
关联规则挖掘就是按用户指定最小支持度 M i n S MinS MinS 和最小置信度 M i n C MinC MinC,从给定的事务数据库 T T T 中寻找出所有强关联规则的过程。
(二)项集的性质
Agrawal 等人在研究事务数据库关联规则挖掘的过程中,发现了关于项集的两个基本性质,并在关联规则挖掘中被广泛应用。
定理 8-1 (频繁项集性质1):如果 X X X 是频繁项集,则它的任何非空子集 X ′ X' X′也是频繁项集。即频繁项集的子集必是频繁项集
定理 8-2 (频繁项集性质2):如果 X X X 是非频繁项集,那么它的所有超集都是非频繁项集。即非频繁项集的超集也是非频繁项集。
二、关联规则的Apriori算法
Apriori 算法是 Agrawal 等学者提出的关联规则的经典挖掘算法,在关联规则挖掘领域具有很大影响力。算法名称源于它使用了关于项集的两个性质,即定理8-1和8-2等先验 (Apriori) 知识。
Apriori算法在具体实现时,将关联规则的挖掘过程分为如下两个基本步骤。
1、发现频繁项集
根据用户给定的最小支持度 M i n S MinS MinS,寻找出所有的频繁项集,即满足支持度 S u p p o r t Support Support 不低于 M i n S MinS MinS 的所有项集。由于这些频繁项集之间有可能存在包含关系,因此,我们可以只关心所有的最大频繁项集,即那些不被其它频繁项集所包含的所有频繁项集。
2、生成关联规则
根据用户给定的最小可信度 M i n C MinC MinC,在每个最大频繁项集中,寻找置信度 C o n f i d e n c e Confidence Confidence 不小于 M i n C MinC MinC 的关联规则。
(一)发现频繁项集
如果 ∣ I ∣ = m |I|=m ∣I∣=m,则 I I I 总共有 2 m − 1 2m-1 2m−1 个非空的子集。若 ∣ T ∣ = n |T|=n ∣T∣=n,则对于每一个事务 t j t_j tj 都要检查它是否包含这 2 m − 1 2m-1 2m−1 个子集,其时间复杂性为 O ( n 2 m ) O(n2^m) O(n2m)。当 m m m 很大时,关联规则挖掘的时间开销往往是巨大的。
发现频繁项集需引入以下有关概念和符号。
(1)候选频繁项集:最有可能成为频繁项集的项目集。
(2) C k C_k Ck:所有候选频繁 k-项集的集合;
(3) L k L_k Lk:所有频繁 k-项集构成的集合;
(4) c m k c_m^k cmk: I I I 中所有 k-项集的集合;
显然, C 1 C_1 C1 和 L 1 L_1 L1 的计算比较容易,只要扫描事务数据库 T T T 很容易找出其中的所有候选1-项集以及判断它们是否为频繁1-项集即可。
根据 “频繁项集的子集必为频繁项集” 这一性质,可利用频繁k-项集的集合 L k L_k Lk,来构造所有候选 (k+1)-项目集的集合 C k + 1 C_{k+1} Ck+1,再通过扫描数据库,从 C k + 1 C_{k+1} Ck+1 中找出频繁 (k+1)-项集的集合 L k + 1 ( k = 1 , 2 , ⋯ , m − 1 ) L_{k+1}(k=1,2,\cdots,m-1) Lk+1(k=1,2,⋯,m−1)。
从前面的分析可知 L k ⊆ C k ⊆ c m k ( k = 1 , 2 , ⋯ , m ) L_k\subseteq C_k\subseteq c_m^k(k=1,2,\cdots,m) Lk⊆Ck⊆cmk(k=1,2,⋯,m)。
因此,要寻找所有频繁 k-项集的集合 L k L_k Lk,只需计算候选频繁 k-项集的集合 C k C_k Ck 中每个项集的支持度,而不必计算 I I I 中所有 k-项集的支持度,这在一定程度上减少了算法的计算量。
根据以上分析,我们可以得到 Apriori 算法第一部分:
算法8-1: Apriori算法之频繁项集发现算法
输入:项集 I I I,事务数据库 T T T,最小支持数 M i n S p t N MinSptN MinSptN
输出:所有频繁项集构成的集合 L L L
(1)求 L 1 L_1 L1:① 通过扫描数据库 T T T,找出所有1-项集并计算其支持数作为候选频繁1-项集 C 1 C_1 C1;
② 从 C 1 C_1 C1 中删除低于 M i n S p t N MinSptN MinSptN 的元素,得到所有频繁1-项集所构成的集合 L 1 L_1 L1;
(2)FOR k = 1 , 2 , 3 , ⋯ k=1, 2, 3,\cdots k=1,2,3,⋯
(3)连接:将 L k L_k Lk 进行自身连接生成一个候选频繁 k + 1 k+1 k+1 项集的集合 C k + 1 C_{k+1} Ck+1,其连接方法如下:对任意 p , q ∈ L k p,q\in L_k p,q∈Lk,若按字典序有 p = { p 1 , p 2 , ⋯ , p k − 1 , p k } , q = { p 1 , p 2 , ⋯ , p k − 1 , q k } p=\{p_1, p_2,\cdots, p_{k-1}, p_k\},q=\{p_1, p_2,\cdots, p_{k-1}, q_k\} p={p1,p2,⋯,pk−1,pk},q={p1,p2,⋯,pk−1,qk} 且满足 p k < q k p_k<q_k pk<qk,则把 p , q p, q p,q 连接成 k + 1 k+1 k+1 项集,即将 p ⊕ q = { p 1 , p 2 , ⋯ , p k − 1 , p k , q k } p\oplus q=\{p_1, p_2,\cdots, p_{k-1}, p_k, q_k\} p⊕q={p1,p2,⋯,pk−1,pk,qk} 作为候选 (k+1)-项集 C k + 1 C_{k+1} Ck+1 中的元素。
(4)剪枝:删除 C k + 1 C_{k+1} Ck+1中明显的非频繁 (k+1)-项集,即当 C k + 1 C_{k+1} Ck+1 中一个候选 (k+1)-项集的某个 k-项子集不是 L k L_k Lk 中的元素时,则将它从 C k + 1 C_{k+1} Ck+1 中删除。
(5)算支持度:通过扫描事务数据库 T T T,计算 C k + 1 C_{k+1} Ck+1 中各个元素的支持数。
(6)求 L k + 1 L_{k+1} Lk+1:剔除 C k + 1 C_{k+1} Ck+1 中低于最小支持数 M i n S p t N MinSptN MinSptN 的元素,即得到所有频繁 (k+1)-项集构成的集合 L k + 1 L_{k+1} Lk+1。
(7)若 L k + 1 = ∅ L_{k+1}=\varnothing Lk+1=∅,则转第(9)步
(8)END FOR
(9)令 L = L 2 ∪ L 3 ∪ ⋯ ∪ L k L=L_2\cup L_3\cup\cdots\cup L_k L=L2∪L3∪⋯∪Lk ,并输出 L L L。
例 8-3 对表8-2所示的交易数据库,其项集 I = { a , b , c , d , e } I=\{a,b,c,d,e\} I={a,b,c,d,e},设最小支持度 M i n S = 0.4 MinS=0.4 MinS=0.4,请找出所有的频繁项目集。
解:因支持度 M i n S = 0.4 MinS=0.4 MinS=0.4,事务数据库有5条记录,即最小支持数 M i n S p t N = 2 MinSptN=2 MinSptN=2。
算法(1)求 L 1 L_1 L1:扫描事务数据库,可得候选频繁1-项集及其支持数计算结果。
第一轮循环:对 L 1 L_1 L1 执行算法的(3)至(6)步。
算法(3)连接:由 L 1 L_1 L1 自身连接生成候选频繁2-项集的集合 C 2 C_2 C2,其结果由表8-4左侧第1列给出,且已按字典序排序。 { a } \{a\} {a} 与 { b } , { c } , { d } , { e } \{b\}, \{c\}, \{d\} , \{e\} {b},{c},{d},{e} 分别连接生成 { a , b } , { a , c } , { a , d } \{a,b\}, \{a,c\}, \{a,d\} {a,b},{a,c},{a,d} 和 { a , e } \{a,e\} {a,e}。 { b } \{b\} {b} 与 { c } , { d } , { e } \{c\}, \{d\}, \{e\} {c},{d},{e} 分别连接生成 { b , c } , { b , d } , { b , d } \{b,c\}, \{b,d\}, \{b,d\} {b,c},{b,d},{b,d}。……
算法(4)剪枝:由于 I I I 中所有1-项集都是频繁的,因此 C 2 C_2 C2 无需进行剪枝过程。
算法(5)算支持数:扫描数据库,计算其支持数。
算法(6)求 L 2 L_2 L2:删除支持数小于等于2的候选2-项集,最终得到所有的频繁2-项集。
算法(7) L 2 ≠ ∅ L_2≠\varnothing L2=∅
第二轮循环:对 L 2 L_2 L2 执行算法的(3)至(6)步获得 L 3 L_3 L3。 S p t N ( { d , e } ) = 1 SptN(\{d,e\})=1 SptN({d,e})=1, { b , d , e } \{b, d, e\} {b,d,e} 被剪枝。
第三轮循环:对 L 3 L_3 L3 执行算法的(3)至(6)步获得 L 4 L_4 L4。
第四轮循环:由于 L 4 L_4 L4 仅有一个频繁4-项集,故已不能生成候选频繁5-项集 C 5 C_5 C5,因此(7) L 5 = ∅ L_5=\varnothing L5=∅,转算法(9)步。
算法(9)输出 L = L 2 ∪ L 3 ∪ L 4 = { { a , b } , { a , c } , { a , d } , { b , c } , { b , d } , { b , e } , { c , d } , { c , e } } ∪ { { a , b , c } , { a , b , d } , { a , c , d } , { b , c , d } , { b , c , e } } ∪ { { a , b , c , d } } L=L_2\cup L_3\cup L_4=\{\{a, b\}, \{a, c\}, \{a, d\}, \{b, c\}, \{b, d\}, \{b, e\}, \{c, d\}, \{c, e\}\}\cup\{\{a, b, c\},\{a, b, d\}, \{a, c, d\}, \{b, c, d\}, \{b, c, e\}\}\cup\{\{a, b, c, d\}\} L=L2∪L3∪L4={{a,b},{a,c},{a,d},{b,c},{b,d},{b,e},{c,d},{c,e}}∪{{a,b,c},{a,b,d},{a,c,d},{b,c,d},{b,c,e}}∪{{a,b,c,d}}
例 8-4 对于频繁项集构成的集合 L = C 2 ∪ C 3 ∪ C 4 = { { a , b } , { a , c } , { a , d } , { b , c } , { b , d } , { b , e } , { c , d } , { c , e } } ∪ { { a , b , c } , { a , b , d } , { a , c , d } , { b , c , d } , { b , c , e } } ∪ { { a , b , c , d } } L=C_2\cup C_3\cup C_4=\{\{a, b\}, \{a, c\}, \{a, d\}, \{b, c\}, \{b, d\}, \{b, e\}, \{c, d\}, \{c, e\}\}\cup\{\{a, b, c\},\{a, b, d\}, \{a, c, d\}, \{b, c, d\}, \{b, c, e\}\}\cup\{\{a, b, c, d\}\} L=C2∪C3∪C4={{a,b},{a,c},{a,d},{b,c},{b,d},{b,e},{c,d},{c,e}}∪{{a,b,c},{a,b,d},{a,c,d},{b,c,d},{b,c,e}}∪{{a,b,c,d}} 请求出它的最大频繁项集的集合。
解:因为最大频繁项集一定不是其它任何频繁项集的子集。因此,可以采用枚举法来寻找 L L L 中的最大频繁项集,一般从项最多的频繁项集开始,检查它是否包含在某个频繁项集之中。
(1)因为 L L L 中只有一个频繁4-项集 { a , b , c , d } \{a, b, c, d\} {a,b,c,d},故它不可能是 L L L 中其它2-项集,3-项集的子集,所以它是一个最大频繁项集。
(2)对于 { b , c , e } \{b, c, e\} {b,c,e},因为它不是 { a , b , c , d } \{a, b, c, d\} {a,b,c,d} 的子集,也不是 L L L 中其它3-项集的子集,更不是其它2-项集的子集,所以是最大频繁项集。
(3)因 为 { a , b , c } , { a , b , d } , { a , c , d } \{a, b, c\},\{a, b, d\},\{a, c, d\} {a,b,c},{a,b,d},{a,c,d} 和 { b , c , d } \{b, c, d\} {b,c,d} 都是 { a , b , c , d } \{a, b, c, d\} {a,b,c,d} 的子集, { a , b } , { a , c } , { a , d } , { b , c } , { b , d } \{a, b\},\{a, c\},\{a, d\},\{b, c\},\{b, d\} {a,b},{a,c},{a,d},{b,c},{b,d} 和 { c , d } \{c, d\} {c,d} 都是 { a , b , c , d } \{a, b, c, d\} {a,b,c,d} 的子集, { b , e } \{b, e\} {b,e} 和 { c , e } \{c, e\} {c,e} 都是 { b , c , e } \{b, c, e\} {b,c,e} 的子集,所以它们都不是最大频繁项集。
故 L L L 中有2个最大频繁项集,构成 L m a x = { { b , c , e } , { a , b , c , d } } L_{max}=\{\{b, c, e\},\{a, b, c, d\}\} Lmax={{b,c,e},{a,b,c,d}}。
(二)产生关联规则
设 X X X 为一个项集, ∅ ≠ Y ⊂ X \varnothing≠Y\subset X ∅=Y⊂X,则 Y ⇒ ( X − Y ) Y\Rightarrow(X-Y) Y⇒(X−Y) 称为由 X X X 导出的关联规则。
若 X X X 是频繁项集,则它导出的关联规则必满足最小支持度要求, 即 S u p p o r t ( Y ⇒ ( X − Y ) ) = S u p p o r t ( X ) ≥ M i n S (8-4) Support (Y\Rightarrow(X-Y)) = Support (X)≥MinS\tag{8-4} Support(Y⇒(X−Y))=Support(X)≥MinS(8-4) 因此,只需检查 C o n f i d e n c e ( Y ⇒ ( X − Y ) ) Confidence(Y\Rightarrow(X-Y)) Confidence(Y⇒(X−Y)) 是否满足最小置信度 M i n C MinC MinC,即可判断这个规则是否为强关联规则。
因为频繁项集X的任一子集 Y Y Y 和 X − Y X-Y X−Y 都是频繁项集,且 S u p p o r t ( Y ) Support(Y) Support(Y) 和 S u p p o r t ( X − Y ) Support(X-Y) Support(X−Y) 的值在发现频繁项集的时候已经计算出来。因此有 C o n f i d e n c e ( Y ⇒ ( X − Y ) ) = S u p p o r t ( X ) / S u p p o r t ( Y ) (8-5) Confidence(Y\Rightarrow(X-Y))=Support (X)/ Support (Y)\tag{8-5} Confidence(Y⇒(X−Y))=Support(X)/Support(Y)(8-5) 当 C o n f i d e n c e ( Y ⇒ ( X − Y ) ) ≥ M i n C Confidence(Y\Rightarrow(X-Y))≥MinC Confidence(Y⇒(X−Y))≥MinC,可知 Y ⇒ ( X − Y ) Y\Rightarrow(X-Y) Y⇒(X−Y) 为强关联规则。
因此,我们可以得到关联规则的生成算法:
算法8-2 Apriori算法之强关联规则生成法
输入:所有频繁项集构成的集合 L L L,最小置信度 M i n C MinC MinC
输出:所有强关联规则构成的集合 S A R SAR SAR
(1) S A R = ∅ SAR=\varnothing SAR=∅
(2)REPEAT
(3)取 L L L 中一个未处理元素 X X X (频繁项集)
(4)令 S u b s e t s ( X ) = { Y ∣ ∅ ≠ Y ⊂ X } Subsets(X)=\{Y|\varnothing≠Y\subset X\} Subsets(X)={Y∣∅=Y⊂X}
(5)REPEAT
① 取 S u b s e t s ( X ) Subsets(X) Subsets(X) 的每一个未处理元素 Y Y Y,计算 C o n f i d e n c e ( Y ⇒ ( X − Y ) ) Confidence(Y\Rightarrow(X-Y)) Confidence(Y⇒(X−Y))
② 如果 C o n f i d e n c e ( Y ⇒ ( X − Y ) ) ≥ M i n C Confidence(Y\Rightarrow(X-Y))≥MinC Confidence(Y⇒(X−Y))≥MinC, S A R = S A R ∪ ( Y ⇒ ( X − Y ) ) SAR=SAR\cup(Y\Rightarrow(X-Y)) SAR=SAR∪(Y⇒(X−Y))
(6)UNTIL S u b s e t s ( X ) Subsets(X) Subsets(X) 中每个元素都已经处理
(7)UNTIL 集合 L L L 中每个元素都已经处理
(8)输出 S A R SAR SAR
例 8-5 设最小置信度 M i n C = 0.6 MinC=0.6 MinC=0.6,对于例8-4所得到的频繁项集的集合 L = { { a , b } , { a , c } , { a , d } , { b , c } , { b , d } , { b , e } , { c , d } , { c , e } } ∪ { { a , b , c } , { a , b , d } , { a , c , d } , { b , c , d } , { b , c , e } } ∪ { { a , b , c , d } } L=\{\{a, b\},\{a, c\},\{a, d\},\{b, c\},\{b, d\},\{b, e\},\{c, d\},\{c, e\}\} \cup\{\{a, b, c\},\{a, b, d\},\{a, c, d\},\{b, c, d\},\{b, c, e\}\}\cup\{\{a, b, c, d\}\} L={{a,b},{a,c},{a,d},{b,c},{b,d},{b,e},{c,d},{c,e}}∪{{a,b,c},{a,b,d},{a,c,d},{b,c,d},{b,c,e}}∪{{a,b,c,d}} 试求出所有的强关联规则。
解:从 L L L 中取出第1个2-频繁项集 { a , b } \{a, b\} {a,b},它的两个非空真子集 { a } \{a\} {a} 和 { b } \{b\} {b} 可以生成 { a } ⇒ { b } \{a\}\Rightarrow\{b\} {a}⇒{b} 和 { b } ⇒ { a } \{b\}\Rightarrow\{a\} {b}⇒{a} 两个关联规则。 C o n f i d e n c e ( { a } ⇒ { b } ) = S u p p o r t ( { a , b } ) / S u p p o r t ( { a } ) = 3 / 3 = 1 Confidence(\{a\}\Rightarrow\{b\})=Support(\{a, b\})/ Support(\{a\})=3/3=1 Confidence({a}⇒{b})=Support({a,b})/Support({a})=3/3=1 C o n f i d e n c e ( { b } ⇒ { a } ) = S u p p o r t ( { a , b } ) / S u p p o r t ( { b } ) = 3 / 5 = 0.6 Confidence(\{b\}\Rightarrow\{a\})=Support(\{a, b\})/Support(\{b\})=3/5=0.6 Confidence({b}⇒{a})=Support({a,b})/Support({b})=3/5=0.6 因此, { a } ⇒ { b } \{a\}\Rightarrow\{b\} {a}⇒{b} 和 { b } ⇒ { a } \{b\}\Rightarrow\{a\} {b}⇒{a} 都是强关联规则。
同理,求出 { a , c } , { a , d } , { b , c } , { b , d } , { b , e } , { c , d } , { c , e } \{a, c\},\{a, d\},\{b, c\},\{b, d\},\{b, e\},\{c, d\},\{c, e\} {a,c},{a,d},{b,c},{b,d},{b,e},{c,d},{c,e} 等7个2-频繁项集的关联规则,并判断是否强关联规则。对频繁3-项集 { b , c , e } \{b, c, e\} {b,c,e} 有6个非自身的非空真子集 { b } , { c } , { e } , { b , c } , { b , e } , { c , e } \{b\},\{c\},\{e\},\{b,c\},\{b,e\}, \{c,e\} {b},{c},{e},{b,c},{b,e},{c,e},故共可生成6个关联规则,其置信度计算结果详见表8-7。
同理,可以计算求出其它频繁3-频繁集的强关联规则,也可以计算由 { a , b , c , d } \{a, b, c, d\} {a,b,c,d} 可以导出 { a } ⇒ { b , c , d } \{a\}\Rightarrow\{b,c,d\} {a}⇒{b,c,d}, { a , b } ⇒ { c , d } \{a,b\}\Rightarrow\{c, d\} {a,b}⇒{c,d} 等14个关联规则,并找出相应的强关联规则。
穷举法可以通过枚举频繁项集生成所有的关联规则,并通过计算关联规则的置信度来判断该规则是否为强关联规则,但当一个频繁项集包含的项很多时,就会生成大量的候选关联规则,因为一个频繁项目集X能够生成 2 ∣ X ∣ − 2 2^{|X|}-2 2∣X∣−2 个候选关联规则。
定理 8-3(关联规则性质1):设 X X X 为频繁项集, ϕ ≠ Y ⊂ X \phi≠Y\subset X ϕ=Y⊂X 且 ϕ ≠ Y ′ ⊂ Y \phi≠Y'\subset Y ϕ=Y′⊂Y。若 Y ′ ⇒ ( X − Y ′ ) Y'\Rightarrow(X-Y') Y′⇒(X−Y′) 为强关联规则,则 Y ⇒ ( X − Y ) Y\Rightarrow(X-Y) Y⇒(X−Y) 也必是强关联规则。
比如,令 X = { b , c , e } X=\{b, c, e\} X={b,c,e} 且已知 { e } ⇒ { b , c } \{e\}\Rightarrow\{b,c\} {e}⇒{b,c} 是强关联规则,则由定理8-3立即得出 { b , e } ⇒ { c } \{b,e\}\Rightarrow\{c\} {b,e}⇒{c} 和 { c , e } ⇒ { b } \{c,e\}\Rightarrow\{b\} {c,e}⇒{b} 都是强关联规则的结论,而不需计算这两个规则的置信度。
定理 8-4(关联规则性质2):设 X X X 为频繁项集, ϕ ≠ Y ⊂ X \phi≠Y\subset X ϕ=Y⊂X 且 ϕ ≠ Y ′ ⊂ Y \phi≠Y'\subset Y ϕ=Y′⊂Y。若 Y ′ ⇒ ( X − Y ′ ) Y'\Rightarrow(X-Y') Y′⇒(X−Y′) 不是强关联规则,则 Y ⇒ ( X − Y ) Y\Rightarrow(X-Y) Y⇒(X−Y) 也不是强关联规则。
比如,令 X = { b , c , e } X=\{b, c, e\} X={b,c,e} 且已知 { b , c } ⇒ { e } \{b,c\}\Rightarrow\{e\} {b,c}⇒{e} 不是强关联规则,则由定理8-4立即得出 { b } ⇒ { c , e } \{b\}\Rightarrow\{c,e\} {b}⇒{c,e} 和 { c } ⇒ { b , e } \{c\}\Rightarrow\{b,e\} {c}⇒{b,e} 都不是强关联规则的结论,也无需计算它们的置信度。
可以逐层生成关联规则,并利用以上性质2(定理8-4)进行剪枝,以减少关联规则生成的计算工作量。其基本思路是,首先产生后件只包含一个项的关联规则,然后两两合并这些关联规则的后件,生成后件包含两个项的候选关联规则,从这些候选关联规则中再找出强关联规则,以此类推。
比如,设 { a , b , c , d } \{a,b,c,d\} {a,b,c,d} 是频繁项集, { a , c , d } ⇒ { b } \{a,c,d\}\Rightarrow\{b\} {a,c,d}⇒{b} 和 { b , c , d } ⇒ { a } \{b,c,d\}\Rightarrow\{a\} {b,c,d}⇒{a} 是两个关联规则,则通过合并它们的后件生成候选规则的后件 { a , b } \{a,b\} {a,b},则候选规则的前件为 { a , b , c , d } − { a , b } = { c , d } \{a,b,c,d\}-\{a,b\}=\{c,d\} {a,b,c,d}−{a,b}={c,d},由此即得候选规则 { c , d } ⇒ { a , b } \{c,d\}\Rightarrow\{a,b\} {c,d}⇒{a,b}。
图8-1显示了由频繁项集 { a , b , c , d } \{a,b,c,d\} {a,b,c,d} 产生关联规则的格结构。如果格中任意结点对应关联规则的置信度低于 M i n C MinC MinC,则根据关联规则的性质2,可以立即剪掉该结点所生成的整个子图。