本發(fā)明涉及時(shí)間序列挖掘技術(shù)領(lǐng)域,適用于金融、營(yíng)銷、生物醫(yī)療等領(lǐng)域,用于挖掘海量時(shí)間序列中連續(xù)出現(xiàn)的頻繁序列模式。
背景技術(shù):
時(shí)間序列(Time Series)泛指那些隨時(shí)間或空間有序變化的數(shù)據(jù)集合,這些數(shù)據(jù)集合往往采用等時(shí)間或空間間隔的方法進(jìn)行度量,如金融股票價(jià)格、商品銷售數(shù)據(jù)、氣象數(shù)據(jù)以及生物醫(yī)療的電圖過程監(jiān)控?cái)?shù)據(jù)等,時(shí)間序列挖掘在這些領(lǐng)域有著巨大的應(yīng)用和研究?jī)r(jià)值。以金融領(lǐng)域舉例來說,金融市場(chǎng)的海量時(shí)間序列挖掘,在客戶分析、欺詐檢測(cè)、金融投資組合研究、股票趨勢(shì)預(yù)測(cè)以及證券投資公司分析導(dǎo)向等方向有著指導(dǎo)性的意義。
時(shí)間序列數(shù)據(jù)挖掘的目的就是從時(shí)間序列中檢測(cè)出用戶感興趣或者具有潛在知識(shí)的模式,這些模式可以幫我們更好的發(fā)現(xiàn)到其中蘊(yùn)含的規(guī)律,進(jìn)而為創(chuàng)造更大價(jià)值提供支持。
近年來,隨著存儲(chǔ)技術(shù)和互聯(lián)網(wǎng)的發(fā)展,各個(gè)行業(yè)的時(shí)間序列數(shù)據(jù)有著海量、密集的發(fā)展趨勢(shì),目前經(jīng)典的頻繁模式挖掘方法有Apriori算法和FP-Growth算法、以及基于它們的一些變種算法,都存在運(yùn)行時(shí)間長(zhǎng)、內(nèi)存使用量大的問題,無法滿足日益增長(zhǎng)的數(shù)據(jù)處理要求。
針對(duì)以上傳統(tǒng)方法的不足,實(shí)現(xiàn)對(duì)海量時(shí)間序列中頻繁序列地高效挖掘,包括較少的運(yùn)行時(shí)間和內(nèi)存占用,而且方法必須支持彈性的擴(kuò)展,如分布式擴(kuò)展等,本發(fā)明提出一種新型的時(shí)間序列挖掘方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是:從海量的時(shí)間序列中挖掘頻繁出現(xiàn)的序列,這些序列是最簡(jiǎn)表示模式:不相互包含、重復(fù)。為此,提出一種針對(duì)時(shí)間序列的頻繁序列挖掘方法,實(shí)現(xiàn)時(shí)間序列中高效的模式發(fā)現(xiàn)。
為達(dá)到上述目的,本發(fā)明采用如下的技術(shù)方案:
步驟a:將長(zhǎng)度為n時(shí)間序列依次左移n次,每移動(dòng)一次形成一個(gè)序列,按順序垂直排列,構(gòu)成n階矩陣M1;
步驟b:將步驟a得到的這n個(gè)序列,按照字典順序依次垂直排列,構(gòu)成輸出矩陣M2,使相似的前綴序列在矩陣中相鄰,并且定義M2第1列為F,最后一列為L(zhǎng);
步驟c:對(duì)步驟b得到的輸出矩陣M2的L列建立區(qū)段頻次索引,區(qū)段頻次索引是為了快速地定位F中元素的下一個(gè)元素,并將得到索引信息寫入?yún)^(qū)段頻次索引文件中去,從而能夠很快定位L中某元素的位置;
步驟d:對(duì)F列中的元素依次進(jìn)行FN操作(即快速找到某元素在原時(shí)間序列中的下一元素以及該元素在F列中的位置),將得到的元素集合按照元素值進(jìn)行分組,相同值的元素被分到同一組;
步驟e:若某個(gè)組內(nèi)的元素個(gè)數(shù)大于或等于頻繁支持度(人為規(guī)定的頻繁序列必須達(dá)到的次數(shù)),則對(duì)該組元素遞歸地進(jìn)行步驟d操作,直到組內(nèi)元素個(gè)數(shù)小于頻繁支持度為止;
步驟f:對(duì)步驟e得到的頻繁序列進(jìn)行去重操作,即判斷由步驟c得出的序列之間是否存在包含與被包含的關(guān)系,若存在,則將被包含的元素去掉即可。
基于上述技術(shù)方案,更進(jìn)一步,對(duì)時(shí)間序列中的頻繁序列挖掘的詳細(xì)步驟描述如下:
步驟a 詳細(xì)說明如下:
第一步、先對(duì)要轉(zhuǎn)換的序列(即原本的時(shí)間序列,記為S)進(jìn)行循環(huán)移動(dòng)(Rotate),每次循環(huán)左移一位,每左移1位可生成一個(gè)長(zhǎng)度為n的序列,循環(huán)n次后,得到n個(gè)長(zhǎng)度為n的序列;
第二步、將每個(gè)序列當(dāng)做矩陣的一行,依先后順序可以構(gòu)成一個(gè)n階矩陣,記為M1。
步驟b 詳細(xì)說明如下:
第一步、將第一步得到的這n個(gè)長(zhǎng)度為n的序列按字典順序進(jìn)行排序(Sort),即將這n個(gè)序列按首字符字典順序排序,首字符相同的按第二個(gè)字符字典順序排列,以此類推。再將每個(gè)序列當(dāng)做矩陣的一行,依先后順序構(gòu)成一個(gè)n階輸出矩陣記為M2;
第二步、記矩陣M2的第一列為F列,最后一列為L(zhǎng)列,形成的n階矩陣M2有如下性質(zhì),
1)任意查找的序列T在原時(shí)間序列中出現(xiàn)的個(gè)數(shù)為:以T為前綴出現(xiàn)在M2 方陣中的行數(shù);
2)在M2中出現(xiàn)相同前綴的兩行必然是上下相鄰的;
3)在M2中F列的相同的元素間次序在L列中保持不變;
4)在M2中F列元素是同行L列元素在原時(shí)間序列中的下一個(gè)元素。
由上述4條性質(zhì)可以得出F列中任意元素x在原時(shí)間序列中的下一個(gè)元素y在F中的位置,其中x,y的位置關(guān)系如附圖2所示。
步驟c 詳細(xì)說明如下:
第一步、對(duì)步驟b得到的矩陣M2的L列分段,段大小固定,記每一個(gè)區(qū)段為 BLOCK;
第二步、假設(shè)待操作序列被分成s段BLOCK,從待操作序列首部開始,統(tǒng)計(jì)第1個(gè)到第i(1≤i≤s)個(gè)BLOCK組成的子序列中各元素出現(xiàn)的次數(shù),以此類推,直到序列結(jié)束,最后得到s個(gè)元素頻次的統(tǒng)計(jì)結(jié)果(如附圖4所示),并保存到區(qū)段索引文件中;
第三步、這樣通過第一步和第二步,當(dāng)我們查找M2方陣的L列中某元素時(shí),會(huì)方便很多,索引的用處就體現(xiàn)在這里,減少了從頭查找的時(shí)間。
步驟d 詳細(xì)說明如下:
第一步、依次遍歷矩陣M2中的F列的元素,首先查看該元素(如m)在F列中的個(gè)數(shù)是否達(dá)到頻繁支持度,若達(dá)不到,則遍歷F列中的下一元素;若達(dá)到,由區(qū)段頻次索引文件快速判斷出m元素在L的位置,繼而找到同行的F元素m’以及m’在F中的位置,將上述由元素m快速查找到元素m’的過程稱之為FN操作;
第二步、若m’元素在F列的若m’次數(shù)達(dá)不到,則遍歷F列中的下一元素;若m’次數(shù)大于或等于支持度,則遞歸地對(duì)m’運(yùn)用FN操作,找到m’在原序列中的下一元素的元素m’’以及m’’在F中的位置。以此類推,直到遍歷完F中所有字典元素為止。
步驟e 詳細(xì)說明如下:
針對(duì)步驟d的第二步,由m,m’,m’’...(假設(shè)m,m’,m’’...達(dá)到支持度)所構(gòu)成了頻繁序列。
步驟f 詳細(xì)說明如下:
第一步、將所有待選頻繁序列使用一個(gè)特殊字符(如#)連接成一個(gè)長(zhǎng)的新序列,記為P。 如步驟C得到的頻繁序列有ab,b,則P為ab#b;
第二步、再次將新序列進(jìn)行如上的a,b,c,d,e步驟,得到頻繁序列的頻繁次數(shù),在如序列P(ab#b) 中,ab的頻繁次數(shù)為1,b的頻繁次數(shù)為2,大于1,則b在其他序列中出現(xiàn)過是重復(fù)序列,應(yīng)去除b,得到ab為最終頻繁序列。
本發(fā)明具有以下優(yōu)點(diǎn)和積極效果:
a) 彌補(bǔ)了頻繁模式挖掘上的空白:頻繁序列模式挖掘。
b) 本發(fā)明的方法時(shí)間效率和內(nèi)存使用效率高,對(duì)于億級(jí)別長(zhǎng)度的時(shí)間序列,能夠在分布式環(huán)境下,可以在1~2s內(nèi)處理完畢,且內(nèi)存使用量大約為3.5G左右。
c) 本發(fā)明的方法是完全可并行的,分布式可擴(kuò)展性好。
附圖說明
圖1. babcab的矩陣變換結(jié)果。
圖2. F與L列中元素的對(duì)應(yīng)關(guān)系。
圖3.尋找以a開頭的頻繁序列。
圖4.區(qū)段頻次索引。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖并舉實(shí)施實(shí)例,對(duì)本發(fā)明中所用到的方法及算法進(jìn)一步詳細(xì)說明。,設(shè)時(shí)間序列為babcab,設(shè)置頻繁支持度為2。
步驟a:
1)依次左移1位,移動(dòng)6次,得到6個(gè)序列,依次為:abcabb,bcabba,cabbab,abbabc,bbabca,babcab;
2)將這6個(gè)序列依照形成的先后順序,構(gòu)成矩陣M1(如附圖1所示)。
步驟b:
1)將步驟a得到的6個(gè)序列按照字典順序構(gòu)成矩陣M2(如附圖1所示);
2)得到矩陣M2的F列和L列,即F:aabbbc,L:cbbaab(如附圖1所示);
步驟c:
1)對(duì)M2的L列進(jìn)行分段,設(shè)置BLOCK的大小為3;
2)可知第1段BLOCK(0-2)內(nèi)各字典元素為a:0,b:2,c:1 ;第2段BLOCK(3-5)的內(nèi)各字典元素為a:2,b:1,c:0;則第1段計(jì)數(shù)為a:0,b:2,c:1;第2段計(jì)數(shù)為a:2,b:3,c:1;
3)這樣我們就可以快速確定第幾個(gè)元素的位置,如確定第1個(gè)a,和第2個(gè)a均會(huì)落在第一BLOCK段內(nèi),而第3個(gè)b會(huì)落在第二BLOCK段內(nèi)。
步驟d:
1)對(duì)于F列 aabbbc 中,首先遍歷a,a有2個(gè),達(dá)到頻繁支持度,則對(duì)a進(jìn)行FN操作,2個(gè)元素a在原時(shí)間序列中的下一個(gè)元素均為元素b,且元素b在F中的位置(如附圖3所示);
2)由于2個(gè)a后面的均為元素b,達(dá)到頻繁支持度,故繼續(xù)對(duì)這2個(gè)元素b進(jìn)行遞歸地FN操作,發(fā)現(xiàn)這2個(gè)元素b在原序列中的下一個(gè)元素分別是a和b(如附圖3所示),元素a,b均沒有達(dá)到頻繁支持度,故以c開頭的頻繁序列是ab;
3)前2步完成對(duì)元素a的遍歷,繼續(xù)對(duì)元素b遍歷,F(xiàn)列中b有3個(gè),達(dá)到頻繁支持度,則對(duì)b進(jìn)行FN操作,知在原時(shí)間序列3個(gè)b元素后分別是a,b,c,元素a,b,c均沒有達(dá)到頻繁支持度,故以c開頭的頻繁序列是b;
4)前3步完成對(duì)元素a和b的遍歷,繼續(xù)對(duì)元素c遍歷,c只有1個(gè),未達(dá)到頻繁支持度。
步驟e:
1)遍歷結(jié)束,得到頻繁序列有2個(gè),即ab和b。
步驟f:
1)將ab和b用連接字符(如#)連接起來,即 ab#b;
2)將 ab#b 作為一個(gè)新序列,并再次進(jìn)行如上的a,b,c,d,e步驟,可以得到以a開頭的序列頻繁次數(shù)為1(ab出現(xiàn)1次),以b開頭的序列頻繁次數(shù)為2(b出現(xiàn)2次),故應(yīng)該將b去除掉;
3)頻繁次數(shù)大于1的序列都去除掉,留下頻繁次數(shù)為1的序列,即最終保留頻繁序列為ab。
上述實(shí)例用于解釋說明本發(fā)明,而并非對(duì)本發(fā)明進(jìn)行限制,在本發(fā)明的精神和權(quán)利要求的保護(hù)范圍內(nèi),對(duì)本發(fā)明做出任何的修改和改變,都落入本發(fā)明的保護(hù)范圍。