GSP 算法


1. 項集數據和序列數據

   首先我們看看項集數據和序列數據有什么不同,如下圖所示:

       

   左邊的數據集是項集數據,在 Apriori 和 FP Tree 算法中已經看到過,每個項集數據由若干項組成,這些項沒有時間上的先后關系。

   而右邊的序列數據則不一樣,它是由若干數據項集組成的序列。比如第一個序列 <a(abc)(ac)d(cf)>,它由 a,abc,ac,d,cf 共 5 個項

   集數據組成,並且這些項有時間上的先后關系。對於多於一個項的項集我們要加上括號,以便和其他的項集分開。同時由於項集內部是

   不區分先后順序的,為了方便數據處理,我們一般將序列數據內所有的項集內部按字母順序排序。

 

2. 子序列與頻繁序列

   設序列 $A = \left \{ a_{1},a_{2},\cdots,a_{n} \right \}$,序列 $B = \left \{ b_{1},b_{2},\cdots,b_{m} \right \}$,且 $n \leq m$,如果存在數字序列 $1 \leq j_{1} \leq j_{2} \leq \cdots \leq j_{n} \leq m$ 滿足

$$a_{1} \subseteq b_{j_{1}}, \; a_{2} \subseteq b_{j_{2}}, \cdots , \; a_{n} \subseteq b_{j_{n}}$$

   則稱 $A$ 是 $B$ 的子序列,$B$ 是 $A$ 的超序列。

   頻繁序列則和頻繁項集類似,也就是頻繁出現的子序列。比如對於下圖,支持度閾值定義為 50%,也就是需要出現兩次的子序列才是頻繁序列。

   對於子序列 <(ab)c> 是頻繁序列,因為它是圖中的第一條數據和第三條序列數據的子序列,對應的位置用藍色標示。

       

 

3. GSP(Generalized Sequential Pattern) 算法思想

   GSP 算法類似於 Apriori 算法,即如果一個子序列是不頻繁的,那它所有的超序列都是不頻繁的。算法步驟如下:

       1)掃描序列數據庫,得到長度為 $1$ 的序列模式 $L_{1}$,作為初始的種子集。

       2)根據長度為 $i$ 的種子集 $L_{i}$ ,通過連接操作生成長度為 $i+1$ 的候選序列模式 $C_{i + 1}$;然后掃描序列數據庫,計算每

          個候選序列模式的支持度,產生長度為 $i+1$ 的序列模式 $L_{i + 1}$,並將 $L_{i + 1}$ 作為新的種子集。

       3)重復第二步,直到沒有新的序列模式或新的候選序列模式產生為止。

   舉個例子,數據庫中的數據如下圖,每行都是一個序列數據:

            

   計算 $5$ 個數據 $<a>, <b>,<c>,<d>,<e>,<f>,<g>,<h>$ 的支持度,比如 $<a>$ 是序列 $10,30,50$ 的子序列,所以它的支

   持度為 $3$,統計生成候選頻繁 $1$ 項集 $C_{1}$,因為 $<g>,<h>$ 的支持度低於閾值,所以刪掉,如上右圖。

   接下來進行連接生成候選頻繁 $2$ 項集 $C_{2}$,這里的連接和 Apriori 有點區別,因為兩個相同的事件,如果順序不同那就是不同的序列。

   $1$ 項集連接存在兩種序列,一種是每個序列有 $2$ 個事件,如下左圖;另一種是每個序列有 $1$ 個事件,如下右圖。

             

   再次掃描數據庫得到 $36 + 15 = 51$ 個序列的支持度,刪掉低於閾值的部分得到最終的頻繁二項集 $L_{2}$。依次類推產生頻繁 $3$ 項集,頻繁 $4$ 項集。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM