• 沒有找到結果。

從單一圖型中有效率探勘常見鄰近樣式之研究

N/A
N/A
Protected

Academic year: 2021

Share "從單一圖型中有效率探勘常見鄰近樣式之研究"

Copied!
70
0
0

加載中.... (立即查看全文)

全文

(1)國立台灣師範大學資訊工程研究所 碩士論文. 指導教授: 柯佳伶 博士. 從單一圖型中有效率探勘常見鄰近樣式之研究 Efficiently Finding Neighborhood Patterns in a Large Labeled Graph. 研究生: 朱聖池 撰 中華民國 一百零四 年 七 月.

(2) 目錄 目錄.................................................................................................................................. I 圖目錄........................................................................................................................... III 摘要................................................................................................................................. 1 Abstract .......................................................................................................................... 2 誌謝................................................................................................................................. 3 第一章. 緒論............................................................................................................. 4. 1.1. 研究動機......................................................................................................... 4. 1.2. 研究目的......................................................................................................... 5. 1.3. 論文方法......................................................................................................... 8. 1.4. 論文架構......................................................................................................... 9. 第二章. 文獻探討................................................................................................... 10. 2.1. 圖型探勘技術簡介....................................................................................... 10. 2.2. 多筆圖型探勘常見子圖樣式技術............................................................... 11. 2.3. 單一圖型常見子圖樣式探勘技術............................................................... 14. 2.4. 常見子圖樣式平行探勘技術....................................................................... 16. 第三章. 問題及相關名詞定義............................................................................... 18. 3.1. 問題定義....................................................................................................... 18. 3.2. 鄰近子圖樣式編碼....................................................................................... 20. 3.3. 圖型特徵儲存結構....................................................................................... 24. 第四章. 鄰近樣式圖型探勘演算法....................................................................... 26. 4.1. 鄰近子圖樣式列舉方法............................................................................... 26. 4.2. 避免樣式重覆列舉方法............................................................................... 34. 4.3. 鄰近子圖樣式演算法完整流程................................................................... 38. 第五章. MapReduce 平行圖型探勘 ...................................................................... 42. 第六章. 演算法執行效率評估............................................................................... 48 I.

(3) 6.1. 資料來源及圖型資料產生方式................................................................... 48. 6.2. 實驗分析....................................................................................................... 50. 6.3. 實驗結果總結............................................................................................... 61. 第七章. 結論及未來發展方向............................................................................... 62. 參考文獻....................................................................................................................... 63. II.

(4) 圖目錄 圖 圖 圖 圖 圖 圖 圖 圖. 1 圖型結構............................................................................................... 6 2 子圖樣式............................................................................................... 6 3 定義範例圖.......................................................................................... 21 4 單一圖型範例..................................................................................... 24 5 鄰邊序列.............................................................................................. 24 6 鄰近樣式對應表................................................................................. 27 7 鄰近節點樣式 P1 圖型資訊結構 ........................................................ 30 8 子圖圖型成長更新圖型結構............................................................. 32. 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. 9 P1 圖型資訊結構移除索引後 ............................................................. 32 10 gSFNP 列舉流程 .............................................................................. 33 11 鄰近節點樣式 P 子圖圖型成長後的鄰近樣式對應表內容 .......... 33 12 圖型成長無法避免的循環性同構................................................... 34 13 不具返回邊之圖型同構.................................................................... 35 14 鄰邊序列的相異樣式邊順序........................................................... 37 15 P1 圖型結構加入避免同構的拜訪邊後 ........................................... 37 16 gSFNP Algorithm 整體流程 ............................................................. 38 17 圖型成長演算法............................................................................... 41 18 圖型前處理步驟............................................................................... 42. 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. 19 輸入圖型資料................................................................................... 43 20 輸出範例資料 Adj_List,亦為下一個 MapReduce 輸入 .............. 43 21 初始樣式以及對應圖、圖型特徵結構........................................... 43 22 將節點之鄰邊進行排序 MapReduce 虛擬碼 ................................. 44 23 產生初始具一固定節點樣式及對應圖的 MapReduce 虛擬碼 ..... 44 24 樣式支持度輸出範例....................................................................... 45 25 樣式支持度的 MapReduce 虛擬碼 ................................................. 45 26 刪減不符合門檻值之圖型的 MapReduce 虛擬碼 ......................... 45 27 gSFNP_MR 主體架構 ....................................................................... 46 28 圖型成長的 MapReduce 虛擬碼 ..................................................... 47. 圖 圖 圖 圖 圖 圖 圖 圖. 29 論文資料原始內容範例.................................................................... 48 30 文範例符號意義............................................................................... 49 31 論文引用範例之表示圖型............................................................... 49 32 gSFNP 和 FNP 在 100 個節點圖型的平均執行時間 ...................... 52 33 gSFNP 和 FNP 在 200 個節點圖型的平均執行時間 ...................... 52 34 gSFNP 和 FNP 在 300 個節點圖型的平均執行時間 ...................... 53 35 gSFNP 和 FNP 在 400 個節點圖型的平均執行時間 ...................... 53 36 gSFNP 和 FNP 在 500 個節點圖型的平均執行時間 ...................... 54 III.

(5) 圖 37 gSFNP 和 FNP 在不同節點數與執行時間成長關係 ...................... 55 圖 圖 圖 表 表 表. 38 gSFNP 和 FNP 在圖型不同密度與執行時間成長關係 .................. 57 39 gSFNP 和 FNP 在記憶體儲存圖型特徵與執行時間成長關係 ...... 58 40 平行處理和單機實驗的執行時間................................................... 60 1 資料集................................................................................................. 48 2 實驗環境一:..................................................................................... 50 3 實驗環境二:..................................................................................... 50. IV.

(6) 摘要 從單一圖型中有效率探勘常見鄰近樣式之研究 朱聖池. 圖型為具結構性的資料結構,能夠完整描述真實世界的資料關聯性。而單一 圖型中的常見鄰近樣式在支持度計算上不僅能維持向下包含特性之外,同時支持 度也較能提供明確的意義。我們認為先前研究提出探勘常見鄰近樣式之 FNP 演算 法,因採用類似 Apriori 演算法的圖型組合方式,將列舉過多不存在的候選樣式。 因此本論文採用先前 gSpan 圖型成長的方法,進行常見鄰近子圖樣式探勘。本論 文所提出的 gSFNP 方法,利用內嵌圖型結構來加速圖型成長,並運用最小深先搜 尋碼來檢查圖型同構問題,同時提出在 MapReduce 平行框架處理的 gSFNP_MR 演算法以解決系統記憶體不足的問題。由實驗結果顯示,此兩種方法在探勘鄰近 子圖樣式的執行時間上都能比 FNP 更快速地探勘出常見鄰近樣式。. 關鍵字: 樣式探勘、常見鄰近樣式、單一圖型探勘。. 1.

(7) Abstract Efficiently Finding Neighborhood Patterns in a Large Labeled Graph By Sheng-Chih Chu. Graph is a powerful abstraction of structural data, which is applied to model the various relations among data in a real world. Recently, a new kind of patterns called frequent neighborhood patterns is defined for a large labeled graph. Frequent neighborhood patterns have the downward closure property of the support measure and provide meaningful interpretations of pattern mining. The previous work used an Apriori-like approach to combine the discovered frequent neighborhood patterns into larger candidate patterns, many of the generated candidates may not appear in the graph. In this thesis, we propose an algorithm, which is called the gSFNP algorithm, to find frequent neighborhood patterns efficiently. By applying a pattern growth approach, a data structure of pattern is designed to store the information of the matched sub-graphs for speeding up the following pattern growth computation. Besides, the minimum DFS code of a pattern is used to avoid finding graph isomorphic patterns. Moreover, we propose another MapReduce version of the gSFNP algorithm, which is called the gSFNP_MR algorithm, to solve the problem of insufficient memory in a centralized environment. Finally, we evaluate the performance of gSFNP and gSFNP_MR. The experimental results show that both the proposed algorithms have shorter response time than the previous work.. Keywords: pattern mining, frequent neighborhood pattern, single graph mining.. 2.

(8) 誌謝 就讀研究所的兩年,讓我從沒有自信到有些許自信能夠去面對未來的困惑與 恐懼,在各方面的知識與經驗學習上有更寬廣的視野與想法,包含專業知識、解 決問題與運用思考的方式都進步不少,這都感謝柯佳伶老師不吝給予建議與鍥而 不捨地教導。另外,同時感謝吳宜鴻教授及徐嘉連教授在口試期間對本論文提供 寶貴的建議與指教,在此致上對兩位教授的謝意。 在這段期間,新認識的朋友們都需要感謝,因為不管在虛、在實上他們都成 為未來可能經營情誼的對象,成為朋友、家人、師長們,更多的時候成為記憶組 成了我,因此我更需要感謝大家,能夠有一天完全了解自己且更認識。謝謝在這 段期間給予幫助及慰問的實驗室夥伴(紹峻、思涵、培豪),前前學長(爾剛、柏先) 及前學長姐(楨喻、張崴、懿萱、舜宸)與學弟妹(王涵、謹安、祺傑)。另外特別感 謝我的女朋友庭妤的陪伴及督促,時常提醒我該做的事情以及還需要準備什麼以 面對未來,在煩悶的時候說話及搞笑,這一切都成為未來的動力,謝啦。 最後感謝父母及兄長的栽培,沒有你們的努力就沒有我,即使我在現階段因 漸漸獨立而給予你們的衝突及思考,我想說「想飛就不要怕墜落」,即使墜落了 只能說明逃不脫那些命運該履行的義務吧,我們只能必須且必然地承擔,除了忍 受與愛與灑脫,沒有更好的了,謝謝世界。 對於生我,養我的這個世界與人們,謹以此誌致上誠摯的感謝。. 朱聖池 謹識 於國立台灣師範大學資訊工程所 2015 年 8 月. 3.

