发明内容
一方面,本发明的目的在于提供一种数据库近似字典规则的挖掘方法,旨在解决以往挖掘方法性能差、效率不高,从而不能适应大数据分析和处理需要的问题。
本发明是这样实现的,一种数据库近似字典规则的挖掘方法,所述方法包括如下步骤:
步骤S1:对数据库r进行扫描分析,剔除单一值列和所有值都唯一的列,其余候选列集记为R;
步骤S2:统计所述候选列集R各列中各项的支持度,并对支持度大于给定最小支持度的项用整数编码;
步骤S3:以位数组VD[M]储存所述数据库r的数据,计算各项对应的位数组中1值的个数,并计算项集的事务个数;
步骤S4:使用DCfd的方法挖掘数据库r的近似字典规则;
步骤S5:输出所述近似字典规则。
优选的,步骤S3中所述位数组VD[M]的格式是垂直数据格式。
优选的,步骤S3中所述位数组VD[M],M为所述候选列集R大小,VD中每个元素为以哈希表格式存储的各项事务位数组,键为项,值为位数组。
优选的,若所述数据库r第k行事务的第i列为项j时,VD[i][j][k]取值1,否则VD[i][j][k]取值0。
优选的,步骤S4中计算项集的事务个数是将项集中各项的位数组1值做与操作。优选的,所述使用DCfd的方法挖掘数据库r的近似字典规则包括以下步骤:
步骤S41:对所述候选列集R排序,采用策略搜索满足条件的近似字典规则左部;
步骤S42:对所述策略搜索的搜索空间,采用修剪方法对搜索树进行剪枝,压缩所述搜索空间;
步骤S43:对所述经过压缩的搜索空间进行计算并生成近似字典规则右部,同时生成近似字典规则;
步骤S44:缓存所述生成的近似字典规则。
优选的,步骤S41中对所述候选列集R排序可为按其在数据库中的顺序排序。
优选的,步骤S41中所述搜索策略可为逆序递增策略,按从大到小的顺序搜索所述候选列集R,并按从小到大的顺序搜索已有规则左部和新增规则左部。
优选的,所述新增规则左部可由已有规则左部对应的位数组与新加项的位数组做与操作得到。
优选的,步骤S42中所述修剪方法可为若存在规则{X,x1}→{Y,y1},则(a1,b1)为非freeset,故剪掉(x1,y1)及其所有超集。
优选的,步骤S42中所述修剪方法可为若存在规则{X,x1}→{Y,y1},则X的超集下的Y枝点均冗余,故剪掉X的超集下所有Y枝点。
优选的,步骤S44中所述缓存可用带索引的字典规则树存贮,所述规则左部存贮为树的节点,所述规则右部存贮为最后节点的结果,并给最后节点建立一个索引,将相同项的节点链接起来,用于快速查找以同一项结尾的所有规则。
优选的,所述步骤S43中的生成近似字典规则右部的事务列表,同时生成近似字典规则,包括以下步骤:
步骤S431:初始化规则左部的列freesetCol、项集freesetItems和闭集列closureCol均为空,使所述事务位数组tranSet包含所有事务;
步骤S432:判断所述freesetItems是否非freeset,若是则跳转至步骤S439;否则跳转到步骤S433;
步骤S433:根据所述修剪方法进行剪枝,并将剪去的列更新至所述闭集列closureCol;
步骤S434:根据所述闭集列closureCol计算出候选列集availableCol,即未在closureCol出现的列;
步骤S435:在所述候选列集availableCol中计算当前项集freesetItems的闭集列closureCol和闭集项closedItems,以及所述候选子集candidates的列、项及项的事务位数组itemTranSet;
步骤S436:判断所述闭集项closedItems是否为非空,若是则对所述闭集列closureCol和所述闭集项closedItems中的每一对列col和项item产生一条字典规则{freesetCol,freesetItems}=>{col,item},并将所述规则保存到字典规则树;
步骤S437:按逆序遍历所述候选子集candidates,更新所述规则左部的列freesetCol、所述项集freesetItems、所述闭集列closureCol和所述tranSet,并递归调用DCfd字典规则挖掘方法;
步骤S438:回退closureCol至进入状态;
步骤S439:结束。
优选的,所述步骤S435中计算当前项集freesetItems的闭集列closureCol和闭集项closureItems,以及所述候选子集candidates,包括以下步骤:
步骤S4351:计算当前freesetItems的支持度supp,即所述事务位数组tranSet中1位的个数;
步骤S4352:遍历所述候选列集availableCol的各列col,若遍历结束则跳转至步骤S43510;
步骤S4353:遍历所述各列col的各个项item,若遍历结束则跳转至步骤S4352;
步骤S4354:从所述位数组VD中取各项item的事务位数组与tranSet做与操作,所得结果记为itemTranSet;
步骤S4355:计算各项item的支持度,即itemTranSet中1的位数;
步骤S4356:判断itemSupp/supp的值是否大于或等于置信度c,若是则跳转至步骤S4357,否则跳转至步骤S4358;
步骤S4357:将所述item添加到闭集项closedItems、将列col添加到闭集列colsedCol和候选列closureCol,并跳转至步骤S4353遍历下一项item;
步骤S4358:判断列col是否大于freesetCol中最大的列且itemSupp是否大于或等于最小支持度,若是则跳转至步骤S4359,否则跳转至步骤S4353遍历下一个item;
步骤S4359:将列col、项item及其对应的事务位数组itemTranSet保存到候选子集candidates中,并跳转至步骤S4353遍历下一个项item;
步骤S43510:结束。
优选的,所述步骤S437中按逆序遍历所述候选子集candidates、更新所述规则左部并递归调用DCfd字典规则挖掘方法,包括如下步骤:
步骤S4371:按逆序遍历所述候选子集candidates的列col,若遍历结束则跳转至步骤S4377;
步骤S4372:将所述列col更新至freesetCol和闭集列closureCol;
步骤S4373:遍历所述列col中的候选项item,若遍历结束则跳转至步骤S4377;
步骤S4374:将所述候选项item更新至freesetItems,并将tranSet设为候选项item对应的事务列表itemTranSet,并递归调用DCfd方法;
步骤S4375:回退freesetItems至遍历前状态,跳至步骤S4373遍历下一项item;
步骤S4376:所有候选项item遍历完成后回退freesetCol和closureCol,跳至步骤S4372遍历下一列col;
步骤S4377:回退closureCol到进入前状态;
步骤S4378:遍历完成则结束。
另一方面,本发明的目的在于提供一种数据库近似字典规则的挖掘系统,所述系统包括:
(1)数据库扫描分析装置,用于对数据库r进行扫描分析,剔除单一值列和所有值都唯一的列,其余候选列集记为R;
(2)支持度统计和编码装置,用于统计所述候选列集R各列中各项的支持度,并对支持度大于给定最小支持度的项用整数编码;
(3)位数组储存和计算装置,用于以位数组VD[M]储存所述数据库r的数据,计算各项对应的位数组中1值的个数,并计算项集的事务个数;
(4)近似字典规则挖掘装置,用于使用DCfd的方法挖掘数据库r的近似字典规则;
(5)近似字典规则输出装置,用于输出所述近似字典规则。
优选的,所述近似字典规则挖掘装置包括:
(41)规则左部搜索单元,用于对所述候选列集R排序,采用策略搜索满足条件的近似字典规则左部;
(42)剪枝压缩单元,用于对所述策略搜索的搜索空间,采用修剪方法对搜索树进行剪枝,压缩所述搜索空间;
(43)规则生成单元,用于所述经过压缩的搜索空间进行计算并生成近似字典规则右部,同时生成近似字典规则;
(44)规则缓存单元,用于缓存所述生成的近似字典规则。
优选的,所述规则生成单元包括如下:
(431)规则左部初始化模块,初始化规则左部的列freesetCol、项集freesetItems和闭集列closureCol均为空,使所述事务位数组tranSet包含所有事务;
(432)判断模块,用于判断所述freesetItems是否非freeset,若是则跳转至步骤S439;否则跳转到步骤S433;
(433)剪枝模块,用于根据所述修剪方法进行剪枝,并将剪去的列更新至所述闭集列closureCol;
(434)候选列集计算模块,用于根据所述闭集列closureCol计算出候选列集availableCol,即未在closureCol出现的列;
(435)闭集和候选子集计算模块,用于在所述候选列集availableCol中计算当前项集freesetItems的闭集列closureCol和闭集项closedItems,以及所述候选子集candidates的列、项及项的事务位数组itemTranSet;
(436)近似字典规则生成模块,用于判断所述闭集项closedItems是否为非空,若是则对所述闭集列closureCol和所述闭集项closedItems中的每一对列col和项item产生一条字典规则{freesetCol,freesetItems}=>{col,item},并将所述规则保存到字典规则树;
(437)候选子集遍历模块,用于按逆序遍历所述候选子集candidates,更新所述规则左部的列freesetCol、所述项集freesetItems、所述闭集列closureCol和所述tranSet,并递归调用DCfd字典规则挖掘方法;
(438)闭集回退模块,用于回退closureCol至进入状态。
(439)规则生成结束模块。
再者,本发明的另一目的在于提供一种数据库终端,所述数据库包括近似字典规则挖掘系统,所述系统包括:
(1)数据库扫描分析装置,用于对数据库r进行扫描分析,剔除单一值列和所有值都唯一的列,其余候选列集记为R;
(2)支持度统计和编码装置,用于统计所述候选列集R各列中各项的支持度,并对支持度大于给定最小支持度的项用整数编码;
(3)位数组储存和计算装置,用于以位数组VD[M]储存所述数据库r的数据,计算各项对应的位数组中1值的个数,并计算项集的事务个数;
(4)近似字典规则挖掘装置,用于使用DCfd的方法挖掘数据库r的近似字典规则;
(5)近似字典规则输出装置,用于输出所述近似字典规则。
优选的,所述近似字典规则挖掘装置包括:
(41)规则左部搜索单元,用于对所述候选列集R排序,采用策略搜索满足条件的近似字典规则左部;
(42)剪枝压缩单元,用于对所述策略搜索的搜索空间,采用修剪方法对搜索树进行剪枝,压缩所述搜索空间;
(43)规则生成单元,用于所述经过压缩的搜索空间进行计算并生成近似字典规则右部,同时生成近似字典规则;
(44)规则缓存单元,用于缓存所述生成的近似字典规则。
在本发明中,通过在数据库中运用DCfd的近似字典规则挖掘方法,对数据库中的候选列及其项采用逆序递增的搜索策略,可以避免循环搜索,并通过修剪方法对搜索树进行剪枝,可大幅度压缩搜索空间,同时缓存已经发现的规则,可减少整个挖掘方法的计算量,自动、高效地找出数据库中列的近似字典规则,特别适用于云数据、海量数据等大数据的计算,满足工业界的需求。
应当理解,以上总体说明和以下详细说明都是说明性和实例性的,旨在提供对所要求的本发明的进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。
相关概念
考虑数据库r,定义r中所有列的集合为R,每列中出现不同值称为项(item),所有项的集合定义为项集I;r的每一行称为事务t(transaction),
(1)支持度:对于一个给定的项集定义其支持度supp(X)为r中包含项集X的事务数,即满足的事务数。
(2)超集、子集:对于两个项集X,Y,如果满足则称Y是X的超集,X是Y的子集,且有supp(Y)<=supp(X)。
(3)闭集(elosedset):一个项集X是闭集当且仅当不存在一个X的超集Y使得supp(Y)=supp(X)。一个项集是闭集也称这个项集是闭的。任一项集X对应的闭集用C(X)表示:C(X)=X∪{A|A∈I\X,supp(X∪A)=supp(X)}。
(4)δ-闭集:一个项集X是δ闭集当且仅当不存在一个X的超集Y使得其supp(Y)>=supp(X)*(1-δ)。X的δ闭集用C(x,δ)表示。通常δ是个接近1的数。
(5)freeset:一个项集X是freeset当且仅当不存在一个X的子集Y使得supp(Y)=supp(X)。按freeset的定义,可以推导出:
性质1:任何一个freeset的子集也一定是freeset;
性质2:任何一个非freeset的超集也是非freeset;
(6)δ-freeset:一个项集X是δ-freeset当且仅当不存在一个X的子集Y使得supp(Y)*(1-δ)<=supp(X)。
(7)关联规则其中 定义其支持度supp(r)=supp(X),其置信度为conf(r)=supp(X∪Y)/supp(X)。
(8)字典规则:其中规则左部Items=(item1,item2…itemn),满足δ-freeset,Cols=(col1,col2…coln),为Items各项所处在的列。规则右部为item及其对应的列col,其中item∈C(Items,δ)-Items。规则含义为列col1值为item1,col2值为item2…coln值为itemn时列col的值为item;规则d的支持度为supp(d)=supp(Items),置信度为conf(d)=supp(Items∪item)/supp(Items)。
(9)冗余规则:如果存在两个规则 即规则右部相同且则称规则d2是冗余的。
(10)字典规则挖掘方法:给定最小支持度s,最小置信度c,本方法将从数据库r中挖掘出所有非冗余的字典规则满足supp(d)>=s,conf(d)>=c,其中Items为δ-freeset,item∈C(Items,δ)\Items,δ=1-c。
图1示出了本发明的提供的近似字典规则挖掘方法的流程,详述如下:
P1:分析数据库r,考虑到最小支持度s通常大于1,所以唯一值列上不可能产生数据规则;而分析单一值列也没有实际意义,故剔除单一值的列和所有值都唯一的列,可减少方法计算量,其他候选列记为R。
P2:扫描r,统计候选列中各项item的支持度,对于支持度大于最小支持度s的项进行编码。由于数据库中每列值的格式都可能不一样,所以对R中支持度大于给定最小支持度s的项用整数进行编码,方便进行计算。
P3:扫描数据库r,将数据库r候选列中的数据存入内存,并计算项集的事务个数。计算项集的支持度时,需要扫描数据库,计算包含项集的事务个数。为了防止多次重复扫描数据库,可用一种垂直数据格式的位数组VD[M]来存储数据库数据,其中,M为候选列R大小。VD中每个元素为哈希表,存储该列下各项的事务位数组,键为项,值为位数组(BitSet)。当数据库第k行事务的第i列为项j时,VD[i][j][k]为1,否则VD[i][j][k]为0.这样计算某个项的支持度时,只需计算对应的位数组中1值的个数。而计算项集的支持度时,只需要将项集中各项的位数组做与操作,再计算结果中1的个数。使用位数组来存储可以对数据进行压缩,并可加速数组间的“AND(与)”操作。
P4:使用LCfd的方法挖掘近似字典规则。
P5:输出所述近似字典规则。
图2示出了本发明提供的近似字典规则挖掘方法的列搜索顺序树。在挖掘数据库中的近似字典规则时,首先将R按一定的顺序排序(如按在数据库中的顺序排序),采用一种递增的策略搜索所有满足条件的规则左部。先搜索列,再搜索列中的所有项。列按从大到小的顺序搜索,而在规则左部的列从小到大的顺序排列,通过往左部中添加一个新列及其列中的项来构成新的候选规则左部,新加的列必须比左部中最后的列大(这样可避免循环搜索)。可以一种树型结构来说明的列搜索顺序,如考虑有ABCD4列,搜索顺序如图2所示。可从空集出发,依次访问D,C,CD,B,BD,BC...,即按从右到左、从上到下的顺序搜索。
此外,简单的的逆序递增搜索策略计算量将会相当的大(计算量与列的数量成指数关系),必须采用一定的策略来压缩搜索空间,对搜索树进行剪枝。采用2种策略来剪枝:1.freeset:按定义,规则的左部必须为freeset,若存在一规则的左部为{X,x},右部的列为{Y,y},则(x,y)为非freeset,而根据freeset的性质2,任何非freeset的超集都是非freeset,故(x,y)及其下面的树枝都可以剪掉。如存在一规则{B,b1}→{A,a1},则(a1,b1)为非freeset,故(a1,b1)及其所有超集都可以剪掉。
2.冗余规则:若存在一规则{X,x}=>{Y,y},x的超集下的Y枝点都是冗余的。如存在一规则{B,b1}→{D,d1},则b1的超集下的所有D枝点都可以剪掉。
按顺序、增量的搜索方式保证了任何项集的子集的顺序都在当前项集之前,这在搜索树上很容易看出来,如ABC(树中的顺序为14)的子集A(8),B(4),C(2),AB(12),AC(10)BC(6)等的顺序都比ABC小。根据这点,可以按上述2种策略利用子集规则对当前枝点进行尽可能多的剪枝,减少整个方法的计算量。
图3示出了本发明提供的字典规则树。为了剪枝,需要缓存已经发现的规则。利用子集规则进行剪枝时,需要判断当前左部的所有子集的规则,而由于采用增量的方式搜索,当往左部添加一个新项时,只需要判断包含了新添项的部分子集的规则。如考虑左部为{ABCD,(a1,b1,c1,d1)},由于它是通过向(a1,b1,c1)添加d1构成的,由于已经根据(a1,b1,c1)及其所有子集规则进行剪枝,所以只需要判断所有以d1结尾的子集规则即可,如(a1,d1)(a1,b1,d1)(b1,d1)(b1,c1,d1)等。根据这点,可使用一种带索引的字典树来存贮已挖掘的规则。将规则左部的每个项存贮为树的节点,规则右部列存贮为最后节点的“果实”(因为同一列中的各个项具有排他性,可以通过列来剔除更多的无效枝点),并给最后节点建立一个索引,将相同项的节点链接起来,这样可以快速查找以某个项结尾的所有相关规则。
比如存在5个规则:
d1:{B,b1}=>{C,c1}
d2:{AB,(a1,b1)}=>{D,d1}
d3:{AB,(a1,b1)}=>{F,fl}
d4:{AB,(a1,b2)}=>{D,d2}
d5:{ABE,(a1,b2,e1)}=>{C,c2}
构成的规则树如图3所示。如想查找以b1结尾的规则,首先查找索引表是否包含b1,然后通过链接遍历出所有以b1结尾的规则,包含两条记录:(b1),可以剪掉的列为C;(a1,b1),可以剪掉的列为D和F。
用增量搜索方式可以简化支持度的计算,可以记录当前规则左部对应的位数组,当新加一项时,只需将当前的位数组与新加项的位数组做一次与操作即可得到新候选左部的位数组。
图4示出了本发明提供的近似字典规则的DCfd挖掘方法的具体迭代流程,步骤如下:D0.初始化规则左部的列freesetCol为空,项集freesetItems为空;闭集列closureCol为空;事务位数组tranSet包含所有事务;
D1.根据规则树进行剪枝,将剪去的列更新到closureCol;
D2.判断freesetItems是否是freeset,如果不是则迭代结束,跳转到D7;
D3.根据closureCol计算出候选列集availableCol,即没在closureCol中出现的列;
D4.在availableCol中计算出当前freesetItems的闭集closedCol、closedItems和候选子集candidates(包含列和项及项的事务位数组itemTranSet,具体方法见后);
D5.如果closedItems非空,则对closedCol、closedItems中的每一对col、item,产生一条字典规则{freesetCol,freesetItems}=>{col,item},并将规则保存到规则树;
D6.按逆序遍历候选子集candidates,更新freesetCol,freesetItems,closureCol,tranSet,并递归调用DCfd流程(具体方法见后);
D7.回退closureCol至进入状态(D1);
D8.结束迭代。
图5示出了本发明提供的对图4中L4步骤中计算当前freesetItems的闭集和候选子集的流程,详述如下:
D4.1.计算当前freesetItems的支持度supp,即事务位数组tranSet中1位的个数;
D4.2.遍历availableCol的每列col,如果遍历结束则跳转到D4.10;
D4.3.遍历列col中的每个item,如果遍历结束则跳转到D4.2遍历下一列;
D4.4.从VD中取出item的事务位数组将其和tranSet做与操作,结果记为itemTranSet,
D4.5.计算项item的支持度,即itemTranSet中1的位数;
D4.6.判断itemSupp/supp是否大于或等于置信度c,如果是则跳转到D4.7,否则跳转到D4.8;
D4.7.满足置信度说明item属于freesetItems的闭集,将item添加到closedItems,col添加到closedCol和closureCol,跳转到D4.3遍历下一个item;
D4.8.判断col是否大于freesetCol中最大的列且itemSupp是否大于或等于最小支持度,如果是则跳转到下一步,否则跳转到D4.3遍历下一个item;
D4.9.将列col,项item,及其事务位数组itemTranSet保存到candidates中,然后跳转到D4.3遍历下一个item;
D4.10.结束。
图6示出了本发明提供的对图4中L6步骤中遍历候选子集的流程,详述如下:
D6.1.首先按逆序(从大到小)遍历candidates的列col,如果遍历完成则跳转到D6.7;
D6.2.将列col更新到freesetCol和closureCol。
D6.3.遍历col中的候选项item,如遍历结束则跳转到D6.6
D6.4.item对应的事务位数组为itemTranSet。将item更新到freesetItems,tranSet设为itemTranSet,并递归调用DCfd方法。
D6.5.将freesetItems回退至遍历前状态,跳转到D6.3遍历下一个item;
D6.6.item遍历完成后回退freesetCol和closureCol,跳转到D6.2遍历下一列;
D6.7.回退closureCol到进入前状态;
D6.8.遍历完成则结束。
以下结合具体数据,对本实施例展开详细说明。如考虑如下数据:
事务id |
A |
B |
C |
D |
1 |
a1 |
b1 |
c1 |
d1 |
2 |
a1 |
b1 |
c1 |
d1 |
3 |
a1 |
b1 |
c1 |
d1 |
4 |
a1 |
b1 |
c1 |
d1 |
5 |
a1 |
b2 |
c2 |
d1 |
6 |
a2 |
b1 |
c1 |
d1 |
7 |
a3 |
b1 |
c1 |
d1 |
8 |
a2 |
b2 |
c2 |
d2 |
9 |
a2 |
b2 |
c2 |
d2 |
10 |
a3 |
b2 |
c1 |
d3 |
11 |
a4 |
b2 |
c1 |
d3 |
假设给定最小支持度为2,置信度为0.8;首先对数据进行编码,对支持度大于或等于2的项用大于0的整数编码,其他项用0编码(表示舍弃),编码后的结果存入内存,结果如下:
事务id |
A |
B |
C |
D |
1 |
1 |
4 |
6 |
8 |
2 |
1 |
4 |
6 |
8 |
3 |
1 |
4 |
6 |
8 |
4 |
1 |
4 |
6 |
8 |
5 |
1 |
5 |
7 |
8 |
6 |
2 |
4 |
6 |
8 |
7 |
3 |
4 |
6 |
8 |
8 |
2 |
5 |
7 |
9 |
9 |
2 |
5 |
7 |
9 |
建立VD,计算每项的事务位数组为:
1->[1,1,1,1,1,0,0,0,0,0,0]
2->[0,0,0,0,0,1,0,1,1,0,0]
3->[0,0,0,0,0,0,1,0,0,1,0]
4->[1,1,1,1,0,1,1,0,0,0,0]
5->[0,0,0,0,1,0,0,1,1,1,1]
6->[1,1,1,1,0,1,1,0,0,1,1]
7->[0,0,0,0,1,0,0,1,1,0,0]
8->[1,1,1,1,1,1,1,0,0,0,0]
9->[0,0,0,0,0,0,0,1,1,0,0]
10->[0,0,0,0,0,0,0,0,0,1,1]
对上面数据调用LCfd方法挖掘字典规则,初始化规则左部的列freesetCol为空,项集freesetItems为空;闭集列closureCol为空;事务位数组tranSet包含所有事务,即为[1,1,1,1,1,1,1,1,1,1,1];规则树为空。
DCfd_0:进入时状态freesetItems=Φ,freesetCol=Φ,closureCol=Φ,tranSet=[1,1,1,1,1,1,1,1,1,1,1]
L1.根据规则树进行剪枝,因规则树为空,故略过;
L2.判断freesetItems,空集为freeset;
L3.根据closureCol计算出候选列集availableCol,即没在closureCol中出现的列,计算得availableCol={A,B,C,D};
L4.计算闭集closedCol、closedItems和候选子集candidates。计算出当前freesetItems的支持度supp,即tranSet中位1的个数,为supp=11,清空closedCol、closedItems。遍历availableCol中的列,首先是A,取出A列所有的项的事务位数组,将其和tranSet做与操作可得每个项当前状态下事务位数组,计算得到项1的事务位数组为[1,1,1,1,1,0,0,0,0,0,0],项2的事务位数组为[0,0,0,0,0,1,0,1,1,0,0],项3的事务位数组为[0,0,0,0,0,0,1,0,0,1,0],项0为忽略项。遍历每个项,对于项1,其支持度为itemSupp=5,itemSupp/supp=5/11<置信度(c=0.8),故项1不属于当前freesetItems的闭集,由于itemSupp>=最小支持度2,而freesetCol又为空,所以列A大于freesetCol中最大的列存立,故项1是个候选项,将项1及其事务位数组[1,1,1,1,1,0,0,0,0,0,0]保存到candidates中;同理可得项2、3都是候选项,将它们及其对于的事务位数组保存到candidates中。同理对于B列的项4的事务位数组为[1,1,1,1,0,1,1,0,0,0,0],项5的事务位数组为[0,0,0,0,1,0,0,1,1,1,1],都属于候选项,C列的项6的事务位数组为[1,1,1,1,0,1,1,0,0,1,1],项7的事务位数组为[0,0,0,0,1,0,0,1,1,0,0],也都属于候选项,D列的项8的事务位数组为[1,1,1,1,1,1,1,0,0,0,0],项9的事务位数组为[0,0,0,0,0,0,0,1,1,0,0],项10的事务位数组为[0,0,0,0,0,0,0,0,0,1,1],也都属于候选项;
L5.因closedItems为空,故略过;
L6.按逆序遍历candidates中的列,即按DCBA的顺序。首先是列D,将D增加到freesetCol和closureCol中,即freesetCol={D},closureCol={D},然后遍历D中的所有候选项(8、9、10):对于项8,将其更新到freesetItems,即freesetItems={8},取出项8对应的事务位数组为itemTranSet=[1,1,1,1,1,1,1,0,0,0,0],更新tranSet=itemTranSet,递归调用DCfd方法,具体过程如DCfd_1;项8遍历结束后回退freesetItems并将项9更新到freesetItems,即freesetItems={9},设置tranSet为项9对应的事务位数组[0,0,0,0,0,0,0,1,1,0,0],再递归调用DCfd方法,过程类似与DCfd_1,可得规则 对于项10,同理可得规则 D列计算完毕计算C列,首先回退freesetCol和closureCol,将C更新到其中,即freesetCol={C},closureCol={C},遍历C列的候选项(6,7):对于项6,将其更新到freesetItems,即freesetItems={6},取出项6对应的事务位数组为itemTranSet=[1,1,1,1,0,1,1,0,0,1,1],更新tranSet=itemTranSet,递归调用DCfd方法,具体过程如DCfd_2;项6计算完毕回退freesetItems并将项7更新其中,类似的更新tranSet={5,8,9},并递归调用DCfd方法,此时无规则产生。项7计算完毕回退freesetItems,列C遍历结束回退freesetCol和closureCol。B列、A列按同样的流程迭代,具体过程略。
L7.回退closureCol至进入状态,即closureCol=Φ;
L8.结束。
DCfd_1:进入时状态freesetItems={8},freesetCol={D},closureCol={D},tranSet=[1,1,1,1,1,1,1,0,0,0,0]
L1.根据规则树进行剪枝,因规则树为空,故略过;
L2.判断freesetItems,项8为freeset;
L3.根据closureCol计算出候选列集availableCol,即没在closureCol中出现的列,得availableCol={A,B,C};
L4.计算闭集closedCol、closedItems和候选子集candidates。计算出当前freesetItems的支持度supp,为supp=7。遍历availableCol中的列,首先是A,取出A列所有的项的事务位数组,将其和tranSet做与操作,构建tranSet包含的项item的事务位数组,计算得到项1的事务位数组为[1,1,1,1,1,0,0,0,0,0,0],项2的事务位数组为[0,0,0,0,0,1,0,0,0,0,0],项3的事务位数组为[0,0,0,0,0,0,1,0,0,0,0]。遍历每个项,对于项1,其支持度为itemSupp=5,itemSupp/supp=5/7<置信度(c=0.8),故项1不属于当前freesetItems的闭集,由于列A不大于freesetCol中最大的列(D),故项1不是个候选项;同理项2、3都不属于闭集,而其支持度1小于最小支持度,故都不属于候选项。对于B列的可计算得项4的事务位数组为[1,1,1,1,0,1,1,0,0,0,0],其支持度为6,6/7>置信度0.8,故项4属于freesetItems的闭集,将项4添加到closedItems,即closedItems={4},列B添加到closedCol和closureCol,即closedCol={B},closureCol={B,D};B列的另一项5,事务位数组为[0,0,0,0,1,0,0,0,0,0,0],可得即不属于闭集也不属于候选项。同理对C列,项6属于闭集,将项6添加到closedItems,即closedItems={4,6},列C添加到closedCol和closureCol,即closedCol={B,C},closureCol={B,C,D}
L5.closedCol={B,C},closedItems={4,6},故产生规则和
L6.candidates为空,故略过;
L7.回退closureCol至进入状态,即closureCol={D};
L8.结束。
DCfd_2:进入时状态freesetItems={6},freesetCol={C},closureCol={C},tranSet=[1,1,1,1,0,1,1,0,0,1,1]
L1.根据规则树进行剪枝,因规则树中没有以6结尾的规则,故略过;
L2.判断freesetItems,项6为freeset;
L3.根据closureCol计算出候选列集availableCol,即没在closureCol中出现的列,得availableCol={A,B,D};
L4.计算闭集closedCol、closedItems和候选子集candidates。计算出当前freesetItems的支持度supp,为supp=8。遍历availableCol中的列,首先是A,取出A列所有的项的事务位数组,将其和tranSet做与操作,构建tranSet包含的项item的事务位数组,计算得到项1的事务位数组为[1,1,1,1,0,0,0,0,0,0,0],项2的事务位数组为[0,0,0,0,0,1,0,0,0,0,0],项3的事务位数组为[0,0,0,0,0,0,1,0,0,1,0],0为忽略项。遍历每个项,对于项1,其支持度为itemSupp=4,itemSupp/supp=4/8<置信度(c=0.8),故项1不属于当前freesetItems的闭集,由于列A不大于freesetCol中最大的列(C),故项1不是个候选项;同理项2、3也不属于闭集,也不属于候选项。对于B列的项4的事务位数组为[1,1,1,1,0,1,1,0,0,0,0],其支持度为itemSupp=6,itemSupp/supp=6/8<置信度0.8,故项4不属于freesetItems的闭集,列B不大于freesetCol中最大的列(C),故项4不是个候选项,同理项5不属于闭集,也不属于候选项。对于D列,计算得项8的事务位数组为[1,1,1,1,0,1,1,0,0,0,0],支持度为itemSupp=6,itemSupp/supp=6/8<置信度0.8,故8不属于闭集,但因为itemSupp>=最小支持度2,且D列大于freesetCol中最大的列C,故8属于候选项,将列D,项8,及其事务位数组[1,1,1,1,0,1,1,0,0,0,0]保存到candidates中;项10的事务位数组为[0,0,0,0,0,0,0,0,0,1,1],计算可得也属于候选项,将其及其事务位数组保存到candidates中。
L5.closedItems为空,故略过;
L6.逆序遍历candidates中的所有列,此处只有D列,将D增加到freesetCol和closureCol中,即freesetCol={C,D},closureCol={C,D},然后遍历其所有候选项(8,10):先考虑项8,将其更新到freesetItems,即freesetItems={6,8},取出项8对应的事务位数组为itemTranSet=[1,1,1,1,0,1,1,0,0,0,0],更新tranSet=itemTranSet,递归调用DCfd方法,具体过程如DCfd_3;项8计算完毕回退freesetItems然后将项10更新到其中,更新tranSet,类似的递归调用LCfd方法,无规则产生;项10计算完毕回退freesetItems;
L7.回退closureCol至进入状态,即closureCol={C};
L8.结束。
DCfd_3:进入时状态freesetItems={6,8},freesetCol={C,D},closureCol={C,D},tranSet=[1,1,1,1,0,1,1,0,0,0,0]
L1.根据规则树进行剪枝,根据规则树中以8结尾的规则可剪去B、C列,故closureCol={B,C,D};
L2.判断freesetItems,存在规则可判断{6,8}不是个freeset,故迭代结束;
L7.回退closureCol至进入状态,即closureCol={C,D};
L8.结束。