1.1关联分析
关联分析是一种在大规模数据集中寻找有趣关系的任务。这些关系可以有两种形式:频繁项集或关联规则。
频繁项集(frequent Item sets):是经常出现在一块的物品集合;
关联关系(association rules):暗示两种物品之间可能存在很强的关系;
如下给出了一个某杂货店的交易清单。
频繁项集是指经常在一起的物品集合,如图中{葡萄酒,尿布,豆奶}就是频繁项集的一个例子。同时也能找到关联规则诸如:尿布à葡萄酒规则,意味着如果有人买了尿布就很有可能也会购买葡萄酒。
一个项集的支持度(support)被定义为数据集中包含该项集的记录所占的比例。从上图中可以达到{豆奶}的支持度为4/5,而{豆奶,尿布}在5条交易记录中有出现3次,因而{豆奶,尿布}的支持度为3/5。
可信度或置信度(confidence)是针对一条诸如{尿布}à{葡萄酒}的关联规则来定义的。这条规则被定义为:“支持度({尿布,葡萄酒})/({尿布})”。如上图所示的,{尿布,葡萄酒}的支持度为3/5,尿布支持度为4/5,所以“尿布à葡萄酒”的可信度为3/4=0.75。这意味着对于所有包含“尿布”的所有记录。
1.2Apriori原理
假设一家杂货铺,那些经常被一起购买的商品被假设为:商品0,商品1,商品2,和商品3。按照前面提到的支持度规则,得到某件商品的支持度需要所有商品可能出现的组合进行遍历,就是说,4种商品就有15种组合出现的可能。比如说商品{1}的支持度为:1/15。显然有一个很明显的问题:N中商品的数据集共有2N-1种项集组合。假设有100种商品就会有1.26*1030种可能的项集组合,这对于现代计算机来说是一个长时间的运算过程。
Apriori原理就是说如果某个项集是频繁的,那么他的子集也是频繁的。反过来看,如果一个项集是非频项集,那么它的所有超集也是非频繁的。
1.3使用Apriori算法发现频繁项集
按照上图给出一个示例:假设存在一些商品项集分别用1,2,3,4,5表示。
假定存在数据集dataSet:[[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
由数据集获得第一个候选项集合C1:[frozenset([1]), frozenset([2]), frozenset([3]), frozenset([4]), frozenset([5])],C1中包含了每个frozenset中的单个物品项
构建集合表示数据集D:[set([1, 3, 4]), set([2, 3, 5]), set([1, 2, 3, 5]), set([2, 5])];
按照数据集计算支持度:Support(1) = 1/2;Support(2) = 3/4; Support(3) = 3/4; Support(4) = 1/4; Support(5) = 3/4;
和最小支持度作对比得到L1:[frozenset([1]), frozenset([3]), frozenset([2]), frozenset([5])];
经过上述步骤,得到的L1列表出现的事物至少出现在50%以上的记录中(物品4并没有达到最小支持度,所以清除出列表)。
重复以上步骤,通过减少商品减少查找频繁项集的工作量。
1.4从频繁项集中挖掘关联规则
首先默认从频繁项集中寻找关联规则,很显然一个频繁项集{豆奶,莴苣}假设存在一个关联规则“豆奶à莴苣”,意味着购买豆奶的人很大可能会购买莴苣,但是这个规则反过来“莴苣à豆奶”却并不一定成立。(从逻辑研究上来讲,箭头左边的集合称作前件,箭头右边称为后件)。
前面也提到频繁项集使用支持度来量化,而关联规则也有自己的量化方式:可信度。一条关联规则的可信度PàH的可信度定义为support(P|H)/support(P),在python中符号|表示集合中的并操作。与频繁项集一般,关联规则也可以观察到:如果某条规则并不满足最小可信度的要求,那么该规则的子集也不可能满足最小可信度要求。
閱讀更多 一兒口山石 的文章