国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

數據挖掘中的模式發現(七)GSP算法、SPADE算法、PrefixSpan算法

2019-11-09 13:41:23
字體:
來源:轉載
供稿:網友

這前兩個算法真是出人意料地好理解

GSP算法

GSP算法是APRioriAll算法的擴展算法,其算法的執行過程和AprioriAll類似。

其核心思想是:在每一次掃描(pass)數據庫時,利用上一次掃描時產生的大序列生成候選序列,并在掃描的同時計算它們的支持度(support),滿足支持度的候選序列作為下次掃描的大序列。第1次掃描時,長度為1的頻繁序列模式作為初始的大1—序列。

接下來會演示一下GSP如何產生候選集的。

GSP算法最大的特點就在于,GSP引入了時間約束、滑動時間窗和分類層次技術,增加了掃描的約束條件,有效地減少了需要掃描的候選序列的數量,同時還克服了基本序列模型的局限性,更切合實際,減少多余的無用模式的產生。

另外GSP利用哈希樹來存儲候選序列,減小了需要掃描的序列數量,同時對數據序列的表示方法進行轉換,這樣就可以有效地發現一個侯選項是否是數據序列的子序列。

但是這些方法都不算是GSP的核心思想,只是一些剪枝的優化而已,與其他很多算法的方式極其類似,無論是ACM-ICPC還是其他機器學習、深度學習的算法都有類似的優化,所以不再贅述。

演示

我們現在有如下的數據庫,并設置最小支持度min_support = 2

圖1

我們先進行第一次掃描。

得到如下的序列

圖2

這全部的就是候選集,然后沒有打叉的就是序列模式。這里的思想和之前講過的Apriori算法完全一樣。

現在我們來產生長度為2的候選集,只是候選集而已。

圖3

我們來稍微解釋一下,如<aa>,這個的意思就是先發生了一次a再發生了一次a,而不是同時發生的。每個a都是一個元素。

圖4

這里就不存在類似于<(aa)>這樣的序列了,這里是產生只含有一個元素的序列。

我們這里總共產生了候選集6×6+6×5÷2=51個。

如果沒有使用剪枝,而是直接使用類似于廣度優先搜索(bfs)的算法生成,則會有8×8+8×7÷2=92個。

然后再進行篩選,直到不能進行了為止。

圖6

哈希樹

使用數據結構對序列進行存儲能夠方便管理,節約空間。就有一些類似蛤夫曼樹壓縮編碼那樣。

GSP采用哈希樹存儲候選序列模式。哈希樹的節點分為三類:

根節點;內部節點;葉子節點。

根節點和內部節點中存放的是一個哈希表,每個哈希表項指向其它的節點。而葉子節點內存放的是一組候選序列模式。

圖5

代碼請見

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的時間序列號。

演示

現有如下的數據庫

圖7

其中時間序列號(或稱為元素序列號)表示在一個序列中排序的位置,因為越大的排序在越后面。

在本例中AB,AF是兩個頻繁的2成員項,那么有可能存在且僅存在ABF這樣的3成員頻繁項,經過10次計算遍歷了一遍data發現ABF確實是頻繁的。

圖8

然后這樣也是一點一點做直到沒有辦法。

PrefixSpan

算法思想:采用分治的思想,不斷產生序列數據庫的多個更小的投影數據庫,然后在各個投影數據庫上進行序列模式挖掘。

相關定義

前綴:設每個元素中的所有項目按照字典序排列。給定序列α=<e1e2…en>β=<e′1e′2…e′m>(m≤n) ,如果e′i=ei(i≤m?1),e′m??em,并且(em?e′m)中的項目均在e′m中項目的后面, 則稱βα的前綴。

例:序列<(ab)>是序列<(abd)(acd)> 的一個前綴;序列<(ad)>則不是。

投影:給定序列αβ ,如果βα的子序列,則α關于β的投影α′必須滿足: βα′的前綴,α′α的滿足上述條件的最長子序列。   例:對于序列α=<(ab)(acd)>,其子序列β=<(b)>的投影是α′=<(b)(acd)>; <(ab)>的投影是原序列<(ab)(acd)>

后綴:序列α關于子序列β=<e1e2…em?1e′m>的投影為α′=<e1e2…en>(n≥m),則序列α關于子序列β的后綴為<e′′mem+1…en>, 其中e′′m=(em?e′m)    例:對于序列<(ab)(acd)>,其子序列<(b)>的投影是<(b)(acd)>,則<(ab)(acd)>對于<(b)>的后綴為<(acd)>

投影數據庫:設α為序列數據庫S中的一個序列模式,則α的投影數據庫為S中所有以α為前綴的序列相對于α的后綴,記為S|α

投影數據庫中的支持度:設α為序列數據庫S中的一個序列,序列βα為前綴,則βα的投影數據庫S|α中的支持度為S|α中滿足條件β?α.γ的序列γ的個數。

演示

圖9

1-序列都是一如既往地計算。

然后就根據每一個1-序列得出對應的投影數據庫

再結合每一個投影數據庫中序列的前綴,從而得到2-序列。

Clospan

用來計算閉合序列模式的方法,大家可以看看論文。

閉合序列模式s: 不存在一個超序列s′,其中s′?s,而且s′s有著相同的支持度。

<abc>:20,<abcd>:20,<abcde>:15

其中<abcd><abcde>是閉合序列模式。

用兩種算法Backward Subpattern和Backward Superpattern來合并數據庫,實現Clospan。

論文:Greatly enhances efficiency (Yan, et al., SDM’03)


如果大家看到MathJax的公式最后都有一個奇怪的豎線,應該是CSDN自己的解析出現了問題,看起來確實挺奇怪的。


上一篇:mysqlbinlog指令舉例

下一篇:文章標題

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 酉阳| 青神县| 南汇区| 邢台市| 康保县| 西宁市| 都昌县| 遵义县| 莱西市| 东丰县| 高淳县| 阜新| 西和县| 始兴县| 石渠县| 周口市| 通榆县| 大石桥市| 镇赉县| 滨州市| 枝江市| 自治县| 廉江市| 舞阳县| 沅江市| 新巴尔虎右旗| 清远市| 措勤县| 惠水县| 张家口市| 叶城县| 枣庄市| 上饶县| 清徐县| 南宫市| 西充县| 平安县| 阜南县| 女性| 长乐市| 开江县|