(9) 第一章 緒論 1.1 研究動機 在資料探勘領域中,依資料型態及探勘目的不同發展出不同的研究方向,包 括關聯規則探勘、常見循序探勘,分類預測、聚落分析等技術。其中探勘常見樣 式為資料關聯性分析基本但重要的處理工作,而探勘樣式從最基本的常見資料項 目集合到循序樣式、常見子樹結構以及常見子圖結構(Graph)等,也有許多研究開 始探討以常見樣式作為特徵來對資料進行分類,表示常見樣式足以用來代表資料 特性及意義。 資料型態隨著各式應用而複雜化,圖型資料可表示不同類型資料間彼此的連 結資訊,圖型中的節點表示資料物件及其型態,節點間的連結邊可記錄物件間的 關係型態,這種表示法可直接顯示出資料的關係性,被廣泛應用於多方領域的資 料記錄上,包含科學、醫療、學術及商業等應用上。探勘常見子圖樣式的目的是 為了找出在圖型間或圖形中的共同結構或關係,提供給使用者進一步分析結構形 成的原因及意義,亦可作為資料特徵來進行分類預測。例如可找出化學分子的常 見構成關係[2],以推論其含有的化學性質,或找出論文資料關係作者及引用的常 見得知作者及論文的引用行為模式[4]。 在進行常見圖型探勘的處理過程中,必須(1)列舉候選子圖樣式以及(2)避免重 複列舉所需要的圖型同構檢查機制,這兩個步驟會隨著圖型變大而需要很長的運 算時間。此外,網路持續蓬勃發展,資料量每日以指數倍數成長,探勘計算時間 4.

(10) 也會隨之大幅增加,因此如何提高圖型樣式探勘運算效率是很重要的研究議題。 分散式處理被認為是解決巨量資料計算問題的一個發展方向。Google 提出一個分 散式平行框架 MapReduce,它不僅能夠讓使用者方便地使用檔案儲存系統,還有 可靠的容錯機制來檢查工作站的運作及可擴充性,利用此框架來設計處理演算法 能加速圖型探勘的過程,並且避免單一工作站的效率過慢和資源不足問題。. 1.2 研究目的 根據先前的研究,圖型探勘研究由於處理的問題不盡相同,可分為多筆圖型 探勘以及單筆圖型探勘,兩者的支持度定義並不相同。例如[2]研究化合物與毒物 間的關係,不同的化合物分子結構對應到多筆圖型資料。該論文對已知的化合物 擷取常見分子結構作為特徵建立分類模型,用來預測未知化合物的致癌性及有毒 物質。在此應用中,定義一個子圖的支持度為計算該子圖樣式出現在資料庫中的 多少百分比例的圖型中,這樣的支持度計算的意義容易理解。因為若該樣式在資 料庫中為常見子圖樣式,且特別在有毒分類的化合物中經常出現,則很可能該化 合物是形成對人體有害物質的結構。近年也有研究針對單筆複雜圖型網絡探討, 如探勘出蛋白質的交互作用關係[1]。由於蛋白質會因環境的變化產生未知的蛋白 質結構,而找出蛋白質網絡中常見的子圖樣式,可用來對未知的蛋白質進行結構 預測。 要從單筆圖型網絡中探勘出常見子圖樣式,無法採用上述的支持度定義,因 5.

(11) 為只從一個圖中計算子圖樣式的支持度,不是 0 就是 1,無法呈現子圖樣式在單 筆圖型網絡是否為常見的意義。直覺的修改是採用子圖樣式比對到單筆圖型中不 同部分的次數,但此定義 會使圖型樣式的支持度不符合向下包含(downward closure)特性。向下包含特性為:一個子圖結構,其支持度不會超過其父圖結構的 支持度。此特性可運用在產生候選樣式時避免產生不可能為常見的圖型樣式,以 減少記憶體使用空間跟處理時間。舉例來說,下圖 1 圖型結構中的 G 為一個論 文引用關係圖,為具有節點標示以及連結邊標示的圖型結構,且連結關係具有方 向性,其節點標示 A 意義為作者,標示 P 意義為論文,連結關係標示均為 W(Writes), 表示作者寫了一篇論文,由此圖中表示兩個不同作者與四篇論文的關係。. 圖 1 圖型結構. 圖 2 子圖樣式. 6.

(12) 假設圖 2 子圖樣式 的 G1 和 G2 皆為 G 的子圖候選樣式,若採用子圖樣式在 G 中不同位置的出現次數計算支持度,子圖樣式 G1 的支持度計數值為 7,子圖樣 式 G2 的支持度計數值為 9。據上述情況樣式所算出的支持度並不符合向下包含特 性,而更複雜的子圖樣式愈可能因部分邊的重複比對計算得到更高的支持度。 [9]重新定義從單一圖型網絡中計算子圖樣式支持度的算法,限定在計數子圖 樣式時不允許有共用邊的情況。若依此定義重新計算圖 2 子圖樣式的支持度,則 子圖樣式 G1 支持度計數值為 4,子圖樣式 G2 的支持度計數值為 2。此定義雖然符 合向下包含特性,卻不容易解釋子圖樣式支持度的意義。因此[4]針對單一圖型網 絡的探勘樣式,提出一個新的樣式定義稱為常見鄰近樣式(Frequent Neighborhood Pattern)。一個鄰近樣式表示具一個固定標示節點的特定拓樸樣式,若該拓樸樣式 的節點數目大於設定門檻值則稱為一個常見鄰近樣式。以圖 2 子圖樣式的子圖 候選樣式 G1 和 G2 為例,將標示為 A 的節點設為固定節點時,可比對到圖 1 圖 型結構標示 A 的兩個 n0 及 n1,他們和鄰近節點具有和 G1 的相同結構,因此子圖 樣式 G1 的支持度計數值為 2,而子圖樣式 G2 的支持度計數值也為 2。這兩個樣式 的支持度分別表示寫了至少一篇論文的作者數、寫了至少兩篇不同論文的作者數。 此支持度定義不僅使子圖樣式的支持度值符合向下包含特性,且較能解釋對應子 圖樣是出現頻率的意義。[5]應用常見鄰近樣式作為資料網絡內分類的依據,顯示 此種樣式為一種有效的結構特徵。但[4]中對鄰近常見樣式提出的探勘演算法類似 Apriori Algorithm [9,10]的做法,以組合常見樣式方式列舉出更大的候選樣式,其. 7.

(13) 缺點為儲存空間需求較大且可能產生在圖型中不存在的子圖樣式。 本研究考慮單一圖型結構,圖型中的點與連結邊皆具有不同的標示型態,且 邊可具有方向性。本論文的研究重點為:對單一圖型網絡中探勘常見鄰近樣式提 出有效率的演算法,同時將該演算法擴展為分散式架構 MapReduce 來處理問題。 目標是有效降低探勘過程中圖型候選樣式產生及圖型同構檢查的高計算成本和 儲存空間,並加快整體探勘回應時間(Response time)。. 1.3 論文方法 本論文針對單一圖型網絡,提出一個有效率探勘常見鄰近樣式的演算法,稱 為 gSFNP_Mine。由於常見鄰近樣式與一般常見子圖樣式的主要差別在於有無固 定節點的特性,因此本方法將固定節點視為樣式之起點,採用如 gSpan 圖型成長 方式產生候選樣式為基礎,並採用類似最小 DFS 編碼做為圖型同構的檢查方式。 為了減少探勘執行時間,本論文採用內嵌資訊將圖型成長過程所需資訊記錄下來, 並以圖型遞迴成長的方式進行探勘。過程中先掃描所有的節點一次,列舉出只具 單一固定節點的鄰近樣式之節點標示,接著計算樣式支持度找出常見固定節點鄰 近樣式(k=0),接下來根據比對到常見 k-鄰近子圖樣式之圖型向外連結邊,擴展產 生常見 k+1-鄰近子圖樣式,並從中找出常見 k+1 鄰近子圖樣式,遞迴探勘至找不 到更大的常見鄰近子圖樣式為止。 本論文實作 gSFNP_Mine 以及同樣用來探勘常見鄰近子圖樣式的 FNP _Mining[4]演算法,以實驗評估改變各控制參數對兩個演算法執行效率的影響。 8.

(14) 由實驗結果顯示,對固定大小的單一個圖型網絡探勘常見鄰近子圖樣式時, gSFNP_Mine 較 FNP_Mining 達到更好的執行效率。. 1.4 論文架構 本論文以下章節內容簡介如下:第二章為相關文獻探討,第三章為論文的問 題及相關名詞定義,第四章說明論文方法,第五章以平行框架 MapReduce 實作常 見鄰近樣式探勘演算法、第六章實驗分析、第七章結論及未來發展方向。. 9.

(15) 第二章 文獻探討 圖型探勘演算法在資料探勘領域上已經發展多年,此外,許多專家開始研究 如何利用樣式做分類、聚落分析研究,或採平行處理圖型演算法。以下將依序介 紹相關研究,分成圖型探勘技術簡介、多筆圖型探勘演算法、單一圖型探勘演算 法、圖型探勘平行技術。. 2.1 圖型探勘技術簡介 圖型探勘演算法大致可分為處理多筆圖型[2,8,9,10,11,18,19]或單筆圖型[1,3, 4,7, 12,13],而探勘過程的挑戰是必須解決樣式列舉及圖型樣式可能有同構所造成 的 NP 完全問題,為了解決這些問題,造成圖型探勘的運算時間長。檢查圖型同 構需花費大量時間比對節點、連結邊及其標示。另外,由候選樣式列舉過程,通 常從小的子圖樣式以延伸或組合的方式成長,然後記錄比對符合該樣式之圖型及 節點位置並計數支持度。因此過去有許多研究在探討如何對圖型表示法進行標準 化以用於快速檢查是否有圖型同構的情況發生。此外,可採用向下包含特性避免 產生不常見的子圖候選樣式,以縮短圖型演算法的執行時間。而近年有研究開始 對圖型探勘採用平行技術來縮短演算法執行時間以及解決硬體不足的限制。另外, 也有研究者利用圖型探勘的常見子圖樣式做為分類、分群的特徵依據,或考慮圖 型的其他資訊、特性,比如經由常見樣式來分類及預測樣式的特性及[1,2]標示[5]. 10.

