一种基于组链表的高效频繁项集挖掘方法与流程

文档序号:11519834阅读:167来源:国知局
一种基于组链表的高效频繁项集挖掘方法与流程
本发明涉及数据挖掘领域,尤其是关联规则中挖掘频繁项集的实现方法。
背景技术
:随着计算机的普及和网络技术的发展,网络上每天都产生tb级,甚至pb级的海量数据。所以,如何能够更加快速、低成本、高效的从海量数据中挖掘出有价值的信息,以帮助决策者更好地决策变得非常重要,从大量数据中挖掘出隐含的、先前未知的有价值的信息的数据挖掘已发展成为一门非常重要的学科。关联规则挖掘目前在数据挖掘中已被广泛应用,其目的是找出数据库中不同的项之间的相关关系,核心问题是获取频繁项集。关联规则挖掘一般分为两个阶段,第一阶段:扫描数据库产生候选项集,通过与最小支持度比较,找出频繁项集。第二阶段:利用频繁项集产生关联规则,若一规则所求的置信度满足最小置信度,则该规则为关联规则。在频繁项集的挖掘中最具代表性的经典算法一apriori算法。它应用的领域比较广,比如市场购物篮分析,网络点击分析,dna序列的发现等。apriori算法采用循序渐进的方式组合出侯选项集,其思想则是利用已知的高频数据项集推导出其它高频数据项集。现有的频繁项集挖掘方法主要有以下三种思路:一、基于十字链表的频繁项集挖掘改进算法,该算法将事务数据库中的信息用十字链表表示,把对数据库的扫描转变为对内存中十字链表的扫描,利用十字链表缩短了需要匹配的事务长度。由于其方法需要进行模式匹配,使用条件受限,也使得算法的提高程度受到很大限制。二、基于压缩事务矩阵相乘的频繁项集挖掘改进算法,该算法扫描数据库中的数据并将数据信息映射到事务项目二进制矩阵中,由事务项目二进制矩阵与相应的辅助矩阵相乘得到频繁1-项目集,依此类推得到其它频繁项目集。该方法由于矩阵相乘花费了较多的时间,基本消耗时间也相对越久,严重影响到整理的加速效果。且严重的占用内存,当内存不足时速度得变非常缓慢,甚至会有运算失败的情况产生。三、运用分治思想将数据集分段处理,利用向量交运算和先验剪枝直接生成局部频繁k-项集,最终合并为全局频繁k-项集,从根本上改进了apriori算法频繁迭代的过程,不需要进行连接运算。四、该方法用到向量交运算,计算量大且复杂,内存占用严重。技术实现要素:本发明解决其技术问题为:针对频繁项集挖掘过程中需要访问所有的记录才可以得出候选项集的支持度计数,记录访问量大,内存占用严重,遍历事物中的项不方便等问题,设计了一种新的方案,以此提高运算效率。本发明采用的技术方案为:一种基于组链表的高效频繁项集挖掘方法,包括以下步骤:步骤一、先求出候选a-项集ca;步骤二、由候选a-项集ca求出频繁a-项集la;步骤三、事务数据库中长度相同的事务为一组进行划分;步骤四、通过连接和剪枝步,由频繁项集得到候选项集;步骤五、从长度为与一个候选项集中元素的个数相同的组链表开始遍历;步骤六、判断候选项集是否满足最小支持度计数,若满足,则从候选项集中删除此候选项集,并将其放入到频繁项集中,执行步骤(八)进行判断;若不满足,则执行下一步;步骤七、继续遍历下一个的组链表;步骤八、判断是否遍历完所有的组链表或者候选项集是否为空,若满足,则得到了所有的频繁项集;若不满足,则从步骤(六)开始执行;步骤九、判断频繁项集中项集的个数是否小于一个项集中的元素的个数加一,若满足,则算法结束,若不满足,则从步骤(四)开始执行。本发明与现有技术相比,有以下优点:(1)采用了组链表的方式存储事务数据集,方便遍历事务中的项。(2)改进算法减少了对记录的访问数量,不必要访问所有的记录就可以得出候选项集的支持度计数,在一定程度上缩小了搜索空间,减少了内存的使用,提高了频繁项集挖掘的效率。附图说明图1为本发明的流程示意图;图2为长度为1的事务集;图3为长度为2的事务集;图4为长度为3的事务集;图5为长度为4的事务集。具体实施方式下面结合附图,对本发明实施例提供的基于组链表的高效频繁项集挖掘实现方法进行详细阐述。图1为本发明实施例提供的算法步骤流程图,该算法的详细实现过程如下:表1为事务数据库d,|d|=9,设最小支持度计数为2。表1tid项id的列表t100i1,i2,i5,i6t200i3t300i3,i6t400i1,12,i4t500i6t600i1,i3,i4,i6t700i2,i3t800i2,i5t900i1,i3,i6第一部分:(1)扫描d得到c1,如表2所示。图2项集支持度计数{i1}4{i2}4{i3}5{i4}2{i5}2{i6}5(2)由大于等于最小支持度计数的项组成频繁1-项集l1,如表3所示。表3项集支持度计数{i1}4{i2}4{i3}5{i4}2{i5}2{i6}5(3)将事务数据库中的所有事务按照长度相同的为一组进行划分。如附图2、附图3、附图4、附图5所示。第二部分和第三部分:(1)计算l2(2)计算l3(3)因|l3|=1<3,算法结束。进一步,所述实现过程第二部分和第三部分(1)计算l2具体包括如下步骤:1)首先l1自连接得到c2。c2={{1,2},{1,3},{1,4},{1,5},{1,6}{2,3},{2,4},{2,5},{2,6},{3,4},{3,5},{3,6},{4,5}{4,6},{5,6}}2)由apriori算法的先验性质(频繁项集的所有非空子集也一定是频繁的)对c2进行剪枝,c2不变。3)计算c2中项集的支持度计数首先遍历表5,各候选项集的支持度如下表4所示。表4项集支持度计数{1,2}0{1,3}0{1,4}0{1,5}0{1,6}0{2,3}1{2,4}0{2,5}1{2,6}0{3,4}0{3,5}0{3,6}1{4,5}0{4,6}0{5,6}0c2中各候选项集的支持度计数均小于最小支持度计数,继续遍历长度为3的链表,结果如表5所示。表5项集支持度计数{1,2}1{1,3}1{1,4}1{1,5}0{1,6}1{2,3}1{2,4}1{2,5}1{2,6}0{3,4}0{3,5}0{3,6}2{4,5}0{4,6}0{5,6}0项集{3,6}的支持度计数为2,等于最小支持度计数,从c2中删除,加入到l2中,即l2[1]={{3,6}}。此时,c2={{1,2},{1,3},{1,4},{1,5},{1,6},{2,3},{2,4},{2,5},{2,6},{3,4},{3,5},{4,5}{4,6},{5,6}}继续遍历长度为4的链表,其结果如表6所示。表6项集支持度计数{1,2}2{1,3}2{1,4}2{1,5}1{1,6}2{2,3}1{2,4}1{2,5}2{2,6}1{3,4}1{3,5}0{4,5}0{4,6}1{5,6}1项集{1,2},{1,3},{1,4},{1,6},{2,5}的支持度计数满足最小支持度计数,将它们从c2中删除,加入到l2中。此时,l2[2]={{1,2},{1,3},{1,4},{1,6},{2,5},{3,6}}。因已遍历完长度最大的事务集链表,计算频繁2-项集结束,l2={{1,2},{1,3},{1,4},{1,6},{2,5},{3,6}}。进一步,所述实现过程第二部分和第三部分(2)计算l3具体包括如下步骤:1)首先l2自连接得到c3。c3={{1,2,3},{1,2,4},{1,2,6},{1,3,4},{1,3,6},{1,4,6}}2)根据apriori算法的先验性质对c3进行剪枝,{2,3}、{2,4}、{2,6}、{3,4}、{4,6}不是频繁2-项集,因此,经过剪枝步后c3={{1,3,6}}3)计算c3中各候选项集的支持度计数遍历表6,候选项集的支持度计数如表7所示。表7项集支持度计数{1,3,6}1项集{1,3,6}的最小支持度计数为1,不满足最小支持度计数。继续遍历长度为4的事务集链表,其结果如表8所示。表8项集支持度计数{1,3,6}2此时项集{1,3,6}的支持度计数满足最小支持度计数,加入到l3中,l3={{1,3,6}},从c3中删除。c3为空集,因此l3={{1,3,6}}。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1