所謂序列模式,我的定義是:在一組有序的數據列組成的數據集中,經常出現的那些序列組合構成的模式。跟我們所熟知的關聯規則挖掘不一樣,序列模式挖掘的對象以及結果都是有序的,即數據集中的每個序列的條目在時間或空間上是有序排列的,輸出的結果也是有序的。
舉個簡單的例子來說明,關聯規則一個經典的應用是計算超市購物中被共同購買的商品,它把每個顧客的一次交易視作一個transaction,計算在不同transaction中不同item組合的規律性。而如果我們考慮一個用戶多次在超市購物的情況,那么這些不同時間點的交易記錄就構成了一個購買序列,N個用戶的購買序列就組成一個規模為N的序列數據集。考慮這些時間上的因素之后,我們就能得到一些比關聯規則更有價值的規律,比如關聯挖掘經常能挖掘出如啤酒和尿布的搭配規律,而序列模式挖掘則能挖掘出諸如《育兒指南》->嬰兒車這樣帶有一定因果性質的規律。所以,序列模式挖掘比關聯挖掘能得到更深刻的知識。
在實際當中,序列模式挖掘被廣泛地應用於各種序列數據集中,如生物信息學上的基因微陣列數據,從中挖掘哪些基因組合模式在某類病人中會頻繁出現;以單詞作為item的文檔序列,研究在不同文檔中單詞序列的出現模式;用戶點擊流數據,用於挖掘用戶的頻繁點擊模式,建立用戶模型,完善網站功能與UI結構。除此之外還有很多,只要是序列數據集,都可以考慮利用序列模式挖掘獲得規律。
圖1是一個序列數據庫,及其以0.75作為最小閾值(min_sup)的頻繁序列模式。借此介紹序列挖掘中的幾個主要概念。
![]() |
|
圖1 簡單的序列數據庫,基本概念
|
序列(Sequence):以SID表示,一個序列即是一個完整的信息流。
項目(Item):序列中最小組成單位的集合,比如在這個樣例中的項目為{A, B, C}。
事件(Event):通常用時間戳標志,標識事件之間的前后關系。又叫Itemset,是Item的集合,樣例中以EID表示。
k頻繁序列:如果頻繁序列的項目個數為k,則稱之為k頻繁序列,以Fk表示(圖1的F1,F2,F3)。
序列的包含關系:對於序列x和y,如果存在着一個保序的映射,使得x中的每個事件都被包含於y中的某個事件,則稱為x被包含於y(x是y的子序列),例如序列B->AC是序列AB->E->ACD的子序列。
支持度(support):某序列x的支持度是指在整個序列集中包含x的序列的頻次。
有了以上概念之后,序列模式挖掘的問題就定義為:給定一個序列數據庫以及最小支持度min_sup,找出所有支持度大於min_sup的序列模式。
解決這個問題的一個著名的算法叫SPADE,以及加入各種約束限制后的cSPADE,它們來自同一個作者Zaki。SPADE是無約束的序列頻繁模式挖掘算法,其基本思想是利用一個S后綴等價類(suffix equivalence class)的概念[S],從F1開始計算,由F1張出以F1中的頻繁序列為[S]的F2,再以F2張出以F2中的頻繁序列為[S]的F3,以此類推。由於引入了后綴等價類這個概念,使得整個算法對數據庫的遍歷次數與計算量大大降低,是一個現實中有效的算法。cSPACE在前者的基礎上引入了對序列模式的約束,其中包括:
序列長度與寬度的約束(序列的長度是指序列中事件的個數,寬度是指最長事件的長度);
最小間隔的約束,即事件之間的最小時間間隔;
最大間隔的約束,即事件之間的最大時間間隔;
時間窗的約束,即整個序列都必須發生在某個時間窗內;
其它,如只限制為某些Item,序列數據庫存在分類標簽。
以上的約束基本已經覆蓋了實際應用中所有可能碰到的限制情況,實際上約束並不常用到,通常SPADE算法已經夠用了。
由於數學表述過多,而且整個過程比較繁瑣,這里不打算詳細敘述兩個算法的計算流程,有興趣的可以參看文后附上的參考文獻。
很幸運的是,萬能的R已經有序列挖掘的包,對SPADE算法與cSPADE算法有了完整的實現,即使對算法並不充分了解,也可以把它們用於自己的場景中。它就是arulesSequences,以下以一個例子簡單介紹一下它的用法。
library(arulesSequences)
data(zaki)
s1 <- cspade(zaki, parameter = list(support = 0.4), control = list(verbose = TRUE))
summary(s1)
as(s1, "data.frame")
s2 <- cspade(zaki, parameter = list(support = 0.4, maxwin = 5))
as(s2, "data.frame")
第2行導入數據庫zaki,它的結構類似於圖1所示的那種序列-事件集,第3行設定最小支持度為0.4,並用無約束的SPADE算法搜索頻繁序列模式,第6行引入了時間窗的限制,用cSPADE算法進行搜索。整個過程十分簡潔明了。
更多使用的例子可在R的終端用?cspade命令查看。
參考文獻:
Sequence Mining in Categorical Domains: Incorporating Constraints, Mohammed J. Zaki, 2000 ACM
原文:http://www.wentrue.net/blog/?p=1016