(16) 或含時間資訊的社群網路[11]等等。. 2.2 多筆圖型探勘常見子圖樣式技術 從以往的研究整理出來,圖型探勘拜訪圖的方式有廣度優先順序(BFS)以及深 度優先順序(DFS)兩種。多筆圖型探勘演算法採用 BFS 的圖型探勘演算法有 AGM [9]以及 FSG[10],而其他的 gSpan[19]、FFSM[8]、GASTON[18]皆採用 DFS。 因為 BFS 以起點開始走訪圖型,必須收集該點的鄰邊而形成的子圖候選樣式 集,接著收集大於門檻值之常見子圖樣式集,並從該集合取出任兩兩大小為 k-1 常見子圖樣式組合成大小為 k 的子圖候選樣式,每次成長時加入一個節點或一條 邊產生下一級的候選子圖樣式。比如 AGM 以加入節點的方式產生 k 的子圖候選 樣式集,而 FSG 則以加入邊的方式,因此 AGM 使子圖候選樣式產生的個數多於 FSG,以致於處理時間和儲存空間也相對多。另外 BFS 的做法甚至可能產生不存 在於多筆圖型資料中的子圖樣式,但優點是可從前一層常見子圖樣式快速列舉出 下一層可能組合的子圖候選樣式以及做交集運算支持度。然而以 DFS 走訪圖型時, 每次列舉子圖候選樣式集必須從多筆圖型資料中參考常見子圖樣式的位置,由大 小為 k-1 的常見子圖樣式經由鄰點,收集並且產生大小為 k 的子圖候選樣式,故 產生的子圖候選樣式較於 BFS 更少,因此自 gSpan 之後的圖型探勘多採 DFS 方 式走訪圖型結構。 另外還須注意的是圖型支持度運算,而支持度若大於使用者設定之門檻值則 11.

(17) 視為常見子圖樣式,可被斷定為是否重要結構或常見結構。另外,設定門檻值的 用意為刪除不常見之子圖樣式以減少搜尋空間,因此減少了計算時間並且符合使 用者之研究目的。但有一問題發生於產生子圖候選樣式時,在計算支持度前,圖 型所產生的子圖候選樣式可能重複列舉,因此檢查圖型同構的機制一直為以往的 圖型探勘重要議題,其解決方式為不外乎對子圖樣式做特殊編碼,加入避免重複 列舉的機制並檢查兩圖型編碼字串是否相同。 比如 gSpan 演算法[19](graph-based Substructure pattern) ,為了減少重複列舉 子圖候選樣式,它先以 DFS 拜訪所有圖型並且編碼,接著定義一個 DFS 字典編 纂(DFS Lexicographic Order)的機制計算出圖型的最小 DFS 編碼,因此可以藉由兩 兩圖型的最小 DFS 編碼來比對字串是否相同。但此方法無法避免全部的圖型同構, 有少部分的圖型同構必須從 DFS 刪除機制來避免,每次從最右邊的路徑延伸出子 圖候選樣式,延伸出去的鄰邊加入後不得違反最小 DFS 編碼的定義。另外,gSpan 作法在儲存候選樣式時只儲存每一個圖型編號,使得下一個鄰接邊無法確切得知。 而 gSpan 其主要貢獻來自於第一個使用深度優先的方式應用於圖型探勘,同時也 創造獨特的編碼方式來避免大量的圖型同構檢查,其深度優先搜尋圖型標準化的 機制避免了剩下例外的圖型同構問題。 FFSM[8]利用上/下三角矩陣來儲存圖型,此方式可節省儲存空間,並由左到 右、上到下產生出矩陣編碼,同時根據字典編纂順序(Lexicographic Order),使得 圖型同構會具有相同的矩陣編碼,其稱為 CAM (Canonical Adjacency Matrix)。. 12.

(18) FFSM 成長方式有兩種,其一是以往由兩兩圖型具有相同性質的 n-1 條邊組合方 式,另一個延伸方式是補足因為組合所無法產生的圖型樣式,因此增加了延伸的 方式,其延伸的方式需要在 CAM 的最後一個點經過成長步驟,FFSM 會對已產 生的圖型樣式做重新排列,確保成長過程中不需要圖型同構的檢查。也因為 FFSM 採用了資訊內嵌的方式來記錄圖型拜訪的資訊,這是為了加速組合及延伸的成長 方式,能夠輕易做交集運算,但要不停更新內嵌的資訊。 GASTON[18]利用內嵌資訊的方式儲存所有列舉圖型樣式,以減少子圖同構 的檢查,其效率遠比上述方法更好,原因於 GASTON 分為三個階段(路徑、樹、 以及包含迴圈的圖型)各自處理,在前面兩個階段要進行重複列舉的檢查比一般圖 型探勘要簡單且快速,在最後圖型的檢查時,也只需考慮會形成迴圈之子圖樣式, 並依照自定義順序加入,更可以減少圖型同構的檢查,最後儲存時檢查圖型同構 是否重複,將重複的部分刪除。簡而言之,將圖型成長樣式分為這三個區塊,將 每個區塊各自的問題最佳化解決,無非使 GASTON 成為有效率的圖型探勘演算 法。. 13.

(19) 2.3 單一圖型常見子圖樣式探勘技術 如第一章研究目的所說,要從單筆圖型計算子圖候選樣式的支持度時,原有 多筆圖型的支持度定義無法直接使用,因此直覺地改成計算該子圖候選樣式在單 筆圖型中出現的次數。然而這樣並不符合向下包含特性(DCP),因此 Kuramochi[12] 重新定義支持度,為了滿足向下包含特性,該篇研究採取最大覆蓋邊來預防支持 度重複計算的問題,但這樣的做法雖滿足了 DCP,卻無法解釋支持度的意義,因 此有人研究定義出新的樣式以解決支持度無法解釋的問題。 Han 提出新的樣式定義常見鄰近樣式[4] (frequent neighborhood pattern),考慮 具方向性的單筆圖型網絡,它能消除限制在單筆圖型中的向下包含特性,也同樣 地能表達出圖型中重要的語義及樣式。鄰近樣式表示為一個節點鄰近的特定拓樸 結構,其每一點均有不同型態,如果該樣式大於設定門檻值即視為該圖中的常見 鄰近樣式。其支持度定義為子圖樣式中有一個固定點,其他點做為識別樣式的條 件,當固定點對應至單筆圖型網絡中符合型態的特定點時,再檢查其鄰近的結構 是否跟此子圖樣式的其他點能夠完全對應,對應包含節點跟連結邊的型態。此外, 因為定義了新的樣式及其支持度計算,雖使得演算法複雜度變高,卻符合向下包 含特性及支持度的重要語義。 Leung[13]針對社群網路提出一個新的樣式定義為連結資訊樣式(LF-pattern), 考慮圖型資料為社群網路時,其連結關係可能包含時間資訊以及方向性,,其樣 式支持度類似於常見鄰近樣式的算法,差別於計算樣式時有一邊為起終點,固定. 14.

(20) 點為起點後依節點標示以及連結邊標示(或時間順序)比對,即可找出起點至終點 包含時間資訊的鄰近樣式。 關於單一圖型探勘的做法也如前述所說,包含 BFS 跟 DFS 拜訪,從單筆圖 型列舉子圖候選樣式時也不例外。Kuramochi[12]同時提出兩種的演算法來找出常 見子圖,一為 HSIGRAM(BFS)以及 VSIGRAM(DFS),故列舉子圖候選樣式時前 者採兩兩大小相同的常見子圖組合出更大的子圖候選樣式,後者採樣式增長方式 延長出更大的子圖候選樣式。比如 Han 探勘常見鄰近樣式的做法採 Apriori Algorithm 及 BFS 方式組合,而這樣的組合可能會列舉出不必要的子圖候選樣式, 另外也因組合的次數過多導致處理時間太長。Leung 所提出的 LF 樣式是改進 gSpan 的作法,在字典編纂機制裡加入方向性的考慮,在演算法計算支持度以及 列舉子圖候選樣式,多了大量條件考慮時間資訊的先後順序以檢查圖型同構。M. Elseidy 等人提出 GRAMI 演算法[3],先以 gSpan 的方式列舉出所有子圖樣式後, 再計算符合該樣式之支持度。它們提出一個啟發式演算法的模型 CSP(constraint satisfaction problem)計算子圖的支持度,其演算法加入多種策略找出常見子圖時, 效率相當快速。 因此我們在多篇研究裡發現,很多作法都是採 DFS 方法探勘圖型的 lattic, 尤以 gSpan 的編碼機制擴充較為彈性,因字典編纂順序先將節點以及連結邊做排 序,在增長時不允許最右邊的成長優先於其他邊以防止圖型同構的機制,因此本 篇研究希望擴展 gSpan 演算法以適用於探勘常見鄰近樣式。. 15.

(21) 2.4 常見子圖樣式平行探勘技術 以往的圖型探勘演算法時間沒有完全使用硬體資源的效能,而 Menini 等人 [17]提出對 gSpan 平行架構來縮短圖型探勘的執行時間,由於實作仍然為單一工 作站,將原來圖型探勘的工作切成數個分給不同的執行緒,利用多執行緒以及同 步共享記憶體資源來發揮工作站的最大效能。 MapReduce 提供一個可發展平行程式的架構,可方便使用者在運算中運用磁 碟儲存空間,解決記憶體不足的問題。Liu 等人針對單筆圖型探勘提出 MRPF 演 算法[15],同樣採用兩回合的 MapReduce 來探勘圖型資料,一開始分析圖型資料 並產生三個資訊表,分為節點的鄰接資訊(Adj_Table)、比對符合的樣式集合 (Matched_Set)、候選樣式串列(Pattern_list),而每一個點都會有 Adj_Table 並且使 用於圖型成長時,用來偵測圖型所有列舉樣式。第一回合 Mapper 階段可以利用 鄰接資訊使樣式增長為 k 子圖樣式,在 Rducer 時消除重複列舉的樣式,第二回合 再計算產生的子圖樣式支持度,重複步驟直到常見子圖樣式被找到。 Hill 等人以 MapReduce 架構應用於多筆圖型探勘演算法的常見子圖樣式探勘 問題[6],同樣也採用兩回合的 MapReduce,第一回合收集大小為 k-1 的子圖樣式, 並延伸長出大小為 k 的子圖候選樣式,下一回合計算支持度並移除不常見的子圖 樣式,重複步驟直至找出所有的常見子圖樣式。 Lu 等人發展出 MRFSE 系統[16],以 MapReduce 架構實作於多筆圖型資料的 常見子圖樣式探勘。在第 k 個回合,一個 Mapper 的工作會取資料庫 G 中一個圖. 16.

