CN114840577B - 一种基于邻接比特压缩表的频繁闭项集挖掘算法 - Google Patents
一种基于邻接比特压缩表的频繁闭项集挖掘算法 Download PDFInfo
- Publication number
- CN114840577B CN114840577B CN202210391273.8A CN202210391273A CN114840577B CN 114840577 B CN114840577 B CN 114840577B CN 202210391273 A CN202210391273 A CN 202210391273A CN 114840577 B CN114840577 B CN 114840577B
- Authority
- CN
- China
- Prior art keywords
- cab
- stuck
- sequence
- stack
- pos
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2465—Query processing support for facilitating data mining operations in structured databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Fuzzy Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
发明公开了一种基于邻接比特压缩表的频繁闭项集挖掘算法,定义使原始事务集高度压缩的,用于频繁闭项集挖掘的数据结构——邻接比特压缩表,通过该数据结构一方面将每个项或项集所包含的交易集压缩为比特数组,并通过邻接比特的位置标识去剔除传统比特表中的0比特,使交易集高度压缩;另一方面,建立项索引表,之后将项索引压缩到邻接比特压缩表中,当原始数据集中项的维度较高,或项标识较长时,压缩效果明显;其次,通过采用运算栈与检索栈的非递归运算方法,可以降低运算过程与闭合检索的空间占用;最后,通过邻接比特压缩表之间的与运算以及或运算代替项集求交或并运算,同时采用项集预处理、回溯校验的剪枝策略,来加快整体运算过程。
Description
技术领域
本发明涉及数据挖掘技术领域,具体为一种基于邻接比特压缩表的频繁闭项集挖掘算法。
背景技术
频繁项集(Frequent Items,FI)是若干频繁同时出现事物的集合,最早是在超市研究货物摆放规律以及客户购买商品组合时提出的概念。随着信息技术的迅猛发展以及大数据时代的到来,使得在许多场景下对事物关联关系挖掘的需求日益强烈,直接促进了频繁项集挖掘算法的研究与应用。除客户营销方面的应用外,金融风险防控、旅游路线规划、机械异常故障预警、网络日志分析等,都有实际应用。然而,FI存在大量冗余信息,于是有学者进一步提出了频繁闭项集(FCI:Frequent Closed Items)的概念,FCI可以在不损失任何信息、完整地保持事物之间关联关系的前提下,剔除所有频繁项集的冗余信息,进而解决上述问题。频繁项集或频繁闭项集挖掘算法输入的基础数据集有三种结构:水平数据集、前缀树、垂直数据集。
基于水平数据集挖掘频繁项是最早被提出的一种策略,其核心思想是通过项集的两两合并来生成候选集,之后通过候选集与原始数据集的比对来计算其支持度,进而得知其是否为频繁项。由于每个候选集都需要与原始数据集进行比对,所以原始数据集需要常驻内存,并被频繁访问。当原始数据集较大时,算法的空间效率和时间效率都较差。
基于前缀树策略的基本原理是首先扫描一遍原始数据集记录各项的支持度,之后再扫描一遍数据集,剔除非频繁项并降序排序,再之后根据排序后队列中前后项之间的位置关系构建前缀树,最后通过该前缀树可以高效地生成频繁项集。该策略的问题在于,当结点的父节点较多时,原始数据集的压缩效果较差,同时该树状结构需常驻内存,当数据规模较大时,内存占用依旧很高。
基于垂直数据集策略的基本原理是首先扫描一遍数据集,形成主索引为项ID,其内容是该项所包含交易集的一种垂直数据结构。之后基于该数据结构,由频繁K项集可快速生成频繁K+1项集。由于基于垂直数据集的策略只需扫描一遍数据集,频繁K项集运算结束后可释放其空间,故时间和空间效率可进一步提升。
频繁项集包含冗余信息,如项集{A,B}的支持度为10,项集{A,B,C}的支持度也是10,则{A,B}完全可由{A,B,C}替代。所以有学者提出了基于频发闭项集的挖掘算法来解决信息冗余的问题。由于频繁闭项集在挖掘过程中需要对待输出项集进行闭合校验,所以频繁闭项集挖掘算法又可基于是否采用哈希表校验分为两类。采用哈希表的算法需要在输出过程中首先对待输出项集进行哈希运算,之后通过哈希表快速检索其是否闭合,如闭合则将其放入哈希表中并输出,否则将其丢弃。不采用哈希表的算法在运行过程中可判断项集是否闭合。采用哈希表的算法属于由空间换时间的策略,所以普遍时间效率占优,而不使用哈希表校验的算法普遍空间效率占优。
对于空间效率优化的研究,从水平数据集到前缀树再到垂直数据集,从数据结构的角度出发使空间效率都有所提升。而对于数据结构中需要放入内存的每个元素单元,有学者提出了传统比特表的数据结构——BitTable,用位表来代替项所归属的事务标识,使初始垂直数据集有了大幅的压缩,同时用按位与运算代替之前的求交集运算,效率也极大的提升。但各项的位表需要按位对齐,导致该数据结构中存在大量的0。后来有学者进一步提出了Dynamic Bit-Vector数据结构,它剔除了BitTable首尾的0,使初始数据进一步压缩。但当BitTable中间位置的存在大量的0时,Dynamic Bit-Vector依旧要占用大量的内存。
发明内容
针对上述问题,本发明的目的在于针对现有技术中的挖掘算法空间效率不高的现状提供一种基于邻接比特压缩表的频繁闭项集挖掘算法,能够降低循环长度,加快运算效率,大幅提升运算的时间效率。技术方案如下:
一种基于邻接比特压缩表的频繁闭项集挖掘算法,包括如下步骤:
步骤1)定义基础数据结构,包括四种数据结构:原始数据集结构、邻接比特压缩表结构、初始运算数组结构,以及运算与检索栈结构;
步骤2)数据初始化:首先将原始数据集DataSet转换成垂直数据集并压缩到序列Inite″table中,之后剔除小于最小支持度minsup的元素,并基于sup升序排列形成序列Inite′table;最后将序列Inite′table中的元素依次与其右侧元素做“项归并”操作,操作结束之后形成序列Initetable;
步骤3)采用频繁闭项集挖掘主算法进行运算:运算指针P依次调用序列Initetable中的元素与运算栈Calstuck顶部元素完成结合与闭合校验运算;结合形成新结点,若校验通过,则入运算栈Calstuck;当运算指针P溢出,则运算栈Calstuck顶部元素出运算栈入检索栈Checkstuck,当运算栈Calstuck为空同时,且运算指针P为溢出状态时,运算结束;
步骤4)确定检索栈Checkstuck的运算规则:运算栈Calstuck入栈元素基于该元素在运算栈Calstuck中的位置信息,在检索栈Checkstuck中自顶部至底部找到合适的位置后,完成入检索栈Checkstuck的操作。
进一步的,所述步骤1具体包括:
步骤1.1)定义原始数据集结构:
原始数据集为包含若干项id交易序列,数学表达式如下:
其中,Y是包含所有id信息的全集,Xi是Y的任意一个子集,原始数据集DataSet包含n个Y的子集;
步骤1.2)定义邻接比特压缩表结构:
邻接比特压缩表为包含m个元素的序列,每个元素包含位置信息与值信息,数学表达式如下:
其中,Ci为邻接比特元素,原始数据集分为八位一组的序列,pos位表示原始数据集中第几个序列的值,value位记录当前序列八位中,哪几位出现了目标id,出现用1表示,未出现用0表示;如果八位均为0,则该元素不出现,因此取值范围从1到255;Cabtable是包含m个邻接比特元素的序列;
步骤1.3)定义运算数组结构:
按照垂直数据集的结构将原始数据集进行调整与压缩,形成初始数据集;初始数据集包含三个部分,支持度、用邻接比特表压缩表示的项集合、用邻接比特表表示的交易集合,数学表达式如下:
其中,Initetable是包含了k个元素的序列,在每个元素中,idcab是对项id进行压缩后的邻接比特压缩表,按行从左至右扫描原始数据集过程中,每一个id用第一次出现的位置代替,若原始初级id值去重后共有m项,则创建一个长度为m的序列存储id值,id在原始数据集中先出现则占据序列前边的位置,然后将该序列八位一组拆分,之后用邻接比特压缩表表示,则将每个id转换成idcab,同时多个id形成的数据集也由idcab表示;sup表示当前idcab在原始数据集中,有多少交易序列所包含;tradecab表示在原始数据集中,具体哪几笔交易序列所包含;
步骤1.4)定义运算与检索栈结构:
在运算与检索的过程中用到的栈结构,每个栈元素包括两个部分,位置标识和邻接比特压缩表结构数据,数学表达式如下:
其中,Stuck是一个先进后出的栈结构,栈内元素的loc表示当前运算元素在Initetable序列中的位置,y的数据结构与Initetable中元素的数据结构相同,用来记录运算后的结果数据。
更进一步的,所述步骤2)中算法数据初始化过程如下:
步骤2.1)从原始数据集DataSet至序列Inite″table:按行从左到右边依次扫描一次原始数据集DataSet,扫描过程中形成项索引序列ID={id1,id2,…,idm},原始数据集DataSet中的id标识根据第一次出现的次序插入到项索引序列ID之中,序列Inite″table中元素idcab由项索引idj在项索引序列ID的位置j运算得到,元素sup记录扫描到项索引idj的次数,元素tradecab由项索引idj在原始数据集DataSet中的行位置计算得到;函数运算如下:
其中,j表示项索引idj在ID中的位次,idcab.pos表示ID进行八位一组的划分后,项索引idj在第几组之中,idcab.value表示项索引idj在该组八位中的第几位,然后转换成十进制;sup记录项索引idj在原始数据集DataSet中出现的次数;原始数据集DataSet中的行标识也按照八位一组划分,(pos:value)n表示项索引idj在交易序列划分后的n个行组中出现过,其中pos记录项索引idj在哪些行组中出现过,value表示项索引idj在当前行组中哪些位置出现过,并用十进制存储;rk表示idj在交易序列中第k次出现的行数,除8取整转换为行组数,存储于tradecab.posi;在tradecab.posi所记录的行组中,所有项索引idj出现的行数除8取余作为以2为底的指数幂,之后求和,来记录当前行组中具体出现的位置,存储于tradecab.valuei。
步骤2.2)从序列Inite″table至序列Inite′table:依次扫描序列Inite″table中的元素,剔除小于最小支持度minsup的元素,之后根据sup值进行升序排列;
步骤2.3)从序列Inite′table至序列Initetable:序列中的元素依次与右侧所有元素tradecab做归属校验,如果当前元素的tradecab被右侧元素的tradecab所包含,则当前元素的idcab,合并入被校验元素的idcab,于此同时如果右侧被校验元素sup值相同,说明tradecab相同,则删除当前被校验元素,数学表达式如下:
tradecab归属校验具体为:
若且当A.tradecab.X.pos=B.tradecab.Y.pos时,/>则B的交易集包含A的交易集,之后用A.idcab与B.idcab的归并结果替换A.idcab。其中,X、Y表示结点A、B的tradecab的当前序列。
当B的交易集包含A的交易集,且B.sup=A.sup,则B的交易集与A的交易集完全相等,此时删除B结点。
idcab归并:
A.idcab∪B.idcab=C.idcab
C.idcab满足:
若A.idcab.X.pos>B.idcab.Y.pos,则C.idcab.Z=B.idcab.Y;
若A.idcab.X.pos<B.idcab.Y.pos,则C.idcab.Z=A.idcab.X;
若A.idcab.X.pos=B.idcab.Y.pos,则C.idcab.Z.pos=A.idcab.X.pos,C.idcab.Z.valve=A.idcab.X.value∪B.idcab.Y.value。
在idcab归并过程中,结点A与结点B的idcab序列依次从第一位到最后一位进行pos的大小判断,当结点B的idcab当前序列的pos较小时,将B的idcab当前序列插入到C.idcab中,之后结点B的idcab的下一个序列信息继续与结点A的idcab的pos进行比较;当结点A的idcab的pos较小时,进行同样操作;当结点A与结点B的idcab的pos值相同时,C.idcab的当前序列的pos值取结点A的idcab的pos值,C.idcab的当前序列的value值取结点A与结点B的idcab的value值求并集结果,之后结点A的idcab的下一个序列与结点B的idcab的下一个序列继续进行比较;当某一个结点序列比较完毕,另一个结点未比较序列全部插入到C的idcab的序列中;其中,X、Y、Z分别表示结点A、B、C的idcab的当前序列。
更进一步的,所述步骤3)中主算法运算过程如下:
步骤3.1)入运算栈Calstuck操作:
若运算栈Calstuck为空,则运算指针P指向的元素直接入栈,Calstuck.top.loc取运算指针P当前在序列Initetable的位次信息,之后运算指针P后移一位;
若运算栈Calstuck非空,则判断运算栈Calstuck顶部元素的idcab是否包含P.idcab,若包含则跳过当前元素,运算指针P向后位移一位;若不包含,则运算栈Calstuck顶部元素与运算指针P进行结点结合运算并形成临时结点TEMP;
若TEMP.sup=Calstuck.top.sup,则运算栈Calstuck.top替换为Temp,运算指针P后移;
若TEMP.sup<minsup则运算指针P后移;
若TEMP.sup≥minsup则将TEMP在检索栈Checkstuck中进行闭合检验,校验通过则将TEMP入Calstuck,Calstuck.top.loc取运算指针P当前在序列Initetable的位次信息,之后运算指针P后移;校验未通过则运算指针P直接后移;数学表达式如下:
运算栈Calstuck顶部元素与序列P进行结点结合运算:
Calstuck.top+P=TEMP
TEMP.idcab=Calstuck.top.idcab∪P.idcab
TEMP.tradecab=Calstuck.top.tradecab∩P.tradecab
其中,count()表示tradecab中1的个数;
其中tradecab交集:
A.tradecab∩B.tradecab=C.tradecab
C.tradecab满足:
C.tradecab.pos=A.tradecab.pos=B.tradecab.pos;
C.tradecab.value=A.tradecab.value∩B.tradecab.value if C.tradecab.pos=
A.tradecab.pos=B.tradecab.pos;
临时结点TEMP闭合检验运算:
若则校验通过,否则不通过;
步骤3.2)出运算栈Calstuck操作:当序列Initetable最后一个元素完成运算后,运算指针P继续后移一位将处于溢出状态,此时Calstuck.top将出栈,同时出栈元素一方面入检索栈Checkstuck,另一方面将该元素存储于外存中;最后,将运算指针P重定位,位置为出栈元素的loc+1;
步骤3.3)运算终止:当序列Initetable最后一个元素入运算栈Calstuck,且为顶部元素时,运算指针P后移溢出,该元素将进行出运算栈入检索栈运算并存储于外存,之后运算栈Calstuck为空,运算指针P保持溢出状态,运算结束。
更进一步的,所述检索栈Checkstuck入栈运算具体为:若检索栈Checkstuck为空,则待入栈元素X直接入栈,Checkstuck.top.loc取X在检索栈Checkstuck中的位置信息top;若检索栈Checkstuck非空,则比较Checkstuck.top.loc与X.top;若X.top<Checkstuck.top.loc,则检索栈Checkstuck入栈运算,直到X.top≥Checkstuck.top.loc时,X入检索栈Checkstuck,Checkstuck.top.loc=X.top。
本发明的有益效果是:
1)本发明邻接比特压缩表可用于交易集的压缩存储,通过邻接比特压缩表中的位置标识可以剔除传统比特表中的0比特,使数据高度压缩;另一方面由于数组长度变短,进而使运算时的循环长度变短,加快运算效率。
2)本发明邻接比特压缩表可用于项集的压缩存储,尤其当项标识较长(如身份ID、商品ID、地点名称等)时,运算空间占用将显著的减少;同时用邻接比特压缩表间的按位“或”运算来代替项标识间的并集运算,大幅提升运算的时间效率。
3)本发明设计出两种栈数据结构,其中运算栈作为基础运算空间执行主算法,检索栈作为检索空间执行待输出项集的闭合校验。同时采用基于双栈的非递归运算方法,可使运算时最大理论空间占用为O(2N+M),其中N为基础运算表长度,M为检索表长度。
附图说明
图1为本发明的基于邻接比特压缩表的频繁闭项集挖掘算法流程图。
图2为本发明的原始数据集压缩至初始数据集的过程图。
图3为本发明的主算法运算逻辑,以及运算栈的演化过程。
图4为本发明的检索栈演化过程。
具体实施方式
下面结合附图和具体实施例对本发明做进一步详细说明。
本发明为一种基于邻接比特压缩表的频繁闭项集挖掘算法,首先,定义了一种使原始事务集高度压缩的,用于频繁闭项集挖掘的数据结构——邻接比特压缩表,通过该数据结构一方面可以将每个项或项集所包含的交易集压缩为比特数组,并通过邻接比特的位置标识去剔除传统比特表中的0比特,使交易集高度压缩;另一方面,建立项索引表,之后将项索引压缩到邻接比特压缩表中,当原始数据集中项的维度较高,或项标识较长时,压缩效果明显。其次,基于邻接比特压缩表,提出一种运算空间效率极佳的频繁闭项集挖掘算法,通过采用运算栈与检索栈的非递归运算方法,可以降低运算过程与闭合检索的空间占用。最后,通过邻接比特压缩表之间的与运算以及或运算代替项集求交或并运算,同时采用项集预处理、回溯校验的剪枝策略,来加快整体运算过程。
参见图1,本发明所述的一种基于邻接比特压缩表的频繁闭项集挖掘算法,包括以下步骤:
步骤1)定义基础数据结构,算法相关数据结构包括:原始数据集结构、邻接比特压缩表结构、初始运算数组机构、运算与检索栈结构等四种数据结构,运算开始前需完成对上述数据结构的定义。
步骤1.1)定义原始数据集:原始数据集为包含若干项id交易序列,例如商品订单序列、仓储入库序列、机器故障序列等,数学表达式如下:
其中,Y是包含所有id信息的全集,Xi是Y的任意一个子集,原始数据集DataSet包含n各Y的子集。
步骤1.2)定义邻接比特压缩表:邻接比特压缩表是一个包含n个元素的集合,每个元素包含位置信息与值信息,数学表达式如下:
其中,Xi为邻接比特元素,原始数据集可分为八位一组的序列,pos位表示原始数据集中第几个序列的值,value位记录当前序列八位中,哪几位出现了目标id,出现用1表示,未出现用0表示,如果八位都为0,则该元素不出现,因此取值范围从1到255。CabTable是包含了n个邻接比特元素的序列。
步骤1.3)定义初始数据集:原始数据集在本算法下无法直接进行运算,需按照垂直数据集的结构进行调整与压缩,之后形成初始数据集。初始数据集包含三个部分,支持度、用邻接比特表压缩表示的项集合、用邻接比特表表示的交易集合,数学表达式如下:
其中,Initetable是包含了n个元素的序列,在每个元素中,idcab是对项id进行压缩后的邻接比特压缩表,按行从左至右扫描原始数据集过程中,每一个id可用第一次出现的位置代替,如果原始初级id值去重后共有m项,则创建一个长度为m的序列存储id值,id在原始数据集中先出现则占据序列前边的位置,然后将该序列八位一组拆分,之后用邻接比特压缩表表示,因此,每个id可转换成idcab,同时多个id形成的数据集也可由idcab表示;sup表示当前idcab在原始数据集中,有多少交易序列所包含;tradecab表示在原始数据集中,具体哪几笔交易序列所包含。
步骤1.4)定义栈数据结构:在运算与检索的过程中都需要用到该栈结构,每个栈元素包括两个部分,位置标识、邻接比特压缩表结构数据,数学表达式如下:
其中Stuck是一个先进后出的栈结构,栈内元素的loc表示当前运算元素在Initetable序列中的位置,y的数据结构与Initetable中元素的数据结构相同,用来记录运算后的结果数据。
图2分别展示了原始数据集结构、邻接比特压缩表数据结构、以及初始数据集结构。
步骤2)数据初始化:首先需要将原始数据集DataSet转换成垂直数据集并压缩到Inite″table中,之后剔除小于最小支持度minsup的元素并基于sup升序排列形成Inite′table,最后Inite′table中的元素依次与其右侧元素做“项归并”操作,操作结束之后形成Initetable。
步骤2.1)DataSet至Inite″table:按行从左到右边依次扫描一次DataSet,扫描过程中形成项索引序列ID={id1,id2,…,idm},DataSet中的id标识根据第一次出现的次序插入到ID之中,Inite″table中,元素idcab由idj在ID的位置j运算得到,元素sup记录扫描到idj次数,元素tradecab由idj在DataSet中的行位置计算得到。函数运算如下:
其中,j表示idj在ID中的位次,idcab.pos表示ID进行八位一组的划分后,idj在第几组之中,idcab.value表示idj在该组八位中的第几位,然后转换成十进制;sup记录idj在DataSet中出现的次数;DataSet中的行标识也按照八位一组划分,tradecab.pos记录idj在哪些行组中出现过,tradecab.valuei表示idj在当前行组中哪些位置出现过,然后转换成十进制。
步骤2.2)Inite″table至Inite′table:依次扫描Inite″table中的元素,剔除小于最小支持度minsup的元素,之后根据sup值进行升序排列,
步骤2.3)Inite′table至Initetable:序列中的元素依次与右侧所有元素做tradecab归属校验,如果当前元素tradecab被右侧元素tradecab所包含,则当前元素idcab,合并入被校验元素idcab,于此同时如果右侧被校验元素sup值相同,说明tradecab相同,则删除当前被校验元素,数学表达式如下:
tradecab归属校验具体为:
若且当A.tradecab.X.pos=B.tradecab.Y.pos时,/>则B的交易集包含A的交易集,之后用A.idcab与B.idcab的归并结果替换A.idcab;其中,X、Y表示结点A、B的tradecab的当前序列;
当B的交易集包含A的交易集,且B.sup=A.sup,则B的交易集与A的交易集完全相等,此时删除B结点;
idcab归并:
A.idcab∪B.idcab=C.idcab
C.idcab满足:
若A.idcab.X.pos>B.idcab.Y.pos,则C.idcab.Z=B.idcab.Y;
若A.idcab.X.pos<B.idcab.Y.pos,则C.idcab.Z=A.idcab.X;
若A.idcab.X.pos=B.idcab.Y.pos,则C.idcab.Z.pos=A.idcab.X.pos,C.idcab.Z.valve=A.idcab.X.value∪B.idcab.Y.value;
在idcab归并过程中,结点A与结点B的idcab序列依次从第一位到最后一位进行pos的大小判断,当结点B的idcab当前序列的pos较小时,将B的idcab当前序列插入到C.idcab中,之后结点B的idcab的下一个序列信息继续与结点A的idcab的pos进行比较;当结点A的idcab的pos较小时,进行同样操作;当结点A与结点B的idcab的pos值相同时,C.idcab的当前序列的pos值取结点A的idcab的pos值,C.idcab的当前序列的value值取结点A与结点B的idcab的value值求并集结果,之后结点A的idcab的下一个序列与结点B的idcab的下一个序列继续进行比较;当某一个结点序列比较完毕,另一个结点未比较序列全部插入到C的idcab的序列中;其中,X、Y、Z分别表示结点A、B、C的idcab的当前序列。
步骤3)频繁闭项集挖掘主算法:运算指针P依次调用Initetable中的元素与运算栈Calstuck顶部元素完成结合与闭合校验运算;结合形成新结点如校验通过则入运算栈Calstuck;当P溢出则Calstuck顶部元素出运算栈入检索栈Checkstuck,当Calstuck为空同时P为溢出状态时,运算结束。
步骤3.1)入Calstuck操作:若Calstuck为空,则P指向的元素直接入栈,Calstuck.top.loc取P当前在Initetable的位次信息,之后P后移一位;若Calstuck非空,则判断Calstuck顶部元素的idcab是否包含P.idcab,如包含则跳过当前元素P向后位移一位。如不包含,则Calstuck顶部元素与P进行结点结合运算并形成临时结点TEMP,若TEMP.sup=Calstuck.top.sup,则Calstuck.top替换为Temp,P后移;若TEMP.sup<minsup则P后移;若TEMP.sup≥minsup则将TEMP在Checkstuck中进行闭合检验,校验通过则将TEMP入Calstuck,Calstuck.top.loc取P当前在Initetable的位次信息,之后P后移。校验未通过则P直接后移。数学表达式如下:
Calstuck顶部元素与P进行结点结合运算:
Calstuck.top+P=TEMP
TEMP.idcab=Calstuck.top.idcab∪P.idcab
TEMP.tradecab=Calstuck.top.tradecab∩P.tradecab
其中,count()表示tradecab中1的个数。
其中tradecab交集:
A.tradecab∩B.tradecab=C.tradecab
C tradecab满足:
C.tradecab.pos=A.tradecab.pos=B.tradecab.pos;
C.tradecab.value=A.tradecab.value∩B.tradecab.value if C.tradecab.pos=
A.tradecab.pos=B.tradecab.pos;
TEMP闭合检验运算:
若则校验通过,否则不通过。
步骤3.2)出Calstuck操作:当Initetable最后一个元素完成运算后,P继续后移一位将处于溢出状态,此时Calstuck.top将出栈,同时出栈元素一方面入检索栈Checkstuck,另一方面将该元素存储于外存中。最后,将P重定位,位置为出栈元素的loc+1。
步骤3.3)运算终止:当Initetable最后一个元素入Calstuck,且为顶部元素时,P指针后移溢出,该元素将进行出运算栈入检索栈运算并存储于外存,之后Calstuck为空,P保持溢出状态,运算结束。
图3对主算法的运算逻辑进行了详细的展示。
步骤4)Checkstuck运算规则:Calstuck入栈元素基于该元素在Calstuck中的位置信息,在Checkstuck中自顶部至底部找到合适的位置后,完成入Checkstuck操作。
步骤4.1)Checkstuck入栈运算:若Checkstuck为空,则待入栈元素X直接入栈,Checkstuck.top.loc取X在Checkstuck中的位置信息top;若Checkstuck非空,则比较Checkstuck.top.loc与X.top,若X.top<Checkstuck.top.loc则Checkstuck进行出栈操作,直到X.top≥Checkstuck.top.loc时,X入Checkstuck,Checkstuck.top.loc=X.top。
图4对检索栈的形成过程进行了详细的展示。
Claims (4)
1.一种基于邻接比特压缩表的频繁闭项集挖掘方法,其特征在于,包括如下步骤:
步骤1)定义基础数据结构,包括四种数据结构:原始数据集结构、邻接比特压缩表结构、初始运算数组结构,以及运算与检索栈结构;
步骤2)数据初始化:首先将原始数据集DataSet转换成垂直数据集并压缩到序列Initet″able中,之后剔除小于最小支持度minsup的元素,并基于sup升序排列形成序列Initet′able;最后将序列Initet′able中的元素依次与其右侧元素做“项归并”操作,操作结束之后形成序列Initetable;
步骤3)采用频繁闭项集挖掘主算法进行运算:运算指针P依次调用序列Initetable中的元素与运算栈Calstuck顶部元素完成结合与闭合校验运算;结合形成新结点,若校验通过,则入运算栈Calstuck;当运算指针P溢出,则运算栈Calstuck顶部元素出运算栈入检索栈Checkstuck,当运算栈Calstuck为空同时,且运算指针P为溢出状态时,运算结束;
步骤4)确定检索栈Checkstuck的运算规则:运算栈Calstuck入栈元素基于该元素在运算栈Calstuck中的位置信息,在检索栈Checkstuck中自顶部至底部找到合适的位置后,完成入检索栈Checkstuck的操作;
所述步骤1具体包括:
步骤1.1)定义原始数据集结构:
原始数据集为包含若干项id交易序列,所述id交易序列为商品订单序列,数学表达式如下:
其中,Y是包含所有id信息的全集,Xi是Y的任意一个子集,原始数据集DataSet包含n个Y的子集;
步骤1.2)定义邻接比特压缩表结构:
邻接比特压缩表为包含m个元素的序列,每个元素包含位置信息与值信息,数学表达式如下:
其中,Ci为邻接比特元素,原始数据集分为八位一组的序列,pos位表示原始数据集中第几个序列的值,value位记录当前序列八位中,哪几位出现了目标id,出现用1表示,未出现用0表示;如果八位均为0,则该元素不出现,因此取值范围从1到255;Cabtable是包含m个邻接比特元素的序列;
步骤1.3)定义运算数组结构:
按照垂直数据集的结构将原始数据集进行调整与压缩,形成初始数据集;初始数据集包含三个部分,支持度、用邻接比特表压缩表示的项集合、用邻接比特表表示的交易集合,数学表达式如下:
其中,Initetable是包含了k个元素的序列,在每个元素中,idcab是对项id进行压缩后的邻接比特压缩表,按行从左至右扫描原始数据集过程中,每一个id用第一次出现的位置代替,若原始初级id值去重后共有m项,则创建一个长度为m的序列存储id值,id在原始数据集中先出现则占据序列前边的位置,然后将该序列八位一组拆分,之后用邻接比特压缩表表示,则将每个id转换成idcab,同时多个id形成的数据集也由idcab表示;sup表示当前idcab在原始数据集中,有多少交易序列所包含;tradecab表示在原始数据集中,具体哪几笔交易序列所包含;
步骤1.4)定义运算与检索栈结构:
在运算与检索的过程中用到的栈结构,每个栈元素包括两个部分,位置标识和邻接比特压缩表结构数据,数学表达式如下:
其中,Stuck是一个先进后出的栈结构,栈内元素的loc表示当前运算元素在Initetable序列中的位置,y的数据结构与Initetable中元素的数据结构相同,用来记录运算后的结果数据。
2.根据权利要求1所述的基于邻接比特压缩表的频繁闭项集挖掘方法,其特征在于,所述步骤2)中算法数据初始化过程如下:
步骤2.1)从原始数据集DataSet至序列Initet″able:按行从左到右边依次扫描一次原始数据集DataSet,扫描过程中形成项索引序列ID={id1,id2,…,idm},原始数据集DataSet中的id标识根据第一次出现的次序插入到项索引序列ID之中,序列Initet″able中元素idcab由项索引idj在项索引序列ID的位置j运算得到,元素sup记录扫描到项索引idj的次数,元素tradecab由项索引idj在原始数据集DataSet中的行位置计算得到;函数运算如下:
其中,j表示项索引idj在ID中的位次,idcab.pos表示ID进行八位一组的划分后,项索引idj在第几组之中,idcab.value表示项索引idj在该组八位中的第几位,然后转换成十进制;sup记录项索引idj在原始数据集DataSet中出现的次数;原始数据集DataSet中的行标识也按照八位一组划分,(pos:value)n表示项索引idj在交易序列划分后的n个行组中出现过,其中pos记录项索引idj在哪些行组中出现过,value表示项索引idj在当前行组中哪些位置出现过,并用十进制存储;rk表示idj在交易序列中第k次出现的行数,除8取整转换为行组数,存储于tradecab.posi;在tradecab.posi所记录的行组中,所有项索引idj出现的行数除8取余作为以2为底的指数幂,之后求和,来记录当前行组中具体出现的位置,存储于tradecab.valuei;
步骤2.2)从序列Initet″able至序列Initet′able:依次扫描序列Initet″able中的元素,剔除小于最小支持度minsup的元素,之后根据sup值进行升序排列;
步骤2.3)从序列Initet′able至序列Initetable:序列中的元素依次与右侧所有元素tradecab做归属校验,如果当前元素的tradecab被右侧元素的tradecab所包含,则当前元素的idcab,合并入被校验元素的idcab,于此同时如果右侧被校验元素sup值相同,说明tradecab相同,则删除当前被校验元素,数学表达式如下:
tradecab归属校验具体为:
若且当A.tradecab.X.pos=B.tradecab.Y.pos时,/>则B的交易集包含A的交易集,之后用A.idcab与B.idcab的归并结果替换A.idcab;其中,X、Y表示结点A、B的tradecab的当前序列;
当B的交易集包含A的交易集,且B.sup=A.sup,则B的交易集与A的交易集完全相等,此时删除B结点;
idcab归并:
A.idcab∪B.idcab=C.idcab
C.idcab满足:
若A.idcab.X.pos>B.idcab.Y.pos,则C.idcab.Z=B.idcab.Y;
若A.idcab.X.po<B.idcab.Y.pos,则C.idcab.Z=A.idcab.X;
若A.idcab.X.pos=B.idcab.Y.pos,则C.idcab.Z.pos=A.idcab.X.pos,
C.idcab.Z.valve=A.idcab.X.value∪B.idcab.Y.value;
在idcab归并过程中,结点A与结点B的idcab序列依次从第一位到最后一位进行pos的大小判断,当结点B的idcab当前序列的pos较小时,将B的idcab当前序列插入到C.idcab中,之后结点B的idcab的下一个序列信息继续与结点A的idcab的pos进行比较;当结点A的idcab的pos较小时,进行同样操作;当结点A与结点B的idcab的pos值相同时,C.idcab的当前序列的pos值取结点A的idcab的pos值,C.idcab的当前序列的value值取结点A与结点B的idcab的value值求并集结果,之后结点A的idcab的下一个序列与结点B的idcab的下一个序列继续进行比较;当某一个结点序列比较完毕,另一个结点未比较序列全部插入到C的idcab的序列中;其中,X、Y、Z分别表示结点A、B、C的idcab的当前序列。
3.根据权利要求1所述的基于邻接比特压缩表的频繁闭项集挖掘方法,其特征在于,所述步骤3)中主算法运算过程如下:
步骤3.1)入运算栈Calstuck操作:
若运算栈Calstuck为空,则运算指针P指向的元素直接入栈,Calstuck.top.loc取运算指针P当前在序列Initetable的位次信息,之后运算指针P后移一位;
若运算栈Calstuck非空,则判断运算栈Calstuck顶部元素的idcab是否包含P.idcab,若包含则跳过当前元素,运算指针P向后位移一位;若不包含,则运算栈Calstuck顶部元素与运算指针P进行结点结合运算并形成临时结点TEMP;
若TEMP.sup=Calstuck.top.sup,则运算栈Calstuck.top替换为Temp,运算指针P后移;
若TEMP.sup<minsup则运算指针P后移;
若TEMP.sup≥minsup则将TEMP在检索栈Checkstuck中进行闭合检验,校验通过则将TEMP入Calstuck,Calstuck.top.loc取运算指针P当前在序列Initetable的位次信息,之后运算指针P后移;校验未通过则运算指针P直接后移;数学表达式如下:
运算栈Calstuck顶部元素与序列P进行结点结合运算:
Calstuck.top+P=TEMP
TEMP.idcab=Calstuck.top.idcab∪P.idcab
TEMP.tradecab=Calstuck.top.tradecab∩P.tradecab
其中,count()表示tradecab中所有value包含1的个数;
其中tradecab交集:
A.tradecab∩B.tradecab=C.tradecab
C.tradecab满足:
C.tradecab.pos=A.tradecab.pos=B.tradecab.pos;
C.tradecab.value=A.tradecab.value∩B.tradecab.value if C.tradecab.pos=
A.tradecab.pos=B.tradecab.pos;
临时结点TEMP闭合检验运算:
若则校验通过,否则不通过;步骤3.2)出运算栈Calstuck操作:当序列Initetable最后一个元素完成运算后,运算指针P继续后移一位将处于溢出状态,此时Calstuck.top将出栈,同时出栈元素一方面入检索栈Checkstuck,另一方面将该元素存储于外存中;最后,将运算指针P重定位,位置为出栈元素的loc+1;
步骤3.3)运算终止:当序列Initetable最后一个元素入运算栈Calstuck,且为顶部元素时,运算指针P后移溢出,该元素将进行出运算栈入检索栈运算并存储于外存,之后运算栈Calstuck为空,运算指针P保持溢出状态,运算结束。
4.根据权利要求1所述的基于邻接比特压缩表的频繁闭项集挖掘方法,其特征在于,所述检索栈Checkstuck入栈运算具体为:若检索栈Checkstuck为空,则待入栈元素X直接入栈,Checkstuck.top.loc取X在检索栈Checkstuck中的位置信息top;若检索栈Checkstuck非空,则比较Checkstuck.top.loc与X.top;若X.top<Checkstuck.top.loc,则检索栈Checkstuck进行出栈操作,直到X.top≥Checkstuck.top.loc时,X入检索栈Checkstuck,Checkstuck.top.loc=X.top。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210391273.8A CN114840577B (zh) | 2022-04-14 | 2022-04-14 | 一种基于邻接比特压缩表的频繁闭项集挖掘算法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210391273.8A CN114840577B (zh) | 2022-04-14 | 2022-04-14 | 一种基于邻接比特压缩表的频繁闭项集挖掘算法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114840577A CN114840577A (zh) | 2022-08-02 |
CN114840577B true CN114840577B (zh) | 2023-08-29 |
Family
ID=82565761
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210391273.8A Active CN114840577B (zh) | 2022-04-14 | 2022-04-14 | 一种基于邻接比特压缩表的频繁闭项集挖掘算法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114840577B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090019185A (ko) * | 2007-08-20 | 2009-02-25 | 연세대학교 산학협력단 | 데이터 스트림으로부터 연관규칙을 생성하는 방법 및데이터 마이닝 시스템 |
CN103823823A (zh) * | 2013-07-08 | 2014-05-28 | 电子科技大学 | 基于频繁项集挖掘算法的反规范化策略选择方法 |
CN104408127A (zh) * | 2014-11-27 | 2015-03-11 | 无锡市思库瑞科技信息有限公司 | 基于深度优先的不确定数据最大模式挖掘方法 |
KR20180120551A (ko) * | 2017-04-27 | 2018-11-06 | 재단법인대구경북과학기술원 | 빈발 패턴 마이닝 방법 및 장치 |
CN109783536A (zh) * | 2018-12-28 | 2019-05-21 | 西北工业大学 | 一种基于邻接表的最大频繁项集挖掘方法 |
CN110287240A (zh) * | 2019-06-27 | 2019-09-27 | 浪潮软件集团有限公司 | 一种基于Top-K频繁项集的挖掘算法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10872394B2 (en) * | 2017-04-27 | 2020-12-22 | Daegu Gyeongbuk Institute Of Science And Technology | Frequent pattern mining method and apparatus |
-
2022
- 2022-04-14 CN CN202210391273.8A patent/CN114840577B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090019185A (ko) * | 2007-08-20 | 2009-02-25 | 연세대학교 산학협력단 | 데이터 스트림으로부터 연관규칙을 생성하는 방법 및데이터 마이닝 시스템 |
CN103823823A (zh) * | 2013-07-08 | 2014-05-28 | 电子科技大学 | 基于频繁项集挖掘算法的反规范化策略选择方法 |
CN104408127A (zh) * | 2014-11-27 | 2015-03-11 | 无锡市思库瑞科技信息有限公司 | 基于深度优先的不确定数据最大模式挖掘方法 |
KR20180120551A (ko) * | 2017-04-27 | 2018-11-06 | 재단법인대구경북과학기술원 | 빈발 패턴 마이닝 방법 및 장치 |
CN109783536A (zh) * | 2018-12-28 | 2019-05-21 | 西北工业大学 | 一种基于邻接表的最大频繁项集挖掘方法 |
CN110287240A (zh) * | 2019-06-27 | 2019-09-27 | 浪潮软件集团有限公司 | 一种基于Top-K频繁项集的挖掘算法 |
Non-Patent Citations (1)
Title |
---|
基于频繁项集挖掘的LUCC轨迹分析;董林;舒红;李莎;牛宵;;城市勘测(第06期);10-14 * |
Also Published As
Publication number | Publication date |
---|---|
CN114840577A (zh) | 2022-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2724269B1 (en) | System, method and data structure for fast loading, storing and access to huge data sets in real time | |
CN110222088B (zh) | 基于插入位置选择的数据近似集合表示方法及系统 | |
US20210333994A1 (en) | Method for aggregation optimization of time series data | |
US6381601B1 (en) | Grouping and duplicate removal method in a database | |
CN1552032B (zh) | 数据库 | |
US11080812B2 (en) | Image recognition apparatus and image recognition method for sorting candidate regions detected in image | |
CN106570128A (zh) | 一种基于关联规则分析的挖掘算法 | |
US8725734B2 (en) | Sorting multiple records of data using ranges of key values | |
US20060143171A1 (en) | System and method for processing a text search query in a collection of documents | |
US20110208754A1 (en) | Organization of Data Within a Database | |
US6389424B1 (en) | Insertion method in a high-dimensional index structure for content-based image retrieval | |
US20070239663A1 (en) | Parallel processing of count distinct values | |
TW201514734A (zh) | 資料庫管理方法、資料庫管理系統,以及資料庫樹狀結構 | |
CN114840577B (zh) | 一种基于邻接比特压缩表的频繁闭项集挖掘算法 | |
CN107147947A (zh) | 关键帧识别方法及装置 | |
CN112434085B (zh) | 基于Roaring Bitmap的用户数据统计方法 | |
CN116610987A (zh) | 基于分布式样本筛选的kmeans日志分类方法和装置 | |
US6757780B2 (en) | Multiple module content addressable memories | |
CN106599326B (zh) | 一种云化架构下的记录数据剔重处理方法及系统 | |
CN111291056B (zh) | Bi工具数据表底层关联的方法 | |
US11258456B2 (en) | Method for compressing a quantum state vector and process for storing a quantum state vector | |
CN111126395B (zh) | R-cnn网络中选择性搜索算法的优化方法、存储介质 | |
CN110413602B (zh) | 一种分层清洗式大数据清洗方法 | |
CN115409000B (zh) | 一种热点人物软文自动生成方法及装置 | |
Rafailidis et al. | Indexing media storms on flink |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |