李 威 吳志剛 李健俊 陸海龍
1(浙江中煙工業(yè)有限責任公司 杭州 310001)2(杭州世平信息科技有限公司 杭州 310012) (lwei@zjtobacco.com)
考慮事件的發(fā)生順序,面向序列數(shù)據(jù)的挖掘算法主要分為頻繁序列挖掘和頻繁情節(jié)挖掘2類,但其面向的數(shù)據(jù)類型仍存在差異.頻繁序列挖掘是在一組序列的集合上進行挖掘,找出眾多序列中頻繁出現(xiàn)的子序列,如獲取多個用戶的網(wǎng)絡行為信息,從中挖掘他們?yōu)g覽網(wǎng)頁的共同操作行為.該領域的經(jīng)典算法包括GSP算法、Prefix Span算法、SPADE算法、SPAM算法等[1-3].
頻繁情節(jié)挖掘算法其數(shù)據(jù)類型為一長串帶有發(fā)生時間的有序信號事件序列,其工作目標是從中找出事件序列中頻繁出現(xiàn)的子序列,從而揭示相鄰信號事件的關聯(lián)關系和發(fā)生規(guī)律.如何發(fā)現(xiàn)頻繁情節(jié)已成為數(shù)據(jù)挖掘領域的熱點問題之一,學者們先后研究了許多算法[4-6],如WINEPI,MINEPI,EpiBF,NONEPI,MANEPI等.這些基于最小發(fā)生、窗口發(fā)生的算法,或因為情節(jié)發(fā)生之間可能會產(chǎn)生重疊,導致情節(jié)發(fā)生的“過計數(shù)”問題,或?qū)⑶楣?jié)設置為發(fā)生時間完全獨立的無交疊設定,存在情節(jié)漏記.此外,上述算法都是基于靜態(tài)數(shù)據(jù)的,在進行情節(jié)挖掘時,基于事件的統(tǒng)計特性使用廣度優(yōu)先的搜索策略,生成候選情節(jié),然后進行情節(jié)發(fā)生計數(shù),滿足最小支持度閾值的情節(jié)即為頻繁情節(jié).
這類方法以事件出現(xiàn)頻率為基準,按照支持度閾值,首先將事件劃分為頻繁項與非頻繁項,進而根據(jù)情節(jié)的向下閉合特性生成候選情節(jié).但是動態(tài)數(shù)據(jù)流環(huán)境下,事件的出現(xiàn)頻度時刻發(fā)生變化,原本頻繁的事件可能會變得不頻繁,而不頻繁的事件可能在某些時刻轉變?yōu)轭l繁事件.因此,以上所描述的方法無法直接應用到數(shù)據(jù)變化的動態(tài)頻繁情節(jié)挖掘中.
據(jù)了解,現(xiàn)有的能夠應對動態(tài)數(shù)據(jù)頻繁挖掘的算法極少,與一組序列數(shù)據(jù)相比,長串數(shù)據(jù)不易分割的特點更加劇了動態(tài)頻繁情節(jié)挖掘的難度.為了解決長串序列數(shù)據(jù)不易進行分割的問題,現(xiàn)有的情節(jié)定義方法通常采用窗口計數(shù)、最小發(fā)生計數(shù)、無交疊發(fā)生計數(shù)等方式.
1) MESELO算法.
MESELO算法是由Ao等人[7]提出的,該算法處理的序列是一個完整信號序列,給出了一種基于最后一次出現(xiàn)的最小情節(jié)發(fā)生定義,將信號序列按照固定長度進行窗口切割劃分,且每個窗口起始時刻相差為1,這使得對于長度為L的序列數(shù)據(jù),需要建立(L-|w|+1)個窗口,其中|w|表示窗口大小.然而在現(xiàn)實的場景中:其一,該算法很難保證數(shù)據(jù)間隔的穩(wěn)定性;其二,算法需要對每個時間間隔內(nèi)的挖掘結果進行存儲,冗余數(shù)據(jù)多,占用大量內(nèi)存.而且,在各時刻點統(tǒng)計情節(jié)出現(xiàn)頻率時,需要對各時段內(nèi)挖掘到的情節(jié)進行統(tǒng)計并去除重復計數(shù)的情節(jié).
2) ONCE算法.
有限狀態(tài)自動機[8]通過狀態(tài)轉移,實現(xiàn)對特定情節(jié)的計數(shù)工作.其工作原理是按照情節(jié)順序建立狀態(tài)機.在捕獲到當前等待事件后進行狀態(tài)轉移,轉為等待情節(jié)的下一事件.當情節(jié)的最后一個事件到達時,狀態(tài)機跳轉到結束態(tài),意味著一個完整情節(jié)的發(fā)生.但有限狀態(tài)機所捕獲的情節(jié)發(fā)生沒有時間跨度的約束,存在一次情節(jié)發(fā)生開始事件與結束事件時間跨度較長的情況,這類情節(jié)發(fā)生不再具備較強的現(xiàn)實意義,而且對于交叉發(fā)生的情節(jié)不具備識別能力.
ONCE算法主要是利用狀態(tài)轉移的思想,是一種對帶時間約束的無交叉最小發(fā)生情節(jié)進行計數(shù)的計數(shù)算法:它構建了一種名為OccMap的數(shù)據(jù)結構,該結構可以用來存儲事件信號的時間戳.當最后一行為激活態(tài),且有對應信號事件到達時,表明存在一次完整的情節(jié)發(fā)生,之后通過自底向上對OccMap表進行信號事件選取,得到最小情節(jié)發(fā)生,然后檢驗情節(jié)發(fā)生的時間跨度是否滿足約束.如果滿足時間跨度約束,則表明捕獲到一次符合條件約束的情節(jié)發(fā)生,可以進行情節(jié)計數(shù)+1的操作.該算法和OccMap結構詳細見Li等人[9]以及李健等人[10]的研究.
ONCE算法按照無交疊的情節(jié)最小發(fā)生進行掃描計數(shù),不適用于交叉互異的最小情節(jié)發(fā)生.某些交叉發(fā)生的互異情節(jié)不能被挖掘捕獲.
現(xiàn)有情節(jié)定義方法通常為保證情節(jié)發(fā)生計數(shù)的方便性,以犧牲準確性為代價,采用窗口計數(shù)、最小發(fā)生計數(shù)、無交疊發(fā)生計數(shù)等方式.這些計數(shù)方式或事件被重復使用,存在重復計數(shù)問題,或由于情節(jié)的無交叉性某些情節(jié)被漏記.在此,我們定義一種更為通用的情節(jié)計數(shù)方式——可交叉的帶時間約束的互異最小發(fā)生,基于這種情節(jié)定義方式實現(xiàn)高效的情節(jié)計數(shù).我們復用了ONCE算法采用的OccMap結構,通過設計該結構的初始化過程,實現(xiàn)帶時間約束的可交叉最小發(fā)生情節(jié)進行計數(shù),在我們提出的情節(jié)定義下完成情節(jié)發(fā)生的準確計數(shù).
參考李健等人[10]的計數(shù)方案提出的OccMap數(shù)據(jù)結構,本文對OccMap結構的情節(jié)判定和初始化步驟進行了改進,實現(xiàn)單遍掃描序列數(shù)據(jù),完成對可交叉的帶時間約束的互異最小情節(jié)計數(shù)的工作,該算法命名為ONCE-TDM.具體操作過程如下:
1) OccMap表建立.
如圖1所示,以序列情節(jié)α4=〈A,B,B〉為例(α的上標“4”,表示時間跨度最大為4),按順序建立存儲事件時間戳的對應行,目標情節(jié)和各行共同構成1張OccMap表,記作OM(αδ)=[l1,l2,…,lk].將第1行事件A設置為激活狀態(tài),表示OccMap表正等待事件A的到達,其他行設置未激活狀態(tài).之后隨著序列S中每個事件的產(chǎn)生和到達,OccMap不斷保存和更新.
圖1 α4=〈A,B,B〉在序列S中的計數(shù)過程
2) OccMap表更新.
隨著長序列S中事件的到達,需要比較OccMap中處于激活狀態(tài)的各行事件與到達事件是否相同,若相同,則將該事件時間戳加入已激活的事件對應行中,將OccMap表中第1個無數(shù)據(jù)的行設置為激活狀態(tài),表示等待該行類型的信號事件到達.
3) OccMap最后數(shù)據(jù)到達.
最后一行到達表示找到一個完整的情節(jié)發(fā)生,因為按照我們的激活規(guī)則,OccMap表中的數(shù)據(jù)必定滿足l1[1]<l2[1]<…<lk[1],下面將判斷形成的情節(jié)發(fā)生是否滿足約束條件.
4) 情節(jié)約束條件判定.
一種多層小型化5G毫米波功率分配器設計…………………………………………… 姬曉春,姬五勝,王林年,張志悅,童滎贇,涅佛達夫.E.I(6)
考慮到本文所要尋找的是情節(jié)的最小發(fā)生,所以當最后一行激活且有事件匹配時,先在OccMap中自底向上選中每行能構成情節(jié)最小發(fā)生的事件時間戳.
最后一行的選中事件即為剛到達的唯一的時間戳所表示的事件,之后向上確定每行選中事件時尋找發(fā)生時間早于下一行選中事件時間戳,且最靠近下一事件發(fā)生時刻的時間,即小于下一事件時間戳的本行時間戳的最大值,從而保證選中事件構成的發(fā)生為最小情節(jié)發(fā)生.得到情節(jié)最小發(fā)生的時間跨度[ts,te],若te-ts≤δ,則存在1次情節(jié)發(fā)生,滿足最小時間跨度約束;相反,則情節(jié)發(fā)生不能滿足時間約束.
如圖1(5)所示,α4=〈A,B,B〉的一次最小發(fā)生ts=1,te=5,滿足時間約束δ(δ=4).
5) OccMap表初始化.
在完成1組選中事件的條件約束判定之后,需要對OccMap進行初始化操作,以便對后續(xù)序列進行情節(jié)計數(shù).
本文所定義的情節(jié)發(fā)生其事件必須滿足互異性,但發(fā)生時間的時間跨度可以有重疊.在此,我們對OccMap初始化步驟進行重新設計,使得它能勝任帶時間約束可交叉的互異最小情節(jié)的計數(shù)工作.
由于滿足和不滿足時間跨度約束的情節(jié)發(fā)生在OccMap初始化時操作情況是不同的,在此對2種情況進行分類討論.
1) 滿足約束條件發(fā)生的OccMap初始化.
按照之前描述的步驟,在情節(jié)最后事件到達后,按要求自底向上按層查找,可得到最小發(fā)生的時間跨度[ts,te].考慮到最大化的捕獲序列S中滿足要求的情節(jié)發(fā)生,我們增加1次自上而下確定情節(jié)發(fā)生時間戳的步驟,如圖2所示:
不同的學生有著不同的學習層次,不同的學生學習能力也不盡相同,因此,在進行分層異步教學時,要進行合理的分層,保證學生學習能力與知識的匹配,學習上不產(chǎn)生很大的壓力,導致學習興趣的喪失。在分層異步教學中實現(xiàn)對學生進行合理的分配,需對每一個學生進行充分了解,根據(jù)學生的理解水平和學習能力進行合理分組,再對每一個組的教學方式和授課方法進行調(diào)整,使每一個學生都能夠從不一樣的程度進行學習,以學生為主體地位,對每一個組進行不一樣的指導,充分調(diào)動學生學習的積極性,漸漸使理解能力差的學生也能夠熟練地掌握知識。
圖2 α6=〈A,B,A,C〉在序列S中的計數(shù)過程
圖3 α4=〈A,B,A〉在序列S中的計數(shù)過程
以圖2(5)中的序列數(shù)據(jù)而言,如果以Occ1(α6,S)=〈1,2,4,5〉作為本次情節(jié)的發(fā)生,則為了保證互異性,事件(A,4)不能被2次使用.
而如果增加1次自上而下確定情節(jié)發(fā)生時間戳的步驟,則在保證最小發(fā)生時間跨度不變的同時,可以選擇較為靠前的事件時間戳(A,3).此時,由于情節(jié)發(fā)生可交叉的設定,(A,4)將可以用于下一次情節(jié)發(fā)生Occ2(α6,S)=〈4,6,7,8〉,這使得情節(jié)發(fā)生計數(shù)更加準確.
在確定情節(jié)發(fā)生的時間戳之后,將OccMap表中選中事件及各行選中事件之前的數(shù)據(jù)刪除,同時,由于選中事件已經(jīng)被使用,刪除與選中事件相同的時間戳,如圖2(5+)中第1行數(shù)據(jù)(A,3).
最后,對表中剩余數(shù)據(jù)進行檢查操作,確保每行數(shù)據(jù)符合OccMap表的要求,即l1[1]<l2[1]<…,并將表中第1個空行及之前行設置為激活態(tài).如圖2(5++),剩余數(shù)據(jù)(A,4)的第1行數(shù)據(jù)為激活態(tài),第2行為首個空行,也設置為激活態(tài),代表等待第2行數(shù)據(jù)的到達.
2) 不滿足約束條件發(fā)生的OccMap初始化.
根據(jù)之前的討論,OccMap在各層有數(shù)據(jù)的情況下才能激活下一層事件,所以當情節(jié)最后1個事件到達,必可以構成至少1個按順序的序列情節(jié).我們從最后一行開始,自底向上逐層查找,找到目標情節(jié)的最小發(fā)生及情節(jié)時間跨度[t1,tk],因此如果該組序列情節(jié)不滿足約束條件,存在的問題當且僅當是選定的情節(jié)發(fā)生超出其時間跨度約束.
如圖3(6)所示,已知選中的這組情節(jié)的發(fā)生已經(jīng)是最小發(fā)生,時間跨度達到最小值,若該組時間戳數(shù)據(jù)不能滿足要求,則說明當前狀態(tài)下無法找到滿足時間約束的情節(jié),該組數(shù)據(jù)作廢.作廢情況下,選中事件并沒有被使用,與后續(xù)事件構成情節(jié)發(fā)生時,不存在事件被重復利用的情況,如圖3(6+)中事件(A,6).所以表中與選中事件相同的事件不必進行刪除操作.
又知,當前選中情節(jié)發(fā)生已經(jīng)為最小發(fā)生,且超過時間跨度約束.則此時自下而上選中的各行較為靠后的數(shù)據(jù)(如圖3(6+)中事件B選中時間戳為5的數(shù)據(jù)),若能與后續(xù)到達的事件再次構成情節(jié)發(fā)生,其時間跨度只可能大于本次發(fā)生,所以不必再自上而下找發(fā)生較靠前的等價發(fā)生,可直接判定選中數(shù)據(jù)及各行選中數(shù)據(jù)之前的數(shù)據(jù)失效,對其進行刪除操作.
接下來與按照滿足約束條件發(fā)生OccMap初始化的流程一致,對剩余數(shù)據(jù)進行整理,保證剩余事件能滿足情節(jié)中事件的順序約束(l1[1]<l2[1]<…).并將有數(shù)據(jù)的行和第1個無數(shù)據(jù)的行設置為激活狀態(tài),表示OccMap正等待這些數(shù)據(jù)的到達.
至此,利用OccMap數(shù)據(jù)結構,按照以上5個步驟,實現(xiàn)對長串序列數(shù)據(jù)S中帶時間約束的特定情節(jié)αδ的計數(shù)工作.
本文綜合考慮情節(jié)發(fā)生的時間跨度問題、信號事件的互異性、情節(jié)的可交叉性,提出一種更具普適性的情節(jié)定義方式.文中提出的情節(jié)定義滿足情節(jié)反單調(diào)性,參照ONCE算法提出的情節(jié)計數(shù)方案,利用算法構建的OccMap數(shù)據(jù),通過修改OccMap的情節(jié)判定和初始化過程,實現(xiàn)對序列數(shù)據(jù)1遍掃描,完成對有交叉帶時間約束的最小情節(jié)發(fā)生精確計數(shù)的工作.