(22) 型並列舉其中大小為 k 的子圖候選樣式,每個 Reducer 工作則群聚每個子圖候選 樣式所有出現的圖型並計算其支持度。另外,MRFSE 也記錄了一個圖型結構 G 中所有常見子圖樣式比對到的出現位置,所以不需要進行同構檢查,但會耗費額 外的記憶體需求。 Lin[14]考慮從多筆圖型探勘常見子圖樣式,提出一個兩步驟的 MapReduce 計算模型:篩選以及修正兩個步驟。方法首先將圖型結構集合先分割至各工作站, 而每個工作站的篩選步驟在被分配到的圖型結構中找尋區域常見子圖樣式,接著 將這些子圖樣式的聯集作為修正步驟的輸入。每個子圖候選樣式會在各資料中檢 查其出現次數,最後加總算出支持度找出整體的常見子圖樣式。該論文運用統計 模型預測哪些區域常見子圖樣式可能為整體常見,提出在此比對子圖候選樣式時 避免重複計算的技巧,以及簡易的圖型壓縮方法降低工作站間的傳輸成本。. 17.

(23) 第三章 問題及相關名詞定義 3.1 問題定義 本論文所探討的問題是給予一個具標示且有方向性的圖型網絡 G,從中找出 G 中所有的常見鄰近子圖樣式(Frequenct Neighborhood Pattern)及支持度計數值 (Support Count),其定義如下: 【定義 3.1】 具標示的圖型網絡(Labeled Graph) 一個具標示的有向圖型可被表示為由五種元素所構成,G = 〈V , LV , E , ∑V , ∑E〉,其中: . V 表示所 G 中所有的節點集合。. . ∑V , ∑E 分別表示節點標示集合以及連結邊關係之標示集合。. . ∀(v, l) ∈ LV , LV ⊆ V × ∑V,代表 G 的每個節點透過一個函數 lv 對應到 的節點標示關係。. . E ⊆ V × V × ∑E,代表 G 上所有的邊集合,記錄兩端點,及該邊透過一 個函數 le 對應到的邊標示及方向關係。. 此外,本研究限制,在兩個節點間可存在多條標示不同的連結邊,表示同時 存在不同的連結關係,而且節點不允許和自己具有連接邊。. 【定義 3.2】 鄰近子圖樣式(Neighborhood Pattern) 一個鄰近子圖樣式 P 是一個具標示的圖型 G’,且具有一個固定起始節點 VP , 18.

(24) 其中 VP  G’.V,P 表示為(G’, VP)。. 【定義 3.3】 鄰近子圖樣式(Neighborhood Pattern)包含 給定一個圖型 G 及 P=(G’, VP),若滿足以下定義,則稱 G 包含鄰近子圖樣式 P。 (1) 存在一個一對一函式(one to one function)ƒ, ƒ:G.V→G′.V,且對所有 v ∈ G′ . V, G.lv(v) = G’.lv (ƒ(v))。 (2)∀(vi,vj,le(vi,vj)) ∈ G’.E,(ƒ(vi),ƒ(vj),le(ƒ(vi,vj))) ∈ G.E。. 【定義 3.3】 固定節點子圖同構(Pivoted Subgraph Isomorphism) 若兩鄰近子圖樣式 P1 =( G p1,Vp1), P =( G p2,Vp2,)具有以下關係,則稱兩個樣式 為固定節點子圖同構(Pivoted Subgraph Isomorphism)。存在一個一對一映射函數 ƒ 形成 ƒ: Gp1.V → Gp2.V,使得 (1) ∀v ∈ Gp1.V, Gp1.lv (v) = Gp2.lv(f(v))。 (2) ∀ (vi,vj, Gp1.le (vi,vj)) ∈ Gp1.E  i≠j , (ƒ (vi), ƒ (vj), Gp2. le (ƒ (vi,vj))) ∈ Gp2.E。 (3)Gp1.le (Vp1) = Gp2.le (Vp2)。. 19.

(25) 【定義 3.4】支持度 給定一個具標示的圖型 G,及一個鄰近子圖樣式 P。G 比對到 P 且具不同固 定節點之節點個數,稱為 P 在 G 中的支持度計數值(support count),以 countG(P) 表示。而 P 在圖型 G 中的支持度(support),則是以 P 的支持度技數值除以 G 中的 總點數計算得知,以 supG(P)表示。. 【定義 3.5】常見鄰近子圖樣式 給定一個具標示的圖型 G,並指定一個最小支持度(minimum support)門檻值, 以 min_sup 表示。若鄰近子圖樣式 P 在 G 中的支持度大於或等於 min_sup,則稱 P 為 G 中的一個常見鄰近子圖樣式(frequent neighborhood pattern)。. 3.2 鄰近子圖樣式編碼 本論文以 gSpan[19]中提出的深先搜尋編碼(DFS code)作為基礎,修改為常見 鄰近子圖樣式的編碼,因此以下將說明鄰近子圖樣式之編碼方式。. 【定義 3.6】邊編碼(DFS code) 鄰近子圖樣式 P 中每個邊 e,若其兩個頂點為 vi,vj,其中 i 及 j 表示頂點的列 舉編號,則此邊的編碼 ε(e)表示為(i, j, lv(vi), le(vi,vj), lv(vj), d (vi,vj)),其中 d(vi,vj)表 示 vi 至 vj 的方向性。 20.

(26) 【範例 3.1】 邊編碼範例 如圖 3(a)所示,該圖固定節點為 A 鄰接一條 P 點,因此邊編碼若從節點 0 到節點 1 的邊編碼為(0,1,A,w,P,0)。反之,若從節點 1 邊編碼至節點 0,則表示 (1,0,P,w,A,1)。. (a). (b). (c). 圖 3 定義範例圖 【定義 3.7】邊編碼大小關係 給定兩條邊 e1 及 e2,邊 e1 的兩頂點為 vi1 及 vj1,且 e2 的兩頂點為 vi2 及 vj2, 因此 e1 的編碼為(i1, j1, lv(vi1), le(vi1,vj1), lv(vj1), de(vi1,vj1)) , e2 為(i2,j2, lv(vi2), le(vi2,vj2), l(vj2),d(vi2,vj2)),由以下條件分出邊標示編碼大小關係。 e1 的標示編碼小於 e2 的條件如下: 1.. 起點標示必須 lv(vi1)<lv(vi2). 2.. lv(vi1)=lv(vi2),且 le(vi1,vj1)< le(vi2,vj2),或. 3.. lv (vi1)=lv (vi2),le(vi1,vj1)= le(vi2,vj2),且 lv(vj1)< lv(vj2),或. 4.. lv(vi1)= lv (vi2),le (vi1,vj1)= le (vi2,vj2),lv (vj1)= lv (vj2),且 d(vi1,vj1)< d(vi2,vj2). 21.

(27) 【定義 3.8】深先搜尋編碼 (DFS Code) 給定一個鄰近子圖樣式 P(P,Vp),其深先搜尋編碼是從 Vp 為起始節點(頂點 0), 進行圖型深先搜尋的過程中,若目前走訪節點 Vk,且 Vk 有多條連接邊,則挑選 未走訪過的邊中具最小標示編碼者為下一走訪邊,直至所有邊都能夠完成邊編碼 即為其深先搜尋編碼。. 【範例 3.2】 如圖 3(b)所示,其深先搜尋編碼為(0,1,A,w,P,0)(1,2,P,c,P,1)(2,0,P,w,A,1) 。. 【定義 3.9】向前邊(forward edge)及返回邊(backward edge) 在鄰近子圖樣式透過圖型成長列舉的過程,當頂點 i 選擇下一走訪邊之頂點 j,若該頂點之列舉編號 j<i,則稱該走訪邊為一個返回邊。反之,若 j>i,稱此編 為向前邊。. 【範例 3.3】 以圖 3(b),(c)為例,圖 3(a)編碼中 (2,0, P,w,A,←)為一個返回邊在圖 3(b)的 編碼中(2,0, P,w,A,←)也是一個返回邊,其餘邊皆是向前邊。. 22.

(28) 【定義 3.10】相等邊 一個圖型中由同一節點連出的多個邊,若這些邊的標示編碼皆相同,則稱這 些邊為相等邊。. 【範例 3.4】 如圖 3(b)所示中,由節點標號 0 連出去的邊(0,1)與(0,2),其標示均相同,因 此兩個邊稱為相等邊。. 【定義 3.11】最小深先搜尋編碼(minimum DFS Code) 一個圖型中若節點具有相等邊,則其產生的深先搜尋編碼 就可能不唯一。一 個圖型的多個深先搜尋編碼,可依深先搜尋編碼中的邊順序依序比較邊編碼,比 到具有較小的邊編碼,則該深先搜尋編碼較小。一個圖型的深先搜尋編碼若不存 在其他深先搜尋編碼比它更小,則稱為其最小深先搜尋編碼(minimum DFS Code)。 【範例 3.5】 圖 3(b)和圖 3(c)為樣式圖型同構,因為從固定節點指出的兩條邊為相等邊, 因此依圖 3(c)的節點順序拜訪,可得到深先搜尋編碼為(0,1,A,w,P,→)(1,2,P,c,P, →)(2,0, P,w,A,←),比圖 3(b)的節點順序拜訪得到更小的深先搜尋編碼。此深先 搜尋編碼亦為該圖的最小深先搜尋編碼。. 23.

(29) 3.3 圖型特徵儲存結構 在本論文中,為了有效率檢查鄰近子圖樣式包含於圖形中的對應節點,以方 便後續的支持度計算,並避免對圖型中的邊重複拜訪,我們採用一個內嵌資訊結 構將所需的資訊記錄在資料物件中,以下將描述圖型結構與內嵌資訊儲存結構之 處理過程。給定的具標示圖型結構(如圖 4),我們會將其以鄰接串列(Adjacency Lists)的方式記錄。. 圖 4 單一圖型範例 【定義 3.12】鄰邊序列(Edge List) 在圖型鄰接串列(圖 5)中,對每個節點記錄該節點的所有鄰邊,我們會將這 些鄰邊依據標記的大小排序記錄成一個串列,稱為一個節點 v 的鄰邊序列,以 v.LA 表示。. 圖 5 鄰邊序列. 24.

(30) 其中邊的表示格式如下:(i1,j1,lv(vi1),le(vi1,vj1),lv(vj1),d(vi1,vj1))。 同一節點之鄰邊,依據定義 3.7 的邊編碼大小關係,由小到大儲存在串列中。 若有無法由定義 3.7 決定邊大小關係時,即為相等邊,則需由鄰接點編號大小決 定順序。. 【範例 3.6】鄰邊串列排序 以圖 4 的 P1 節點為例,其鄰邊排序透過上面的規則排序,由於起始節點均 為 P1,因此在比較過程僅需依序比較邊標示 le(vi,vj)、鄰接點標示 le(vj)、方向標示, 鄰接點編號 j。因此 P1 的最小鄰邊為(P1,a,C1,0),接下來(P1,c,P2,0)及(P1,c,P3,0)無法 由定義 3.7 決定順序時,就利用鄰接點編號判定大小,因此(P1,c,P2,0)小於(P1,c,P3,0), 而(P1,w,A1,1)在邊標示 w 大於前面的鄰接邊,最後(P1,w,A2,1)因 A2 節點編號大於 A1,因此(P1,w,A2,1)大於(P1,w,A1,1)。. 25.

