Chapters2 数据关联分析
一、数据关联分析基本概念
1.频繁项集和关联规则
I
=
I
1
,
I
2
,
.
.
.
,
I
m
I={I_{1},I_{2},...,I_{m}}
I=I1,I2,...,Im:项的集合。
D
D
D:交易数据库——注意它是子集族。
T
T
T:每次交易事务,是
I
I
I的非空子集,即
T
⊆
I
T\subseteq I
T⊆I,且每个
T
T
T都与一个唯一的标识符
T
I
D
TID
TID对应。
2.一些定义
(1)项集:是指项的集合。包含
k
k
k个项的项集称为
k
k
k项集。例如集合
{
1
,
2
}
\{1,2\}
{1,2} 就是一个2项集。项集的出现频数是包含项集的事务数,简称为项集的频数、支持度或计数。
(2)支持度:简单的字面理解就是支持的程度,一般以百分比表示。设
A
A
A是一个项集,在数据挖掘的关联分析中,支持度表示在所有的事务中同时出现
A
A
A项的概率,计算公式如下:
s
u
p
p
o
r
t
(
A
)
=
c
o
u
n
t
(
A
⊆
T
)
∣
D
∣
support(A)=\frac{count(A\subseteq T)}{|D|}
support(A)=∣D∣count(A⊆T)。
(3)频繁项集:在一个具体的数据分析任务中,用户或者专家可以自行设定最小支持度阈值,那么如果项集
A
A
A的支持度满足于定义的最小支持度阈值(即
A
A
A的支持度不小于最小支持度阈值),则
A
A
A是频繁项集。如果一个包含
k
k
k个项的项集的支持度大于等于最小支持度阈值,则该项集称为
k
k
k频繁集。
(4)关联规则:可以描述成一种蕴含式。比如
A
→
B
A\rightarrow B
A→B,其中
A
A
A和
B
B
B分别称为关联规则的前件和后件。在事务集合
D
D
D中,对某条关联规则而言,其支持度
s
s
s表示在所有的事务中同时出现
A
A
A和
B
B
B的概率,即
P
(
A
B
)
P(AB)
P(AB),计算公式如下:
s
u
p
p
o
r
t
(
A
⇒
B
)
=
c
o
u
n
t
(
A
⋃
B
)
∣
D
∣
support(A\Rightarrow B)=\frac{count(A \bigcup B)}{|D|}
support(A⇒B)=∣D∣count(A⋃B).
(5)置信度:又称为可信度,表示关联规则的前件出现时后件也会出现,如果出现,那么出现的概率多大。表示
A
A
A出现的同时
B
B
B出现的概率:
s
u
p
p
o
r
t
(
A
⇒
B
)
=
c
o
u
n
t
(
A
⋃
B
)
s
u
p
p
o
r
t
(
A
)
support(A\Rightarrow B)=\frac{count(A \bigcup B)}{support(A)}
support(A⇒B)=support(A)count(A⋃B)。
同样在一个具体的数据分析中,用户或者专家课自行设定最小支持度阈值和最小置信度阈值,如果关联规则同时满足大于等于最小支持度阈值和最小置信度阈值,那么进行考虑。
(6)强关联规则:如果某关联规则
A
→
B
A\rightarrow B
A→B满足
s
u
p
p
o
r
t
(
A
⇒
B
)
≥
m
i
n
_
s
u
p
support(A\Rightarrow B)\geq min\_sup
support(A⇒B)≥min_sup且
c
o
n
f
i
d
e
n
c
e
(
A
⇒
B
)
≥
m
i
n
_
c
o
n
f
confidence(A\Rightarrow B)\geq min\_conf
confidence(A⇒B)≥min_conf,则称该关联规则是强关联规则,否则为弱关联规则。
• 关联规则挖掘步骤:
• (1) 找出所有频繁项集, 这些项集的每一个出现的频繁性至少与预定义的最小支持度一样.
• (2)由频繁项集产生强关联规则, 这些规则必须满足最小支持度和最小置信度.
二、
A
p
r
i
o
r
i
Apriori
Apriori算法
1.反单调性原理:如果一个项集是频繁的,那么它的所有子集也是频繁的,也就是说如果一个项集是非频繁的,那么它的所有超集也一定是非频繁的。
2.
A
p
r
i
o
r
i
Apriori
Apriori算法的核心思想:首先扫描数据集,统计数据集中交易的数量和各个不同的1项集出现的次数,进而根据最小支持度获得所有的频繁1项集,即
L
1
L_{1}
L1,然后利用
L
1
L_{1}
L1查找频繁2项集
L
2
L_{2}
L2,如此继续,直到不再有新的频繁项集被找到为止。
示例:
三、 FP-Growth算法
1.Apriori算法回顾
• 思想: 用频繁的(k–1)-项集生成候选的频繁 项集生成候选的频繁k-项集; 用数据库扫描和模式匹配计算候选集的支持度.
• 瓶颈:
(1) 巨大的候选集.
(2) 多次扫描数据库. 如果最长的频繁模式是n的话, 则需要 (n +1) 次数据库扫描.
• FP-Growth算法采用了模式段增长的方式分而治之地构建频繁项集. 当数据集比较稠密时, 本算法使用扩展的FP-Tree (Frequent (Frequent-Pattern Pattern Tree), 将全部的数据集压缩入主存, 对整体数据集的分析转化为对各个条件模式库分析的子任务, 显著减少了搜索空间.
2.频繁模式树, 简称为FP-tree。
(1)概念:它是指一棵将代表频繁项集的数据库压缩之后形成的树, 该树仍保留项集的关联信息. 其结构由一个根节点(值为null或
Φ
\Phi
Φ)、项前缀子树(作为子女)和一个频繁项头表组成.
(2)基本思想
• FP-Growth不同于Apriori的“试探”策略, 算法只需扫描原始数据两遍, 通过FP-tree数据结构对原始数据进行压缩, 效率较高.
• FP-Growth算法主要分为两个步骤: FP-tree构建, 挖掘频繁项集.
• FP树通过逐个读入事务, 并把事务映射到FP树中的一条路径来构造. 由于不同的事务可能会有若干个相同条路径来构造 由于不同的事务可能会有若干个相同的项, 因此它们的路径可能部分重叠. 重叠越多, 使用FP树结构获得的压缩效果越好. 如果FP树足够小, 能够存放在内存中, 就可以直接从这个内存中的结构提取频繁项集, 而不必重复地扫描存放在硬盘上的数据.
(3)FP-tree中的一些概念
• 项前缀子树: 该子树的每个节点包括3个域, item_name item_name,count, node_link node_link. 其中, item_name item_name记录节点表示的项的标识, count记录到达该节点的子路径的事务数,node_link用于连接树中相同标识的下一个节点(如果不存在相同标识下一个节点, 则值为null).
• 频繁项头表:本表中的每一个表项包括一个频繁项的标识(item name)和一个指向树中具有该频繁项标识((item_name )和一个指向树中具有该频繁项标识的第一个频繁项节点的指针(head of node_link node_link).
• 条件模式库: 也称为条件数据库(conditional (conditional data base).一种特殊类型的投影数据库, 是把上述频繁模式树(FP-tree)进行压缩后得到的数据库.
• 条件模式基: 在FP-树中, 每个任意的后缀模式可以形成各自的不同前缀子路径, 所有这些路径组成了该后缀的条件模式库(即该后缀的子数据库).
eg:
• 条件模式树: 由某个后缀的条件模式基所构建的FP-树称为该后缀的条件模式树.
eg:
示例——构建 FP-tree
• 抽取条件模式基: 首先从FP-树头指针表中的单个频繁元素项开始(项头表最下面开始), 对于每一个元素项, 获得其对应的条件模式基. 条件模式基是以所查找元素项为结尾的路径集合 条件模式基是以所查找元素项为结尾的路径集合, 每一条路径其实都是一条前辍路径(perfix path). 简而言之, 一条前缀路径是介于所査找元素项与树根节点之间的所有内容.
• 创建条件FP-树: 由项头表的最后一项开始, 对每 个长度为 一 1的频繁集构造它的 的频繁集构造它的条件模式基(如前), 然后构造它的条件FP-tree,并递归地在该树上进行挖掘, 模式增长通过后缀模式与条件FP-tree产生的频繁模式连接实现.
• 以频繁项r为例, 构建关于r的条件FP树.r的三个前缀路径分别是{z}, {z, x, y,t},{x, s}. 如 果最小支持度 ( 计 数 )min_Support Support =2, 可以发现频繁项集{z, r: 2}.