資料探勘進階之序列模式分析演算法GSP的實現
一、演算法簡介
序列模式定義:給定一個由不同序列組成的集合,其中,每個序列由不同的元素按順序有序排列,每個元素由不同專案組成,同時給定一個使用者指定的最小支援度閾值,序列模式挖掘就是找出所有的頻繁子序列,即該子序列在序列集中的出現頻率不低於使用者指定的最小支援度閾值。
GSP是序列模式挖掘的一種演算法。其主要實現步驟描述如下:
1)掃描序列資料庫,得到長度為1的序列模式L1,作為初始的種子集
L1 C2 L2 C3 L3 C4 L4 ……
2)根據長度為i 的種子集Li 通過連線操作和剪下操作生成長度為i+1的候選序列模式Ci+1;
3)然後掃描序列資料庫,計算每個候選序列模式的支援數,產生長度為i+1的序列模式Li+1,並將Li+1作為新的種子集。
4)重複第三步,直到沒有新的序列模式或新的候選序列模式產生為止。
產生候選序列模式主要分兩步:
1)連線階段:如果去掉序列模式s1的第一個專案與去掉序列模式s2的最後一個專案所得到的序列相同,則可以將s1於s2進行連線,即將s2的最後一個專案新增到s1中。其中最後一個專案集是否為合併在原來s1的最後一個專案集,還是自成一個新的專案集,取決於s2的最後一個專案是否原來就是一個單獨的專案集。
2)剪下階段:依據“不頻繁子序列的超集也不頻繁"。若某候選序列模式的某個子序列不是頻繁序列模式,則此候選序列模式不可能是頻繁序列模式,將它從候選序列模式中刪除。
候選序列模式的支援度計算:對於給定的候選序列模式集合C,掃描序列資料庫,對於其中的每一條序列d,
例子:下表演示瞭如何從長度為3的序列模式產生長度為4的候選序列模式。
在連線步中,種子序列<(1,2) 3>和種子序列<2 (3,4)>連線可產生候選4序列<(1,2) (3,4)>;種子序列<2 3 5>連線可產生候選4序列<(1,2) 3 5>。其餘的序列均不滿足連線條件。在剪枝步中,候選4序列<(1,2) 3 5>被剪去,因為其連續子序列<1,3,5>不包含在頻繁3序列集合L3中。
二、演算法的設計和實現
本演算法採用Java實現,主要根據序列模式的情況,序列模式挖掘中共涉及到3個物件:序列、元素和專案。
演算法共有5個類:
GSP類:演算法核心類,GSP演算法的核心操作:連線和剪枝操作都在這裡實現,在使用該演算法時,也是需要通過使用該類的方法來實現GSP演算法。
Sequence類:序列類,該類封裝了序列的基本資訊和基本操作,實現了對序列間的比較以及序列中的專案集操作。
Element類:元素類,在序列模式中元素也就是專案集,專案集中包含了專案,在本演算法實現中,元素類中含有一個專案集屬性,用於表示專案集,在使用時也是使用該屬性來表示專案集,另外,在該類中還封裝了對專案的操作以及一些其他操作。
SeqDB類:該類用於從資料庫中掃描獲取序列,本演算法主要用於模擬實現,所以在程式中已經初始化了序列。
GSPTest類:測試類,使用JUnit對演算法進行單元測試,本文附的程式碼只含有對於實現GSP演算法的方法測試。
由於程式中附帶了對方法的註釋,這裡對各個方法的原理和實現就不作介紹。
三、實驗結果
(一)實驗資料
<{1 5}{2}{3}{4}>
<{1}{3}{4}{3 5}>
<{1}{2}{3}{4}>
<{1}{3}{5}>
<{4}{5}>
(二)程式輸出
最小支援度計數為:2
輸入的序列集合為:
[<(1,5) 2 3 4>, <1 3 4 (3,5)>, <1 2 3 4>, <1 3 5>, <4 (4,5)>]
序列模式L(1) 為:[<2>, <4>, <1>, <3>, <5>]
.................................................
剪枝前候選集的大小為:40 候選集c為:[<(2,2)>, <2 2>, <(2,4)>, <2 4>, <4 2>, <(1,2)>, <2 1>, <1 2>, <(2,3)>, <2 3>, <3 2>, <(2,5)>, <2 5>, <5 2>, <(4,4)>, <4 4>, <(1,4)>,
<4 1>, <1 4>, <(3,4)>, <4 3>, <3 4>, <(4,5)>, <4 5>, <5 4>, <(1,1)>, <1 1>, <(1,3)>, <1 3>, <3 1>, <(1,5)>, <1 5>, <5 1>, <(3,3)>,
<3 3>, <(3,5)>, <3 5>, <5 3>, <(5,5)>, <5 5>]
剪枝後候選集的大小為:40 候選集c為:[<(2,2)>, <2 2>, <(2,4)>, <2 4>, <4 2>, <(1,2)>, <2 1>, <1 2>, <(2,3)>, <2 3>, <3 2>, <(2,5)>, <2 5>, <5 2>, <(4,4)>, <4 4>, <(1,4)>,
<4 1>, <1 4>, <(3,4)>, <4 3>, <3 4>, <(4,5)>, <4 5>, <5 4>, <(1,1)>, <1 1>, <(1,3)>, <1 3>, <3 1>, <(1,5)>, <1 5>, <5 1>, <(3,3)>,
<3 3>, <(3,5)>, <3 5>, <5 3>, <(5,5)>, <5 5>]
序列模式L(2) 為:[<2 4>, <1 2>, <2 3>, <1 4>, <3 4>, <4 5>, <1 3>, <1 5>, <3 5>]
.................................................
剪枝前候選集的大小為:18 候選集c為:[<1 (2,4)>, <1 2 4>, <2 (4,5)>, <2 4 5>, <1 (2,3)>, <1 2 3>, <2 (3,4)>, <2 3 4>, <2 (3,5)>, <2 3 5>, <1 (4,5)>, <1 4 5>, <3 (4,5)>,
<3 4 5>, <1 (3,4)>, <1 3 4>, <1 (3,5)>, <1 3 5>]
剪枝後候選集的大小為:7 候選集c為:[<1 2 4>, <1 2 3>, <2 3 4>, <1 4 5>, <3 4 5>, <1 3 4>, <1 3 5>]
序列模式L(3) 為:[<1 2 4>, <1 2 3>, <2 3 4>, <1 3 4>, <1 3 5>]
.................................................
剪枝前候選集的大小為:2 候選集c為:[<1 2 (3,4)>, <1 2 3 4>]
剪枝後候選集的大小為:1 候選集c為:[<1 2 3 4>]
序列模式L(4) 為:[<1 2 3 4>]
.................................................
計算花費時間60毫秒!
四、程式原始碼
有關原始碼請點選下載。