(31) 第四章 鄰近樣式圖型探勘演算法 本論文利用類似 gSpan[19]深先搜尋的機制進行探勘,當找出一個常見 k-鄰近 子圖樣式後,可找出接下來可增加的邊樣式,列舉出多一條邊的候選鄰近子圖樣 式。若無法列舉出更大的候選鄰近子圖樣式,則回溯到其父樣式,擴展產生其他 兄弟樣式。本章以下章節將詳細說明鄰近子圖樣式列舉方法,避免樣式重覆列舉 方法,以及鄰近子圖樣式探勘完整演算法。. 4.1 鄰近子圖樣式列舉方法 (1) 建立鄰近節點樣式 子圖樣式列舉一開始要先列舉出各種只包含固定節點的鄰近節點樣式,此步 驟是將圖型中所有節點讀過一次,並且記錄相異標記的節點樣式有幾種,符合該 樣式的節點會記錄在 Matched_Set 表中。接著檢查其支持度是否大於常見之門檻 值,若是則從樣式比對到節點的資訊進行樣式圖型成長。. 【範例 4.1】建立常見鄰近節點樣式 根據上一章圖 5 所示的圖型特徵儲存結構內容,先讀過所有節點,可得出具 相異標記的固定節點鄰近子圖樣式,我們會儲存對應節點的比對子圖結構資料。 比對子圖結構資料用來記錄一個鄰近子圖樣式對應到原圖中的子圖,包含(1)拜訪 過的邊記錄表(Visited Edge Table)、(2)可擴展鄰邊串列堆疊(StackNeighborhood)、. 26.

(32) 以及(3)節點編號表(NodeID Table)。對於 G 中每個比對到固定節點標示的節點 Vm, (1) Vm 之鄰邊串列索引會被存入 StackNeighborhood 中,(2) Vm 對應到子圖中的 節點編號 0 存入 Node ID Table,以物件方式儲存在鄰近樣式對應表的 Matched_Set 中。 圖 6 所示的鄰近樣式對應表是一個全域的雜湊表,Neighoborhood Pattern 為 此表的 key 值並以 DFS code 表示每個鄰近子圖樣式,而 value 值為一個儲存串列 空間稱之為 Matched_Set。而 Matched_Set 中每一索引指向該鄰近樣式對應的比對 子圖結構資料。. prune 圖 6 鄰近樣式對應表 根據 Matched_Set 中儲存的比對子圖結構資料,可從對應圖型之固定節點計 算出每個鄰近樣式的支持度,並砍除支持度未滿最小支持度門檻值的鄰近樣式。 以圖 6 為例,總節點數為 6,且假設支持度為 0.2,在一開始讀過所有節點, 我們便可找出固定起點的鄰近樣式分別為 P、A、C 三種標記,接著計算鄰近樣式 的支持度。固定節點為 P 的鄰近樣式支持度計數值為 3,表示該樣式有 3 個相異 節點,接著除以總節點數即為支持度 0.5、固定節點為 A 的鄰近樣式支持度為 0.33、 固定節點為 C 的鄰近樣式支持度為 0.166,因此砍除不滿足支持度之鄰近樣式。. 27.

(33) 而滿足支持度的常見鄰近樣式,會以其 DFS code 儲存到一個暫存佇列 Queue, 接著以將該樣式之 DFS code 做為引數呼叫圖型成長遞迴模組,表示以該常見鄰 近節點樣式進行圖型成長,列舉出更大的鄰近子圖樣式。 StackNeighborhood 用來記錄目前進行子圖圖型成長接下來可加入的邊,例如 (P1,0)表示 P1 節點之鄰邊串列 L 上表示的邊為接下來可加入的邊,而 0 表示 L 上 之索引位置,表示該鄰邊串列 L 索引位置 0 為下一條可加入的邊。Node ID Table 中記錄目前子圖中的節點編號,亦表示子圖圖型成長過程加入節點的順序。Node ID Table 的資訊可用來在子圖圖型成長過程,檢查節點或邊是否已被加入過,可 判別加入邊是否為返回邊,亦可方便對新增邊 e 做樣式邊編碼並更新 DFS code。. (2)子圖樣式圖型成長: 當遞迴模組收到從 Queue 中一個常見鄰近節點樣式 P 的 DFS code,並從鄰近 樣式對應表中取得該 DFS code 所對應的 Matched_Set,接著從 Matched_Set 中取 出一個比對到的子圖和其圖型結構資料進行樣式圖型成長。每次執行樣式圖型成 長,會先從堆疊空間 StackNeighborhood 取出堆疊 Top 指標所指的鄰邊串列資訊, 該資訊表示一個節點以及指向鄰邊串列指向位置,接著便取出該節點之鄰邊串列 L 並指向位置開始執行,首先複製當前的圖型結構資料(在此稱為父圖型樣式), 從串列上的邊檢查接下來可用來擴展子圖樣式的邊。 串列上的邊 e 若出現在 Visited Edge Table 中,即表示該邊已經在子圖中,或. 28.

(34) 表示為了避免產生圖型同構子圖而不允許加入該邊。否則將 e 加入至 Visited Edge Table 中,然後檢查該邊上是否有原來子圖未包含的新節點出現。若 e 的兩個端點 結點皆已出現在 NodeID Table 中,則表示該邊為返回邊;反之,在 NodeID Table 中加入一個節點編號,對應到因新增邊 e 而增加的新節點 v,並將新節點 v 的鄰 邊串列資訊 v.LA 存入 StackNeighborhood 中。但須注意的是 e 所屬的鄰邊串列 L 中,後面若還有其他未拜訪過的邊,則在將 v.LA 串列資訊存入 StackNeighborhood 前,更新鄰邊串列 L 的指向位置資訊後存回 StackNeighborhood 中。 對於剛才新加入邊 e 所產生的鄰近子樣式 P’,其 DFS code 為其父樣式 P 的 DFS code 再加上 e 的邊編碼。然後記錄 P’比對到圖型中的圖型結構資料加入至 Matched_Set,以 P’的 DFS 為 key 值-存入鄰近樣式對應表中。若鄰近樣式對應表 先 前 已 經 有 產 生 相 同 的 鄰 近 子 圖 樣 式 之 DFS code , 則 會 先 取 出 先 前 的 Matched_Set 增加新比對到的圖型結構資料回存到鄰近樣式對應表。 完成上述處理,可對鄰近子圖樣式 P 產生多增加一條邊的候選子圖樣式 P’, 但 P 仍可繼續產生其他候選子圖樣式,因此複製還未加入 e 前的圖型結構資料, 繼續拜訪 L 中還未被加入過的邊。若鄰邊串列 L 上所有的邊全部都被加入過子圖 樣式 P 產生候選子圖樣式,則繼續從子圖型樣式 P 的 StackNeighborhood 取出堆 疊的第二條鄰邊串列,繼續產生其他的候選子圖樣式,直至 StackNeighborhood 中為空,即表示子圖樣式 P 目前比對到的子圖位置已增長出所有候選子圖樣式。 接下來從 Matched_Set 中取出第二個比對到的子圖及其圖型結構資訊,重複上述. 29.

(35) 處理步驟,直至 Matched_Set 中所有的子圖對應圖皆完成圖型成長。 當列舉出樣式 P 的所有子圖樣式後,P 是這些子圖樣式的父圖樣式,接下來 會依據產生這些候選子圖樣式的順序繼續遞迴進行子圖樣式圖型成長。在對一個 子圖樣式 P1’進行圖型成長前,要先檢查子樣式 P1’的 DFS code 是否為該對應圖的 minimum DFS code,若非最小 DFS 編碼表示和其他子圖為圖形同構,因此砍除該 DFS code 在對應表所對應的圖型資訊。否則,從鄰近樣式對應表取出其比對到的 Matched_Set,計算其支持度是否大於門檻值,大於門檻值者表示是一個常見鄰近 子樣式,因此 P1’繼續遞迴進行下一層的子圖圖型成長。. 【範例 4.2】子圖樣式圖型成長範例. 圖 7 鄰近節點樣式 P1 圖型資訊結構 如圖 7 範例所示的處理狀態是從 Queue 中取出單一固定節點標示為’P’的常 見鄰近節點樣式 P 節點編碼(0,_,P,_,_,_) ,在進行子圖樣式圖型成長模組後,會從 鄰近樣式對應表取出 P 對應的 Matched_Set,再從 Matched_Set 取出一筆比對到固 定節點 P 的 P1 節點,其對應記錄的圖型結構資料。 首先從鄰邊串列堆疊 StackNeighborhood 取出 Top 指標的(P1,0)(如圖 8 之 Step 1),因此從圖 5 取出 P1 的鄰邊串列以 L 表示,而 0 表示指向 L 的索引位置 0,. 30.

