购物篮数据:
TID | 项集 |
1 | {面包, 牛奶} |
2 | {面包, 尿布, 啤酒, 鸡蛋} |
3 | {牛奶, 尿布, 啤酒, 可乐} |
4 | {面包, 牛奶, 尿布, 啤酒} |
5 | {面包, 牛奶, 尿布, 可乐} |
关联分析除了用于购物篮数据外, 也可以用于生物信息学, 医疗诊断, 网页挖掘和科学数据分析等.
在对购物篮数据进行关联分析时, 需要处理两个关键的问题:
- 大数据集计算代价很高
- 发现的模式可能是偶然发生的, 不可信
关联规则算法
- 将购物篮数据转化为二元形式来表示, 如下表, 出现过为1, 没出现为0
TID | 面包 | 牛奶 | 尿布 | 啤酒 | 鸡蛋 | 可乐 |
1 | 1 | 1 | 0 | 0 | 0 | 0 |
2 | 1 | 0 | 1 | 1 | 1 | 0 |
3 | 0 | 1 | 1 | 1 | 0 | 0 |
4 | 1 | 1 | 1 | 1 | 0 | 0 |
5 | 1 | 1 | 1 | 0 | 0 | 1 |
2. 计算项集和支持度计数
- 项集: 包含k个项的集合称为k项集, k=0,1,… 如:
- 1项集: {面包}
- 2项集: {面包, 牛奶}
- 3项集: {面包, 牛奶, 啤酒}
- 支持度计数: 包含该项集的事务的个数(即购物篮中该项集出现过几次), 如上例中:
- {面包, 牛奶}的支持度计数为3
- {啤酒, 尿布}的支持度计数为3
- 求解关联规则的支持度和置信度
定义:
- 关联规则:
形如项集X–>项集Y的表达式, 其中X与Y无交集, 则称之为一个关联规则
- 支持度:
一个关联规则X–>Y的支持度s=该规则组成的项集(X+Y)的支持度计数/总事务数.
如上例中: {面包, 牛奶} –> {啤酒} 的支持度={面包, 牛奶, 啤酒}的支持度计数1/总事务数5=0.4
- 置信度:
一个关联规则X–>Y的置信度=X+Y的支持度计数/X的支持度计数.
如上例中: {面包, 牛奶} –> {啤酒} 的支持度={面包, 牛奶, 啤酒}的支持度计数1/{面包, 牛奶} 的支持度3 = 1/3
注意:
为什么要用支持度和置信度?
- 支持度很低则说明是偶然发生的规则, 多半无意义, 因此支持度常用来删除那些无意义的规则
- 置信度越高, Y在包含X的事务中出现的可能性就越大, 这样推理具有可靠性
- 关联规则发现
定义:
- 关联规则发现
给定事务集合T, minsup(支持度阈值), minconf(置信度阈值), 找出大于阈值的规则的过程就是关联规则发现
- 频繁项集
支持度大于支持度阈值的项集称为频繁项集
- 强规则(强关联规则)
从频繁项集中提取出的高置信度的规则称为强规则
- 先验原理
如果一个项集是频繁的, 则它的所有子集也是频繁的
如果一个项集是非频繁的, 则它的所有超集(包含该项集的项集)也是非频繁的
算法:
- 蛮力法: 求出每个可能的规则的支持度和置信度, 挨个剔除.
这个方法代价很高, 从d个项中提取的可能规则总数为3d−2d+1+1
3
d
−
2
d
+
1
+
1
- Apriori算法
1. 产生频繁项集
第3步中如何得出所有k(此处为2)项集:
- 蛮力法: 把所有可能的k项集都列出来, 再挨个筛掉
- Fk−1∗F1
F
k
−
1
∗
F
1
- Fk−1∗Fk−1
F
k
−
1
∗
F
k
−
1
:
对于所有的k-1频繁项集, 仅当他们的前k-2个项都相同, 才合并
关联分析中使用Hash树进行支持度计数的原理未搞懂 TODO
2. 从1产生的频繁项集中提取规则