一种高效挖掘关联规则中频繁项集的方法与流程

文档序号:12364166阅读:2679来源:国知局

本发明涉及数据挖掘技术,尤其涉及一种高效挖掘关联规则中频繁项集的方法。



背景技术:

随着计算机的普及应用和计算机网络的飞速发展,在过去若干年里,无论是商业企业、科研机构或者政府部门,各个领域都积累了海量的并以不同形式存储的数据。面对如此多的数据,人们不再满足于日常的事务处理,而是更加关注能否从形式不同的,分散的,纷繁复杂的数据环境中得到有用的决策信息,从而可以做出正确的分析和决策,广泛的应用到商业、网络安全等领域。

关联分析是数据挖掘的一项重要研究内容。其主要任务是从事务数据库中获取频繁项,然后再由这些频繁项生成相应的关联规则。用以发现隐藏在大量数据中的有价值信息。如今,关联分析在商业、电信、农业、医学、教育、金融等领域有着广泛的应用。Apriori方法是关联分析的一个最为经典的方法,该方法首先通过最小支持度来获取事务数据库中所有的频繁项,然后再通过最小置信度来挖掘出关联规则。其中,频繁项的获取是关联规则挖掘中的关键,其计算复杂度决定了整个挖掘方法的时间复杂度,在Apriori方法中,这个过程需要频繁的扫描数据库,因此耗费了大量的时间。



技术实现要素:

为了解决以上问题,本发明提出了一种高效挖掘关联规则中频繁项集的方法。

一种高效挖掘关联规则中频繁项集的方法:

(1)扫描数据库,构造二项集的支持度矩阵。分别以项目集合I中的各个项作为矩阵的行标和列标,用Iik表示项二项集{Ii,Ik}(i≤k)在事务数据库D中出现的次数,此矩阵为对称矩阵,构造的二项集支持度矩阵M如图1所示:

图1二项集支持度矩阵

通过扫描数据库,若扫描到一条事务中包含{Ii,Ik}项,则对位于矩阵坐标[i,k],[i,i],[k,k]中的元素计数分别加1。

(2)逐行扫描矩阵,找出该行中不小于最小支持度计数的元素Iij,到j行搜索该行中不小于最小支持度计数的元素Ijk,再定位到矩阵Iik中,若Iik不小于最小支持度计数,则连接生成候选三项集{Ii,Ij,Ik}。方法如下:

输入:上三角矩阵M,最小支持度计数min_supcount

输出:候选三项集表C3

方法:

(3)由Ck生成候选k+1项集表Ck+1(k≥3),由于生成的候选k项集表Ck是按字典顺序排列的。对于每个候选k项集X,从X在Ck之后的位置中查找以X后k-1个项开始的其他候选k项集,若找到这样一个候选k项集Y,则把X的第一个项Ir和Y的最后一个项Is的标号连接形成矩阵坐标[r,s],到矩阵M中查找这个坐标上的值是否大于最小支持度计数,如果大于或等于,则生成候选k+1项集,如果不大于,则不予连接,继续查找下一个,直到Ck中的最后一个k项集。至此候选k+1项集表构造结束。

(4)第二次扫描数据库,因在生成支持度矩阵时,已经产生了频繁二项集,所以这里只对生成的候选k项集表Ck(k≥3)中的每个k项集进行计数。并对其进行筛选,最后形成频繁k项集。

本发明的有益效果是

本发明通过支持度矩阵表示数据库中所有一项集和二项集的支持度,在一定程度上可以减轻内存负担,减少扫描数据库次数,通过生成二项集支持度矩阵避免了产生无效的二项集,解决了二项集瓶颈的问题。同时利用矩阵的优势对连接和剪枝步做了改进,提高了挖掘频繁项的效率。

附图说明

图1是二项集支持度矩阵M示意图。

具体实施方式

下面对本发明的内容进行更加详细的阐述:

设有一个事务数据库D={T1,T2,T3,T4,……,Tn},项目集合I={I1,I2,I3,I4……,Im},它是事务数据库D中出现的所有数据项的集合。其中包含k个数据项的项集称为k项集。k项集X在事务数据库D中的百分比称为X的支持度。如果此支持度大于或等于用户设定的最小阈值(此阈值即为最小支持度),则称X为频繁k项集。

Apriori方法:

(1)首先扫描数据库,生成频繁一项集,构建频繁一项集表L1。

(2)由L1中的频繁一项集相互连接生成候选二项集,生成候选二项集表C2。

(3)第二次扫描数据库,对C2中的二项集进行计数,找出其中大于最小支持度的二项集,生成频繁二项集表L2。