(36) 因此加入所指的邊 e(P1,a,C1,0)至 Visited Edge Table(如圖 8 之 Step 2),並更新 L 的位置。而更新的依據是比較與當前索引位置的下一條邊(即 e 在 L 的下一個位置) 是 否 為 相 異 樣 式 邊 , 若 是 則 將 索 引 位 置 增 長 為 1 , 再 存 入 (P1,1) 至 StackNeighborhood 中,此情況下 e 與下一條邊為相等邊,因此仍保持串列中與 e 相等邊之起始位置即(P1,0),存入(P1,0)至 StackNeighborhood。 檢查新加入邊 e(P1,a,C1,0)的端點發現 C1 為新節點,將 C1 加入至 Node ID Table 並將節點編號加 1,因此 C1 會對應到子圖節點編號 1(如圖 8 step 3),C1 之 鄰邊序列資訊(C1,0)隨之存入 StackNeighborhood 中(如圖 8 step 4)。接著(P1,a,C1,1) 透過 Node ID Table 的節點對應編號產生邊編碼(0,1,P,a,C,1),加至常見鄰近節點 樣式 P 的 DFS code,因此候選子圖樣式 P’之 DFS code 為(0,_,P,_,_,_)/ (0,1,P,a,C,1)。 接著以 P’的 DFS code 為 key 值,另外再將對應 P’之 Matched_Set 圖型結構資訊 為 value 值,以<key-value>方式將 P’的資訊存入鄰近樣式對應表(如圖 11 第 4 個 樣式),至此就完成一個子圖圖型成長的動作。圖 10 顯示 gSFNP 列舉流程中由 鄰近節點樣式 P 共可長出四個子樣式,上述過程會長出最左邊子樣式。 而 L 中仍有其他邊可加入 P 產生候選子圖樣式,因此先複製 P1 的圖型結構 資料(如圖 7),加入 L 的第二條邊(P1,c,P2,0),依照上述步驟可產生 DFS code (0,_,P,_,_,_)/(0,1,P,c,P,0)及對應圖的圖型結構,存至鄰近樣式對應表(如圖 11 第 5 個樣式),對應的候選子圖樣式如圖 10 中 P 的第二個子樣式。依序進行此步驟將 節點 P1 的鄰接串列 L 都拜訪過一次後,將儲存 P1 的索引值從圖 7 所示的. 31.

(37) StackNeighborhood 中移除後如圖 9,由於沒有其他節點的索引值資訊儲存在 StackNeighborhood 中,表示從比對鄰近節點樣式 P 的節點 P1 不能再加入其他邊 產生其他候選子圖樣式 P’。 完成節點 P1 能夠長出的樣式後,接著從 Matched_Set 中取出下一個對應節點 P2 及其圖型結構資料,接下來按上述步驟繼續產生 P 的候選子圖樣式,直到 Matched_Set 中沒有可成長的對應圖為止。當 P 所能產生的候選子圖皆被找出時, 根據最小支持度計數值 2 刪除不常見的鄰近子圖樣式(圖 10 叉記號及圖 11 線條 刪除部分),即產生如圖 10 列出的四個子樣式結果及如圖 11 所示之鄰近樣式對 應表。這表示由樣式 P(在此為包含單一節點標示為 P 的樣式)經一次圖型成長能 產生的候選子圖樣式已完全列舉完成。. Step.1 Step.2 Step.4. Step.3. 圖 8 子圖圖型成長更新圖型結構. 圖 9 P1 圖型資訊結構移除索引後. 32.

(38) 圖 10 gSFNP 列舉流程. 圖 11 鄰近節點樣式 P 子圖圖型成長後的鄰近樣式對應表內容. 33.

(39) 4.2 避免樣式重覆列舉方法. 圖 12 圖型成長無法避免的循環性同構 依 4.1 所描述之子圖樣式圖型成長方法,本研究利用類似 gSpan[19]深先搜尋 的機制進行探勘,產生所有的常見鄰近子圖樣式。首先列出具相同固定節點的常 見 1-鄰近子圖樣式,再一一對常見 1-鄰近子圖樣式根據其節點的相鄰邊圖形成長 出候選 2-鄰近子圖樣式,從 k-候選鄰近子圖樣式(k2)中找出常見 k-鄰近子圖樣 式,再繼續用圖型成長產生 k+1-候選鄰近子圖樣式,每個候選樣式都是當該常見 k-子圖的子圖樣式中找不到常見 k+1-鄰近子圖樣式時,則再從此 k-子圖之兄弟樣 式往下進行圖型成長探勘,以此類推,這是本論文方法所採用的深先搜尋順序。 透過子圖樣式圖型成長過程,若圖型樣式為一條路徑(Path)則不會產生圖型同構 的樣式,但若形成樹結構(Tree)或是有返回邊的圖型(Graph)則可能產生圖型同 構的子圖樣式。因此我們運用字典編纂順序控制子圖樣式圖型成長,結合最小 DFS 34.

(40) 編碼檢查,以避免產生圖型同構圖型。 首先介紹圖型同構會發生於兩種情形下:(1)不具返回邊的樣式重覆列舉(如 圖 13 所示),(2) 具返回邊的樣式重覆列舉(如圖 12 所圈起方框所示)。第一種 情況可透過字典編纂順序來避免減少發生同構的情形,第二種則需要以其對應最 小 DFS 編碼來檢查是否發生圖型同構。所謂不具返回邊的樣式重覆列舉發生在樣 式邊沒有排序,因此產生相異的樣式邊列舉順序但實際鄰近子圖樣式相同。而具 返回邊的樣式重覆列舉則是因圖型成長(如圖 12 兩正方形所標示之圖型),新增返 回邊使得圖型產生迴圈(Cycle)而造成的,簡稱循環性圖型同構。. 圖 13 不具返回邊之圖型同構 第一種情況我們運用字典編纂順序控制子圖樣式圖型成長來避免:在樣式新 增一條邊時,可透過比較樣式邊標示來避免產生圖型同構樣式。根據圖 14, <0,1,P,a,C,1>的邊標示順序小於<0,1,P,c,P,0>,因此加入<0,1,P,a,C,1>邊的. 35.

(41) 子 圖 樣 式 可 再 加 入 邊 <0,2,P,c,P,0> 產 生 圖 13 左 下 的 樣 式 圖 。 但 先 加 入 <0,1,P,c,P,0>邊的子圖樣式不可加入邊<0,2, P,a,C,1>,即可防止發生此種子 圖樣式圖型同構的情況。 部分的循環性圖型同構也可因此而避免(例如圖 12 兩方框內箭頭所指的圖 型),但例如圖 12 之兩方框標示圖產生的圖型同構仍無法避免。由於固定節點 P 之鄰邊有兩條相等邊,因無法以字典編纂順序定出拜訪排序,因此在此處便需要 最小 DFS 編碼來對圖型定義圖型標準型樣,若檢查表示圖型之編碼不為最小編碼 即該圖型造成圖型同構,並使該圖型被刪減,因此可減少圖型同構以及儲存空間 之使用。 以下將說明如何在探勘過程避免找出圖型同構子圖的作法,在子圖圖型成長 每次從父圖型樣式成長加入新的一條邊,同一節點中因成長而加入的邊只能比該 節點已加入圖型中的邊順序大。 因此,在 4.1 介紹的子圖圖型成長過程,鄰接串 列的索引往後遞移指向新的邊做為加入邊時,需檢查索引位置前一位置是否與加 入邊的邊編碼相異。若相異則需將鄰接串列中索引位置前的邊都加入至父圖型樣 式的資料結構,接著再複製父圖型結構,繼續子圖圖型成長的處理步驟;否則直 接進行子圖圖型成長的處理步驟。藉由加入這樣的機制來防止加入邊產生的圖型 同構,因加入邊的資訊已存在於父圖型樣式的資料結構中,故可避免產生出不具 返回邊的樣式重覆列舉以及部分循環性圖型構等圖型。 銜接 4.2 說明的子圖樣式圖型成長範例(如圖 8 所示), P1 在拜訪 L 的第一條. 36.

(42) 邊(如圖 14 所示)產生第一個的鄰近子圖樣式(0,_,P,_,_,_) /(0,1,P,a,C,1),且加入至 P’鄰近子圖樣式集合,接著進行鄰邊序列 L 的第二條邊,先檢查後的第二條邊 (P1,c,P2,0)是否跟前面的邊編碼節點與邊標示相異。由於(P1,c,P2,0)與(P1,a,C1,1)產 生之邊編碼相異,因此將(P1,a,C1,1)加入至 P1 圖型結構(如圖 7)的 Visited Edge Table 更新成圖 15,接著依照子圖圖型成長步驟先複製更新後的 P1 圖型結構,再 加入邊(P1,c,P2,0)產生新的鄰近子圖樣式及對應圖。 而其他圖型同構的情況必須採用 minimum DFS code 的檢查機制來檢查圖型 同構。將每一個樣式所產生出的 DFS code 透過重新建圖,並按字典編纂順序重 新拜訪可為該樣式得出最小深度搜尋碼來表示其圖型,因此若其 DFS code 不是 該樣式的 minimum DFS code,即表示樣式跟其他樣式產生圖形同構,因此將該樣 式從鄰近樣式對應表中刪除。. 圖 14 鄰邊序列的相異樣式邊順序. 圖 15 P1 圖型結構加入避免同構的拜訪邊後. 37.

(43) 4.3 鄰近子圖樣式演算法完整流程 本節將說明鄰近子圖樣式演算法完整流程:結合前面子圖圖型成長動作 及避免圖型同構的機制,進行鄰近樣式圖型探勘,並計數出基底鄰近子圖樣 式之支持度,判斷是否仍為常見樣式及檢查最小深度優先搜尋碼。此方法稱 為基底圖型常見鄰近樣式探勘 (Graph-Based Structure Frequent Neighborhood Pattern Mining)演算法,簡稱 gSFNP 演算法。. 圖 16 gSFNP Algorithm 整體流程. 1. (Initial Pattern and Matched_Set) 掃描圖型節點: 先將圖型 G 上所有節點讀過一次,儲存相異的鄰近節點樣式 P,並且建立 P 所對應的 Matched_Set,將比對到的圖型節點及初始的圖型結構資訊一一存入, 這時鄰近樣式對應表得到鄰近節點樣式。. 38.

(44) 2. (Pattern Growth)圖型成長: 接著由 Queue 傳入鄰近節點樣式之 DFS code,並且將其 Matched_Set 的每一 圖型物件取出,取圖型上的最右邊路徑進行圖型成長,列舉出更大的鄰近子 圖樣式。 3. (Frequency support)計算支持度: 在拜訪樣式前,先計算該鄰近樣式之門檻值。根據前面所述,我們在計算支 持度計數時,以固定節點相異才計數一,因此要檢查 Matched_Set 所有比對到 的圖型之固定節點。. 步驟 1) 取得常見鄰近節點樣式。 當掃描所有節點時,得到常見鄰近節點樣式 P(大小為 0),以<0,_,節點標 示,_,_,_>作為 key 值,新建陣列串列 Matched_Set 並將符合標示之圖型物 件存入作為圖型對應表 value 值。. 步驟 2) 計算子圖樣式 P 之支持度是否大於門檻值。 將 Matched_Set 所含之物件逐一取出,計算相異之固定節點數 support count,除以整個圖型的總節點數,是否大於系統設定門檻值。. 步驟 3) 列舉樣式之候選鄰近子圖樣式 P 之 rightmost 上的一個邊節點。 (1) 當輸入一常見鄰近子圖 P 之編碼,取出該 P 之 Matched_Set,將所有 39.

