1 关联规则的基本概念
1.1 关联规则的意义
1.2 关联规则的定义
。对应每一个事务有唯一的标识,如事务号,记作TID。设X是一个I中项的集合,如果XT,那么称事务T包含X。
一个关联规则是形如XY的蕴涵式,这里XI, YI,并且XY=F。规则XY在事务数据库D中的支持度(support)是事务集中包含X和Y的事务数与所有事务数之比,记为support(XY),即
support(XY)=
P(X Y)
规则XY在事务集中的可信度(confidence)是指包含X和Y的事务数与包含X的交易数之比,记为confidence(XY),即
confidence(XY)=
P(X|Y)
给定一个事务集D,挖掘关联规则问题就是寻找支持度和可信度分别大于用户给定的最小支持度(minsupp)和最小可信度(minconf)的关联规则。
1.3 关联规则的相关性分析
比如,计算机学院学生成绩库中,有15%的同学的《数据结构》和《离散数学》都是优,其中70%《数据结构》得优的同学《离散数学》的成绩是优。用数学公式表达这个关联规则就是:
数据结构(优) à 离散数学(优),support=15%,confidence=70%
这样一个关联规则能够启示我们,数据结构作为计算机学院十分重要的必修课,要取得好的教学成果,必须加强其先行课程《离散数据》的重视程度。
同时,实际挖掘出来的一些关联规则,并非都是有用的,甚至是有一定的误导性。比如,40%的计算机学院02级同学的《法律基础》和《大学体育4》都是优,其中86%《法律基础》为优的同学,《大学体育4》是得的优。如果我们认为《大学体育4》是十分依靠先行课程《法律基础》,那么就是错误的。实际情况是《大学体育4》是游泳课,因为考核十分容易,90%以上的同学都拿到优。所以,《大学体育4》的成绩其实跟《法律基础》这门课程是没有必然联系的。
针对这类情况,标准的做法是通过简单的相关性分析[11],来排除这类蕴涵关系的规则。相关性的度量:
CorrA,B = P(A∪B) / (P(A)*P(B)) = P(B|A)/P(B)
很容易计算出来,区别事务A和事务B之间的相关性,将其结果小于1的,既是称之为负相关。在最后的规则产生的时候,需要删除负相关的规则。
比如上面的《法律基础》和《大学体育4》的例子。以A表示《法律基础》课程为优的事务,B表示《大学体育4》为优的事务。
P(B|A)/P(B) = P(大学体育4 | 法律基础) / P(大学体育4)
= 86% / 90% < 1。则它们是负相关的,应该是没有实际意义的关联规则。
2 关联规则的基本算法Apriori
关联规则的挖掘可以分成两个步骤:
1. 根据最小的支持度,在大量事务寻找高频率出现的频繁项集(Itemset)。
2. 根据最小的置信度,找到的频繁项集产生关联规则。
其中第二个步骤比较容易,一般经过第一步的筛选后的频繁项集都不会很多,通过子集产生法就可以产生关联规则。第一个步骤是需要在大量的事务数据集中寻找高频率出现的项集Itemset,所以就需要一个比较高效的搜索查找方法。
Rakesh Agrawal等在1993年提出了第一步搜索频繁项集的经典Apriori算法[12,13]。通过遍历一大堆事务数据中,从一个一个的单个项开始记数,每次遍历完所有的事务后,裁减掉支持度记数少于用户给定的支持度的项,然后逐步扩展到多项事务。最后保留下来的频繁项集,通过子集产生法来产生关联规则,然后去掉其中置信度低于用户指定的最低置信度的关联规则,最后剩下的就是满足用户需要的关联规则。
Apriori算法的特点就是在于从单项开始,每次剪裁一点,利用Apriori性质[13],有效避免了对很多不可能的项的搜索过程。
2.1 Apriori性质
6.2.2 Apriori算法
Apriori算法的频繁项集查找是一个逐层迭代的方法。每层查找分成项集itemset的连接和剪枝两个步骤。连接步骤是在为找k-项频繁项集Lk,通过k-1项频繁项集Lk
- 1与自己连接产生候选k-项集的集合Ck。剪枝步骤是扫描事务数据集,去掉那些支持度小于指定最小支持度的事务项。
算法开始从最简单的1-项开始进行筛选,找出L1后,L1与L1自身连接产生C2,然后对C2的所有事务项进行筛选后,产生L2,由此,不断迭代下去,直到最后Lk为空集。
下面是引用参考文献13中的Apriori算法伪代码参考。
算法Apriori 输入:事务数据库D;最小支持度阈值。 输出:D中的频繁项集L。 方法: 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) procedure apriori_gen(Lk-1: frequent (k-1)-itemset; min_sup: support) 1) 2) 3) 4) 5) 6) 7) 8) 9) procedure has_infrequent_subset(c:candidate k-itemset; L // use priori knowledge 1) 2) 3) 4) |
2.3 根据频繁项集产生关联规则
,设C为{Ik1,Ik2,Ik3,…,Ikn}。
2.4 Apriori基本算法的缺陷
文章来自:http://maocom.com/resources/program/html/2006716/2781.htm