1. 程式人生 > >時間序列頻繁模式挖掘:A->(EFG)->C 模式的思考

時間序列頻繁模式挖掘:A->(EFG)->C 模式的思考

首先了解一下 A->(EFG)->C 是個什麼形式:

這裡面被括號包覆的部分表示EFG是無序存在的,比如EFG,EGF,GEF,GFE他們都可以統一寫成(EFG)的形式,假設這四個項集都只在A~C的時間段內出現了一次,但是一旦把他們看成(EFG)的形式,那麼他們就相當於出現了四次,如果min_sup<=4的話那(EFG)就可以被認為是頻繁的。

這種挖掘模式的意義:

導師沒有跟我說明這種挖掘模式的意義何在,我大概想了一下可能是這種情況:兩位老師A、C發言之間有EFG三位學生在短時間內在多個時間點進行過頻繁交流,但是他們說話的次序是亂序的。通過本模式就可以找出這三位同學很可能是技術夥伴或者是合夥人等等,但是依靠傳統的模式他們的交流很可能就不是頻繁的,也就找不出他們的關係了。

當然這種形式也未必非得是在某兩個事件A,C之間進行的,這並不重要,如何挖掘(EFG)模式才是關鍵。

解決思路:

1. 將A->(  )->C中 (  )裡地部分全部挖掘出來(要標記A,C發生的時間點,在後面會減少時間複雜度)

時間複雜度O(n)

2.  將挖出來的含有非freq1元素的項集pop掉

比如 A->KEF->C 中,如果K元素並不是freq1項集的成員,那麼 A->KEF->C 這個項集就剪掉不要了

3. 提取中間項:

把“A-”>和“->C”去掉

4. 假如現在提取出來了三個字串:MEFG、EMFG、HEGF

下面要做的跟Apriori做的就一樣了,先去freq1項集,再找freq2.....,這裡注意一下,找的項集是無序的

比如:‘’EF’‘都出現在了這三個成員之中,只要是出現了,就記它的頻度+1,最後跟min_sup比較一下就行了

最終我提取出亂序freq-3項集有(min_sup=2):(EFG),(EFM),(FGM),(EGM)

還可以提出一個freq-4項集:(EFGM)

字母在括號內的順序是可以打亂的,這個無所謂。

關於時間複雜度:

我大致估計了一下,不會超過常數倍O(n^2),與之前的GSP演算法結合一下時間複雜度依舊常數倍O(n^2)的時間複雜度,可以接受。

程式碼實現:(完善中,敬請期待...)