(45) 符合 P 之圖型特徵結構取出。 (2) 從該圖型 StackNeighborhood 取出一鄰邊串列開始依序取出各個邊, 先複製父樣式的資料結構及其編碼,並加入該邊至 Visited Edge Table。若該邊與串列前一條邊編碼相異,須將該邊在鄰邊串列前面 的邊皆加入 Visited Edge Table,以避免不具返回邊的圖型樣式重覆 列舉。 (3) 新邊加入後,邊上若有未曾拜訪之節點,則加入 NodeID Table,節 點編號加一。 (4) 將圖型編碼加入新邊之編碼(key),新建陣列串列 Matched_Set 並將符 合標示之圖型物件存入作為圖型對應表 value 值。 (5) 若 P 之 Matched_Set 所有圖型結構皆被取出,且一一將從 Matched_Set 中的實際圖型進行子圖圖型成長,該圖上所有節點之鄰邊均會透過 節點的鄰接串列被拜訪,即可回到步驟 2。. 40.

(46) gSFNP 的圖型結構虛擬碼如圖 17 所示: Pattern Growth (常見鄰近子圖 P 之深先編碼 pcode, size){ ArrayList<Grpah> matchList = 取得 P 之 Matched_Set; For(Grpah p : matchList){ g = p.copy; While(取得 g 之鄰邊串列 adj_List != null){ For(edge in adj_List){ For(int k = s → e){ //若當前的 edge 與先前加入邊樣式相異 //加入 adj_List 從 s 位置至 e 位置的邊至 g g.avoidEdge(adj_List(k)); } Graph g' = g.copy; //複製一份 g 給 g’ String pchild = pcode; If(g'.isVisitedEdge(edge)){ g'.addEdge(Edge); g'.addNodeTable(Edge); pchild = pchild + g'.getEdgeCode(Edge); update_adjlist(adj_List); //存入複製且更新後的 adj_List'至 g' PatternTable.put(pchild,Matched_Set.add(g')); } } } } // 新生產的直接子孫集之相異邊樣式全部都存入 orderList 排序順序 order_child_set = orederEdgePattern(); For(String p’: order_child_set){ If(checkMinimumDfsCode(p')){ // 檢查新加入之邊樣式是否破壞 //dfscode 編碼方式 If(frequencySupport(p')>=support){ //檢查門檻值 Pattern Growth(p',size++); //遞迴圖型成長 } } } } 圖 17 圖型成長演算法. 41.

(47) 第五章 MapReduce 平行圖型探勘 由於子圖型探勘計算過程的時間及空間需求都很高,因此我們另設計一個能 夠在平行架構 MapReduce 上探勘常見鄰近子圖樣式的演算法 gSFNP_MR。我們 將步驟分為圖型前處理跟 gSFNP_MR 演算法主體架構兩部分。前處理是對輸入的 單一圖型資料,擷取節點間的關係,輸出邊排序後的圖型鄰邊資訊(Adj_Table), 並透過 Adj_Table 列舉出常見鄰近節點樣式。接著在 gSFNP_MR 演算法主體架構, 透過迭代式 MapReduce 進行圖型成長、支持度計算、刪除樣式等動作來完成探勘 樣式,而以下將詳細說明步驟之流程。. 圖 18 圖型前處理步驟. 42.

(48) 步驟 1 ) 找出初始樣式以及對應圖、圖型特徵結構。 這裡採用三組 MapReduce 處理過程,對圖形進行前處理動作,輸出每個節點 經 EdgeOrder 排序的鄰接串列(Adj_List),還有鄰近子圖樣式以及對應圖(大小為 0)。以圖 19 為第一組 MapReduce 輸入範例資料,圖 20 為輸出資料,在第二組 MapReduce 的工作由前一層 Reducer 的輸出做為輸入資料(即圖 20),產生出初始 樣式以及對應圖、圖型特徵結構(圖 21),圖內方框表示的 key 值為 DFS code,value 值為 DFS code 拜訪順序比對實際圖編碼。 p1003,c,p206079,0 p1250,c,p214104,0 p1250,c,p210436,0 p1250,w,a51829,1 …. 圖 19 輸入圖型資料 a102284. [102284,47977,a,w,p,0],[102284,606356,a,w,p,0]. a105034. [105034,598364,a,w,p,0],[105034,606931,a,w,p,0]. a125919. [125919,607809,a,w,p,0]. a129392. [129392,608714,a,w,p,0]. a131808. [131808,607278,a,w,p,0]. 圖 20 輸出範例資料 Adj_List,亦為下一個 MapReduce 輸入. key. value. 0,_,a,_,_,_ 114824,_,a,_, _,_ 0,_,a,_,_,_ 423832,_,a,_,_,_ 0,_,p,_,_,_ 601627,_,p,_,_,_ 0,_,p,_,_,_ 608036,_,p,_,_,_ 0,_,p,_,_,_ 608614,_,p,_,_,_ 0,_,p,_,_,_ 590345,_,p,_,_,_. 圖 21 初始樣式以及對應圖、圖型特徵結構. 43.

(49) Procedure: Mapper(key, value = Edge(Vi :Vj)) /*V1為頭點,V2為尾點, Edge(Vi: Vj)表示一條邊的所有標示 EmitIntermediate (<key = Vi, value = Edge(Vi: Vj)>) Procedure: Reduce(key, value = G(key)) /*由於在 Reduce 階段會將相同 key 值(即 G(key))收集在一起*/ /*將相同 key 值(頭點)之所有邊全部按字典編纂順序排序*/ EdgeOrdet(Set<Edge(Vi: Vj)>); Emit(Vi, , List< Edge(Vi: Vj)>); //輸出即圖 5.2 圖 22 將節點之鄰邊進行排序 MapReduce 虛擬碼. Procedure: Mapper(key, value = <vertex,vertex_Neighborhood Edge>) /*將圖型節點掃過一次,並建構圖型特徵結構 */ If(key is vertex label){ 建立圖型物件,設定固定節點為key值中的節點 P = constructure_pattern EmitIntermediate (<key = P .dfscode, value = P.Matched_Set_code)) } Procedure: Reduce(key, value = G(key)) /*由於在 Reduce 階段會將相同 key 值(即 G(key))收集在一起*/ Emit(dfscode, Matched_Set_code); //輸出即圖 5.3 圖 23 產生初始具一固定節點樣式及對應圖的 MapReduce 虛擬碼. 步驟 2) 支持度計算,刪減物件。 上圖 21 的結果必須經過支持度計算,保留滿足支持度門檻值之<key-value>。 因此在這裡使用一組 MapReduce 來處理支持度計算。輸入資料為圖 21,輸出資 料為常見鄰近子圖樣式之支持度(如圖 24)。接著再用一組 MapReduce 將圖 21 之 資料剔除不滿足門檻值之對應圖型<key,value>。 44.

(50) 0,_,a,_,_,_. 0.477. 0,_,p,_,_,_. 0.769. 0,_,c,_,_,_. 0.214. 圖 24 樣式支持度輸出範例 Procedure: Mapper(key, value = <dfscode ,Matched_Set_code>) EmitIntermediate (<key = dfscode, value = Matched_Set_code) Procedure: Reduce(key, value = G(key)) /*將 Matched_Set 的固定節點取出,看有幾個相異的固定節點*/ /*接著除以總圖型節點數便為支持度*/ support = extractPivot(Matched_Set_code)/totalnode_count; if(support >= setSupport) Emit(dfscode, support); //輸出即圖 24 圖 25 樣式支持度的 MapReduce 虛擬碼. Procedure: Mapper(key, value = <dfscode,Matched_Set_code>) Load Pattern Set if(key is exist in Pattern Set){ EmitIntermediate (<key = dfscode, value = Matched_Set_code) } Procedure: Reduce(key, value = G(key)) Emit(dfscode, Matched_Set_code); 圖 26 刪減不符合門檻值之圖型的 MapReduce 虛擬碼. 45.

(51) 圖 27 gSFNP_MR 主體架構. 步驟 3 ) 圖型成長。 接著重複將常見鄰近樣式做為輸入資料,進行圖型成長的處理(如圖 27 所示)。 當讀取<key-value>,也就是以鄰近樣式 DFS code 為 key 及比對到對應圖的 DFS code 資料為 value,先將其解析建立對應的圖型特徵結構,在第一個 Mapper 列舉 出更大的候選鄰近子圖樣式,輸出仍是以 key-value 方式儲存 DFS code 及 Matched_Set 之圖型(同時做為第二組 MapReduce 的輸入)。而第二組 MapReduce 主要為了計算鄰近樣式之支持度,必須將對應圖型的固定節點擷取出來,以計算 每個鄰近樣式之固定節點比對到幾個不同節點,在 Reducer 的階段將輸出大於最 小支持度門檻值的常見鄰近子圖樣式及樣式支持度。由於同一鄰近樣式之對應圖 46.

(52) 型可能在圖型中比對到大量的對應位置,為了減輕 Reducer 的工作,將分出去之 工作由 Combiner 擷取每一鄰近樣式對應圖中比對到固定節點的不同節點,只輸 出這些不同節點,而 Reducer 搜集 key-value 樣式及節點資料後便可直接計算不同 節點數。而第三個 MapReduce 負責讀入第一個 MapReduce 輸出的鄰近樣式資料 及對應圖,並讀入第二個 MapReduce 所產生的樣式支持度檔案,由於第二個 MapReduce 產出之 key-value 資料為需保留之常見樣式 DFS code 及支持度,因此 接著把第一個 MapReduce 所產生的資料中沒有出現於常見樣式的 DFS code 刪除, 輸出常見鄰近樣式及其對應圖。. Procedure: Mapper(key, value = <dfscode,Matched_Set_code>) Load Adj_List P = reconstruction_graph(Matched_Set_code); Set Pset = PatternGrowth(P) ; PatternGrowth(P){ Pn ← P.append(edge); //加一條未拜訪過的邊 If(checkMin(Pn.dfscode)){ EmitIntermediate (<key = Pn.dfscode, value = Pn.Matched_Set_code) } } 圖 28 圖型成長的 MapReduce 虛擬碼. 47.

(53) 第六章 演算法執行效率評估 為了驗證本研究方法的可行性與執行效率評估,我們在個人電腦上實作本論 文所提出的 gSFNP 演算法與平行架構 gSFNP_MR 演算法,並和 FNP 演算法[4] 做比較。主要分為第一部分單機實驗的執行效率,觀察分別改變最小支持度門檻 值、圖型總節點數以及圖型密度對執行時間的影響,第二部分則實驗在多台電腦 的平行執行環境下 FNP 及 gSFNP 的執行時間比較。. 6.1 資料來源及圖型資料產生方式 實驗中所採用的資料庫來自 ArnetMiner(https://aminer.org/billboard/citation), 此資料集包含很多論文資訊及論文間的引用關係。這個資料集包含五個版本,我 們從中取用一個資料集作為實驗資料(DBLP-Citation-network V4),並擷取資料中 的資訊表示為圖型結構資料,圖型資料為表 1。. DataSet |V| ArnetMiner 1,142,244. |E| 2,421,445. |Lv| 3. |LE| 3. 表 1 資料集. #*Performance engineering in industry: current practices and adoption challenges #@Ahmed E. Hassan,Parminder Flora #t2007 #cProceedings of the 6th international workshop on Software and performance #index2 #%3 圖 29 論文資料原始內容範例. 48.

(54) 圖 29 所示為一篇論文的原始內容範例,每一行表示該論文的屬性資料或與 作者及出處的關係,其符號意義如圖 30 所示。 #*:表示論文的名稱 #@:表示論文的作者 #t:表示論文發表的年份 #c:表示論文發表的地方或期刊 #index:表示論文的唯一索引編號 #%:表示為該論文被這篇索引編號的論文引用 圖 30 文範例符號意義 在這資料集中圖型節點的標示有三種:第一種作者(Author)、第二種發表論文 之會議(Conference)、第三種論文(Paper)。邊的關係有三種,第一種為會議接受 (accept)論文、第二種為作者寫(writes)一論文、第三種為論文之間的引用(cites)。 圖 29 所示為論文原始資料範例,圖 31 所示是由根據圖 29 資料所建立出的圖型 網絡結構,我們將此圖型網絡稱為查詢圖。 經過處理後將圖 29 的論文名稱代換為 P1,作者依序代換為 A1, A2,論文發 表處代換為 C1,所引用論文為另一個 P 節點(P2),因此可將資料格式表示為一圖 型網絡結構如圖 31 所示。. A2. A1. P2. P1. C1 圖 31 論文引用範例之表示圖型. 49.

(55) 6.2 實驗分析 本論文以上述資料集,分別執行演算法 FNP_Mining 和 gSFNP_Mine,設定 成只輸出不超過大小為 3 的常見鄰近子圖樣式。因原始資料圖過大,我們從資料 圖中分別抽樣取出設定節點數所形成的連通圖,以控制產生圖型的節點數,同一 設定節點數會抽樣 10 次取執行時間的平均值。在此小節我們以實驗改變最小支 持度門檻值及各種資料集特性參數來評估兩演算法 FNP_Mining 和 gSFNP_Mine 的執行時間。而實驗環境分為兩種,一為單機實驗、二為由三台電腦建構的分散 式系統 Hadoop,而實驗程式均以 Java 語言實作。 表 2 實驗環境一: 單機實驗環境介紹 CPU. 3.2G * 4. Memory. 16G Windows 64 bit 企業版. OS. 表 3 實驗環境二: Hadoop 實驗環境介紹 Master CPU. 3.4G * 4. Memory. 16G. OS. Ubuntu 64 bit. Slave01 CPU. 3.4G * 4. Memory. 16G. OS. Ubuntu 64 bit. Slave02 CPU. 3.2G * 4. Memory. 16G. OS. Ubuntu 64 bit. 50.

(56) 【單機實驗一】比較不同最小支持度對 gSFNP 演算法和 FNP 演算法在執行時間 上的影響。 測試資料為從測試資料圖中抽樣取包含 100~500 個節點之連通圖型 10 組, 在此實驗中變動最小支持度門檻值,使用兩種演算法分別探勘常見鄰近子圖樣式, 取其在 10 組圖型的平均執行時間,實驗結果如圖 32 至圖 36 所示。實驗結果顯 示,在不同節點數的圖型,兩個演算法隨著最小支持度門檻值增加,執行時間都 隨之降低。 整體而言,gSFNP 演算法比 FNP 執行時間短,且兩者執行時間的差距在最 小支持度門檻值愈小時落差愈明顯。因 FNP 採用類似 Apriori 的方式,由兩個鄰 近樣式組合成更大的鄰近樣式,在組合樣式時可能因為比對相同部分造成產生多 個樣式組合,而組合出樣式後仍需將先前比對到的對應圖做組合比對的處理,因 此在計算過程中占用記憶體及花費時間相對多。此外在組合完成後又因可能產生 圖型同構的樣式而需對所有樣式採用 minimum DFS code 產生唯一編碼。而 gSFNP 透過父圖且藉由節點之鄰邊串列成長,較 FNP 節省組合時間,也不須對大量由組 合產生的鄰近樣式進行圖型同構檢查,因此 gSFNP 比 FNP 在探勘常見鄰近子圖 更節省時間及記憶體。. 51.

(57) 抽樣10次100個節點 gSFNP 25. FNP. 23.7325. 20 時間(S). 12.3947 12.4935 11.9151 11.4409 11.4835 10.6707. 15 10 5. 2.8167. 2.5474. 1.6953. 2.0602. 0.2. 0.3. 0.4. 2.3326. 1.4243. 1.8506. 0.5. 0.6. 0.7. 5.9869. 6.1716. 1.4091. 1.1343. 0 0.1. 0.8. 0.9. 支持度. 圖 32 gSFNP 和 FNP 在 100 個節點圖型的平均執行時間. 抽樣10次200個節點 gSFNP 120. 78.8195. 76.68. 100. FNP. 76.5823 76.8818 74.2732. 69.8597. 80 時間(S). 39.0831. 60 40. 24.854. 20. 19.0386 15.4267 15.8896 14.4935 11.6711. 23.1988 7.2449. 4.0686. 0. 0.8. 0.9. 0 0.1. 0.2. 0.3. 0.4. 0.5. 0.6. 0.7. 支持度. 圖 33 gSFNP 和 FNP 在 200 個節點圖型的平均執行時間. 52.

(58) 抽樣10次300個節點 gSFNP 160. FNP. 117.1787 102.2559. 140. 96.0971. 120 100 時間(S). 62.622 48.3263. 80 60 40. 25.1768. 25.074. 24.4222 19.3882 16.0875. 20. 28.7952 25.5671. 20.2572. 8.6644. 7.418. 6.604. 0.6. 0.7. 0.8. 4.4053 1.0124. 0 0.1. 0.2. 0.3. 0.4. 0.5. 0.9. 支持度. 圖 34 gSFNP 和 FNP 在 300 個節點圖型的平均執行時間. 抽樣10次400個節點 gSFNP. FNP. 140 120. 114.3498. 105.8879 103.0639. 100 72.217. 80 時間(S) 60. 38.8429 37.4646 38.3213. 40. 38.5579 29.0728 13.1119. 20 0. 0.057. 0.036. 0.2694. 0.0786. 0.0599. 0.6. 0.7. 0.8. 0.7567. 0.036 0.0604. 支持度 0.1. 0.2. 0.3. 0.4. 0.5. 圖 35 gSFNP 和 FNP 在 400 個節點圖型的平均執行時間. 53. 0.9.

(59) 抽樣10次500個節點 gSFNP 600. FNP. 566.104 458.3054. 500. 404.4321. 400 時間(S) 300 150.4245 133.3564. 200 100. 53.7932. 53.382. 48.4559 36.5656 32.2525 11.2909. 0 0.1. 0.2. 59.2263. 0.3. 支持度 0 . 5. 0.4. 0.6. 23.2046 0.0808 8.2049. 0.1175. 0.7. 0.8. 圖 36 gSFNP 和 FNP 在 500 個節點圖型的平均執行時間. 54. 0.0574 0.0887 0.9.

(60) 【單機實驗二】固定最小支持度門檻值,比較 gSFNP 演算法和 FNP 演算法在不 同節點數的圖型上之執行時間。 測試資料為從測試資料圖中抽樣取包含 100~500 個節點之連通圖型 10 組, 在固定最小支持度門檻值為 0.1 的條件下,比較變動節點個數對兩個演算法的影 響,並取其 10 組圖型的平均執行時間,實驗結果如圖 37 所示。實驗結果顯示在 固定最小支持度門檻值且圖型具不同節點數的情況下,兩個演算法隨著圖型節點 數增加,執行時間跟著增加。這是因為節點數越大,取出之連通圖型也相對成長。 而圖 37 在節點數 300 和 400 的時間上,由於測試資料是各抽取 10 組連通圖型的 平均執行時間,因此可能因為抽取資料節點多圖型未必更密集,但大致來說執行 時間會因節點數增加(抽樣圖型也相對成長)而增加。. gSFNP. FNP 566.104. 600 500 400 時間(S) 300 200 100. 78.8195 23.7325 2.8167. 24.854. 100. 200. 117.1787. 114.3498. 25.1768. 38.8429. 300. 400. 53.7932. 0 節點數. 圖 37 gSFNP 和 FNP 在不同節點數與執行時間成長關係. 55. 500.

參考文獻

相關文件

We present a new method, called ACC (i.e. Association based Classification using Chi-square independence test), to solve the problems of classification.. ACC finds frequent and

– evolve the algorithm into an end-to-end system for ball detection and tracking of broadcast tennis video g. – analyze the tactics of players and winning-patterns, and hence

 The 3SEQ maximum descent statistic describes clus tering patterns in sequences of binary outcomes, a nd is therefore not confined to recombination analy sis... New Applications (1)

Experiment a little with the Hello program. It will say that it has no clue what you mean by ouch. The exact wording of the error message is dependent on the compiler, but it might

In this work, we will present a new learning algorithm called error tolerant associative memory (ETAM), which enlarges the basins of attraction, centered at the stored patterns,

The following sentences are taken from Understanding Integrated Science for 21 st Century Book 1A published by Aristo Educational Press Limited.. Fill in the blanks with the

Diagonal elements in bosonic environments protected by (fermion) parity so that the qubit state decohere completely but does not thermalize for sub-Ohmic environment.. This is not

Miroslav Fiedler, Praha, Algebraic connectivity of graphs, Czechoslovak Mathematical Journal 23 (98) 1973,