数据挖掘中关联规则挖掘的应用研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据挖掘中关联规则挖掘的应用研究
吴海玲,王志坚,许峰
河海大学计算机及信息工程学院,江苏南京(210098)
摘 要:本文首先介绍关联规则的基本原理,并简单概括其挖掘任务,然后说明关联规则的经典挖掘算法Apriori 算法,通过一个实例分析进一步明确关联规则在CRM 中的应用,最后展望了关联规则挖掘的研究方向。
关键词:数据挖掘,关联规则,Apriori 算法,CRM
引言
关联规则是表示数据库中一组对象之间的某种关联关系的规则,关联规则挖掘的主要对象是交易(Transaction)数据库。这种数据库的一个主要应用是零售业,比如超级市场的销售管理。条形码技术的发展使得数据的收集变得更容易、更完整,从而可以存储大量的交易资料。关联规则就是辨别这些交易项目之间是否存在某种关系。例如:关联规则可以表示“购买了商品A 和B 的顾客中有80%的人又购买了商品C 和D”。这种关联规则提供的信息可以用作商品目录设计、商场货架的布置、生产安排、具有针对性的市场营销等。 [1]
1 关联规则的基本原理
设I={i 1,i 2,……,i m }是项的集合,设任务相关的数据D 是数据库事务的集合,其中每个事务T 是项的集合,使得T I 。每一个事务有一个标识符,称作T ID 。设X 是一个项集,事务T 包含X 当且仅当X T 。关联规则是形如X Y 的蕴涵式,其中X I ,Y ⊆I ,并且X ∩Y =∅。规则X Y 在事务集D 中成立,具有支持度s ,其中s 是D 中事务包含X ∪Y (即X 和Y 二者)的百分比,它是概率P (X ∪Y )。规则X Y 在事务集中具有可信度c ,如果D 中包含X 的事务同时也包含Y 的百分比c 。这是条件概率P (X Y ∣)。即是
⊆⊆⇒⊆⇒⇒support(X ⇒Y)= P (X Y ∪) confidence(X ⇒Y)= P (X Y ∣)
同时满足最小支持度(minsup)和最小可信度阈值(minconf )的规则称作强规则[1]。
项的集合称为项集(itemset )。包含k 个项的项集成为k -项集,例如集合{computer, software }是一个2—项集。项集的出现频率是包含项集的事务数,简称为项集的频率。项集满足最小支持度minsup ,如果项集的出现频率大于或者等于minsup 与D 中事务总数的乘积。如果项集满足最小支持度,则称它为频繁项集(frequent itemset) [2]。
2 关联规则的发现任务
关联规则挖掘的问题就是要找出这样的一些规则,它们的支持度或可信度分别大于指定的最小支持度minsup 和最小可信度minconf 。因此,该问题可以分解成如下两个子问题[3]:
1.产生所有支持度大于或等于指定最小支持度的项集,这些项目集称为频繁项目集(frequent itemsets ),而其他的项目集则成为非频繁项目集(non-frequent itemsets )
2.由频繁项集产生强关联规则。根据定义,这些规则必须满足最小支持度和最小可信度。
关联规则挖掘的问题的主要特征是数据量巨大,因此算法的效率很关键。目前研究的重点在第一步,即发现频繁项目集,因此第二步相对来说是很容易的。
3 Apriori 挖掘算法
关联规则是反应两项或多项属性之间存在的相关性,其目的是为了从一些项的属性值来预测其他属性值,同时可以应用推广所反映一个事件和其他事件之间依赖或者关联的知识。最为著名的关联规则挖掘方法是由美国学者R.Agrawal 提出的Apriori 算法,主要是用于从大规模商业数据中挖掘关联规则。
Apriori 算法利用了项目集如下性质对数据库进行多趟扫描:任意频繁项集的子集都是频繁项集;任意非频繁项集的超集都是非频繁项集。第一趟扫描得到频繁-1项集的集合L 1,
第k 趟扫描前先利用上趟扫描的结果项目集L k-1产生k -项集的集合C k ,然后再通过扫描数据库确定对C k 中每一候选k -项集的支持数,最后在该趟结束时求出频繁k 项集合L k ,算法在C k 或L k 为空时终止。
下面是Apriori 算法的伪代码:
算法:Apriori 算法,使用逐步迭代法生成频繁项集 输入:事务数据库D ;最小支持度阈值minsup 输出:D 中的频繁项集L L 1 = {large 1-itemsets}; for (k = 2; L k-1 ≠ ;k++ ) ∅ {
C k = apriori_gen (L k-1;minsup);//产生候选项 forall transactions t
D ∈ {
C t = subset (C k , t);//找出包含Ck 的事务子集
forall candidates c ∈C t { c.count++;}
L k = {c Ck| c.count/|D|≥ minsup}∈ } }
Return Answer
k k
L U
算法:apriori_gen 函数:
输入:以L k-1频繁(k-1)-项集,minsup :最小支持度作为输入参数 输出:返回所有k -项集的集合C k procedure apriori_gen (L k-1;minsup) forall itemset l 1 L ∈k-1 forall itemset l 2 L ∈k-1
if (l 1[1]= l 2[1]) …
(l ∧∧1[k-2]= l 2[k-2]) (l ∧1[k-2]< l 2[k-2]) then {
C = l 1[1] l 1[2] …l 1[k-2] l 1[k-1] l 2[k-1]};//连接产生候选项 forall(k-1)-项集 sin c {
If s ∉ L k-1 then delete c ;