关联规则挖掘算法研究

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关联规则挖掘算法的研究

摘要:Apriori算法是发现频繁项目集的经典算法,但是该算法需反复扫描数据库,因此效率较低。本文介绍了Apriori算法的思想,同时对已经提出的经典的关联规则更新算法FUP和IUA算法进行分析,指出其优缺点;最后对另外的改进算法,做一个简单的叙述。

关键词数据挖掘;关联规则;Apriori算法

Keywords:data mining;relation rule;Apriori algorithm

关联规则反映了数据库中数据项目之间有趣的关联关系,而其中发现频繁项目集是关联规则挖掘应用中的关键技术和步骤。关于频繁项目集的挖掘算法研究,人们对此进行了大量的工作,其中以R. Agrawal 等人提出的Apriori 、AprioriTid 等算法最具有影响力和代表性。而这些算法的提出都是在挖掘数据库和最小支持度不变的条件下进行的。但实际中,遇到的情况可能是:随着时间的推移,挖掘数据库的规模可能不断膨胀或需要删除一部分记录,或者需要对最小支持度进行调整从而逐步聚集到我们感兴趣的频繁项目集上。因而如何从数据发生变动后的数据库中高效地对已经推导出的关联规则进行更新,具有非常重要的应用价值,这就是所谓的增量式挖掘关联规则的问题。

1关联规则

问题描述:设I={i1,i2,...,i m}是m个不同项目的集合,给定一个事务数据库D,其中D每一个事务T是I中一组项目的集合,即T I,T有一个惟一的标志符TID。如果对于I中的一个子集X,有X T,我们就说一个事务T包含X。一条关联规则(association rule)就是一个形如X =>Y的蕴涵式,其中X,Y T,而X∩Y=Φ。关联规则成立的条件是:①它具有最小支持度s,即事务数据库D中至少有s%的事务包含X∪Y;②它具有最小可信度c,即在事务数据库D中包含X的事务中至少有c%同时也包含Y。给定一个事务集D,挖掘关联规则问题就是产生支持度和可信度分别大于用户给定的最小支持度和最小可信度的关联规则,也就是产生强规则的问题。关联规则的挖掘问题可以分解为以下两个问题:

(1) 找出事务数据库中所有具有用户最小支持度的项目集。具有用户指定最小支持度的项目集称为频繁项目集,反之称为非频繁项目集。一个项目中所含项目的个数称为该项目的长度。

(2) 利用频繁项目集生成关联规则。对于每一个频繁项目集A,若B A,B≠Φ,且support(A)/support(B)>minconf,则有关联规则B=> (A-B)。目前大多数的研究主要集中在第一个问题上面。

2 Apriori核心算法

Agrawal等人于1994年提出了一个挖掘顾客交易数据库中项集间的关联规则的重要方法Apriori算法,其核心是基于两个阶段频繁项集思想的递推算法。算法的基本思想是首先找出所有的频集,这些项集出现的频繁性至少和预定义的最小支持度一样。然后由频繁项集产生强关联规则,这些规则必须满足最小支持度和最小可信度。Apriori核心算法思想简要描述如下:该算法中有两个关键步骤连接步和剪枝步。

(1) 连接步:为找出Lk(频繁k一项集),通过Lk-1与自身连接,产生候选k-项集,该候选项集记作Ck;其中Lk-1的元素是可连接的。

(2) 剪枝步:Ck 是Lk 的超集,即它的成员可以是也可以不是频繁的,但所有的频繁一项集都包含在Ck 中。扫描数据库,确定Ck 中每一个候选的计数,从而确定Lk(计数值不小于最小支持度计数的所有候选是频繁的,从而属于Lk)。然而,Ck 可能很大,这样所涉及的计算量就很大。为压缩Ck ,使用Apriori 性质:任何非频繁的(k-1)-项集都不可能是频繁k-项集的子集。因此,如果一个候选k-项集的(k-1)项集不在Lk 中,则该候选项也不可能是频繁的,从而可以由Ck 中删除。这种子集测试可以使用所有频繁项集的散列树快速完成。

这个方法要求多次扫描可能很大的交易数据库,即如果频集最多包含10个项,那么就需要扫描交易数据库10遍,这需要很大的I/O 负载。可能产生大量的候选集,以及可能需要重复扫描数据库,是Apriori 算法的两大缺点。

3 关联规则增量更新

关联规则反映了数据库中数据项目之间有趣的关联关系,而其中发现频繁项目集是关联规则挖掘应用中的关键技术和步骤。关于频繁项目集的挖掘算法研究,人们对此进行了大量的工作,其中以R. Agrawal 等人提出的Apriori 、AprioriTid 等算法最具有影响力和代表性。而这些算法的提出都是在挖掘数据库和最小支持度不变的条件下进行的。实际中,数据库的规模随着时间,可能不断膨胀或需要删除一部分记录,或者需要对最小支持度进行调整从而逐步聚集到我们感兴趣的频繁项目集上。因而如何高效地从更新后的数据库中对已经推导出的关联规则进行更新是具有非常重要的价值的,这就是关联规则增量更新问题。

广义上的关联规则的更新问题就是,在原有数据库DB 的基础上,对其加上(或减去)数据库db ,在新的数据库DB 上挖掘新关联规则的问题。关联规则的增量式更新问题主要有三个:①在给定的最小支持度和最小置信度下,当一个新的数据集db 添加到旧的数据库DB 中时,如何生成db ∪DB 中的关联规则;②在给定的最小支持度和最小置信度下,当从旧的数据库DB 中删除数据集db 时,如何生成DB-db 中的关联规则;③给定数据库DB ,在最小支持度和最小置信度发生变化时,如何生成数据库DB 中的关联规则。文献[2]中Agrawal R ,和Srikant R 提出的FUP 算法是一个与Apriori 算法相一致的针对第一个问题的更新算法。文献[3]中,Brin S , Motwani R , 和Silverstein C 提出的 FUP2算法是一个同时考虑第一个问题与第二个问题的算法。第三类问题则有冯玉才、冯剑琳提出的算法IUA 和PIUA [7]。

下面给出两个比较经典算法:FUP 和IUA 算法的基本思想,并分析了各自的优缺点。

(1) FUP 算法的基本思想

对任意一个k (k ≥1)项集,若其在DB 和db 中都是频繁项集,则其一定是频繁项集;若其在DB 和db 中都是非频繁项集,则其一定是非频繁项集;若其仅在DB(db)中是频繁项集,则其支持计数应加上其在db(DB)中的支持数以确定它是否为频繁项集。FUP 算法假设在DB 中发现的频繁项集Li L U n

i 1== (n 为L 中最大元素的元素个数)已被保存下来。它需要对DB 和db

进行多次扫描,在第一次扫描中,算法先扫描db ,将L 1中的元素仍为db ∪DB 中的频繁项集的元素记入L 1′,并生成候选频繁1项集C 1,C 1中的元素为db 中的频繁1项集且不包含在L 1中;然后扫描DB 以决定C 1中的元素是否为db ∪DB 中的频繁项集,并将是db ∪DB 中的频繁项集的元素记入L 1′中。在第k (k>1)此扫描前,先对L k-1′用Apriori_Gen 函数生成候选频繁k 项集C k ,并除去L k 中的元素,即C k =C k - L k ,对L k 进行剪枝,即对于XÎL k ,若存在X Y ⊂且YÎ L k-1 – L k-1′,则X 肯定不是db ∪DB 中的频繁k 项集,应将其在L k 中删除;然后扫描db ,

相关文档
最新文档