(4)由L2中的频繁二项集连接生产三项集,并根据性质:一个非频繁项的所有的超集都是非频繁的。对这些生成的三项集进行剪枝:如果生成的某三项集中只要有一个子集不在L2中,那么就把此三项集删除,最后由未经删除的三项集组成候选三项集表C3。

(5)第三次扫描数据库,对C3中的三项集进行计数,找出大于最小支持度的三项集,生成频繁三项集表L3。这样依次由频繁k项集表生成频繁k+1项集表,直至不能生成更高维的频繁项集为止。

Apriori方法的有以下几个缺点:

①需要频繁的扫描数据库,这对我们经常遇到的海量数据库以及平均事务宽度很长的数据库来说,这个I/O开销是非常大的。

②生成了大量的候选二项集,产生了二项集瓶颈问题,其中有许多是无效的二项集。这样不但占用了较多的空间,而且增加了步骤(3)的工作量。

③在生成的每一个候选三项集时的连接和剪枝阶段都要多次对L2进行扫描,且搜索空间较大,效率较低。

一种高效挖掘关联规则中频繁项集的方法--Apriori-M方法:

(1)扫描数据库,构造二项集的支持度矩阵。分别以项目集合I中的各个项作为矩阵的行标和列标,用Iik表示项二项集{Ii,Ik}(i≤k)在事务数据库D中出现的次数,此矩阵为对称矩阵,构造的二项集支持度矩阵M如图1所示:

通过扫描数据库,若扫描到一条事务中包含{Ii,Ik}项,则对位于矩阵坐标[i,k],[i,i],[k,k]中的元素计数分别加1。

(2)逐行扫描矩阵,找出该行中不小于最小支持度计数的元素Iij,到j行搜索该行中不小于最小支持度计数的元素Ijk,再定位到矩阵Iik中,若Iik不小于最小支持度计数,则连接生成候选三项集{Ii,Ij,Ik}。如下:

输入:上三角矩阵M,最小支持度计数min_supcount

输出:候选三项集表C3

方法:

(3)由Ck生成候选k+1项集表Ck+1(k≥3),由于生成的候选k项集表Ck是按字典顺序排列的。对于每个候选k项集X,从X在Ck之后的位置中查找以X后k-1个项开始的其他候选k项集,若找到这样一个候选k项集Y,则把X的第一个项Ir和Y的最后一个项Is的标号连接形成矩阵坐标[r,s],到矩阵M中查找这个坐标上的值是否大于最小支持度计数,如果大于或等于,则生成候选k+1项集,如果不大于,则不予连接,继续查找下一个,直到Ck中的最后一个k项集。至此候选k+1项集表构造结束。

(4)第二次扫描数据库,因在生成支持度矩阵时,已经产生了频繁二项集,所以这里只对生成的候选k项集表Ck(k≥3)中的每个k项集进行计数。并对其进行筛选,最后形成频繁k项集。值得注意的是有许多改进方法对生成的对角矩阵进行深度遍历,这样能更好的提高获取最高维频繁项的连接效率,但是却不能及时的进行剪枝,极有可能会造成许多连接的浪费,此外,它实际上只生成了候选频繁项集表,但并没有对数据库进行第二次扫描,对其中的候选项集进行验证,这样就很有可能将非频繁k项集划为频繁k项集,如考虑由表1所示的数据库D1这种情况:

表1数据库D1

设最小支持度计数是2,则会有频繁二项集{a,b}{b,c}{a,c},按照此方法的做法,会生成频繁三项集{a,b,c}。但是三项集{a,b,c}并不在数据库中。所以应该对数据库进行第二次扫描,以避免这种错误。

通过实验结果可以看出:无论是在不同的数据规模上还是在不同的最小支持度的情况下Apriori-M的在时间上的耗费比Apriori要小,而且随着数据库的增大,这种优势会更加明显,因而更加适合大型数据库关联规则的挖掘。通过对本发明提出的Apriori-M方法分析,我们可以看出:

第一,该发明减少了对数据库的扫描次数,当频繁项的最高维数是k时,Apriori方法需要扫描k次数据库才能挖掘出所有的频繁项,而本方法,在保证不会错误的获取k项集时,仅需扫描数据库两次,就能挖掘出所有的频繁项集,减少了I/O花销。

第二,充分利用矩阵的性质,进行连接时,只到特定的行中搜索频繁二项集,搜索空间要远比在Lk小,而且由于这是一个上三角矩阵,随着连接过程的深入,所要搜索的空间会越来越小。因此可以比Apriori方法中的连接步节省更多的时间,进行剪枝时,则只需定位到矩阵特定的坐标中,根据其元素的值来决定是否剪枝,大大提高了剪枝效率。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1