使用Apriori算法进行关联分析(1)

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算法发现频繁项集

使用Apriori算法进行关联分析(1)

对于去购买某杂货店的商品,假设存在N种,理论上存在2的N次方-1中购买组合可能。

按照上图给出一个示例:假设存在一些商品项集分别用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中符号|表示集合中的并操作。与频繁项集一般,关联规则也可以观察到:如果某条规则并不满足最小可信度的要求,那么该规则的子集也不可能满足最小可信度要求

使用Apriori算法进行关联分析(1)


分享到:


相關文章: