一种基于改进Apriori算法的数据库关联规则挖掘方法_3

文档序号:9564680阅读:来源:国知局
2,在计算机内部使用正交链表存储步骤1所述关系矩阵Ma,该正交链表包含 三种类型的节点,分别为M节点、H节点和E节点,M节点为正交链表的表头节点;H节点为 行/列表头节点,是正交链表中行链表或者列链表的表头节点;E节点为关系矩阵中非零元 素对应的节点;三种节点均包含四个域,Tag域、Element域、Right域和Down域。Tag域为 标志域,用以区分三种不同类型的节点。Element域为元素域,对正交链表表头节点来说, 元素域中的二元组存储的是对应稀疏关系矩阵的行数和列数,即事务数据库D包含的事务 数和项目数;对行表头节点来说,元素域中的二元组表示第几行和该行中包含的非零元素 个数;对列表头节点来说,元素域中的二元组表示项目或项目集及该列中的非零元素个数; 对非零元素节点来说,元素域中的二元组表示项目或项目集及包含该项目或项目集的事务 编号。Right域为指针域,对正交链表表头节点来说其指向第一个列表头节点;对行表头节 点来说,其指向该行第一个非零元素节点;对列表头节点来说,其指向下一个列表头节点; 对非零元素节点来说,其指向该行下一个非零元素节点。Down域也为指针域,对正交链表表 头节点来说其指向第一个行表头节点;对行表头节点来说,其指向下一个列表头节点;对 列表头节点来说,其指向该列第一个非零元素节点;对非零元素节点来说,其指向该列下一 个非零元素节点;
[0053] 步骤3,根据步骤2的正交链表计算得到频繁1项集集合L1以及频繁1项集集合 L1对应的正交链表;
[0054] 步骤4,将频繁k-Ι项集集合Lk i与自身连接产生候选频繁k项集集合C k,k为区 间[2, )内的自然数;
[0055] 步骤5,利用Apriori性质(频繁项集的所有非空子集也必须是频繁的,如果某个 候选的非空子集不是频繁的,那么该候选肯定不是频繁的)对候选频繁项集集合C k进行剪 枝;
[0056] 步骤6,遍历频繁k-Ι项集集合及频繁1项集集合对应的正交链表,得到包含项集 气的事务集合Π?),并计算候选频繁k项集集合(;中成员Q 1的支持度,其中I1为区间[1, Nk]内的自然数,Nk表示候选频繁k项集集合(^所包含的成员数目;
[0057] 步骤7,将候选频繁k项集集合心中成员%的支持度与最小支持度min_support进 行比较,删除支持度小于最小支持度min_support的成员,得到频繁k项集集合L k,并根据 步骤6中所得事务集合?^ )沟造频繁k项集集合Lk对应的正交链表;
[0058] 步骤8,重复执行步骤4~步骤7,直到不能发现更大的频繁项目集为止;
[0059] 步骤9,根据OLA算法最终获得的频繁项集集合为F,则可产生关联规则:
[0060] R = {A->B},A为频繁项集集合F中任意成员爲的非空子集,B为A的补集,即/,2 e F,i2为区间[l,Nf]内的自然数,Nf表示频繁项集集合F所包含的成员数目。
[0061 ] 步骤1中,所述关系矩阵Ma如下:
[0063]并有:
[0065] 其中,I = U1,12,…,Im}是事务数据库D所包含的项目集合,|1|为数据库D所 包含的项目数,|D|为事务数据库包含的事务数,Ciu表示矩阵的元素,i为区间[1,|d|]内 的自然数,j为区间[1,111]内的自然数。
[0066] 步骤3中,所述计算过程如下:遍历步骤2得到的正交链表的列表头节点,得到项 目集合I = U^I2,…,Im}中各项目成员在所有事务中出现的次数,分别SNpNyjlll, 包含项目集合L的事务集合为T ({I ,}),根据以下公式计算得到各项目支持度sup (I ,):
[0067] sup(Ij) = Nj/|D I, j e [I, |l|],
[0068] 将各项目支持度与所设置最小支持度min_SUpport进行比较,得到频繁1项集集 合L 1,基于频繁1项集集合L1中各元素对应的事务集合T ({I J ),得到频繁1项集集合1^对 应的正交链表。
[0069] 步骤4中,参考【背景技术】中引用文献1,连接过程如下:设叫和m2是频繁 k_l项集集合Lk i的任意两个成员,成员中的项目按字典次序排序,即对于成员%,有
其中%[(]表示成员气中的第i4个项目,其中i 3e {〇, 1}, i4e {1,2,…,k-1},如果成员mJPm2中前k-2个项目均相同,成员Iii1的第k-2个项目小于成 员m 2 的第 k_2 个项目,即 Oii1 [1] =m2 [2]) …AfcOii1 [k_2] =m2[k_2])&& On1 [k-1] <m2 [k-1]),则判定叫和m2是可连接的,连接m JP m2产生的结果是{m i [1],Iii1 [2],… ..?,mJk-lLmJk-l]}。
[0070] 步骤5中,所述剪枝操作过程如下:遍历频繁k-Ι项集集合对应的正交链表的列表 头节点,对候选k项集集合C k的成员$,若其包含k-Ι个元素的所有子集均在列表头节点 中,则将成员气保留在候选频繁项集集合(;中,否则将其从C ,中删除。
[0071 ] 步骤6中,计算所述支持度的步骤包括:
[0072] 候选频繁k项集集合Ck中成员
则事 务集合T(C1) = T(H-^IkDik) = T(H-^Ikl) n T(Ik),即包含项集集合气的 事务集合T (C1)是包含项集集合U1, I2,…,IkJ的事务集合T (I1, I2,...,Ik D与包含项 集集合U1J的事务集合τ(Ik)的交集,遍历频繁k-i项集集合对应的正交链表中项集仏, I2,…,Ik J对应的列,可得到事务集合Td1, 12, ...,Ik D,遍历频繁1项集集合对应的正交 链表中项集集合{Ik}对应的列,得到事务集合T(Ik),则通过以下公式计算k项集集合气的 支持度:
[0073] SUpGI1, I2,···,Ik}) =NCT(H--^Ikl) n T(Ik))/|D|,k e [1,n],
[0074] 其中,N(TdI2V^Ikl) n T(Ik))表示事务集合 Td1, I2,...,Ikl)和事务集合 T(Ik)的交集所包含的事务数。
[0075] 实施例1
[0076] 通过如图1所示的一个简单的事务数据库D对OLA算法的步骤进行描述,并对其 性能进行简单的分析,设置的最小支持度min_support = 30%。
[0077] 1)根据OLA算法,首先对图1所示的事务数据库D进行扫描,事务数据库D中共包 含10个事务T 1-Tll^e个项目I1-I6。扫描事务数据库D将得到如图2所示的关系矩阵A,关 系矩阵A的第i行对应数据库D的事务T 1, i e [1,10],第j列对应数据库D中的项目I j, j e [1,6],关系矩阵中的非零元素 aij表示项目I j包含在事务1\中。将关系矩阵A用正交 链表表示,如图3所示,图3中M类型的节点为正交链表的表头节点,H类型的节点表示正 交链表的行/列表头节点,E类型节点为关系矩阵中非零元素对应的节点。
[0078] 2)接下来,遍历正交链表的各列,可得项目集I = {A,B,C,D,E,F}中各项目在所 有事务中出现的次数分别为5,4,5,3,5,6。根据公式SUp(Ij) =PVlDL j e [1,6]计算,可 得各项目支持度分别为〇. 5,0. 4,0. 5,0. 3,0. 5,0. 6,均大于预设最小支持度min_supp〇rt =〇. 3,则频繁1项集集合L1= {{A},{B},{C},{D},{E},{F}}。由于所有项目均属于频繁 1项集的成员,因此频繁1项集对应的正交链表即为关系矩阵A对应的正交链表。
[0079] 4)将频繁1项集集合L1进行自连接产生候选频繁2项集集合C 2,如图4所示,C2 ={{AB},{AC},{AD},{AE},{AF},{BC},{BD},{BE},{BF},{CD},{CE},{CF},{DE},{DF}, {EF}}。由于所有的项目I j,j e [1,6]均为频繁1项集的成员,因此对于频繁2项集集合 无需根据Apriori性质进行剪枝。
[0080] 5)对候选频繁2项集集合C2中的所有成员,计算其支持度。比如说对于候选频繁 2项集{AB},分别遍历频繁1项集所对应正交链表中项目A、B对应的列,可得包含项目A的 事务集合为T(A) = {1,5,6,8,10},包含项目B的事务集合T(B) = {2,4,6, 7},则包含项目 集{AB}的事务集合
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1