董 輝,方 曉,方躍勝
(1.亳州職業(yè)技術(shù)學(xué)院信息工程系 ,亳州236800;2.安徽水利水電職業(yè)技術(shù)學(xué)院電子信息工程系,合肥231603)
數(shù)據(jù)挖掘是致力于對(duì)各類海量數(shù)據(jù)集進(jìn)行分析和理解,以發(fā)現(xiàn)數(shù)據(jù)內(nèi)部所蘊(yùn)含知識(shí)的過(guò)程,而關(guān)聯(lián)規(guī)則挖掘一直都是數(shù)據(jù)挖掘領(lǐng)域的一項(xiàng)重要研究?jī)?nèi)容,也是數(shù)據(jù)挖掘技術(shù)中的一個(gè)研究熱點(diǎn),其主要目標(biāo)是發(fā)現(xiàn)數(shù)據(jù)中項(xiàng)目之間的相關(guān)聯(lián)系,研究成果被廣泛應(yīng)用于商業(yè)、金融、電信等領(lǐng)域[1]。在數(shù)據(jù)挖掘的各類對(duì)象數(shù)據(jù)集中,有一類數(shù)據(jù)集的數(shù)據(jù)之間存在著時(shí)間上的關(guān)系,是按時(shí)間順序取得的一系列相互關(guān)聯(lián)的觀測(cè)值,它們反映了某個(gè)事務(wù)或事件隨著時(shí)間變化的狀態(tài),其狀態(tài)可以用實(shí)數(shù)值或符號(hào)來(lái)表示,此類數(shù)據(jù)被稱為時(shí)間序列,簡(jiǎn)稱時(shí)序。如果該數(shù)據(jù)序列是連續(xù)的,稱之為連續(xù)時(shí)序;否則稱為離散時(shí)序。本文主要研究時(shí)序值為實(shí)數(shù)的時(shí)間序列,即傳統(tǒng)狹義時(shí)序。在各個(gè)領(lǐng)域中,時(shí)序是普遍存在的,并且隨著信息技術(shù)發(fā)展以及人們獲取數(shù)據(jù)手段的多樣化,人類所擁有的時(shí)序信息急劇膨脹,如證券公司擁有的大量股票信息時(shí)序數(shù)據(jù)、交通路口實(shí)時(shí)影像數(shù)據(jù)、醫(yī)療設(shè)備腦掃描數(shù)據(jù)等都可看作是時(shí)序。在這些海量的時(shí)序數(shù)據(jù)中,隱藏著大量的知識(shí)或信息急需我們來(lái)獲取。因此,研究、探索新技術(shù)或方法,有效地從這些復(fù)雜的海量時(shí)序中挖掘潛在的有益知識(shí)和信息,具有重要的理論價(jià)值和現(xiàn)實(shí)意義,是知識(shí)發(fā)現(xiàn)(KDD)中的重要分支之一[2]。
時(shí)序數(shù)據(jù)挖掘是挖掘時(shí)序數(shù)據(jù)中潛在的有用的知識(shí)或信息的過(guò)程,在這一過(guò)程中必須考慮數(shù)據(jù)集之中數(shù)據(jù)間存在的時(shí)間關(guān)系,但是因?yàn)闀r(shí)序數(shù)據(jù)具備動(dòng)態(tài)性、復(fù)雜性、高維性、高噪聲特性及容易達(dá)到大規(guī)模的特性,從而使得時(shí)序挖掘也是數(shù)據(jù)挖掘研究中最具有挑戰(zhàn)性的研究方向之一[2]。美國(guó)UC Riverside的E.Keogh和 UI Urbana-Champaign的J.Han研究小組是目前時(shí)序研究領(lǐng)域最為活躍的群體。大約從2000年,國(guó)內(nèi)復(fù)旦大學(xué)、浙江大學(xué)、中國(guó)科技大學(xué)等高校陸續(xù)進(jìn)行了相關(guān)研究,但是比較零散而沒(méi)有系統(tǒng)性。在時(shí)序數(shù)據(jù)挖掘中,時(shí)序關(guān)聯(lián)規(guī)則挖掘已經(jīng)越來(lái)越引起研究者的關(guān)注,主要包括分為時(shí)序數(shù)據(jù)預(yù)處理、時(shí)序數(shù)據(jù)壓縮、時(shí)序數(shù)據(jù)模式相似性度量、時(shí)序關(guān)聯(lián)規(guī)則獲取及解釋和評(píng)價(jià)等過(guò)程,已有不少文獻(xiàn)提出相關(guān)論述,如文獻(xiàn)[2]對(duì)上述幾個(gè)方面有所綜述,文獻(xiàn)[3]提出用滑動(dòng)窗口法進(jìn)行時(shí)序關(guān)聯(lián)規(guī)則挖掘,文獻(xiàn)[4]提出日歷關(guān)聯(lián)規(guī)則挖掘,文獻(xiàn)[5]提出基于時(shí)間段的時(shí)序規(guī)則挖掘等。
由此可見,時(shí)序關(guān)聯(lián)規(guī)則研究具有很重要的實(shí)用意義,本文主要研究時(shí)序列關(guān)聯(lián)規(guī)則挖掘算法的設(shè)計(jì)與實(shí)現(xiàn),并應(yīng)用獲取頻繁時(shí)序列以有利于對(duì)時(shí)間列行趨勢(shì)分析和預(yù)測(cè),為決策者提供更好的幫助。
為了更清晰地表述內(nèi)容,下面給出時(shí)序即時(shí)序關(guān)聯(lián)規(guī)則的有關(guān)數(shù)據(jù)模型概念。
定義1 時(shí)序 時(shí)序是由值和值發(fā)生的時(shí)間組成的元素的有序集合,記為S = {Vt1,Vt2,…,Vtn},Vti表示時(shí)序在時(shí)間戳ti的取值,稱為時(shí)序項(xiàng),時(shí)間戳是嚴(yán)格遞增的,即所有時(shí)序項(xiàng)按照各時(shí)序項(xiàng)的時(shí)間戳從小到大排列。
通常,時(shí)序研究采樣間隔時(shí)間Δt=ti-1-ti等長(zhǎng),因此時(shí)序也可簡(jiǎn)記為S= {V1,V2,…,Vn},時(shí)序S= {V1,V2,…,Vn},所包含時(shí)序項(xiàng)的個(gè)數(shù)L,稱為時(shí)序長(zhǎng)度,長(zhǎng)度為L(zhǎng)的時(shí)序稱為L(zhǎng)-時(shí)序。
定義2 時(shí)序關(guān)聯(lián)規(guī)則 設(shè)有時(shí)序S={V1,V2,…,Vn},事務(wù)T 為時(shí)序項(xiàng)的集合,D 為事務(wù)集合,A,B為S的子時(shí)序(A?S,B?S),且A∩B=Ф。時(shí)序關(guān)聯(lián)規(guī)則是形如的蘊(yùn)含式,該蘊(yùn)含式表示在時(shí)序S中,子時(shí)序A出現(xiàn)在事務(wù)T的Δt時(shí)間間隔后,B也會(huì)在同一事務(wù)T中出現(xiàn)。
定義3 時(shí)序支持度 時(shí)序支持度B),表示S中同時(shí)包含A,B且滿足時(shí)間間隔Δt的事務(wù)數(shù)γ與D中所有的事務(wù)數(shù)λ的比率,即為:表示D中同時(shí)包含A,B且滿足Δt周期的事務(wù)數(shù),又稱之為D中同時(shí)包含A,B且滿足Δt周期的事務(wù)的支持?jǐn)?shù)。
定義4 頻繁時(shí)序 同時(shí)包含A,B且滿足時(shí)間間隔Δt的子時(shí)序在時(shí)序S中出現(xiàn)頻率大于最小支持度閾值或者同時(shí)包含A,B且滿足時(shí)間間隔Δt的子時(shí)序在時(shí)序S出現(xiàn)的頻次大于最小支持?jǐn)?shù)閾值δ的子時(shí)序,稱該子時(shí)序?yàn)轭l繁時(shí)序。
定義5 時(shí)序置信度 時(shí)序關(guān)聯(lián)規(guī)則的置信度,表示D中同時(shí)包含A,B且的事務(wù)數(shù)γ與D中包含A事務(wù)數(shù)μ的比率,可表示為:
定義6 強(qiáng)時(shí)序關(guān)聯(lián)規(guī)則 如果時(shí)序關(guān)聯(lián)規(guī)則同時(shí)滿足B)>minconf,其中minsup、minconf分別為最小支持度和最小置信度閾值,則稱時(shí)序關(guān)聯(lián)規(guī)則A?ΔtB為強(qiáng)時(shí)序關(guān)聯(lián)規(guī)則。
時(shí)序關(guān)聯(lián)規(guī)則挖掘是一個(gè)復(fù)雜的系統(tǒng)工程,包括時(shí)序數(shù)據(jù)預(yù)處理、時(shí)序數(shù)據(jù)壓縮、時(shí)序數(shù)據(jù)相似性度量、時(shí)序頻繁模式獲取及強(qiáng)時(shí)序關(guān)聯(lián)規(guī)則生成等步驟,每一步驟挖掘方法的優(yōu)劣都直接影響和制約著最后挖掘的時(shí)序關(guān)聯(lián)規(guī)則的可靠性與有效性[6]。囿于篇幅,本文主要研究時(shí)序頻繁模式獲取算法。與傳統(tǒng)的關(guān)聯(lián)規(guī)則挖掘相比,時(shí)序關(guān)聯(lián)規(guī)則挖掘的是諸如顧客不同時(shí)間多次購(gòu)物行為中的規(guī)律,挖掘的結(jié)果是由若干項(xiàng)集組成的序列。由于引入了時(shí)間概念,時(shí)列關(guān)聯(lián)規(guī)則挖掘算法也較傳統(tǒng)關(guān)聯(lián)規(guī)則挖掘算法更為復(fù)雜,傳統(tǒng)的關(guān)聯(lián)規(guī)則頻繁模式挖掘與強(qiáng)關(guān)聯(lián)規(guī)則算法已不再適用,如經(jīng)典Apriori算法和FT_Growth算法,而只能應(yīng)用新的挖掘算法來(lái)發(fā)現(xiàn)時(shí)序頻繁模式或生產(chǎn)強(qiáng)時(shí)序關(guān)聯(lián)規(guī)則,其中以改進(jìn)的ApriorAll算法和基于滑動(dòng)窗口的符號(hào)化序列獲取強(qiáng)時(shí)序關(guān)聯(lián)規(guī)則較為著名[7]。本文作者在學(xué)習(xí)總結(jié)有關(guān)時(shí)序關(guān)聯(lián)算法基礎(chǔ)上,提出一種基于滑動(dòng)窗口和時(shí)序樹的頻繁時(shí)序獲取算法。
2.2.1 算法原理
針對(duì)時(shí)序S= {V1,V2,…,Vn}、最小支持?jǐn)?shù)閾值δ(或最小支持度閾值的minsup)和最小置信度minconf,取滑動(dòng)窗口W 的長(zhǎng)度為wl,在時(shí)序關(guān)聯(lián)規(guī)則獲取過(guò)程中,每次向后滑動(dòng)一步,可得到時(shí)序的一個(gè)子時(shí)序,多次滑動(dòng)后,可把時(shí)序S離散成若干子時(shí)序集:
然后把離散后的子時(shí)序的每個(gè)時(shí)序項(xiàng)插入到一個(gè)以NULL值為根節(jié)點(diǎn)的樹中,在插入的過(guò)程中對(duì)每個(gè)時(shí)序項(xiàng)計(jì)數(shù),所以此樹的除根節(jié)點(diǎn)外,其他節(jié)點(diǎn)的數(shù)據(jù)有2部分構(gòu)成,可表示為:(Vi∶x)(Vi時(shí)序值,x為計(jì)數(shù)值)。然后通過(guò)遍歷此樹,獲取頻繁時(shí)序。需要說(shuō)明的是,由于在時(shí)序中,因?yàn)槊總€(gè)時(shí)序項(xiàng)值的出現(xiàn),有一定的時(shí)間先后順序,在構(gòu)造樹的過(guò)程中,相同是時(shí)序值,因?yàn)槌霈F(xiàn)的時(shí)間不同,所以有時(shí)并不能合并到一個(gè)節(jié)點(diǎn)上。
如 時(shí) 序 S = {a1,a2,a1,a2,a1,a2,a1,a2,a2,a2},設(shè)滑動(dòng)窗口W 的長(zhǎng)度wl=3,每次向后滑動(dòng)一步,由此可把時(shí)序S離散成如下子時(shí)序集:
以上述W(S)構(gòu)造一個(gè)時(shí)序樹的步驟如下:
第1步:創(chuàng)建以NULL為值的根節(jié)點(diǎn)。從時(shí)序項(xiàng)讀取長(zhǎng)度wl=3的第1個(gè)子時(shí)序項(xiàng),為根節(jié)點(diǎn)創(chuàng)建一個(gè)有3個(gè)節(jié)點(diǎn)的分支,即 < (a1∶1),(a2∶1),(a1∶1)>,其中第1個(gè)(a1∶1)為(a2∶1)的父節(jié)點(diǎn),第2個(gè)(a1∶1)為(a2∶1)的子女節(jié)點(diǎn)。
第2步:滑動(dòng)窗口W一步,讀取讀取長(zhǎng)度為3的第2個(gè)子序列 < (a2,a1,a2)>,遍歷在根節(jié)點(diǎn)的子女節(jié)點(diǎn),發(fā)現(xiàn)沒(méi)有a2,創(chuàng)建第2個(gè)分支 < (a2∶1),(a1∶1),(a2∶1)>,其中第1個(gè)(a2∶1)為(a1∶1)的根節(jié)點(diǎn),第二個(gè)(a2∶1)為(a1∶1)的子女節(jié)點(diǎn)。
第3步:再次滑動(dòng)窗口W一步,讀取讀取長(zhǎng)度為3第3個(gè)子時(shí)序項(xiàng)(a1,a2,a1),通過(guò)遍歷第2步完成的時(shí)序樹,發(fā)現(xiàn)已有以a1為根節(jié)點(diǎn)的左子樹,把左子樹根節(jié)點(diǎn)計(jì)數(shù)值加1,接著遍歷左子樹的子女節(jié)點(diǎn),發(fā)現(xiàn)a2存在,同樣把該節(jié)點(diǎn)的計(jì)數(shù)值累加1,再遍歷a2的子女節(jié)點(diǎn),發(fā)現(xiàn)a1存在,把該子女節(jié)點(diǎn)計(jì)數(shù)值加1。
第4步:多次重復(fù)第3步,直至把最后的時(shí)序項(xiàng)值插入該樹中并完成相應(yīng)時(shí)序項(xiàng)的計(jì)數(shù),構(gòu)成該時(shí)序一個(gè)完整的時(shí)序樹如圖1所示。
圖1 時(shí)序樹
通過(guò)采用深度優(yōu)先的原則對(duì)圖1的遍歷,可以挖掘出頻繁時(shí)序,設(shè)最小支持?jǐn)?shù)閾值為δ=3。步驟如下:
首先遍歷左子樹,讀取其根節(jié)點(diǎn)(a1∶4),其計(jì)數(shù)值大于3,如此類推再遍歷其子女節(jié)點(diǎn)(a2∶4),計(jì)數(shù)值為4,大于3,同理其子女節(jié)點(diǎn)(a1∶4)計(jì)數(shù)值4大于3,子女節(jié)點(diǎn)(a2∶1)計(jì)數(shù)值1小于3。因此由(a1∶4)、(a2∶4)、(a1∶4)、(a2∶1)4個(gè)節(jié)點(diǎn),構(gòu)成的滿足大于最小支持?jǐn)?shù)閾值δ=3的候選頻繁時(shí)序集合為:{(a1,a2,a1),(a1,a2),(a2,a1)}。又滑動(dòng)窗口 W 的長(zhǎng)度wl=3,故在上述頻繁時(shí)序集中只能取子時(shí)序{a1,a2,a1}作為時(shí)序的頻繁時(shí)序。
第2步遍歷右子樹,同樣發(fā)現(xiàn)滿足大于最小支持?jǐn)?shù)閾值δ=3的候選頻繁時(shí)序集合為:{(a2,a1,a2),(a2,a1),(a1,a2)},滑動(dòng)窗口W 的長(zhǎng)度wl=3,同理頻繁時(shí)序集中只能取子時(shí)序{a2,a1,a2}作為時(shí)序的頻繁時(shí)序。
第3步:綜合第1、2兩步,得到時(shí)序S的長(zhǎng)度為3的頻繁時(shí)序集合為{(a1,a2,a1),(a2,a1,a2)}。為了避免挖掘遺漏頻繁時(shí)序,然后把此2個(gè)序列連接,生成長(zhǎng)度為4的子序列{a1,a2,a1,a2},在S序列中搜索發(fā)現(xiàn),子序列{a1,a2,a1,a2}只在S 中出現(xiàn)2次,小于最小支持?jǐn)?shù)閾值δ=3,因此{a1,a2,a1,a2}不是頻繁序列,至此頻繁時(shí)序挖掘結(jié)束。
2.2.2 算法設(shè)計(jì)實(shí)現(xiàn)
根據(jù)2.2.1的分析,時(shí)序關(guān)聯(lián)規(guī)則挖掘算法設(shè)計(jì)實(shí)現(xiàn)如下:
輸入:時(shí)序S= {V1,V2,…,Vn}、滑動(dòng)窗口W的長(zhǎng)度wl、最小支持?jǐn)?shù)閾值δ
輸出:頻繁時(shí)序項(xiàng)集合
Proc TSDPM()
(1)Create Rote_node(NULL);//創(chuàng)建時(shí)序樹根節(jié)點(diǎn),節(jié)點(diǎn)值為NULL
(2)For(j=int(n/wl),j≥1;j--)//當(dāng)時(shí)序項(xiàng)數(shù)小于滑動(dòng)窗口長(zhǎng)度wl時(shí),讀取結(jié)束
(3)Sj=NULL;//把Sj子時(shí)序初始為 NULL
(4)For(i=1,i<=wl,i++)
(5)Sj=Sj+{vi};//Sj為子時(shí)序,vi為順序讀取的時(shí)序項(xiàng)值,為Si的第i項(xiàng)
(6)If(?(Cnode(vi)∈Node(V’)))//Node為父節(jié)點(diǎn),Cnode為子女節(jié)點(diǎn)*/
(7){Cnode(vi).x=Cnode(vi).x+1;}//Cnode為節(jié)點(diǎn)計(jì)數(shù)值加1*/
(8)Else
(9){Create Cnode(vi);//創(chuàng)建 Cnode節(jié)點(diǎn),初始計(jì)數(shù)值為1*/
(11)Cnode(vi).x=1;}
(12)Endfor
(13)Endfor;//時(shí)序樹構(gòu)造結(jié)束
(14)FP_Find(node);//遍歷時(shí)序樹,獲取頻繁時(shí)序
(15)Return;
其中FP_Find()函數(shù)返回的是頻繁時(shí)序項(xiàng)集合,其過(guò)程如下:
FUNC FP_Find(Node)
(1){S’=Null;//時(shí)序S’初始為 NULL
(2)For
(3)If(Node(vi).x≥δ)
(4){Add Node to S’//把節(jié)點(diǎn) Node加入到時(shí)序S’
(5)FP_Find(Cnode);//針對(duì) Node的所有子女節(jié)點(diǎn)Cnode,遞歸調(diào)用FP_Find()
(6)If(Node’s Cnode.x<δ)//若 Node不再有子女節(jié)點(diǎn)的計(jì)數(shù)值小于支持計(jì)數(shù)閾值
(7)Add all Cnode in CurrentPath to S’;//將當(dāng)前路徑的所有時(shí)序項(xiàng)添加到時(shí)序S’中
(8)Else
(9)Break;}
(10)Endfor
(12)Return S’;}
2.2.3 算法分析
本算法中所創(chuàng)建的時(shí)序樹深度與滑動(dòng)窗口的長(zhǎng)度相等,與時(shí)序項(xiàng)個(gè)數(shù)無(wú)關(guān),樹節(jié)點(diǎn)的數(shù)量與時(shí)序項(xiàng)值數(shù)量、窗口W 的長(zhǎng)度及最小支持?jǐn)?shù)閾值相關(guān),而且在實(shí)際應(yīng)用中,它們的值都為有限的常數(shù),因此算法的時(shí)間復(fù)雜度T(n)=O(n),空間復(fù)雜度S(n)=O(1),為原地算法,空間消耗較少。
實(shí)驗(yàn)環(huán)境:PC配置為Windows8系統(tǒng)、Core雙核i3CPU、PC1333 2G內(nèi)存PC、Turbo C++3.0編程環(huán)境;樣本數(shù)據(jù)為上海股市中國(guó)銀行(SH:601988)2008年—2011年全部的每日收盤價(jià)樣本時(shí)序數(shù)據(jù),收盤價(jià)在2.82~6.61元之間波動(dòng)。設(shè)最小支持?jǐn)?shù)閾值δ=3,滑動(dòng)窗口W 的長(zhǎng)度wl=8。
用Turbo C++3.0編程實(shí)現(xiàn)TSDPM算法過(guò)程,在所給定的軟硬件環(huán)境下實(shí)現(xiàn)對(duì)樣本時(shí)序數(shù)據(jù)進(jìn)行處理,共獲取滿足條件的頻繁時(shí)序76項(xiàng),耗時(shí)32ms。而同等環(huán)境下,以經(jīng)典時(shí)序挖掘Aprioriall算法實(shí)現(xiàn)對(duì)此樣本數(shù)據(jù)處理,在獲取同樣數(shù)量頻繁時(shí)序的情況下,耗時(shí)為46ms??梢奣SDPM算法可滿足對(duì)時(shí)間序列挖掘需求,挖掘效率有所提高,兩種算法的運(yùn)行效果如圖2所示。
圖2 算法運(yùn)行效果比較
時(shí)序數(shù)據(jù)挖掘日益成為數(shù)據(jù)挖掘的一個(gè)重要方面,本文在研究時(shí)序數(shù)據(jù)挖掘的基礎(chǔ)上,重點(diǎn)分析了時(shí)序關(guān)聯(lián)規(guī)則挖掘知識(shí),并在此基礎(chǔ)上提出一種基于滑動(dòng)窗口和時(shí)序樹結(jié)構(gòu)的時(shí)序關(guān)聯(lián)規(guī)則挖掘算法,給出算法偽代碼過(guò)程,并以實(shí)例分析其實(shí)現(xiàn)步驟。通過(guò)實(shí)驗(yàn)分析,在同等環(huán)境和條件要求下,該算法執(zhí)行效率較高,完全滿足對(duì)時(shí)間序列數(shù)據(jù)挖掘的需要。
[1]王華金,蘭紅.一種基于FP-tree挖掘最大頻繁模式的改進(jìn)算法[J].長(zhǎng)春工程學(xué)院學(xué)報(bào):自然科學(xué)版,2007,8(1):59-62.
[2]賈澎濤,何華燦,劉麗,等.時(shí)間序列數(shù)據(jù)挖掘綜述[J].計(jì)算機(jī)應(yīng)用研究,2007,24(11):15-18.
[3]Mannila H,Toivonenand H,Verkamo A I.Discovery of frequent episodes in event sequences[J].Data Mining and Knowledge Discover,1997,1(3):259-289.
[4]FU HG,NGUIFO EM.A Parallel A Igorithm to Generate Formal Concepts for Large Data[A].Peter ERlund.Second International Conference on Formal Concept A-nalysis,ICFCA 2004[C].Sydney,Australia:Springer,2004,394-401.
[5]Kam PS,F(xiàn)u AWC.Diseovering temporal Pattems for interval-based events[A].Yahiko kambayashi,Mukesh Mohania,A Min Jjoa.In:Proceedings of the 2nd International Conference on Data Warehousing and Knowledge Discovery (DawaK2000)[C].London,UK:Springer,2000:317-326.
[6]周勇.時(shí)間序列時(shí)序關(guān)聯(lián)規(guī)則挖掘研究[D].成都:西南財(cái)經(jīng)大學(xué),2008.1-6.
[7]張寧.基于滑動(dòng)窗口的時(shí)間序列離群數(shù)據(jù)挖掘[J].燕山大學(xué)學(xué)報(bào),2008,32(6):483-486.