第五章 关联规则
5.1概述
- 频繁模式是频繁地出现在数据集中的模式。
- 目的:发现数据中蕴含的内在规律。
- 经典的关联规则挖掘算法
- Apriori算法
- FP-growth算法
5.2 基本概念
5.2.1 项目和项集
- 定义:
- 设I={ i 1 , i 2 , … , i m i_1 ,i_2 , … ,i_m i1,i2,…,im}是m个不同项目的集合,每个 i k ( k = 1 , 2 , ⋯ , m i_k (k=1,2,\cdots,m ik(k=1,2,⋯,m) 称为一个项目( I t e m Item Item)。
- 项目的集合称为项目集合( I t e m s e t Itemset Itemset),简称为项集。其元素个数称为项 集的长度,长度为k的项集称为k-项集( k − I t e m s e t k-Itemset k−Itemset)。
5.2.2 交易
- 定义:
- 每笔交易 T ( T r a n s a c t i o n ) T(Transaction) T(Transaction)是项集 I I I上的一个非空子集,即 T ⊆ I T\subseteq I T⊆I,但通常 T ⊂ I T\subset I T⊂I。 对应每一个交易有一个唯一的标识——交易号,记作 T I D TID TID
- 交易的全体构成了交易数据库 D D D,或称交易记录集 D D D,简称交易集 D D D。 交易集 D D D中包含交易的个数记为 ∣ D ∣ |D| ∣D∣。
5.2.3 项集的支持度
- 对于项集
X
,
X
⊆
I
X,X\subseteq I
X,X⊆I ,绝对支持度(支持度计数)
c
o
u
n
t
(
X
⊆
T
)
count(X\subseteq T)
count(X⊆T)为交易集D中包含X的交易数量。 相对支持度项集X出现的概率,从而描述了X的重要性。
s u p p o r t ( X ) = c o u n t ( X ⊆ T ) ∣ D ∣ support(X)=\frac{count(X\subseteq T)}{|D|} support(X)=∣D∣count(X⊆T)
5.2.4 项集的最小支持度与频繁集
- 发现关联规则要求项集必须满足的最小支持阈值,称为项集的最小支持度 ( M i n i m u m S u p p o r t ) (Minimum\ Support) (Minimum Support),记为min_sup。
- 从统计意义上讲,它表示用户关心的关联规则必须满足的最低重要性,只有满足最小支持度的项集才能产生关联规则。
- 支持度大于或等于min_sup的项集称为频繁项集,简称频繁集,反之则称为非频繁集。
- 对于k-项集,若满足min_sup,称为k-频繁集,记作 L k L_k Lk。
5.2.5 关联规则
-
关联规则(Association Rule)可以表示为一个蕴含式:
R : X ⇒ Y , 其 中 X ⊂ I , Y ⊂ I , 并 且 X ∩ Y = Φ R:X\Rightarrow Y,其中X\subset I,Y\subset I,并且X\cap Y=\Phi R:X⇒Y,其中X⊂I,Y⊂I,并且X∩Y=Φ -
关联规则表示若项集X在某一交易中出现,则会导致项集Y按照某一概率也会在同一交易中出现。
-
可以用两个标准来衡量:支持度和置信度。
5.2.6 关联规则的支持度
-
对于关联规则 R : X ⇒ Y R:X\Rightarrow Y R:X⇒Y,规则R的支持度(Support)是交易集中同时包含X和Y的交易数与所有交易数之比。
s u p p o r t ( X ⇒ Y ) = c o u n t ( X ∪ Y ) ∣ D ∣ support(X\Rightarrow Y)=\frac{count(X\cup Y)}{|D|} support(X⇒Y)=∣D∣count(X∪Y) -
联合概率: p ( Y , X ) p ( Y, X ) p(Y,X)
5.2.7 关联规则的置信度
-
对于关联规则 R : X ⇒ Y R:X\Rightarrow Y R:X⇒Y,规则R的置信度(Confidence) 是指包含X和Y的交易数与包含X的交易数之比:
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 ) = c o u n t ( X ∪ Y ) c o u n t ( X ) confidence(X\Rightarrow Y)=\frac{support(X\cup Y)}{support(X)}=\frac{count(X\cup Y)}{count(X)} confidence(X⇒Y)=support(X)support(X∪Y)=count(X)count(X∪Y) -
置信度反映了若交易中包含X,则交易中同时出现Y的概率。
-
条件概率: p ( Y ∣ X ) p ( Y | X ) p(Y∣X)
-
一般来说,只有支持度和置信度较高的关联规则才是用户感兴趣的。
5.2.8 关联规则的最小支持度和最小置信度
- 关联规则的最小支持度:衡量频繁集的最小支持度(Minimum Support),记为min_sup,它是用于衡量规则需要满足的最低重要性。
- 关联规则的最小置信度(Minimum Confidence)记为min_conf,它表示关联规则需要满足的最低可靠性。
5.2.9 强关联规则
-
如果规则 X ⇒ Y X\Rightarrow Y X⇒Y满足:
s u p p o r t ( X ⇒ Y ) ≥ m i n _ s u p , 且 c o n f i d e n c e ( X ⇒ Y ) ≥ m i n _ c o n f support(X\Rightarrow Y)\geq min\_ sup,且confidence(X\Rightarrow Y)\geq min \_ conf support(X⇒Y)≥min_sup,且confidence(X⇒Y)≥min_conf
称关联规则 X ⇒ Y X\Rightarrow Y X⇒Y为强关联规则,否则为弱关联规则。 -
在挖掘关联规则时,产生的关联规则要经过min_sup和 min_conf的衡量,筛选出来的强关联规则才能用于指导商家的决策。
5.3 经典算法
-
大多数关联规则挖掘算法通常采用的一种策略是,将关联规则挖掘任务分解为如下两个主要的子任务:
- 频繁项集产生(Frequent Itemset Generation)
- 其目标是发现满足最小支持度阈值的所有项集,这些 项集称作频繁项集。
- 规则的产生(Rule Generation)
- 其目标是从上一步发现的频繁项集中提取所有高支持度和置信度的规则,这些规则称作强规则(strong rule)。找出支持度大于等于 min_sup并且置信度大于等于min_conf的所有规则。
- 频繁项集产生(Frequent Itemset Generation)
-
挖掘关联规则的一种原始方法是:Brute-force approach
- 计算每个可能规则的支持度和置信度
- 这种方法计算代价过高,从数据集提取规则的数量达指数级
-
Brute-force 方法:
- 把格结构中每个项集作为候选项集
- 将每个候选项集和每个事务进行比较,确定每个候选项集的支持度计数。
- 时间复杂度O(NMW),这种方法的开销可能非常大。
-
降低产生频繁项集计算复杂度的方法:
- 减少候选项集的数量——先验(apriori)原理
- 减少比较的次数
5.3.1 Apriori算法
-
先验原理:
- 如果一个项集是频繁的,则它的所有子集一定也是频繁的
- 相反,如果一个项集是非频繁的,则它的所有超集也一定是非频繁的
-
这种基于支持度度量修剪指数搜索空间的策略称为基于支持度的剪枝( support-based pruning)
-
这种剪枝策略依赖于支持度度量的一个关键性质,即一个项集的支持度决不会超过它的子集的支持度。这个性质也称为支持度度量的反单调性(anti-monotone)
-
寻找频繁项集的基本思想是:算法需要对数据集进行多步处理。Apriori使用了一种称作level-wise搜索的迭代方法。
- 找出频繁1项集,以 L 1 L_1 L1表示。 L 1 L_1 L1用来寻找 L 2 L_2 L2,即频繁2-项集的集合。 L 2 L_2 L2用来寻找 L 3 L_3 L3,以此类推,直至没有新的频繁k-项集被发现。每个 L k L_k Lk都要求对数据库作一次完全扫描。
- 使用Lk-1找出Lk ,由两步组成:
- 连接步:将Lk-1与自身连接产生候选k项集的集合,标记为Ck
- 剪枝步:剪除不满足最小支持度的候选项集。
-
两个重要的特点:
- 逐层算法。
- 它使用产生-测试策略来发现频繁项集。
-
规则产生
- 忽略那些前件或后件为空的规则,每个频繁k-项集能够产生 多达 2 k − 2 2^k -2 2k−2个关联规则。
- 关联规则的提取:将一个项集 Y划分成两个非空的子集 X 和 Y-X,使得 X ⇒ Y − X X\Rightarrow Y-X X⇒Y−X满足置信度阈值。
-
计算复杂度
- 支持度阈值:阈值降低会使复杂度增加
- 项数:项数增加也会使计算量和I/O开销增加
- 事务数:会随事务数增加而增加
- 事务的平均宽度:随事务平均宽度增加而增加
-
Apriori算法的优点:
- 简单、易理解、数据要求低
-
Apriori算法的缺点:
- 在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该 参与组合的元素。
- 会使I/O开销增加。
-
Apriori算法的主要开销:
- 生成候选项集是高代价的
- 会多次重复扫描数据库
5.3.2 FP-growth算法
-
FP-树是一种输入数据的压缩表示,它通过逐个读入事务,并把每个事务映射到FP-树中的一条路径来构造。
-
FP-growth是一种以自底向上方式探索树,由FP-树产生频繁项集的算法,递归地频繁增长模式,由两个阶段组成:
-
第一阶段为建立FP-树,即将数据库中的事务构造成一棵FP-树;
-
第二阶段为挖掘FP-树,即针对FP-树挖掘频繁模式和关联规则。
-
-
该算法只进行2次数据库扫描且它不使用侯选集,直接压缩数据库成一个频繁模式树,最后通过这棵树生成关联规则。 研究表明它比Apriori算法大约快一个数量级。
- 第一次扫描数据库,得到1维频繁项集;
- 第二次扫描数据库,利用1维频繁项集过滤数据库中的非频繁项,同时生成FP-树。
-
FP-树
- 频繁模式树FP-树是一个树形结构。包括一个频繁项组成的头表,一个标记“null”的根节点,它的子节点为一个项前缀子树的集合。
-
频繁项头表
- 频繁项头表(Head Table)的每个表项通常由两个域组成:项目名称item-name和指针node_link。node_link指向FP-树中具有与该表项相同item-name的第一个节点。有时也包含每个项目的支持度计数。
-
项前缀子树
- 每个项前缀子树(Item Prefix Subtree)的节点有三个域:item-name,count,node_link。item-name记录了该节点所代表的项的名字。count记录了所在路径代表的交易中包含此节点项目的交易个数。node_link指向下一个具有同样的item-name域的节点,要是没有这样一个节点,就为null。
-
FP-growth算法
-
第一阶段:根据一个输入交易记录集建立一棵FP-树。
- 扫描数据库D一遍,得到频繁项的集合F和每个频繁项的支持度。把F按支持度递降排序,结果记为L
- 创建FP-树的根节点,记为T,并且标记为“null”。
- 第二次扫描数据库D。每个事务中的项按L中的次序排列,并对每个事务创建分枝。一般地,当为一个事务考虑增加分枝时,沿共同前缀上的每个结点计数增加1,为前缀之后的创建结点和链接。
-
第二阶段:挖掘FP-树
- 由于每一个事务都映射到FP-树中的一条路径,因而通过仅考察包含特定结点(例如i)的途径,就可以发现以i结尾的频繁项集。使用与结点i相关联的指针,可以快速访问这些路径。
-
-
条件模式基
- 一个“子数据库”,由FP-树中与该后缀模式一起出现的前缀路径集组成。
5.4 评估
-
主观度量:可以通过主观论据建立
- 只有用户才能确定一个规则是否有趣的,而且这种判断是主观的,因不同的用户而异。
-
客观度量:可以通过统计理论建立
-
令人感兴趣的模式可以使用客观兴趣度度量来排除。
-
流行的度量指标
-
支持度
-
置信度
-
提升度
l i f t ( X , Y ) = P ( X ∪ Y ) P ( X ) P ( Y ) = P ( Y ∣ X ) P ( Y ) lift(X,Y)=\frac{P(X\cup Y)}{P(X)P(Y)}=\frac{P(Y|X)}{P(Y)} lift(X,Y)=P(X)P(Y)P(X∪Y)=P(Y)P(Y∣X)
它计算规则置信度和规则后件中项集的支持度之间的比率l i f t ( X , Y ) > 1 lift(X,Y)>1 lift(X,Y)>1表明X与Y正相关
-
-
5.5 应用
5.6 小结
第五章完