关联分析
从大规模数据集中寻找物品间的隐含关系,就是关联分析(关联规则学习)。比较常用的关联规则挖掘的方法是Apriori算法。
先举例来说明什么是关联分析。下面是某个杂货店的交易清单:
交易号码 | 商品 |
---|---|
001 | 豆奶,莴苣 |
002 | 莴苣,尿布,啤酒,甜菜 |
003 | 豆奶,尿布,啤酒,橙汁 |
004 | 莴苣,豆奶,尿布,啤酒 |
005 | 莴苣,豆奶,尿布,橙汁 |
相关概念:
-
项集:由0个或多个项组成的集合。
001中有2个项(豆奶,莴苣);002中有4个项(莴苣,尿布,啤酒,甜菜)。{豆奶,甜菜}就可称之为2项集;{莴苣,尿布,啤酒,甜菜}是4项集。 -
频繁项集:经常出现在一起的物品集合。
比如{豆奶,尿布,啤酒} -
支持度:数据集中包含该项集的记录所占的比例。
{豆奶}的支持度:Sopport(豆奶) = 4/5 = 0.8
{豆奶,尿布}的支持度:Sopport(豆奶,尿布) = 3/5 = 0.6 -
置信度(可信度,confidence)
规则X=》Y的置信度表示数据集中包含X的有多大可能也包含Y。confidence(X=>Y)
confidence(X=>Y) = Support(XUY)/Support(X)
confidence(豆奶=>莴苣) = S u p p o r t ( 豆 奶 U 莴 苣 ) S u p p o r t ( 豆 奶 ) {Support(豆奶U莴苣)}\over{Support(豆奶)} Support(豆奶)Support(豆奶U莴苣) = 3 / 5 4 / 5 {3/5}\over{4/5} 4/53/5 = 3/4 = 0.75
也就是“豆奶=>莴苣”的可信度为75%,即有75%的可能性买了豆奶的人会买莴苣。
Apriori原理
假如有4种商品:商品0,商品1,商品3,商品4。现在想知道哪些是经常被购买的商品组合(可能同时购买的商品种类),通过穷举的方式可以看到可以有下面的组合形式。
想找到经常在一起购买的物品集合(项集),在上面的描述中需要计算支持度。比如对于集合{0,2},在计算其支持度时,需要遍历每一条记录,并查询该记录中是否包含0和2,如果包含就对计数值count加1。遍历完所有的数据之后,通过计数值count来除以总的交易记录数,即可得支持度。
上面的4种商品中,可能出现的组合({0},{1},{2},{3},{01},{02},{03},{1,2},{1,3},{2,3},{0,1,2},{0,1,3},{0,2,3},{1,2,3},{0,1,2,3})有4+6+4+1=15种,那么单单找{0,2}就需要遍历数据15次,即
4种商品,有
C
4
1
+
C
4
2
+
C
4
3
+
C
4
4
=
2
4
−
1
{C_4^1}+{C_4^2}+{C_4^3}+{C_4^4} = {2^4-1}
C41+C42+C43+C44=24−1商品组合;
n种商品,有
2
n
−
1
{2^n-1}
2n−1种组合;
所以,一旦商品数目增加,计算时间就很大了。
Apriori原理就是为了降低计算时间而出现的!因为Apriori原理可以减少可能感兴趣的项集。Apriori原理就是说,如果某个项集是频繁的,那么它的所有子集也是频繁的。
即在上边的问题中,如果{0, 2}是频繁的,那么{0}、{2}也是频繁的;但正面看,好像没什么用,但反过来想一想,也就是说如果一个项集不是频繁的,那么它的超集({1,2}的超集是{0,1,2},{1,2,3},{0,1,2,3})也不是频繁的。
也就是说对于项集{1,2},若已知它是不频繁的,那么就推断{0,1,2},{1,2,3},{0,1,2,3}也是不频繁的,也就不再计算{0,1,2},{1,2,3},{0,1,2,3}的支持度,这就在一定程度上减少了计算量。