一种基于嵌套时间窗口的流式数据频繁项集挖掘算法的制作方法

文档序号:11177426阅读:382来源:国知局
一种基于嵌套时间窗口的流式数据频繁项集挖掘算法的制造方法与工艺
本发明属于数据流挖掘领域,涉及一种基于嵌套时间窗口的流式数据频繁项集挖掘算法。
背景技术
:随着计算机技术的飞速发展,纷繁复杂的数据呈现爆炸式增长,数据流作为一种特殊形态的数据广泛存在于各个行业和职能领域中,例如电子商务数据,卫星遥感数据,web点击流数据,金融服务数据,传感器数据等。挖掘数据流上的频繁项集是一项意义重大且具有挑战的工作。流式数据不同于传统的静态数据,它是连续的,高速的和无限的,且无法将其全部保存在内存中,因此,多次扫描数据库技术已经不再适用于流式数据频繁项集挖掘算法。此外,数据流具有很强的实时性,因此要求数据的分析处理是即时的或在线的,数据流算法需要在有限的内存空间和限定的时间内快速形成模式的归纳。流数据让传统的以挖掘静态数据为主的频繁项集挖掘技术面临着巨大的挑战。近年来,大量的数据流挖掘算法被提出。manku等提出了lossycounting算法,运用界标窗口对整个数据流进行分析得到全局性的频繁模式,但该算法存在一定的局限性,如对时间概念不敏感,当数据过多时,挖掘出的频繁项集所占空间过大。giannella等人提出了fp-stream算法,它以fp-stream为基本结构,从数据流中挖掘频繁模式。fp-stream结构包括:在内存中捕获数据流的最频繁项集和次频繁项集信息的fp-tree结构和为每个频繁模式建立的倾斜时间窗口表。该算法动态调整存储结构,能在有限的存储空间内挖掘数据流中各个时间段的频繁模式,然而,这需要额外的时间和空间来维护各个数据分段的频繁模式树。因此,滑动窗口模型成为广泛使用的数据处理模型,它在滑动窗口上发现和维持近期的频繁项集。当数据流入时,只有滑动窗口中的一部分数据流被存储和处理。chiy,wang等提出了moment算法,该算法引入了一个紧凑的数据结构,即闭合枚举树(cet),监视滑动窗口中的事务数据,以便随时输出当前时间段的闭合频繁项目集,需要较少的内存。李国徽等提出了启发式的msw算法,该算法使用滑动窗口树sw-tree结构,单遍扫描数据流并可及时捕获数据流上最新的模式信息。此外,该算法还结合时间衰减模型,逐步降低历史事务模式的权重,该算法能有效的区分最近产生事务与历史事务。寇香霞等提出了fiutstream算法,该算法以位表为概要数据结构,随着窗口滑动动态更新该存储结构,根据fiut基本结构建立相应的k-fiu-tree,并进行频繁项集挖掘,该算法不但节省内存开销,而且比其他传统频繁项集挖掘算法效率更高。但是这些算法都是使用固定大小的滑动窗口模型,只有具备了数据流概念变化的先验知识才能够确定合适的滑动窗口大小。然而,由于数据流的不稳定性,我们无法提前确定数据流的变化特点并给出一个能够适应数据流所有变化的滑动窗口。因此,mahmooddeypir等提出了vsw可变滑动窗口算法,用来反映近期数据流中频繁项集的变化。该算法通过检测概念变化值来动态确定窗口的大小,当检测的概念变化值大于给定的最小阈值时,改变窗口的大小。vsm算法会先进行频繁项集挖掘再通过检测概念变化来动态修改滑动窗口的大小,所以当新的数据流到来时,近期的主要频繁项集可能已经发生改变。在上述算法中,所有的窗口模型都是以事务为基本单位的,并且算法不能确定合适的窗口大小以包含近期的主要频繁项集。技术实现要素:有鉴于此,本发明的目的在于提出了一种新型的用于数据流频繁项集挖掘的嵌套时间窗口算法(frequentitemsetsminingalgorithmforstreamingdatabasedonnestedtimewindowmodel,nwfi-stream)。首先使用外嵌时间窗口筛选出近期的数据,并将窗口中的所有事务数据映射到时间轴上,然后根据每个数据项的留存因子和期望窗口值来自适应的调整内嵌时间窗口大小,最后利用经典的eclat算法进行数据挖掘。为达到上述目的,本发明提供如下技术方案:一种基于嵌套时间窗口的流式数据频繁项集挖掘算法,其特征在于:该算法包括以下步骤:s1:建立数据-时间轴的映射;s2:建立价值评估模型;s3:计算内嵌窗口以及挖掘频繁项集;进一步,所述s1具体为:将事务中的所有数据项映射到时间轴上,横轴表示数据项出现在某个时间点上的时间段,竖轴表示每一个时间点对应的事务,通过价值评估模型评估数据的留存因子,再通过公式计算窗口大小值,得到主要频繁项集的期望窗口的大小。进一步,所述s2具体为:在数据流的挖掘过程中,算法对流中每个刚到达的数据项赋予权值为1,随着时间的流逝而逐渐降低权重值,而权值的降低程度通过一个与时间相关的滤波函数来近似描述;使用sigmod函数来降低历史行为对当前结果的影响,具体公式为:其中,λ>0为一衰减常量,t0为建立函数中心点对应的时间,t为当前时间;假设给定的外嵌时间窗口的大小为n,令一个时间点对应一个ti,那么外嵌时间窗口对应的时间向量为:tsw=(t1,t2...ti...tn)根据sigmod函数,每一个时间点ti对应一个相应的权重值s(ti-t0),那么窗口对应的权重向量为:qsw=(s(t1-t0),s(t2-t0)...s(ti-t0)...s(tn-t0))对于给定大小的外嵌时间窗口sw,将事务中所包含的所有数据项ii(i=1,2,…,n)全部映射到时间轴t上,每个时间点对应的即为当前时间点接收到的事务,并建立对应项的向量v_swi,如果ii在时间点j中出现,则对应的位置为1,否则为0;因此每一个数据项的留存因子即为在固定窗口内的数据项向量和权重向量做点乘,表明数据项的重要性;ωi=v_swi·qswωi作为衡量数据存留的因子,留存因子越大,此数据所占的时间长度对实际窗口大小的影响越大。进一步,所述s3具体为:对于每一个数据项,都希望最后的挖掘窗口大小刚好包含到数据项出现的位置,而每一个数据项都有一个窗口期望值,因此应当尽可能的使挖掘窗口的大小等于数据出现的初始位置,即使|l-li|最小;综合所有数据项的期望值,得出近期主要频繁项集的窗口期望值,又因为每一个数据项的留存因子不一样,对实际挖掘窗口大小的影响程度不一,因此通过以下公式计算满足所有数据项的实际挖掘窗口大小,公式如下:其中,n表示有n个数据项;i和j表示对应的第i个和第j个数据项;ωi表示衡量数据存留的因子,留存因子越大,此数据所占的时间长度对实际窗口大小的影响越大;li表示第i个数据项在当前窗口中的起始位置距离现在位置的时间距离;l表示实际的窗口值大小;得到实际挖掘窗口之后,对数据进行挖掘。在本发明中,使用经典的eclat算法。eclat是一种深度优先的方法,用于挖掘在数据库的垂直布局上运行的静态数据库中的所有频繁项集。它加入了倒排的思想,其算法思想是由频繁k项集求交集,生成候选k+1项集。对候选k+1项集做裁剪,生成频繁k+1项集,再求交集生成候选k+2项集。如此迭代,直到项集归一。eclat算法初始阶段必须扫描数据库以获得每一个数据项的时间序列表,然后通过计算其交集得到其支持度。本发明的有益效果在于:(1)nwfi-stream算法能快速有效地提取数据流中近期的主要频繁项集,并且在时间空间复杂度上有一定的提升;(2)nwfi-stream算法具有很强的可扩展性和适应性;(3)算法不再把事务作为基本单位,而是将事务中包含的所有数据项映射到时间轴上,以确定包含近期主要频繁项集的范围,从而自适应调整挖掘窗口大小;且相较于经典的eclat算法,文本算法具有更好的效率。附图说明为了使本发明的目的、技术方案和有益效果更加清楚,本发明提供如下附图进行说明:图1为传统的滑动窗口模型频繁项集挖掘分布图;图2为本发明数据项-时间轴映射图;图3为窗口数据样本;图4为外嵌时间窗口的坐标轴;图5为本发明流程图。具体实施方式下面将结合附图,对本发明的优选实施例进行详细的描述。本发明的基本思想是:给定固定大小的外嵌时间窗口,用于筛选出近期数据,然后使用价值评估模型,先对数据项进行评估,然后确定包含近期主要的频繁项集的范围来自适应地调整窗口长度。该算法可以筛选出更加有意义的频繁项集。本发明的技术方案包括以下步骤:步骤一:数据项-时间轴映射在传统的滑动窗口模型频繁项集挖掘算法中,都是给定一个固定大小的滑动窗口,然后进行频繁项集挖掘,观察挖掘结果,我们可以发现,得到的频繁项集呈现一定的分布,如图1所示。在这个固定大小的窗口中,需要挖掘出包含的所有频繁项集,但是流式数据具有时变性,因此近期的主要频繁项集更令人感兴趣,我们只需要确定包含了近期主要频繁项集的窗口大小即可。然而,得到的频繁项集有很多,也可能呈现相同的分布,因此我们无法准确的确定近期的主要频繁项集,由此,本发明提出一种数据-时间轴映射方法,将事务中的所有数据项映射到时间轴上,如图2所示,横轴表示在这个时间段,数据项出现在某个时间点上,竖轴表示每一个时间点对应的事务。通过价值评估模型评估数据的留存因子,再通过公式计算窗口大小值,即可得到主要频繁项集的期望窗口大小。步骤二:价值评估模型数据流中的数据是连续、无限的,过去的数据与当前流入窗口的数据在整个窗口数据流中的地位是不一样的,越接近当前时间,越是需要关注的近期数据。因而,可以通过改变数据项的权重,来强化近期数据的作用。在数据流的挖掘过程中,算法对流中每个刚到达的数据项赋予权值为1,随着时间的流逝而逐渐降低权重值,而权值的降低程度可通过一个与时间相关的滤波函数来近似描述。又因为数据流是随时间动态演化的,我们主要关注的是近期的主要频繁项集,因此我们需要减少历史频繁项集对当前频繁项集的影响。因此,我们使用sigmod函数来降低历史行为对当前结果的影响,具体公式如下:其中,λ>0为一衰减常量,t0为建立函数中心点对应的时间,t为当前时间。假设给定的外嵌时间窗口的大小为n,令一个时间点对应一个ti,那么外嵌时间窗口对应的时间向量为:tsw=(t1,t2...ti...tn)又因为随着时间的流逝数据的权重会受到影响,根据sigmod函数,每一个时间点ti对应一个相应的权重值s(ti-t0),因此,窗口对应的权重向量为qsw=(s(t1-t0),s(t2-t0)...s(ti-t0)...s(tn-t0))(2)对于给定大小的外嵌时间窗口sw,将事务中所包含的所有数据项ii(i=1,2,…,n)全部映射到时间轴t上,每个时间点对应的即为当前时间点接收到的事务,并建立对应项的向量v_swi,如果ii在时间点j中出现,则对应的位置为1,否则为0。因此每一个数据项的留存因子即为在固定窗口内的数据项向量和权重向量做点乘,表明数据项的重要性。ωi=v_swi·qsw(3)ωi作为衡量数据存留的因子,留存因子越大,那么此数据所占的时间长度对实际窗口大小的影响就越大。步骤三:内嵌窗口计算以及频繁项集挖掘对于每一个数据项,都希望最后的挖掘窗口大小刚好包含到数据项出现的位置,而每一个数据项都有一个窗口期望值,因此应当尽可能的使挖掘窗口的大小等于数据出现的初始位置,即使|l-li|最小。综合所有数据项的期望值,得出近期主要频繁项集的窗口期望值,又因为每一个数据项的留存因子不一样,对实际挖掘窗口大小的影响程度不一,因此可通过以下公式计算满足所有数据项的实际挖掘窗口大小。公式如下:其中,n表示有n个数据项;i和j表示对应的第i个和第j个数据项;ωi表示衡量数据存留的因子,留存因子越大,那么此数据所占的时间长度对实际窗口大小的影响就越大;li表示第i个数据项在当前窗口中的起始位置距离现在位置的时间距离;l表示实际的窗口值大小。得到实际挖掘窗口之后,即可对数据进行挖掘。在发明中,我们使用经典的eclat算法。eclat是一种深度优先的方法,用于挖掘在数据库的垂直布局上运行的静态数据库中的所有频繁项集。它加入了倒排的思想,其算法思想是由频繁k项集求交集,生成候选k+1项集。对候选k+1项集做裁剪,生成频繁k+1项集,再求交集生成候选k+2项集。如此迭代,直到项集归一。eclat算法初始阶段必须扫描数据库以获得每一个数据项的时间序列表,然后通过计算其交集得到其支持度。在本发明中,在数据-时间轴映射阶段已经得到了所有数据项的向量表示,不必再次扫描。本发明的实施包含三个阶段:数据-时间轴映射,价值评估模型,内嵌窗口计算和频繁项集挖掘。下面通过图3的窗口数据样本为例来对本发明进行具体实施说明:根据图5所示流程进行说明。步骤一:数据-时间轴映射在本发明中,不再把事务作为基本单位,而是将事务中包含的所有数据项映射到时间轴上,确定包含近期主要频繁项集的范围,得出最后的挖掘窗口的大小;因此,首先应当将窗口中的数据全部映射到时间轴上,并使用向量表示数据项在时间点的出现与否,如果ii在时间点j中出现,则对应的位置为1,否则为0。根据实例数据得出各个数据项的向量表示如表1所示:表1数据项向量表示步骤二:价值评估模型得到每一个数据项的向量表示之后,需要结合权重向量,即公式(2),计算出每一个数据项的留存因子。在流式数据中,过去的历史数据与当前时间流入窗口的数据在整个窗口数据流中的地位是不一样的,越接近当前时间,越是需要关注的近期数据。因此,我们通过公式(1)给时间窗口赋予不同的权重值。首先,建立外嵌时间窗口的坐标轴,如图4所示。将不同的时间t代入衰减函数,得到时间对应的权重值,即可获得当前时间窗口对应的权重向量q:q(0.007,0.018,0.047,0.119,0.269,0.5,0.73,0.88,0.953,0.982,0.993,0.997)通过公式(3),根据数据项的向量表示和当前窗口对应的权重向量计算出各个数据项的存留因子,计算结果如表2所示,数据项的留存因子越大,其所对应的数据项所占的时间长度对实际窗口大小的影响就越大。表2数据项留存因子留存因子ωaωbωcωdωeωfωg值6.4230.1910.1915.4732.9724.5051.181步骤三:内嵌窗口计算以及频繁项集挖掘综合考虑所有的数据项,即可得到近期主要频繁项集的最佳窗口值大小。通过下面的公式计算出内嵌窗口的大小:通过上述计算l的最终值为10,得到实际的挖掘窗口之后,使用eclat算法挖掘频繁模式集合,并将结果保存在名为fpset的集合中。该集合用于在数据流挖掘期间维护频繁的模式。在该算法中,我们不再需要扫描一次数据库来得到每一个数据项的时间序列表,因为我们已经使用向量来表示每一个数据项,通过计算项的向量的交集就可以得到项集的支持,不需要再对数据进行一次处理。在sw中,假定从流中收到事务,通过插入新事务并从窗口中删除最旧的事务,窗口向前滑动。在获取新到来的事务时,由于效率问题,插入和删除的单位是批处理或窗格。批处理或窗格包含固定时间段的事务。当新的事务到来时,将新的事务放入p窗口中,当p满时,则更新sw窗口,把sw中最先接收到的窗口丢弃,将新p中的事务放入sw的末尾,重复挖掘过程。具体的算法描述如下所示:算法nwfi-stream(psize,outersize,ms)输入:数据流ds,窗格大小psize,外嵌时间窗口大小outersize,最小支持度ms输出:近期频繁项集前缀树fpsetw=windowinit(outersize);//外嵌窗口初始化p=panelinit(psize);//窗格初始化forever//处理过程无限循环itemvector=inititemvector(data)//将外嵌窗口中的数据项映射到时间轴上,并用向量表示wfactor=initweightfactor()//初始化权重因子rfactor=initretentionfactor(itemvector,wfactor)//计算每个数据项的留存因子l=initl()//得到所有数据项的实际lreall=initreall(l,rfactor)//通过l和留存因子计算出实际的挖掘窗口大小realdata=sub(data,reall)//截取真正长度的数据fpset=eclat(realdata,ms)//调用算法处理数据并使用前缀树来存储n=1;whilen<=psizep.adddata(t)//读取新的数据n=n+1endwhileupdate(w,p)//更新挖掘数据endfor最后说明的是,以上优选实施例仅用以说明本发明的技术方案而非限制,尽管通过上述优选实施例已经对本发明进行了详细的描述,但本领域技术人员应当理解,可以在形式上和细节上对其作出各种各样的改变,而不偏离本发明权利要求书所限定的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1