資料探勘中的模式發現(七)GSP演算法、SPADE演算法、PrefixSpan演算法
這前兩個演算法真是出人意料地好理解
GSP演算法
GSP演算法是AprioriAll演算法的擴充套件演算法,其演算法的執行過程和AprioriAll類似。
其核心思想是:在每一次掃描(pass)資料庫時,利用上一次掃描時產生的大序列生成候選序列,並在掃描的同時計算它們的支援度(support),滿足支援度的候選序列作為下次掃描的大序列。第1次掃描時,長度為1的頻繁序列模式作為初始的大1—序列。
接下來會演示一下GSP如何產生候選集的。
GSP演算法最大的特點就在於,GSP引入了時間約束、滑動時間窗和分類層次技術,增加了掃描的約束條件,有效地減少了需要掃描的候選序列的數量,同時還克服了基本序列模型的侷限性,更切合實際,減少多餘的無用模式的產生。
另外GSP利用雜湊樹來儲存候選序列,減小了需要掃描的序列數量,同時對資料序列的表示方法進行轉換,這樣就可以有效地發現一個侯選項是否是資料序列的子序列。
但是這些方法都不算是GSP的核心思想,只是一些剪枝的優化而已,與其他很多演算法的方式極其類似,無論是ACM-ICPC還是其他機器學習、深度學習的演算法都有類似的優化,所以不再贅述。
演示
我們現在有如下的資料庫,並設定最小支援度min_support = 2
我們先進行第一次掃描。
得到如下的序列
這全部的就是候選集,然後沒有打叉的就是序列模式。這裡的思想和之前講過的Apriori演算法完全一樣。
現在我們來產生長度為2的候選集,只是候選集而已。
我們來稍微解釋一下,如
這裡就不存在類似於
我們這裡總共產生了候選集
如果沒有使用剪枝,而是直接使用類似於廣度優先搜尋(bfs)的演算法生成,則會有
然後再進行篩選,直到不能進行了為止。
雜湊樹
使用資料結構對序列進行儲存能夠方便管理,節約空間。就有一些類似蛤夫曼樹壓縮編碼那樣。
GSP採用雜湊樹儲存候選序列模式。雜湊樹的節點分為三類:
- 根節點;
- 內部節點;
- 葉子節點。
根節點和內部節點中存放的是一個雜湊表,每個雜湊表項指向其它的節點。而葉子節點記憶體放的是一組候選序列模式。
SPADE演算法
SPADE演算法依舊使用傳統的先驗性質,即連線步+剪枝步的經典組合,思想跟GSP大致相同,但是引入了垂直列表資料庫。
SPADE演算法尋找1-序列和2-序列頻繁項集方法跟GSP完全形同,在之後的3-候選集及之後的頻繁項計算中,採取了一種“作弊”的辦法獲得候選集,該辦法套用了三種屢試不爽的公式,如下:
- 如果諸如成員PA,PD這樣的形式出現在2頻繁項集中,則能推匯出PBD這樣的三成員元素。
- 如果出現諸如PB,P->A這樣的形式出現在2頻繁項集中,則能推匯出PB->A這樣的三成員元素。
- 如果出現諸如P->A,P->F這樣的形式出現在2頻繁項集中,則能推匯出P->AF或P->A->F或P->F->A這樣的三成員元素。
同時還要注意,如果想要A和F得出AF,那麼A發生的序列號要與F發生的序列號相同,而且A的時間序列號要小於F的時間序列號。想相反的情況也是一樣的,要得出FA,則要F的時間序列號要小於A的時間序列號。
演示
現有如下的資料庫
其中時間序列號(或稱為元素序列號)表示在一個序列中排序的位置,因為越大的排序在越後面。
在本例中AB,AF是兩個頻繁的2成員項,那麼有可能存在且僅存在ABF這樣的3成員頻繁項,經過10次計算遍歷了一遍data發現ABF確實是頻繁的。
然後這樣也是一點一點做直到沒有辦法。
PrefixSpan
演算法思想:採用分治的思想,不斷產生序列資料庫的多個更小的投影資料庫,然後在各個投影資料庫上進行序列模式挖掘。
相關定義
字首:設每個元素中的所有專案按照字典序排列。給定序列
例:序列
投影:給定序列
例:對於序列
字尾:序列
例:對於序列