购物篮数据:

TID

项集

1

{面包, 牛奶}

2

{面包, 尿布, 啤酒, 鸡蛋}

3

{牛奶, 尿布, 啤酒, 可乐}

4

{面包, 牛奶, 尿布, 啤酒}

5

{面包, 牛奶, 尿布, 可乐}

关联分析除了用于购物篮数据外, 也可以用于生物信息学, 医疗诊断, 网页挖掘和科学数据分析等.

在对购物篮数据进行关联分析时, 需要处理两个关键的问题:
- 大数据集计算代价很高
- 发现的模式可能是偶然发生的, 不可信

关联规则算法

  1. 将购物篮数据转化为二元形式来表示, 如下表, 出现过为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

  1. 求解关联规则的支持度置信度

定义:
- 关联规则:
形如项集X–>项集Y的表达式, 其中X与Y无交集, 则称之为一个关联规则
- 支持度:
一个关联规则X–>Y的支持度s=该规则组成的项集(X+Y)的支持度计数/总事务数.
如上例中: {面包, 牛奶} –> {啤酒} 的支持度={面包, 牛奶, 啤酒}的支持度计数1/总事务数5=0.4
- 置信度:
一个关联规则X–>Y的置信度=X+Y的支持度计数/X的支持度计数.
如上例中: {面包, 牛奶} –> {啤酒} 的支持度={面包, 牛奶, 啤酒}的支持度计数1/{面包, 牛奶} 的支持度3 = 1/3

注意:
为什么要用支持度和置信度?
- 支持度很低则说明是偶然发生的规则, 多半无意义, 因此支持度常用来删除那些无意义的规则
- 置信度越高, Y在包含X的事务中出现的可能性就越大, 这样推理具有可靠性

  1. 关联规则发现

定义:
- 关联规则发现
给定事务集合T, minsup(支持度阈值), minconf(置信度阈值), 找出大于阈值的规则的过程就是关联规则发现
- 频繁项集
支持度大于支持度阈值的项集称为频繁项集
- 强规则(强关联规则)
从频繁项集中提取出的高置信度的规则称为强规则
- 先验原理
如果一个项集是频繁的, 则它的所有子集也是频繁的
如果一个项集是非频繁的, 则它的所有超集(包含该项集的项集)也是非频繁的

算法:
- 蛮力法: 求出每个可能的规则的支持度和置信度, 挨个剔除.
这个方法代价很高, 从d个项中提取的可能规则总数为3d−2d+1+1 3 d − 2 d + 1 + 1
- Apriori算法
1. 产生频繁项集

1. 给定事务T, minsup支持度阈值, minconf置信度阈值
2. 扫描一遍T, 对每个一项集计数, 得出表C1={a:3, b:4, c:5, ...}.
挑出大于minsup的一项集F1假设为[{a},{b},{c},{d}]
3. 根据F1得出所有二项集=[{a,b}, {a,c}, {a,d}, ...{c,d}]
4. 在扫描一遍T, 从3中产生的二项集筛出大于minsup的二项集F2假设为[{a, b}, {a,c}]
5. 根据F2得出所有三项集=[{a,b,c}], 重复3和4的过程, 直到不再产生新的频繁项集算法结束

第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产生的频繁项集中提取规则