一种基于改进Apriori算法的数据库关联规则挖掘方法技术领域
本发明公开了一种基于改进Apriori算法的数据库关联规则挖掘方法,重点涉及在
用正交链表存储矩阵表示事务数据库的基础上,对Apriori算法的频繁项目集生成过程
进行改造优化,属于计算机数据挖掘及信息处理技术领域。
背景技术
在大数据技术发展如火如荼的今天,人们逐渐意识到数据即是财富,尤其是对商
业数据的分析更具有巨大的实用价值。关联规则分析作为数据挖掘的主要手段之一,
是数据挖掘技术中不可或缺的一个重要组成部分,主要用于发现大型事务数据库中隐
含的有价值的令人感兴趣的联系及规则。因此,对关联规则算法的研究具有非常重要
的意义。
早在1993年,IBM的计算机科学家R.Agrawal等人在顾客交易数据库中发现了顾
客在购买商品时的购买规律,提出了事务之间的相关性模式,即最初的关联规则。关
联规则通常是一种不复杂但实用性却很高的规则。通过关联规则分析,我们可以将事
务项集与项集之间的关系挖掘出来。关联规则分析最典型的应用是购物篮数据分析,
比如经典的{啤酒}→{尿布}规则。除了可以应用于购物篮数据之外,关联规则分析在
其它领域的应用也十分广泛,如电子商务个性化推荐,金融服务,广告策划,生物信
息学及科学数据分析等。比如说在电子商务个性化推荐中,关联规则可以帮助电子商
务网站向具有相似消费行为的顾客进行一些他们可能感兴趣的商品推荐,这样有助于
电子商务网站提升用户体验,增加盈利等。
关联规则分析算法较多,其中最经典实用性最好的是Apriori算法及其改进算法。
Apriori算法[1]是由Agrawal和Swami于1994年提出的第一个关联规则算法,应用广
泛,该算法通过重复循环执行连接、剪枝生成频繁项目集,从而建立关联规则。基于
Apriori算法,Yang等人提出了Apriori-TFP算法[2],该算法在关联规则挖掘过程中,
将原始数据进行预处理并存储在局部支持树中,最后生成关联规则。该算法通过有效
的预处理,降低了关联规则挖掘的时间,但是需要扫描数据库的次数仍然较多。Zhang
等人提出了GP-Apriori算法[3],GP-Apriori算法采用图形处理器(GraphicalProcessing
Unit,GPU)进行并行化的支持度计数,并将垂直交易列存储为线性有序阵列。GPU
通过遍历该有序阵列,并执行按位交叉实现支持度计算,并将结果复制回内存。与传
统CPU上运行的Apriori算法相比,GP-Apriori算法由于采用了先进的GPU提高了运
行速率,但是复杂性反而有所增长。Delighta等人也提出了Apriori的改进算法(Apriori
MendAlgorithm)[4]。该算法使用哈希函数生成项目集,用户必须指定最小支持度以
删除不需要的项集。该算法具有比传统Apriori算法更好的效率,但是执行时间有所增
加。Ning等基于MapReduce框架实现了乐Apriori算法的并行化[5]。该算法在处理海
量数据集时具有良好的可扩展性和效率,但是该算起需要强大的计算和存储能力支撑,
通常运行在集群环境中。Sulianta等人在文献[6]中尝试将Apriori算法应用于多维数据
分析,探讨了在多维数据中建立关联规则更加具体有效的方法。Sheila等人在文献[7]
中对Apriori算法进行了改进,引入了事务尺寸和事务规模的概念以消除非重要项目的
影响。Feng等人在文献[8]中提出了一种基于矩阵的Apriori算法,该算法通过矩阵有
效的表示数据库的各种操作,并用基于矩阵的AND操作得到最大的频繁项目集。Hu
等人在文献[9]中应用关系理论思想,引入了项目可辨识向量及其“与”运算,设计了
一种快速挖掘算法-SLIG(Single-levelLargeItemsetsGeneration)算法,将频繁项目集
的产生过程转化为项目集的关系矩阵中向量运算过程。该算法克服了Apriori及其相关
算法产生大量候选集和需多次扫描数据库的缺点,但是需要的存储空间较大。
文献引用
[1]R.Agrawal,R.Srikantetal..Fastalgorithmsforminingassociationrules(挖掘关联规则
的快速算法),Proc.20thInt.Conf.VeryLargeDataBases,VLDB,vol.1215,pp.487-499,
September1994.
[2]Z.Yang,W.Tang,A.Shintemirov,andQ.Wu.Associationrulemining-baseddissolved
gasanalysisforfaultdiagnosisofpowertransformers(基于关联规则挖掘的电力变压器
故障诊断溶解气体分析),Systems,Man,andCybernetics,PartC:Applicationsand
Reviews,IEEETransactionson,vol.39,no.6,pp.597-610,2009.
[3]F.Zhang,Y.Zhang,andJ.D.Bakos.Gpapriori:Gpu-acceleratedfrequent
itemsetmining(基于图形处理器加速的频繁项集挖掘),inCLUSTER.IEEE,2011,pp.
590-594.
[4]I.S.P.J.D.MagdaleneDelightaAngeline.AssociationrulegenerationusingApriorimend
algorithmforstudent'splacement(基于改进Apriori算法的关联规则生成算法),vol.2,no.
1,2012,pp.78-86.
[5]N.Li,L.Zeng,Q.He,andZ.Shi.Parallelimplementationofapriorialgorithmbasedon
MapReduce(基于MapReduce的Apriori算法的并行实现),inSoftwareEngineering,
ArtificialIntelligence,NetworkingandParallelDistributedComputing(SNPD),201213th
ACISInternationalConferenceon,2012,pp.236-241.
[6]F.Sulianta,T.H.Liong,andI.Atastina.Miningfoodindustry'smultidimensionaldatato
produceassociationrulesusingApriorialgorithmasabasisofbusinessstrategy(基于
Apriori算法的面向食品工业多维数据的企业战略关联规则挖掘算法),inInformation
andCommunicationTechnology(ICoICT),2013InternationalConferenceof,2013,
pp.176-181.
[7]S.A.Abaya.AssociationruleminingbasedonApriorialgorithminminimizingcandidate
generation(基于Apriori算法的最小生成候选关联规则挖掘算法),InternationalJournalof
ScientificandEngineeringResearch,vol.3,no.7,pp.1-4,July2012.
[8]WangFeng,LiYong-hua.AnImprovedAprioriAlgorithmBasedontheMatrix(一种基
于矩阵的改进Apriori算法),fbie,pp.152-155,2008InternationalSeminaronFuture
BioMedicalInformationEngineering,2008.
[9]胡慧蓉,王周敬.一种基于关系矩阵的关联规则快速挖掘算法,计算机应用,2005,
25(7):1577-1579.
发明内容
本发明提出了一种基于改进Apriori算法的数据库关联规则挖掘方法,包括基于正
交链表事务存储矩阵的改进Apriori算法-OLA(OrthogonalListApriori)算法。
本发明包括以下步骤:
步骤1,扫描事务数据库D,得到关系矩阵Ma;
步骤2,在计算机内部使用正交链表存储步骤1所述关系矩阵Ma,该正交链表包
含三种类型的节点,分别为M节点、H节点和E节点,M节点为正交链表的表头节点;
H节点为行/列表头节点,是正交链表中行链表或者列链表的表头节点;E节点为关系
矩阵中非零元素对应的节点;三种节点均包含四个域,Tag域、Element域、Right域和
Down域。Tag域为标志域,用以区分三种不同类型的节点。Element域为元素域,对
正交链表表头节点来说,元素域中的二元组存储的是对应稀疏关系矩阵的行数和列数,
即事务数据库D包含的事务数和项目数;对行表头节点来说,元素域中的二元组表示
第几行和该行中包含的非零元素个数;对列表头节点来说,元素域中的二元组表示项
目或项目集及该列中的非零元素个数;对非零元素节点来说,元素域中的二元组表示
项目或项目集及包含该项目或项目集的事务编号。Right域为指针域,对正交链表表头
节点来说其指向第一个列表头节点;对行表头节点来说,其指向该行第一个非零元素
节点;对列表头节点来说,其指向下一个列表头节点;对非零元素节点来说,其指向
该行下一个非零元素节点。Down域也为指针域,对正交链表表头节点来说其指向第一
个行表头节点;对行表头节点来说,其指向下一个列表头节点;对列表头节点来说,
其指向该列第一个非零元素节点;对非零元素节点来说,其指向该列下一个非零元素
节点;
步骤3,根据步骤2的正交链表计算得到频繁1项集集合L1以及频繁1项集集合
L1对应的正交链表;
步骤4,将频繁k-1项集集合Lk-1与自身连接产生候选频繁k项集集合Ck,k为区
间[2,∞)内的自然数;
步骤5,利用Apriori性质(频繁项集的所有非空子集也必须是频繁的,如果某个
候选的非空子集不是频繁的,那么该候选肯定不是频繁的)对候选频繁项集集合Ck进
行剪枝;
步骤6,遍历频繁k-1项集集合及频繁1项集集合对应的正交链表,得到包含项集
的事务集合并计算候选频繁k项集集合Ck中成员的支持度,其中i1为区
间[1,Nk]内的自然数,Nk表示候选频繁k项集集合Ck所包含的成员数目;
步骤7,将候选频繁k项集集合Ck中成员的支持度与最小支持度min_support
进行比较,删除支持度小于最小支持度min_support的成员,得到频繁k项集集合Lk,
并根据步骤6中所得事务集合构造频繁k项集集合Lk对应的正交链表;
步骤8,重复执行步骤4~步骤7,直到不能发现更大的频繁项目集为止;
步骤9,根据OLA算法最终获得的频繁项集集合为F,则可产生关联规则:
R={A->B},A为频繁项集集合F中任意成员的非空子集,B为A的补集,即
∈F,i2为区间[1,Nf]内的自然数,Nf表示频繁项集集合F所包含的成员数目。
步骤1中,所述关系矩阵Ma如下:
并有:
其中,I={I1,I2,…,I|I|}是事务数据库D所包含的项目集合,|I|为数据库D所包
含的项目数,|D|为事务数据库包含的事务数,dij表示矩阵的元素,i为区间[1,|D|]内的
自然数,j为区间[1,|I|]内的自然数。
步骤3中,所述计算过程如下:遍历步骤2得到的正交链表的列表头节点,得到
项目集合I={I1,I2,…,I|I|}中各项目成员在所有事务中出现的次数,分别为N1,N2,…,
N|I|,包含项目集合Ij的事务集合为T({Ij}),根据以下公式计算得到各项目支持度
sup(Ij):
sup(Ij)=Nj/|D|,j∈[1,|I|],
将各项目支持度与所设置最小支持度min_support进行比较,并删除支持度小于最
小支持度的项目成员,得到频繁1项集集合L1,基于频繁1项集集合L1中各元素对应
的事务集合T({Ij}),得到频繁1项集集合L1对应的正交链表。
步骤4中,参考背景技术中引用文献1,连接过程如下:设m1和m2是频繁k-1
项集集合Lk-1的任意两个成员,成员中的项目按字典次序排序,即对于成员有
其中表示成员中的第i4个项目,其中i3∈{0,1},
i4∈{1,2,…,k-1},如果成员m1和m2中前k-2个项目均相同,成员m1的第k-2个项目
小于成员m2的第k-2个项目,即
(m1[1]=m2[1])&&(m1[2]=m2[2])&&…&&(m1[k-2]=m2[k-2])&&(m1[k-1]<m2[k-1]),则判定
m1和m2是可连接的,连接m1和m2产生的结果是{m1[1],m1[2],……,m1[k-1],m2[k-1]}。
步骤5中,所述剪枝操作过程如下:遍历频繁k-1项集集合对应的正交链表的列
表头节点,对候选k项集集合Ck的成员若其包含k-1个元素的所有子集均在列表
头节点中,则将成员保留在候选频繁项集集合Ck中,否则将其从Ck中删除。
步骤6中,计算所述支持度的步骤包括:
候选频繁k项集集合Ck中成员则事
务集合T(ci)=T(I1,I2,...,Ik-1,Ik)=T(I1,I2,...,Ik-1)∩T(Ik),即包含项集集合的事务集
合T(ci)是包含项集集合{I1,I2,…,Ik-1}的事务集合T(I1,I2,...,Ik-1)与包含项集集合{Ik}
的事务集合T(Ik)的交集,遍历频繁k-1项集集合对应的正交链表中项集{I1,I2,…,
Ik-1}对应的列,可得到事务集合T(I1,I2,...,Ik-1),遍历频繁1项集集合对应的正交链表
中项集集合{Ik}对应的列,得到事务集合T(Ik),则通过以下公式计算k项集集合的
支持度:
sup({I1,I2,...,Ik})=N(T(I1,I2,...,Ik-1)∩T(Ik))/|D|,k∈[1,n],
其中,N(T(I1,I2,...,Ik-1)∩T(Ik))表示事务集合T(I1,I2,...,Ik-1)和事务集合T(Ik)的
交集所包含的事务数。
本发明中,项集集合的成员为项集,项集的成员为项目。
有益效果:本发明将事务数据库转化为关系矩阵,由于通常每个事务中仅包含少
量的项目,因此转化后的关系矩阵为稀疏矩阵,为了降低算法的空间复杂度,该算法
使用正交链表存储关系矩阵。频繁项目集的产生过程转化为对应关系矩阵中项目所对
应单链表的节点集合的运算过程。该算法只需扫描数据库一遍,克服了Apriori及其相
关算法产生大量候选集和需多次扫描数据库的缺点,减少了频繁进行I/O操作的时间;
其次,生成和发现频繁2-项集时只需要进行节点集合的交运算,耗费时间较少,并且
对生成的频繁k-项集构造单链表进行记录,简化了频繁k+1-项集的生成过程,避免了
Apriori算法复杂的剪枝过程。最后,算法采用正交链表存储结构,大大降低了对存储
空间的需求。
附图说明:
图1为本发明事务数据库D。
图2为本发明关系矩阵。
图3为本发明关系矩阵正交链表。
图4为本发明候选2项集各成员支持度。
图5为本发明频繁2项集正交链表。
图6为本发明频繁3项集正交链表。
图7为本发明关联规则。
具体实施方案:
本发明提出了一种基于改进Apriori算法的数据库关联规则挖掘方法,包括以下步
骤:
步骤1,扫描事务数据库D,得到关系矩阵Ma;
步骤2,在计算机内部使用正交链表存储步骤1所述关系矩阵Ma,该正交链表包
含三种类型的节点,分别为M节点、H节点和E节点,M节点为正交链表的表头节点;
H节点为行/列表头节点,是正交链表中行链表或者列链表的表头节点;E节点为关系
矩阵中非零元素对应的节点;三种节点均包含四个域,Tag域、Element域、Right域和
Down域。Tag域为标志域,用以区分三种不同类型的节点。Element域为元素域,对
正交链表表头节点来说,元素域中的二元组存储的是对应稀疏关系矩阵的行数和列数,
即事务数据库D包含的事务数和项目数;对行表头节点来说,元素域中的二元组表示
第几行和该行中包含的非零元素个数;对列表头节点来说,元素域中的二元组表示项
目或项目集及该列中的非零元素个数;对非零元素节点来说,元素域中的二元组表示
项目或项目集及包含该项目或项目集的事务编号。Right域为指针域,对正交链表表头
节点来说其指向第一个列表头节点;对行表头节点来说,其指向该行第一个非零元素
节点;对列表头节点来说,其指向下一个列表头节点;对非零元素节点来说,其指向
该行下一个非零元素节点。Down域也为指针域,对正交链表表头节点来说其指向第一
个行表头节点;对行表头节点来说,其指向下一个列表头节点;对列表头节点来说,
其指向该列第一个非零元素节点;对非零元素节点来说,其指向该列下一个非零元素
节点;
步骤3,根据步骤2的正交链表计算得到频繁1项集集合L1以及频繁1项集集合
L1对应的正交链表;
步骤4,将频繁k-1项集集合Lk-1与自身连接产生候选频繁k项集集合Ck,k为区
间[2,∞)内的自然数;
步骤5,利用Apriori性质(频繁项集的所有非空子集也必须是频繁的,如果某个
候选的非空子集不是频繁的,那么该候选肯定不是频繁的)对候选频繁项集集合Ck进
行剪枝;
步骤6,遍历频繁k-1项集集合及频繁1项集集合对应的正交链表,得到包含项集
的事务集合并计算候选频繁k项集集合Ck中成员的支持度,其中i1为区
间[1,Nk]内的自然数,Nk表示候选频繁k项集集合Ck所包含的成员数目;
步骤7,将候选频繁k项集集合Ck中成员的支持度与最小支持度min_support
进行比较,删除支持度小于最小支持度min_support的成员,得到频繁k项集集合Lk,
并根据步骤6中所得事务集合构造频繁k项集集合Lk对应的正交链表;
步骤8,重复执行步骤4~步骤7,直到不能发现更大的频繁项目集为止;
步骤9,根据OLA算法最终获得的频繁项集集合为F,则可产生关联规则:
R={A->B},A为频繁项集集合F中任意成员的非空子集,B为A的补集,即
∈F,i2为区间[1,Nf]内的自然数,Nf表示频繁项集集合F所包含的成员数目。
步骤1中,所述关系矩阵Ma如下:
并有:
其中,I={I1,I2,…,I|I|}是事务数据库D所包含的项目集合,|I|为数据库D所包
含的项目数,|D|为事务数据库包含的事务数,dij表示矩阵的元素,i为区间[1,|D|]内的
自然数,j为区间[1,|I|]内的自然数。
步骤3中,所述计算过程如下:遍历步骤2得到的正交链表的列表头节点,得到
项目集合I={I1,I2,…,I|I|}中各项目成员在所有事务中出现的次数,分别为N1,N2,…,
N|I|,包含项目集合Ij的事务集合为T({Ij}),根据以下公式计算得到各项目支持度
sup(Ij):
sup(Ij)=Nj/|D|,j∈[1,|I|],
将各项目支持度与所设置最小支持度min_support进行比较,得到频繁1项集集合
L1,基于频繁1项集集合L1中各元素对应的事务集合T({Ij}),得到频繁1项集集合
L1对应的正交链表。
步骤4中,参考背景技术中引用文献1,连接过程如下:设m1和m2是频繁k-1
项集集合Lk-1的任意两个成员,成员中的项目按字典次序排序,即对于成员有
其中表示成员中的第i4个项目,其中i3∈{0,1},
i4∈{1,2,…,k-1},如果成员m1和m2中前k-2个项目均相同,成员m1的第k-2个项目
小于成员m2的第k-2个项目,即
(m1[1]=m2[1])&&(m1[2]=m2[2])&&…&&(m1[k-2]=m2[k-2])&&(m1[k-1]<m2[k-1]),则判定
m1和m2是可连接的,连接m1和m2产生的结果是{m1[1],m1[2],……,m1[k-1],m2[k-1]}。
步骤5中,所述剪枝操作过程如下:遍历频繁k-1项集集合对应的正交链表的列
表头节点,对候选k项集集合Ck的成员若其包含k-1个元素的所有子集均在列表
头节点中,则将成员保留在候选频繁项集集合Ck中,否则将其从Ck中删除。
步骤6中,计算所述支持度的步骤包括:
候选频繁k项集集合Ck中成员则事
务集合T(ci)=T(I1,I2,...,Ik-1,Ik)=T(I1,I2,...,Ik-1)∩T(Ik),即包含项集集合的事务集
合T(ci)是包含项集集合{I1,I2,…,Ik-1}的事务集合T(I1,I2,...,Ik-1)与包含项集集合{Ik}
的事务集合T(Ik)的交集,遍历频繁k-1项集集合对应的正交链表中项集{I1,I2,…,
Ik-1}对应的列,可得到事务集合T(I1,I2,...,Ik-1),遍历频繁1项集集合对应的正交链表
中项集集合{Ik}对应的列,得到事务集合T(Ik),则通过以下公式计算k项集集合的
支持度:
sup({I1,I2,...,Ik})=N(T(I1,I2,...,Ik-1)∩T(Ik))/|D|,k∈[1,n],
其中,N(T(I1,I2,...,Ik-1)∩T(Ik))表示事务集合T(I1,I2,...,Ik-1)和事务集合T(Ik)的
交集所包含的事务数。
实施例1
通过如图1所示的一个简单的事务数据库D对OLA算法的步骤进行描述,并对其
性能进行简单的分析,设置的最小支持度min_support=30%。
1)根据OLA算法,首先对图1所示的事务数据库D进行扫描,事务数据库D中
共包含10个事务T1-T10,6个项目I1-I6。扫描事务数据库D将得到如图2所示的关系
矩阵A,关系矩阵A的第i行对应数据库D的事务Ti,i∈[1,10],第j列对应数据库D
中的项目Ij,j∈[1,6],关系矩阵中的非零元素aij表示项目Ij包含在事务Ti中。将关系
矩阵A用正交链表表示,如图3所示,图3中M类型的节点为正交链表的表头节点,
H类型的节点表示正交链表的行/列表头节点,E类型节点为关系矩阵中非零元素对应
的节点。
2)接下来,遍历正交链表的各列,可得项目集I={A,B,C,D,E,F}中各项目
在所有事务中出现的次数分别为5,4,5,3,5,6。根据公式sup(Ij)=Nj/|D|,j∈[1,6]
计算,可得各项目支持度分别为0.5,0.4,0.5,0.3,0.5,0.6,均大于预设最小支持度
min_support=0.3,则频繁1项集集合L1={{A},{B},{C},{D},{E},{F}}。由于所
有项目均属于频繁1项集的成员,因此频繁1项集对应的正交链表即为关系矩阵A对
应的正交链表。
4)将频繁1项集集合L1进行自连接产生候选频繁2项集集合C2,如图4所示,
C2={{AB},{AC},{AD},{AE},{AF},{BC},{BD},{BE},{BF},{CD},{CE},
{CF},{DE},{DF},{EF}}。由于所有的项目Ij,j∈[1,6]均为频繁1项集的成员,因
此对于频繁2项集集合无需根据Apriori性质进行剪枝。
5)对候选频繁2项集集合C2中的所有成员,计算其支持度。比如说对于候选频
繁2项集{AB},分别遍历频繁1项集所对应正交链表中项目A、B对应的列,可得包
含项目A的事务集合为T(A)={1,5,6,8,10},包含项目B的事务集合T(B)={2,4,
6,7},则包含项目集{AB}的事务集合T(AB)=T(A)∩T(B)={6},则项目集{AB}的支
持度sup({AB})=0.1。同理可计算候选频繁2项集集合C2中其它所有成员的支持度
如图4所示。
6)将候选频繁2项集集合C2中所有成员的支持度与最小支持度min_support=0.3
进行比较,删除支持度小于最小支持度min_support的成员,得到频繁2项集集合
L2={{AE},{AF},{BC},{EF}},构造频繁2项集集合对应的正交链表如图5所示。
7)将频繁2项集集合L2进行自连接产生候选频繁3项集集合C3,C3={{AEF}}。
遍历频繁2项集集合对应正交链表中项集{AE}对应的列,可得包含项目集{AE}的事务
集合T(AE)={1,6,10},遍历频繁1项集集合对应的正交链表中项集{F}对应的列,
可得包含项目集{F}的事务集合T(F)={1,4,5,6,8,10},则T(AEF)=T(AE)∩T(F)
={1,6,10}。根据OLA算法计算可得项目集{AEF}的支持度为0.3,大于等于最小支
持度。因此,频繁3项集集合L3={{AEF}},并且构造频繁3项集集合对应正交链表如
图6所示。由于频繁3项集集合L3中只有一个成员,因此其为极大频繁项目集,生成
频繁项目集过程结束。
8)根据OLA算法产生如图7所示的关联规则。
性能:该实例中,运行OLA算法与Apriori算法所获得的频繁项集完全相同,Apriori
算法需要扫描事务数据库21次,而OLA算法仅需要扫描数据库1次,大大降低了算
法的运行时间,提高了效率。
本发明提供了一种基于改进Apriori算法的数据库关联规则挖掘方法,具体实现该
技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于
本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改
进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成
部分均可用现有技术加以实现。