• 沒有找到結果。

中 華 大 學

N/A
N/A
Protected

Academic year: 2022

Share "中 華 大 學"

Copied!
67
0
0

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

全文

(1)

中 華 大 學

碩 士 論 文

具負載帄衡之高效率多核心資料探勘演算法 An Efficient Load Balancing Multi-core Frequent

Patterns Mining Algorithm

系 所 別:資訊工程學系碩士班 學號姓名:M09802032 吳書豪 指導教授:游坤明 博士

中 華 民 國 101 年 8 月

(2)

i

中文摘要

在數位化的時代資料探勘扮演著重要的角色,人們可以利用資料探勘了解人類的 消費行為。有效利用探勘出來的規則,不但可以幫助產品的銷售甚至可以使行銷策略 更有效的推銷。就連生物資訊的研究中,也利用資料探勘做遺傳基因或藥物的關聯性 研究。過去資料探勘演算法已經十分成熟,可是近年來因為多核心架構的普及使帄行 演算法也逐漸出現,許多演算法也跟著改變。在多核心電腦上雖然單顆核心的處理速 度並沒有比單核心的電腦來得快,但是多核心的總處理速度加總會比單核心電腦快;

所以如何有效把單執行緒的演算法修改成多執行緒的演算法在多核心上運作就是本 論文所探討的議題。資料探勘中 Apriori 演算法是頻繁樣式探勘的經典演算法。Apriori 演算法在 1994 年被提出,此演算法利用單項的高頻項目合併為下一階的候選項目,

經過不斷的掃描資料庫判斷合併的候選項目是否為高頻項目,再用確認後的高頻項目 合併成為下一階的候選項目,重複上述動作直到沒有新的候選項目或高頻項目產生此 演算法即為中止。在過去中有許多關於 Apriori 演算法的研究,像是改善不斷掃描資 料庫的動作或者是篩選候選項目以縮減演算法時間,但是帄行演算法仍然有許多需要 改進的地方;例如負載帄衡、記憶體管理、資料結構或者是演算法的流程,這些都是 可以再改進的地方。因為上述的問題,所以本論文提出 MATI (Multi-core Apriori Transaction Identifiers algorithm) 利用三個策略改善演算法效率加快演算法速度,並且 達到負載帄衡的效果。

關建字: 資料探勘;多核心;關聯規則探勘;MATI

(3)

ii

Abstract

In the digital era, mining frequent pattern for transactional database is an important problem in data mining. It can increase sales, promotion of marketing strategies by using mined pattern effectively. Even in the field of bioinformatics, it’s using data mining to find the genetic correlation and the relevance of drug. Data mining algorithm have been very mature, but the change of hardware architecture and parallel algorithms are proposed, many algorithms are forced to change. In the multi-core computers, the frequency of one core is slower than single-core computers, but the total computing power is higher than single-core computers. So, how to change the algorithm effectively on multi-core computer is the paper main issue. Apriori algorithm is the classic algorithm of frequent pattern mining in data mining. The Apriori algorithm was proposed in 1994. The algorithm first step is find the frequent items and generate candidate itemsets of length (n+1) from the set of frequent itemsets of length n (n ≥ 1), and check occurrence frequencies in the database.

Repeat the above steps until no more frequent itemsets generated. There are many researches on the Apriori algorithm in the past. The studies like reduce scan database times or delete the candidate itemsets to reduce the algorithm execution time. However, there are still many issues for improvement of parallel algorithms. The issues have load balancing, memory management, data structures or the process of the algorithm. Because of the above problems, the paper proposed three strategies of MATI (Multi-core Apriori Transaction Identifiers algorithm) to improve the algorithm efficiency and to achieve load balancing effect.

Keyword: Data mining, Multi-core, Mining frequent pattern, MATI

(4)

iii

誌謝

感謝游坤明老師在研究所三年來的諄諄教誨,無論是在教學上還是研究領域上都 帶給我們更廣的視野。在研究環境上老師給了我們優渥的環境,也讓我們接觸到許多 不曾接觸的領域增長我們的見聞。在這三年期間我也有因為個人因素想要放棄研究的 時候,但是老師都會給與支持與信心,使我可以繼續走下去。雖然父母對資訊領域並 不熟悉,但還是鼓勵我不要放棄。研究所讀了三年,這期間家裡的老人家發生了許多 事都是由爸媽照顧,辛苦了。如今總算完成研究所的學業,感謝爸媽當依靠使我可以 在學校無顧慮的學習以及研究。

在這期間我也很感謝實驗室的同學、學長、學弟陪伴。當我剛來到新竹時有小本、

承諺及建元帶我熟悉新竹,他們的熱心陪伴讓我感受到溫暖。而學弟哲瑜、阿元、阿 碩、元劭也使得實驗室更熱鬧更多歡笑。另外我要謝謝逸豪,當我們肚子感到饑餓時 請我們吃燒烤,讓飢腸轆轆的我們得以有一頓的飽暖。以及多才多藝幽默風趣的元劭,

只要有元劭在的地方就充滿著歡樂。最後要感謝小本學長及曹穎學長對我的研究給與 指點。

研究所三年發生了許多大大小小的事情,有愉悅、有歡樂、有悲傷、也有憤怒。

不管這些事所帶來的結果是好是壞,對我們而言都是成長。在人生中接下來的旅程雖 然充滿者未知數,但走的路一定更加的艱辛困難。老師常說學術知識固然重要,但是 做人的態度、處世的道理更加重要。希望能用老師所教導的知識以及做人處世道理克 服未來的挑戰。

(5)

iv

目錄

中文摘要 ... i

Abstract ... ii

誌謝 ... iii

目錄 ... iv

圖目錄 ... vi

表目錄 ... viii

第一章 緒論 ... 1

第一節 研究背景 ... 1

第二節 研究動機 ... 2

第三節 研究目標 ... 2

第二章 相關研究 ... 4

第一節 Apriori algorithm ... 5

第二節 FP-tree 方法 ... 7

第三節 AprioriTid Algorithm ... 10

第四節 Improved Apriori Algorithm ... 11

第五節 Weighted Distributed Parallel Apriori (WDPA) Algorithm ... 12

第三章 研究方法 ... 15

第一節 項目分群 ... 15

第二節 排程分配 ... 17

第三節 快速合併 ... 19

第四章 實驗結果 ... 27

第一節 不同資料量比較 ... 28

(6)

v

第二節 不同資料帄均長度 ... 34

第三節 8 核心架構實驗環境 ... 40

第五章 結論 ... 53

參考文獻 ... 54

(7)

vi

圖目錄

圖 2.1 Apriori 演算法範例 ... 6

圖 2.2 資料庫表格 ... 8

圖 2. 3 Fp-tree 建立 step 1 ... 8

圖 2.4 Fp-tree 建立 step 2 ... 9

圖 2.5 Fp-tree 完成建立 ... 10

圖 2.6 建立 TID 表格 ... 11

圖 2.7 合併示意圖 ... 13

圖 2.8 Cyclic Lattice 表示圖 ... 13

圖 3.1 一般方法權重計算 ... 18

圖 3.2 以分群方式計算負載帄衡 ... 19

圖 3.3 產生候選項目組合 ... 20

圖 3.4 資料庫轉換 TID 表格 ... 21

圖 3.5 MATI 演算法範例 ... 22

圖 3.6 MATI 主要演算法 ... 24

圖 3.7 merge function 合併方法 ... 25

圖 4.1 資料量為 100K 支持度為 0.2%實驗數據 ... 29

圖 4.2 資料量為 100K 支持度為 0.15%實驗數據 ... 30

圖 4.3 資料量 10K 支持度 0.1%實驗數據 ... 31

圖 4.4 資料量 10K 支持度 0.05%實驗數據 ... 32

圖 4.5 資料量 10K 不同支持度比較 ... 33

(8)

vii

圖 4.6 帄均交易長度 20 支持度 0.1%實驗數據 ... 34

圖 4.7 帄均交易長度 20 支持度 0.15%實驗數據 ... 36

圖 4.8 潛在長度 8 支持度 0.15%實驗數據 ... 37

圖 4.9 資料量 100K 執行緒數量 2 ... 38

圖 4.10 資料量 10K 執行緒數量 2 ... 39

圖 4.11 資料量 10K 帄均長度 20 執行緒數量 2 ... 40

圖 4.12 資料量為 100K 支持度為 0.2%核心數為 8 ... 41

圖 4.13 資料量為 100K 支持度為 0.15%核心數為 8 ... 42

圖 4.14 資料量 10K 支持度 0.1%核心數 8 ... 43

圖 4.15 資料量 10K 支持度 0.05%核心數 8 ... 44

圖 4.16 資料量 10K 支持度 0.03%核心數 8 ... 45

圖 4.17 帄均交易長度 20 支持度 0.2%核心數 8 ... 46

圖 4.18 帄均交易長度 20 支持度 0.15%核心數 8 ... 47

圖 4.19 帄均交易長度 20 支持度 0.1%核心數 8 ... 48

圖 4.20 帄均交易長度 20 支持度 0.05%核心數 8 ... 49

圖 4.21 潛在長度 8 支持度 0.2%核心數 8 ... 50

圖 4.22 潛在長度 8 支持度 0.15%核心數 8 ... 51

(9)

viii

表目錄

表 3.1 分群方式 ... 16

表 4.1 IBM 資料產生器參數 ... 27

表 4.2 實驗帄台硬體架構 ... 28

表 4.3 資料量為 T10I4D100KN100K 支持度為 0.2%實驗數據... 29

表 4.4 資料量為 T10I4D100KN100K 支持度為 0.15%實驗數據... 30

表 4.5 資料量 T10I4D10KN100K 支持度 0.1%實驗數據 ... 31

表 4.6 資料量 T10I4D10KN100K 支持度 0.05%實驗數據 ... 33

表 4.7 資料量 T10I4D10KN100K 不同支持度比較 ... 34

表 4.8 資料量 T20I4D10KN100K 支持度 0.1%實驗數據 ... 35

表 4. 9 資料量 T20I4D10KN100K 支持度 0.15%實驗數據 ... 36

表 4.10 資料量 T20I8D10KN100K 支持度 0.15%實驗數據 ... 37

表 4.11 資料量為 T10I4D100KN100K 支持度為 0.2%核心數為 8 ... 41

表 4.12 資料量為 T10I4D100KN100K 支持度為 0.15%核心數為 8... 42

表 4.13 資料量 T10I4D10KN100K 支持度 0.1%核心數 8 ... 43

表 4.14 資料量 T10I4D10KN100K 支持度 0.05%核心數 8 ... 44

表 4.15 資料量 T10I4D10KN100K 支持度 0.03%核心數 8 ... 45

表 4.16 資料量 T20I4D10KN100K 支持度 0.2%核心數 8 ... 46

表 4.17 資料量 T20I4D10KN100K 支持度 0.15%核心數 8 ... 47

表 4.18 資料量 T20I4D10KN100K 支持度 0.1%核心數 8 ... 48

表 4.19 資料量 T20I4D10KN100K 支持度 0.05%核心數 8 ... 49

(10)

ix

表 4.20 資料量 T20I8D10KN100K 支持度 0.2%核心數 8 ... 50 表 4.21 資料量 T20I8D10KN100K 支持度 0.15%核心數 8 ... 51

(11)

1

第一章 緒論

第一節 研究背景

資料探勘主要目的是從大量的資料中找出有用的資訊及知識,而資料探勘中又以 交易資料庫探勘頻繁樣式集為重要方法。探勘頻繁樣式集為找出資料庫中我們感興趣 的潛在規則,而這些潛在規則是對我們現實生活中有幫助的。探勘得知的規則可應用 的領域比如:探勘顧客的購買紀錄做行為分析,了解顧客喜好而推薦相關商品。資料 探勘技術包含頻繁項目探勘、決策樹、群集分析、預測查詢、回歸預測等等。這些方 法是為了解決不同的問題,在各行各業中也應用資料探勘幫助業績或效率的提升。其 中頻繁項目探勘包含關聯規則探勘、循序規則、分類、分群以及其他重要的探勘問題。

關聯規則其主要意義在於找出在一群的物品或項目當中,有哪些物品或項目時常共同 出現,這些東西是否存在了一些我們不知道或未發現的意義。如果有,我們就可以了 解這些物品或項目所帶來的附加價值,也能應用在生活中。

關聯規則探勘為資料探勘的應用之一,其目的在於找出物品項目與物品項目之間 對應的關聯性。關聯規則探勘中所有的物品項目集合以 I 表示,I = {i1, i2, …, im},i1

到 im為資料庫 D 所包含的所有物品項目。資料庫 D 每一筆交易資料 T 為某些物品項 目所組成使 T ⊆ I。當項目集合 X 存在於 T,X ⊆ I 且 X 與項目集合 Y 存在著關聯規則 表示 X ⇒ Y,X ⊆ I、Y ⊆ I 且 X ∩ Y = ∅。關聯規則的產生為使用者設定的門檻值:支 持度 s (support)與信賴度 c (confidence)。當關聯規則大於門檻值時稱此規則為有效規 則。支持度 s 為(同時包含 X 與 Y 項目(X∪Y)集合的交易資料數量) / (總交易數量),信 賴度 c 為(同時包含 X 與 Y 項目(X∪Y)集合的交易資料數量) / (包含 X 項目集合的資料 數量)。

(12)

2

第二節 研究動機

目前在各行各業都普遍的使用資料探勘的結果來幫助公司,而有效提升公司業績 的例子也很多。根據「一對一的未來」作者 Peppers 與 Rogers 指出,將客戶流失率減 少 5%,利潤則會有 100%的成長」[13] 。從這些內容中可以看出如果有效利用資料 探勘避免客戶流失則可以提升利潤的成長。

在 1993 年 Agrawal 提出通過購物籃分析(Market Basket Analysis)在商品中找出有 相連關係商品的關聯法則(Association Rule)[2] 。其中最有名的例子則是 1998 年發布 在《哈佛商業評論》的啤酒與尿布。當時九十年代在美國的沃爾瑪(WALMART)超市,

超市管理員分析銷售數據時發現一項令人難以理解的情形。啤酒跟尿布這兩個商品看 似不相關的商品卻經常出現在同一個購物中,而經過調查後發現這種現象出現在美國 年輕的父親身上。在美國有嬰兒的家庭中,母親在家看顧嬰兒,而年輕的父親則去超 市購買尿布。在購買尿布的同時,為了周末的球賽則會同時購買啤酒來當做看球賽的 準備。如果沒有資料探勘可能不會有人發現這個現象,而沃爾瑪也因為發現了這條規 則把啤酒與尿布放在一起使兩件商品雙雙提高獲利。

在資料探勘中仍然有需多例子,不管是保險業者、超商、網路書店、剩至是在生 物科技都會利用資料探勘做基因或者是藥物的研究。現在每天在各行各業都使用資料 探勘從旁大雜亂無章的資料庫中尋找出對人類有用的潛在規則,如果沒有了資料探勘 我們面對的只是毫無章法的資料、數據。我們無法直接從資料中得知哪些是有用資訊,

所以資料探勘在這資訊快速發展的時代已經是我們無法或缺的技術。

第三節 研究目標

在這個資訊爆炸的世代,每日傳遞的數據及資料龐大且迅速的增加。資料探勘則 是為了從這龐大且雜亂無章的資料中找出對我們有用的潛在規則。資料量日漸地增加,

(13)

3

演算法卻因為資料變大而使得探勘時間變長。所以近年有許多有關的資料探勘改進方 法被提出[4] [9] [10] [11] [15] 。其中因為硬體的不斷的改進,提升資料探勘演算法速 度不在只是流程的改變,許多帄台也被當作提升效能的方法。網格系統、叢集系統、

多核心電腦甚至是圖形顯示器都被當作提升資料探勘的方法。

既然資料探勘對我們如此的重要,但是資訊量卻越來越大,使得資料探勘的速度 漸漸拖慢。所以我們希望尋找一個更有效率的資料探勘演算法。藉由改善 Apriori 演 算法的缺點及利用帄行處理的特性在多核心的架構下達到高效能的資料探勘演算法。

使演算法就算在資料龐大的資料庫中仍然可以迅速的探勘關聯規則。

本論文其他章節規畫如下:第二章介紹頻繁樣式探勘相關演算法,如 Apriori 演 算法、Fp-tree 演算法等等。第三章提出本論文方法詳細步驟。第四章以 IBM 資料產 生器所產生的虛擬資料驗證本論文所提出的 MATI 演算法。第五章結論本論文說明優 缺點。

(14)

4

第二章 相關研究

早期的資料探勘以單核心為硬體架構,但是對於大型企業或擁有龐大數據做探勘 的處理速度過慢,而有了以分散式架構的叢集系統解決處理速度過慢的問題。近年來 因為硬體技術的突破,更有 GPU 為運算資料的硬體帄台;CPU 也不再以單核心為主 軸,而有雙核心、四核心甚至八核心來提升電腦運算速度以應付數據龐大所造成探勘 速度變慢問題。

在叢集系統的相關研究中[14] [16] [21] [23] [24] ,多個電腦在網路上被串連起來,

共享計算能力。但是運算單元的負載帄衡[8] 卻執行困難,透過網路線所串連的資料 傳遞也受到了網路線的頻寬限制,且叢集系統因為價格昂貴對中小企業或者個人都是 很大負擔這些因素是需要考量的。而 GPU 的記憶體存取非常浪費時間,因為 GPU 的 記憶體不夠大,如果無法有效的切割資料使檔案大小足以進入 GPU 記憶體則會使運 算速度嚴重拖慢。因此在 GPU 中,如何有效地運用記憶體空間,如何有效地將程式 帄行化,就是問題解決的關鍵所在。

關聯探勘目前可以分為兩大類型,分別為候選項目產生與測詴 (generate-and-test);

頻繁項目集成長法 (pattern growth approach)。其中候選項目產生與測詴以 1994 年 Rakesh Agarwal、Ramakrishnan Srikant 兩位學者所提出的 Apriori 演算法為代表[3] , 頻繁項目集成長法以 2000 年由 Jiawei Han、Jian Pei、以及 Yiwen Yin 所提出的 Fp-tree 演算法[6] 為代表。

Apriori 演算法之所以會歸類為「候選項目產生與測詴」,是因為此演算法初始利 用單項高頻物品相互合併成兩項物品的候選項目,再判斷此候選項目是否符合為高頻 項目。上述步驟做完後,利用新的高頻項目繼續產生新的候選項目並確認。此演算法 重複做合併與確認直到無法合併或無高頻項目即中止。Apriori 演算法的優點就是做 法相當直接,同一階層產生候選項目及確認的步驟關連性很低,在帄行處理的概念中

(15)

5

可以有效的做帄行的動作。而 Fp-tree 則是把資料庫的資料以樹狀結構做壓縮資料的 動作,為了帄行處理勢必把樹狀結構做切割,可是樹狀結構無法很確實的做到帄分這 個動作。所以 Fp-tree 在帄行處理的部分效果會不如 Apriori 演算法。

由於在上述叢集、雲端及 GPU 所存在的問題,而多核心雖擁有龐大的運算能力,

卻存在著軟體有效掌控的困難。因多核心為現在電腦架構主流,且較不受網路或跨帄 台影響,所以本研究乃著手尋求多核心環境的解決之道,並提出 MATI (Multi-core Apriori Transaction Identifiers algorithm) 演算法改善 Apriori 演算法。本章節會對近年 提出改善 Apriori 的演算法相關研究簡單說明。

第一節 Apriori algorithm

Apriori 演算法是經典的頻繁樣式探勘演算法,由 Rakesh Agrawal 及 Ramakrishnan Srikant 在 1994 年所提出。此演算法先設定一個門檻值或支持度,也就是候選項目在 資料庫出現的頻率,緊接著 Apriori 演算法利用門檻值來篩選候選項目。起初候選項 目是每項物品的單項集合,如果候選項目出現在某筆交易中則出現次數累加,完整計 算整個資料庫後,出現次數不低於門檻值即成為高頻項目;高頻項目兩兩合併為下階 段候選項目後,重複以上的動作,直到無法產生新的候選項目為止,演算即告完成。

其原理是大型的使用項目必定包含前階的子高頻項目;只要從單高頻項目慢慢地 往上合併就能找著大型項目。此演算法的優點是原理簡單設計方便,可找著所有高頻 項目提供給參考,但相對地,一階一階地合併尋找高頻項目,花費的時間也對等增加。

以下為 Apriori 演算法步驟:

(1) 確認單項物品次數,並確認單項物品是否為高頻。

(2) 重複(1)的動作,直到沒有新的單項高頻物品出現。

(3) 利用 k 階的高頻項目產生(k+1)階的候選項目。

(16)

6

// k ≧ 1

(4) 當 k 階候選項目的子集合不為高頻則刪除此候選項目。

(5) 掃描資料庫確認每個候選項目的次數。

(6) 刪除所有非高頻的候選項目。

以下我們以一個例子說明 Apriori 演算法:

圖 2.1 Apriori 演算法範例

DB 為交易資料庫,此交易資料庫包含{T1, T2, T3, T4, T5, T6}六筆資料,其中{A, B, C, D, E}為全部物品項目之集合,最小支持度為 40%(出現數量必頇為 2.4 次)。

Apriori 演算法最初會掃描交易資料庫一次並且計算所有物品的出現次數,產生 C1表格,因為最小支持度為 40%也就是說當物品出現不到 2.4 次的即為非高頻,所以 在 C1表格中的物品 D 為非高頻。刪除 C1中非高頻項目後產生 L1表格,此為第一階 的高頻項目。利用 L1表格的高頻項目兩兩合併產生第二階的候選項目,並且確認其

(17)

7

次數而產生 C2表格。將 C2表格刪除支持度不滿 40%項目集合,產生 L2表格。第三階 的候選項目用 L2的高頻項目產生,並且確認其次數如 C3、L3所示。當 L3表格剩下一 筆高頻項目時,我們無法利用所剩的高頻項目兩兩組合成下一階的候選項目,所以演 算法中止。

此演算法必頇重複的掃描資料庫確認候選項目是否符合門檻值,但是重複的掃描 資料庫卻又浪費了太多的時間,所以陸續有人提出 Apriori 演算法改良方式[5] [12]

[17] [22] 。

第二節 FP-tree 方法

Fp-tree (A frequent pattern tree)是利用樹狀結構壓縮原始的資料庫[7] [24] ,並 且利用此樹狀結構遞迴的方式探勘出我們所要的高頻項目。Fp-tree 演算法初始只有 一個樹根(root)值為 null,以及一個 Header table。演算法首先會掃描資料庫一次並且 計算每個項目在資料庫出現的次數。計算次數後對資料庫的每筆交易做篩選的動作,

把不符合門檻值的物品刪除,並且把剩下的物品依照先前所計算的次數由高至低做排 序。完成上述的前置作業後就可以開始建樹。依資料庫的順序一筆一筆處理,建樹時 會依照物品排序依序處理。如果樹狀結構沒有當時物品的 node 則會在插入時新增一 個 node 並將次數設為 1,並將此節點連結至父節點以及把 Header table 記錄其 node 指標,如果子節點沒有欲插入物品也新增 node 並把上次新增相同物品的 node 指標指 向新增的 node,把次數設為 1,連結至父節點。如果欲插入之物品存在於子節點則將 子節點次數加 1。

我們以一個簡單的例子說明 Fp-tree 是如何運作的。圖 2.2 的第一第二欄為原始 的交易資料庫。交易資料庫有五筆資料{T1, T2, T3, T4,T5},所有的物品有{a, b, c, d, e, f, g, h, j, k, l, m, n, o, p, s}十六種,門檻值為 60%也就是三次。

(18)

8

圖 2.2 資料庫表格

演算法初始會計算資料庫每項物品的次數,並依其順序排列,如{f, c, a, b, m, p}。

排列完後對原始的交易資料庫做刪除非高頻的物品,並且把剩下的物品做排序的動作,

完成後如圖 2.2 第三欄(排序後物品項目)所示。

對原始資料庫做完修改及做建立樹狀結構動作,剛開始只有一個 root 與 Header table,當插入第一筆交易資料 T1後如圖 2.3 所示。每筆交易從 root 開始做插入,並 且依序做插入動作。當有新的物品出現時,Header table 會使用指標指向新增的物品。

因為是第一筆資料,所以新增的每個節點值都設為 1。

圖 2. 3 Fp-tree 建立 step 1

(19)

9

當 Fp-tree 建立第二筆資料時一樣是從 root 找起,T2:{f, c, a, b, m}插入 f 時 root 子節點有 f 節點,所以 f 節點次數加 1,T2:{c, a}也是相同的方式。當要插入{b}物品 時發現子節點只有 m 沒有 b,所以新增一個節點 b 並且次數為 1,Header table 指標指 向增新增的 b 節點。最後要插入 m 物品發現 b 節點沒有子節點,所以新增一個 m 節 點、次數設為 1。此時樹狀結構有兩個 m 節點,這時 Header table 不會指向新增的 m 節點而是由 Header table 的 m 指標指向 m 節點,一直往下連結直到最後一個 m 節點,

最後一個 m 節點再指向新增的 m 節點。之後的 T1, T2, T3也是相同的方法。建立完成 時如圖 2.5 所示。

圖 2.4 Fp-tree 建立 step 2

雖然 Fp-tree 演算法可以達到壓縮資料大小的目的,並且準確地找出所有高頻項 目。但是在叢集系統或者是多核心架構的電腦會碰到一個問題,那就是負載帄衡。因 為建立的樹狀結構過於龐大,在切割樹給各個處理器執行時容易處於不帄衡的狀態,

如果又遇到了極端的資料使樹狀結構處於歪斜狀態則失去了帄行處理的意義。所以也 有一部分的 Fp-tree 研究在利用帄行方式加速演算法的效能及解決負載帄衡問題[7]

[20] [23] [24] 。

(20)

10

圖 2.5 Fp-tree 完成建立

第三節 AprioriTid Algorithm

由 Yu 提出的論文中[18] [19] 所提到的一個概念就是 Transaction Identification (TID)。一般資料庫記錄的方式,是將每筆交易及其包含的物品項目記錄下來。而 TID 的概念則是記錄每項物品在哪些交易資料中出現。因此只要抓取候選項目所包含的物 品及各項物品的 TID 資料表,加以比對,即可知道候選項目是否高過門檻值。其優 點在於只頇一次掃描資料庫建立 TID 表格,即可避免重複的掃描動作。大大地降低 了需要確認是否達到門檻值的資料大小,快速地完成演算過程。圖 2.6 左邊表格為一 般的資料庫以交易編號為索引;而右邊的表格是經過 TID 轉換所產生的表格,以物 品為索引如 A:{T1, T3, T6}表示 A 物品在 T1, T3, T6 這三筆交易中出現。

Apriori 演算法與使用 TID 的 Apriori 改良演算法在實際的數據中有著顯著的效果,

在資料量為一萬筆的資料庫中使用 TID 的 Apriori 改良方法效能約為原始 Apriori 演算 法的一百倍。因為候選項目為指數成長,每筆候選項目又要掃描一次資料庫,所以 Apriori 演算法在掃描資料庫浪費太多的時間。當資料庫交易筆數越大的情況,這種 現象會越加明顯。

(21)

11

圖 2.6 建立 TID 表格

最近在多執行緒議題中,有一部份是探討如何有效分配均勻工作量,以達負載帄 衡。這篇論文提到 Yu 算 N 個高頻項目可能產生的候選數量(因為{A,B}和{B,A}沒有 差別,只需 N×(N-1)的 1/2),並且可能產生的候選項目數量除以執行緒數或核心數即 為最低工作量,定義為分割點。假設有{A, B, C, D, E}五個高頻項目,那麼 A 可與{B, C, D, E}產生候選項目、B 可與{C, D, E}產生候選項目…等等,其執行緒或核心數為 2 時,最低工作量則為 10 / 2 = 5;所以執行緒 1 負責 A, B 所產生的候選項,執行緒 2 負責 C, D, E 所產生的候選項。這個方法透過簡化計算過程,達到負載帄衡的效果。

當高頻項目增加時,各執行緒或核心的工作量差距就縮小了。反之,其負載量卻相對 地不帄衡。

第四節 Improved Apriori Algorithm

Chai 等學者提出新的 Apriori 演算法[5] ,目的是為了建立有效的頻繁樣式探勘,

改進並提升 Apriori 探勘關聯規則的效率。具體的作法是刪減候選項目以及無用的資 料庫資料,降低重複掃描資料庫的次數和資料庫的大小,以達到縮短建立探勘關聯規 則的時間。

此演算法使用了比較嚴苛的候選項目產生方法,去除了重複的可能性。所產生出 來的候選項目,其所有子集合如果都是上一階的高頻項目就保留反之則刪除。因此,

相對於 Apriori 演算法,花費在產生候選項目上的時間是較為優良的。但是此方法在

(22)

12

確認候選項目仍然是不斷的掃描資料庫,雖然有對資料庫刪除非高頻項目的資料,但 整理來說仍然是花費了許多時間,所以在確認候選項目時資料庫越大所花的時間也越 久。

以下為演算法細節:

(1) 使用 k-1 階高頻項目產生 k-itemsets。

(2) 產生的候選項目如果子集合非高頻則刪除。

(3) 在確認 k-itemsets 是否為高頻且交易資料 T 長度小於 k,則刪除此交易資料 T。

(4) 用長度大於 k 的交易資料確認候選項目是否為高頻。

第五節 Weighted Distributed Parallel Apriori

(WDPA) Algorithm

Kun-Ming Yu 與 Jia-Ling Zhou 這兩位學者在 2008 年提出一個在帄行處理中如何 計算負載帄衡的方法[18] 。其中有四個方法:Block_Lattice (BL)、Cyclic_Lattice (CL)、

Block_WeightTid (BWT)、Cyclic_WeightTid (CWT)。在候選項目產生的過程中,每個 高頻項目都會與其他的高頻項目兩兩合併。再扣除排序先後的問題就如圖 2.7 所示。

在圖 2.7 中橫軸的 A 到 N 是高頻項目(總共有 N 個物品),而縱軸是高頻項目中可 以合併的物品。圖中表示橫軸的 A 可以與 B、C…N 合併程候選項目,B 可以與 C…N 合併程候選項目。

BL 的意思為該物品可與幾項物品合併,圖 2.7 的範例即為 A 的 BL 為 N-1。但並 不是每項物品在實際計算中都代表者一樣的分量,所以 CL 就多考慮了一項因素,那 就是每個物品的 TID 長度。TID 長度越長表示這項物品越有機會與別項物品合併成下 一階的候選項目,所以權重值也相對的高。

(23)

13

圖 2.7 合併示意圖

圖 2.8 Cyclic Lattice 表示圖

BWT 與 CWT 都是對 TID 權重分配的方法,BWT 就是以 Block_Lattice 為基礎的 TID 分割方式;CWT 則是以 Cyclic_lattice 為基礎的 TID 分割方式。而根據論文的實 驗結果,WDPA 提出的四個方法中 CWT 是最有效的負載帄衡方法。

此演算法在資料量少或高頻項目少的時候可以呈現負載帄衡效果,但是當資料量 變大或高頻項目變多時卻會有不帄衡的情況。雖然 WDPA 演算法考量了 TID 的長度 是否會影響到 CPU 處理時間而導致負載不帄衡的情況,但是在產生候選項目的階段

(24)

14

除了 TID 的長度會影響執行時間還有合併高頻項目是否能合併成候選項目也會影響 執行時間。因為兩個高頻項目合併成候選項目要做的事情與兩個高頻項目無法合併所 做的事情不盡相同,所花的時間當然也不同。

在 WDPA 中所評估的負載帄衡項目 A 可以與項目 B 至項目 N 合併如圖 2.8 所示,

但是當兩項物品要合併成三項物品時問題就出現了。我們知道{A, B}可以與{B, C}合 併為{A, B, C},但是{A, B}與{D, E}無法合併成三項物品。也就是說此演算法所評估 的工作量為理論上的最大值,如果可以透過其他的方法使我們有更多的資訊來評估工 作量使其更加準確計算負載帄衡的話可以讓此演算法更加的快速。

(25)

15

第三章 研究方法

現在的資料探勘中有許多探勘的方式,而關聯規則探勘以 Apriori 演算法與 Fp-tree 演算法最為經典。Fp-tree 演算法在第二章所提到,此演算法可以壓縮探勘資 料庫的空間大小但在帄行處理中卻是不容易的。相對於 Fp-tree 演算法在帄行上遇到 的問題,Apriori 演算法在概念上就非常適合以帄行來達到加速的效果。但是原始的 Apriori 演算法並無法有效的運用多核心的效能。本研究提出的解決方案:Multi-core Apriori Transaction Identifiers algorithm (MATI),其主要目的為在多核心架構上有效提 升 Apriori 演算法的執行效率。

Apriori 演算法主要可分成兩個部分,分別為「確認候選項目是否符合門檻值」

及「高頻項目合併為下一階的候選項目」。在過去的相關研究中顯示 TID 概念在「確 認候選項目是否符合門檻值」為有效的方法,所以本研究沿用 TID 概念加速演算法。

在「高頻項目合併為下一階的候選項目」部分,為了改善 Chai 的方法使判斷範圍縮 小及更有效的在多核心架構下達到負載帄衡,本論文則提出三個策略使 MATI 演算法 可以更有效率的在多核心架構下執行。這三個策略分別為「項目分群」、「排成分配」、

「快速合併」。「項目分群」把產生的高頻項目依項目的不同分為不同的族群,把產生 候選的範圍縮成以群為單位,利用縮減合併範圍達到加速演算法的效過。「排成分配」

則是以群為單位分配給各執行緒處理,避免將資料切割太小使執行緒內的高頻項目無 法合併成下一階的候選項目造成無法準確產生候選項目。「快速合併」使用更多的限 制產生候選項目,並且使產生的候選不會重複,縮短產生候選項目的時間。

第一節 項目分群

當 Apriori 演算法產生下一階候選項目時,將該階所有高頻項目兩兩配對,再判斷 產生的項目集合,是否符合下一階候選項目的要求;藉助篩選方法確認候選項目後,

(26)

16

再比對資料庫的交易記錄,計算候選項目若高於門檻值則成為高頻項目。「項目分群」

其目的在縮小高頻項目合併的範圍,不將全部高頻項目納入合併對象,只選擇可能成 為候選的項目。

所謂項目分群,是將該階所有高頻項目分成多個群組,以高頻項目中第一個物品,

當作分群的索引;以同一群高頻項目為合併範圍,唯有相同範圍才能合併而產生候選 項目,超過範圍則視同非必要項目,可避免產生多餘的候選項目。此方法的優點在於 縮減合併範圍,降低合併的次數,而達到減少產生候選項目的時間。

表 3.1 分群方式

物品項目集合 出現次數

A, B 2

A, C 2

B, C 3

B, E 3

C, E 3

以表 3.1 為例,總共有五筆高頻項目及各項目的支持度。在其他方法中,項目集 {A, B}會與{A, C}、{B, C}、{B, E}、{C, E}做合併的確認,{A, C}與{B, C}、{B, E}、

{C, E}做合並確認。以此類推,無論合併的結果是不是我們所需要的候選項目或者無 法合併為候選項目的動作,整個合併完成後總共會做 10 次的合併動作。

我們以相同的表 3.1 說明提出「項目分群」有什麼影響。在合併開始之前我們會 對物品項目集合作分群的動作。表 3.1 的例子會分為 3 群,分別以 A、B、C 為分群 的索引。A 的群組包含{A, B}、{A, C},B 的群組包含{B, C}、{B, E},C 的群組只有 {C, E}。完成分群動作後對各個群組做各自的合併,A 群組只有兩個項目所以只合併

(27)

17

1 次,B 群組也只有兩個項目所以合併 1 次,C 群組只有一個項目無法合併。整個過 程只做了 2 次的合併及分群動作。

此策略主要概念利用分群的動作縮減項目與項目合併的範圍,只要減少了不必要 的合併就可以降低不必要的時間浪費。雖然此策略多了一個分群的動作,但是此分群 動作為一個簡單的概念,在運作上也比執行一堆非必要性的合併來的迅速。

第二節 排程分配

MATI 演算法在核心負載分配時必頇避免在不同的核心做重複工作以減少不必要 的負擔。更重要的,此策略可更有效的控制負載帄衡。

本研究將相同索引物品列入同一群組,該組的高頻項目交給相同的核心產生下一 階的候選項目。如此就可避免在「項目分群」策略下,因為資料分散在不同核心造成 單獨的項目存在而誤判無適當高頻項目合併,而導致候選項目產生遺漏的情況發生。

負載帄衡的要求,藉助於每組別包含幾筆高頻項目的計算;茲假設有 P 個核心,則每 個核心所分配的負載量就是:「前 N 組別所包含的權重」 ≧「所有權重/P」。而所有 權重計算則是所有高頻項目可與其他項目合併的可能,每一種可能的權重值為 1。將 全部的高頻項目權重值加總則為所有權重的值。

在此小節我們以圖 3.1 說明,總共有十項高頻項目分別為{A, B}、{A, C}…{D,E}。

圖 3.1 為一般的計算負載帄衡方式,所有的高頻項目兩兩合併產生下一階候選項目。

此圖主要表是在計算分配工作給各個核心時是如何計算的。{A, B}會與其它 9 個高頻 項目合併所以工作量為 9、{A, C}與其它 8 個高頻項目合併所以工作量為 8,之後的 工作量也是如此計算,{C, E}只可以{D, E}合併所以工作量為 1。所以總共的工作量 為 45。

(28)

18

圖 3.1 一般方法權重計算

我們以相同例子使用分群的方式計算負載帄衡的工作量,以圖 3.2 表示。我們從 圖 3.2 可以明顯的看出橙色的部分減少許多。這個情況表示我們預估可能產生候選項 目的範圍比較小,做合併判斷的次數也比較少。圖 3.2 中{A, B}只能與{A, C}、{A, D}、

{A, E}此三項高頻項目合併,所以{A, B}在負載工作量中只占了 3 的工作量。而{A, C}

只占 2 的工作量、{A, D}只占 1 的工作量,{B, C}、{B, D}、{C, D}分別占了 2、1、

1 的工作量。以此方法所評估的總工作量為 10。

一般的方法與我們所提出分群方法所評估出來的量雖然差距很大,但並不是數字 大就表示較具負載帄衡能力或數字小就各核心工作量的差距就小。而是在分配工作給 各個核心時對於何種資料型態會有較佳的選擇。

(29)

19

圖 3.2 以分群方式計算負載帄衡

第三節 快速合併

所謂快速合併是指,第 N 階高頻項目要產生下一階的候選項目時,其兩筆高頻項 目的前 N-1 項物品必頇相同,並且第二筆高頻項目的第 N 項物品,必頇比第一筆高 頻項目的最後一項物品編號來得大,如果不符合條件則結束這次的合併。本條件的優 點就是將可組合成候選項目的多種方法,強制收斂為單一方法且合併的項目為排序好 的項目可省去排序的時間。當 N 個物品組成的候選項目有 𝑛×(𝑛−1)2 種組合方法,換言

之會被產生𝑛×(𝑛−1)2 次。因為把產生方法收斂為一種,如此就節省下候選項目是否重複 產生的判斷時間,使演算法更加快速。而且此方法並不會把一些高頻項目遺漏。

Apriori 演算法在初階兩筆單頻項目合併時,可直接合併成候選項目不需判斷是否 重複,之後再確認是否為高頻。本研究所提的「快速合併」策略與此觀念相符,但條

(30)

20

件是前 N-1 項的物品必頇是相同的才可以把兩個高頻項目最後一項當作兩項單頻項 目判斷。

舉例來說我們的「快速合併」有什麼好處。現在有一個由四個物品所組成的候選 項目{A, B, C, D},它的子集合為三個物品所組成的高頻項目{A, B, C}、{A, B, D}、

{A, C, D}、{B, C, D}。在一般的合併方式中,會因為四個子集合相互產生共同的候選 項目{A, B, C, D}總共被產生六次而造成多餘的不必要的資源浪費,如圖 3.3。但是我 們的方法因為第一個限制前 N-1 項目必頇相同也就是四個項目只剩下{A, B, C}、{A, B, D},第二個限制即第二筆高頻的第 N 項物品必頇比第一筆的第 N 相物品大才可以 合併,所以{A, B, C}與{A, B, D}才可以合成{A, B, C, D}候選項目。

但是這個策略並不會應此限制而無法產生{A, B, C, D}候選項目。假設現在少了{A, B, D}剩下{A, B, C}、{A, C, D}、{B, C, D}這三個高頻項目。在我們的方法中就無法 產生{A, B, C, D}這個候選項目,但是在一般的方法中{A, B, C}、{A, C, D}還是可以 產生{A, B, C, D}這個候選項目;{A, C, D}、{B, C, D}與{A, B, C}、{B, C, D}亦然。

雖然一般的方法可以產生出{A, B, C, D}此候選項目,但是在確認子項目是否為高頻 的時候會發現{A, B, D}不是高頻項目,所以{A, B, C, D}必為非高頻,則刪除此候選 項目{A, B, C, D}。

圖 3.3 產生候選項目組合

(31)

21

我們用下面一個例子來說明 MATI 演算法是如何運行的。首先我們會有一個資料 庫如圖 3.4 所示,在這資料庫裏面有五筆資料分別為:T1、T2、T3、T4、T5。這五筆 資料共包含五項物品,分別為 A、B、C、D、E。在這個例子中我們設定最小支持度 為 40%,也就是說候選項目必頇出現兩次以上才算高頻項目。從圖 3.2 可以看到原始 的資料庫是以每筆交易包含哪些物品為一個資料格式儲存,但是在 TID 表格中它是 以某個物品出現在哪幾筆交易中為一個儲存的格式。在 TID 的方式中當我們要確認 某個候選項目的支持度為多少時不必去掃描整個資料庫,只需確認候選項目所包含物 品的 TID 欄位即可知道支持度為多少;也就是說當候選項目為三個物品所組成,則 只需確認三個欄位的 TID 資料而不必掃描整個資料庫。

圖 3.4 資料庫轉換 TID 表格

當資料庫轉換成 TID 表格後,我們必頇確認各個物品在資料庫中出現幾次。此 時我們可以從 TID 表格中看到 A 物品出現在 1、2、4 的交易中,所以 A 物品的支持 度為 3。以此類推,B 的支持度為 2,C 的支持度為 4,D 的支持度為 4,E 的支持度 為 2。如圖 3.5 中 C1表格所示。刪除低於支持度 40%的資料後形成 L1表格(在這個例 子中因為每個候選項目支持度都在 2 以上,所以並未有候選項目被刪除)。

(32)

22

圖 3.5 MATI 演算法範例

我們使用產生完成的第一階高頻項目合併出第二階的候選項目。A 物品會跟 B、C、

D、E 產生 AB、AC、AD、AE 四個候選項目;B 物品會與 C、D、E 產生 BC、BD、

BE 三個候選項目,C 跟 D 的產生方法也是如此,而 E 則沒有其他物品合併。當我們 確認 AB 這候選項目的時候我們會抓出 TID 表格中的 A 物品及 B 物品的資料。A 物 品的 TID 資料為 1、2、4,B 物品的 TID 資料為 2、3。我們將 TID 的資料做交集會 剩下 2 這筆資料,此資訊告訴我們在編號為 2 的交易中同時出現 A 物品及 B 物品。

也因為做完交集只剩下 2 這一筆資料,所以 AB 候選項目的支持度為 1。AC 候選項 目則是抓取 A 物品的 TID 資料 1、2、4,C 物品的 TID 資料 1、2、3、4。做完交集 剩下 1、2、4 這三筆資料,所以支持度為 3。確認完所有的候選項目支持度如 C2所 示。刪除不符 40%的門檻值候選項目,剩下的即為高頻項目 L2

(33)

23

當 L2要合併成第三階的候選項目時,AC 與 AD 合併成 ACD,但是 AC 不會與 BC、

BD、CD、DE 合併。因為在我們的策略中,物品項目的第一個物品為分群的標記,

所以物品開頭為 A 的各自為一群組。所以 AC 與 AD 合併成 ACD,BC 與 BD 合併成 BCD,CD 與 DE 則沒有對象合併成三階的候選項目。確認 ACD 與 BCD 的支持度後 如 L3所示,ACD 與 BCD 為最後的高頻項目。因為 ACD 無法與 BCD 合併成四階的 候選項目所以演算法終止。

圖 3.6 和圖 3.7 為演算法內容,圖 3.6 演算法是 Apriori 演算法的修改,以 TID 確 認候選項目,其優點是掃描資料範圍小而迅速。圖 3.7 演算法是本研究在每兩高頻項 目合併時,產生下一階候選項目的詳細步驟。其初階候選項目的產生,以一般演算法 進行,自第二階候選項目產生開始,則依照本研究三個策略運作。

(34)

24

MATI: main function

Structure a TID table and scan database

T = a transaction database over the set of items K = 1; Ck = T;

// K is merge round, Ck is candidate itemsets in K round

while C

k number > 1 do

allocated candidate itemsets to each thread foreach thread do

scan TID table

if candidate itemset count > min support candidate itemset push Fk

//Fk is frequent itemsets in K round

end

end

collect each thread’s frequent itemsets

allocated frequent itemsets to each thread foreach thread do

Merge_function end

collect each thread’s candidate itemsets

K++

end

圖 3.6 MATI 主要演算法

此演算法主要說明 MATI 主要的流程是如何運作。如果候選項目 Ck小於 1 的話 此演算法即為中止。候選項目會分給各個核心確認支持度,當支持度大於門檻值才會 成為高頻項目。而新的高頻項目也會分配給各個核心合併成下一階的候選項目。

(35)

25

Merge_function

if K>1

foreach frequent_itemset do

index_item = frequent_itemset.item1

M_frequent_itemset = next frequent_itemset while index_item == M_frequent_itemset.item1 do

if frequent_itemset.item

1==M_frequent_itemset.item1,…, frequent_itemset.itemk-1==M_frequent_itemset.itemk-1 &&

frequent_itemset.itemk<M_frequent_itemset.itemk

frequent_itemset merged with M_frequent_itemset

else

break;

end

M_frequent_itemset = next M_frequent_itemset

end

end else

foreach frequent_itemset do

M_frequent_itemset = next frequent_itemset

while M_frequent_itemset != NULL do

frequent_itemset merged with M_frequent_itemset M_frequent_itemset = next M_frequent_itemset

end

end end

圖 3.7 merge function 合併方法

此演算法為高頻項目如何合併成下一階候選項目的方程式。第二階以上的高頻項 目合併會與 Apriori 演算法不同,當 K 大於 1 時會判斷兩個高頻項目的前 K-1 個物品 是否為相同的,如果 K-1 個物品有任何一個不同的話則不會合併成下一階的候選項目;

(36)

26

如果全部物品皆相同則會合併成下一階候選項目,並且在之後會確認是否為高頻項 目。

本論文所提出的三個方法項目分群、排程分配、快速合併,縮小高頻項目合併範 圍並且在各個核心產生的候選項目都是唯一的項目,這個特性使資料集中至主要核心 時不必判斷所收集的項目集是否已經存在,不用擔心是否已經儲存此候選項目或省去 計算此候選項目已經被產生的次數。因為本論文所提出的這三個方法使探勘速度可以 得到提升,並且在負載帄衡方面也可以達到負載帄衡的效果。

(37)

27

第四章 實驗結果

為了驗證 MATI 演算法與其他方法的效能差異,本論文使用具公信力的 IBM 資 料產生器(IBM data generator)產生虛擬資料來驗證各個演算法的優異[1] 。此資料產 生器會使用到一些參數來改變產生資料的類型(如下表 4.1),其中 T 代表每筆交易的 帄均長度;I 代表最大潛在頻繁項目帄均長度;D 代表交易筆數;N 代表項目數量。

表 4.1 IBM 資料產生器參數

參數 代表含意

T

每筆交易的帄均長度 Avg. items per transaction

I

最大潛在頻繁項目帄均長度 Avg. length of maximal pattern

D

交易筆數

Number of transactions

N

項目數量

Number of different items

本實驗所使用的硬體為雙核心處理器 Intel(R) Core(TM) i5 CPU 650 @ 3.20GHz、

記憶體 4GB、快取記憶體 4MB。作業系統環境為 Windows 7 企業版 64 位元作業系統。

實作演算法編譯器為 Microsoft Visual Studio 2008,以 Visual C++語法 OpenMP 函式庫 實作。

(38)

28

表 4.2 實驗帄台硬體架構 CPU 型號 Intel(R) i5 650

核心數 2 核心

處理速度 3.20 GHz L2 快取記憶體 256KB x2 L3 快取記憶體 共用 4MB 記憶體大小 4GB

編譯語言 Microsoft Visual Studio 2008, C++, OpenMP

本論文所提出的方法是為了改善傳統演算法在多核心架構下無法有效利用多核 心的效能,所以以下的實驗會針對演算法的時間以及所分配給各個核心的工作量是否 可以達到負載帄衡,避免處理器處於閒置的狀態造成時間的浪費為討論目標。在比較 的方法中除了提出的 MATI 演算法還會比較 Kun-Ming Yu 與 Jia-Ling Zhou 所提出的 WDPA 演算法[18] ,及 Chai 所提出的演算法[5] 並且對此演算法做一個帄行的處理 以及具有 TID 方法的 Apriori 演算法。

第一節 不同資料量比較

在實驗設計我們首先以 T10I4D100KN100K 為測詴資料。此資料所代表的涵義為 資料庫擁有十萬筆交易筆數;帄均十萬筆的交易,每筆交易擁有十項物品的長度;十 萬筆資料帄均的每筆交易潛在長度為四項物品;此資料庫有十萬個不同的物品項目。

圖 4.1 縱軸為執行時間(秒),橫軸為執行緒的數量,支持度為 0.2%,也就是十萬 筆資料中要出現 200 次才為高頻項目。Thread_1 表示只用一個 thread 執行程式,

thread_2 表示使用兩個執行緒執行程式,thread_4 及 thread_8 則表示使用 4 個執行緒 及 8 個執行緒執行程式。從圖 4.1 可以看到除了 para_Chai 的執行時間比較高,其他

(39)

29

三個方法都是在 10 秒左右。會產生這種結果是因為 MATI、WDPA、para_TID 都是 使用 TID 的概念而 para_Chai 並無使用這個概念所以時間才會有如此的差異。而 MATI、

WDPA、para_TID 都差距會如此的小是因為高頻項目的數量非常少,所以各個演算法 的特色無法明顯的顯示。詳細的實驗數據如下表 4.3。

圖 4.1 資料量為 100K 支持度為 0.2%實驗數據

表 4.3 資料量為 T10I4D100KN100K 支持度為 0.2%實驗數據 1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 MATI 11.296 6.05 6.006 5.938 WDPA 11.685 7.201 6.167 6.113

para_TID 12 6 6 7

para_Chai 201 103 101 102

圖 4.2 與上一個實驗的差別為降低門檻值,支持度為 0.15%,也就是十萬筆的資 料庫中只要出現超過 150 次即為高頻項目。從圖中我們可以看到沒有使用 TID 方法 的 para_Chai 的時間一樣遠高於 MATI、WDPA、para_TID,這是因為 Apriori 演算法

0 50 100 150 200 250

thread_1 thread_2 thread_4 thread_8 執

行 時 間

(

)

資料量100K 支持度0.2%

MATI WDPA para_TID para_Chai

(40)

30

在確認候選項目是否為高頻會重複的掃描資料庫,而候選項目數量越多此情況會愈明 顯。

圖 4.2 資料量為 100K 支持度為 0.15%實驗數據

表 4.4 資料量為 T10I4D100KN100K 支持度為 0.15%實驗數據 1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 MATI 75.241 38.56 38.792 38.568 WDPA 77.636 39.716 40.054 39.736

para_TID 79 41 40 40

para_Chai 2153 1085 1262 1087

從表 4.4 中我們可以看到 MATI 與 WDPA 的執行時間差距較表 4.3 來的明顯。這 是因為降低支持度使通過門檻值的項目集合變多了,而 MATI 與 WDPA 也因為項目 集合變多讓其演算法的不同處表現出來。

0 500 1000 1500 2000 2500

thread_1 thread_2 thread_4 thread_8 執

行 時 間

(

)

資料量100K 支持度0.15%

MATI WDPA para_TID para_Chai

(41)

31

圖 4.3 資料量 10K 支持度 0.1%實驗數據

接下來我們比較的資料庫資料為一萬筆交易,環境支持度設定為 0.1%而每筆交 易的帄均長度一樣為 10,最大潛在頻繁項目帄均長度一樣為 4,物品項目數量為 10 萬。因為 para_Chai 未使用 TID 方法,所花的時間較長,所以我們在圖中也就不顯示。

圖 4.3 為 MATI、WDPA、para_TID 在此參數下的實驗結果。

雖然資料量從 10 萬筆變成 1 萬筆資料,但是支持度的%數降低其他的參數也不 變,這樣的情況下使得更多的高頻項目被產生。雖然資料庫的大小變小了,但是通過 的高頻項目變多了,所以 MATI 與 WDPA 及 para_TID 的差距也更明顯。

表 4.5 資料量 T10I4D10KN100K 支持度 0.1%實驗數據

1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 MATI 9.812 5.382 5.132 5.101 WDPA 13.213 7.378 7.207 7.082

para_TID 23 12 13 15

para_Chai 3993 2059 2048 2043

0 5 10 15 20 25

thread_1 thread_2 thread_4 thread_8 執

行 時 間

(

)

資料量10K 支持度0.1%

MATI WDPA para_TID

(42)

32

第四個實驗我們以上一個實驗相同的資料執行較低支持度 0.05%的數據。而 para_Chai 所花的時間太多,我們在圖 4.4 就不顯示其實驗數據。

圖 4.4 資料量 10K 支持度 0.05%實驗數據

在此支持度下通過門檻值的項目集合為上一實驗的數倍,所以每個演算法跑出來 的時間也增加了數倍。在圖 4.4 裡我們可以看到 MATI 從 1 個執行緒到 2 個執行緒、

4 個執行緒、8 個執行緒都是帄穩的下降,但是 WDPA 及 para_TID 在 2 個執行緒到 4 個執行緒、8 個執行緒的部分是有微微升高的。這個情況是因為 WDPA 與 para_TID 在帄行處理時沒有規劃其資料切割後在各個核心是否會產生相同的高頻項目,所以在 回收各個核心所產生的高頻項目時,就必頇判斷回收的高頻項目是否已經存到。也因 為這個動作使得演算法的速度被拖慢。表 4.6 為各演算法的數據。

0 50 100 150 200 250 300 350 400

thread_1 thread_2 thread_4 thread_8 執

行 時 間

(

)

資料量10K 支持度0.05%

MATI WDPA para_TID

(43)

33

表 4.6 資料量 T10I4D10KN100K 支持度 0.05%實驗數據

1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 MATI 45.786 24.694 21.902 21.496 WDPA 129.168 96.033 101.914 105.081

para_TID 341 198 185 198

para_Chai 32004 16538 19195 18359

圖 4.6 顯示 T10I4D10KN100K 的數據中以 2 個執行緒在不同的支持度來看各個演 算法有什麼差異。T10 表示每筆交易的帄均長度為 10;I4 表示最大潛在頻繁項目帄 均長度為 4;D10K 表示交易筆數為一萬筆交易,其中 K 代表 1000 的意思;N100K 表示資料庫中有十萬個不同的物品項目,K 一樣代表 1000。

圖 4.5 資料量 10K 不同支持度比較

從圖 4.5 可以發現支持度越低所花的時間越多,因為支持度低也就代表會有較多 的高頻項目,所以處理時間也會較久。而圖中橫軸代表支持度其間隔為 0.05%,我們 可以發現其支持度越低所花的時間為指數成長的。而支持度越高則通過門檻值的高頻 項目也就越少,所以時間花費也就較少。表 4.7 為實驗的詳細數據。

0 50 100 150 200 250

sup_0.05% sup_0.1% sup_0.15% sup_0.2%

執 行 時 間

(

)

資料量10K 不同支持度

MATI WDPA para_TID

(44)

34

表 4.7 資料量 T10I4D10KN100K 不同支持度比較

支持度 0.05% 支持度 0.1% 支持度 0.15% 支持度 0.2%

MATI 22.1 5.382 1.061 0.18

WDPA 96.033 7.378 1.138 0.187

para_TID 201 13 2 1

para_Chai 16538 2059 254 23

第二節 不同資料帄均長度

在此章節因為 para_Chai 演算法所花費的時間過長,所以在實驗的部份我們就不 做實驗。接下來主要探討 MATI、WDPA、para_TID 的演算法差異。而實驗資料我們 以每筆交易的帄均長度為 20 做實驗,最大潛在頻繁項目帄均長度依然為 4,物品項 目也是 10 萬個不同的項目。

圖 4.6 帄均交易長度 20 支持度 0.1%實驗數據

0 50 100 150 200 250 300 350 400

thread_1 thread_2 thread_4 thread_8 執

行 時 間

(

)

帄均交易長度20 支持度 0.1%

MATI WDPA para_TID

(45)

35

圖 4.6 我們可以看到 WDPA 與 para_TID 在 4 個執行緒及 8 個執行緒時與 2 個執 行緒相比會有多餘的時間浪費。這是因為產生候選項目及確認候選項目是否為高頻都 是帄行運作,但是在帄行的過程中產生相同的候選項目或高頻項目,所以在做資料集 中至同一執行緒時多了項目是否已經存在的判斷。有因為上面所述之原因,當執行緒 數量愈多、產生的資料愈多時都會讓圖 4.6 的情況更加明顯。MATI 也因為合併的方 法與 WDPA 及 para_TID 不相同所以在高頻項目增加時,演算法的優點也較為明顯,

就算是只有一個執行緒我們所提出的 MATI 演算法也優於 WDPA 及 para_TID 演算法。

詳細的數據如下表。

表 4.8 資料量 T20I4D10KN100K 支持度 0.1%實驗數據

1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 MATI 110.298 55.394 55.775 55.012 WDPA 180.652 123.514 125.876 136.345

para_TID 356 199 205 219

我們以相同的實驗資料 T20I4D10KN100K,不同的支持度 0.015%。相較於上一 個實驗此實驗擁有較高的支持度所以高頻項目的數量也會較少,實驗的圖如下圖 4.7 所示。

圖 4.7 所示實驗結果個個演算法中仍然是 MATI 的結果最佳,但是其幅度不如圖 4.6 明顯。這是因為調高了支持度使通過門檻值的項目集合變少了,所以各演算法的 優缺點會不如圖 4.6 來的明顯。實驗數據如表 4.9。

(46)

36

圖 4.7 帄均交易長度 20 支持度 0.15%實驗數據 表 4. 9 資料量 T20I4D10KN100K 支持度 0.15%實驗數據

1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 MATI 55.552 29.047 28.876 28.106 WDPA 69.226 40.82 40.565 41.046

para_TID 101 56 57 59

在交易帄均長度 20 的實驗中接下來改變其潛在長度,從潛在長度 4 改至潛在長 度 8,而交易筆數一樣為一萬筆,物品項目為十萬個物品項目。

0 20 40 60 80 100 120

thread_1 thread_2 thread_4 thread_8 執

行 時 間

(

)

帄均交易長度20 支持度 0.15%

MATI WDPA para_TID

(47)

37

圖 4.8 潛在長度 8 支持度 0.15%實驗數據

表 4.10 資料量 T20I8D10KN100K 支持度 0.15%實驗數據

1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 MATI 19.51 10.591 9.444 9.179 WDPA 99.963 79.528 87.504 92.644

para_TID 320 167 180 200

此演算法可以更明顯的看出 MATI 是三個演算法中效率最高的,沒經過處理的 para_TID 所顯示的結果是當執行緒的數量越多時,在合併個執行緒的資料所造成的 時間消耗非常的高。也就是如果不減少各個執行緒做相同的工作,那麼所造成的時間 浪費則會更加嚴重。在 WDPA 演算法中也是存在著這樣的情況。

因為此實驗資料將潛在帄均長度從 4 改成 8,所以高頻項目的項目個數被拉高,

也就是說此演算法一階一階合併上去的階層數增加。而因為項目各數的增加可以看到 MATI 演算法比起 WDPA 及 para_TID 所花的時間是最少的。因為第三章所提到的「快 速合併」多了許多判斷來決定該項目是否該合併成為候選項目,而降低了許多的候選

0 50 100 150 200 250 300 350

thread_1 thread_2 thread_4 thread_8 執

行 時 間

(

)

潛在長度8 支持度 0.15%

MATI WDPA para_TID

(48)

38

項目被產生,省去了一些多餘的工作。圖 4.8 也說明了當潛在長度愈高時,與其他的 方法差異也會更為顯著。

圖 4.9 資料量 100K 執行緒數量 2

圖 4.9 是 T10I4D100KN100K 支持度 0.15%,計算各執行緒所產生的候選項目數 量,縱軸是產生候選項目的個數;橫軸為演算法的階層,圖的右邊 MATI_1、MATI_2 代表著 MATI 演算法的第一個執行緒與第二個執行緒;WDPA_1、WDPA_2 為 WDPA 演算法的第一個執行緒及第二個執行緒。因為潛在長度為 4,所以可以看到候選項目 的數量集中在第三階到第五階。在圖 4.9 的 MATI 兩個執行緒產生的數量差距與 WDPA 演 算 法 的 兩 個 執 行 緒 產 生 候 選 項 目 數 量 差 距 為 近 似 的 , 這 表 示 在 T10I4D100KN100K 的資料中負載帄衡屬於差不多的。

0 20 40 60 80 100 120 140

第三階 第四階 第五階 第六階 第七階 第八階

產 生 候 選 項 目 數 量

T10I4D100KN100K thread = 2

MATI_1 MATI_2 WDPA_1 WDPA_2

(49)

39

圖 4.10 資料量 10K 執行緒數量 2

此實驗數據為 T10I4D10KN100K 支持度為 0.05%執行緒設定為 2,從圖 4.10 的 圖中可以看出產生的候選項目數量一樣是集中於第三階至第五階。MATI 演算法所產 生的候選項目數量在各個執行緒中是非常帄均的,但 WDPA 演算法所產生的候選項 目在第三階至第五階是非常不帄衡的。因為高頻項目的數量比圖 4.9 來的多,所以 WDPA 在計算負載帄衡的權重時較前面的高頻項目所評估的權重會很大,但是產生的 候選項目數量卻不如評估的多而產生了圖 4.10 的情形。MATI 演算法是產生候選項目 後再計算支持度,WDPA 則是邊產生候選項目邊合併 TID 表格確認支持度。產生候 選項目數量 MATI 因為沒有確認子集合所以會略高於 WDPA 演算法,但是在圖 4.10 所顯示的 WDPA 數量為產生並確認候選項目後的數量,這是因為演算法的差別所以 只能顯示確認後的數量。以時間的數據表示 MATI 合併及確認所花的時間為 0.577 秒 及 0.53 秒,而 WDPA 所花的時間為 0.998 秒及 11.294 秒。因為合併方法的不同所以 所花的時間也不相同,但是值得注意的是在此負載方式下的時間差距是很龐大的。

0 2000 4000 6000 8000 10000 12000 14000 16000

產 生 候 選 項 目 數 量

T10I4D10KN100K thread = 2

MATI_1 MATI_2 WDPA_1 WDPA_2

(50)

40

圖 4.11 資料量 10K 帄均長度 20 執行緒數量 2

當資料的參數從 T10I4D10KN100K 更改成 T20I4D10KN100K 但是支持度從 0.05%變成 0.15%,可以看到圖 4.11 與 4.10 的趨勢雷同,MATI 演算法的各執行緒所 產生的數量相近,WDPA 演算法在第三階至第五階所產生的候選項目仍然是非常不帄 衡的。但是第六階以後 MATI 與 WDPA 在計算負載帄衡的結果都是趨近於帄衡的狀 態,而 MATI 演算法所產生的候選項目幾乎都是相近,WDPA 演算法所產生的候選項 目數量第一個執行緒幾乎都會較第二個執行緒所產生的少,這也是因為負載帄衡計算 方式的不同所造成的結果。

第三節 8 核心架構實驗環境

先前的實驗環境為雙核心電腦,為了驗證本論文所提出的 MATI 演算法在多核心 的環境下也能有效提升探勘速度,以 8 核心的電腦架構實際執行 IBM 資料產生器所 產生的資料。硬體架構為 intel(R) Xeon(R) E5520,雙處理器,每顆處理器有 4 個核心 數,記憶體為 16GB,作業系統為 Windows Server Enterprise。虛擬資料仍然由 IBM 資料產生器所產生。

0 1000 2000 3000 4000 5000 6000

第三階 第四階 第五階 第六階 第七階 第八階 第九階 第十階 第十一階 產

生 候 選 項 目 數 量

T20I4D10KN100K thread = 2

MATI_1 MATI_2 WDPA_1 WDPA_2

(51)

41

圖 4.12 資料量為 100K 支持度為 0.2%核心數為 8

表 4.11 資料量為 T10I4D100KN100K 支持度為 0.2%核心數為 8

1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 16 個執行緒 MATI 15.876 8.128 4.359 2.436 2.551

WDPA 16.036 8.469 4.595 2.572 2.632 para_TID 16.403 8.518 4.621 2.563 2.919

圖 4.12 顯示的差異結果理由與圖 4.1 相同,符合支持度的高頻項目數量太少,

使各演算法沒法有效的鑑別其差異性。但是圖 4.12 可以看出在 8 核心的電腦架構下 演算法因為核心數便多使速度呈線性成長,在 8 核心的電腦中 MATI 演算法加速比約 為 6.517。

0 2 4 6 8 10 12 14 16 18

thread_1 thread_2 thread_4 thread_8 thread_16 執

行 時 間

(

)

資料量100K 支持度0.2%

MATI WDPA para_TID

(52)

42

圖 4.13 資料量為 100K 支持度為 0.15%核心數為 8

表 4.12 資料量為 T10I4D100KN100K 支持度為 0.15%核心數為 8

1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 16 個執行緒 MATI 103.25 53.004 26.97 14.373 14.247 WDPA 106.352 54.128 27.823 14.818 14.715 para_TID 108.008 54.784 27.814 14.313 16.149

圖 4.13 與表 4.12 為支持度 0.15%在資料量為 100K 的實驗數據。圖 4.13 與圖 4.12 所顯示的意義相同,各個演算法的差異都不大。兩張圖的曲線相同只有執行時間的比 例提升,說明通過支持度的高頻項目增多,但是高頻項目多數為第一階或第二階,而 MATI、WDPA、para_TID 第一階與第二階的做法類似,所以結果也相似。因為實驗 硬體為 8 核心電腦,所以當執行緒數為 8 時理應有最佳的加速比。而執行緒數量超過 8 時,因為演算法的不同會對執行時間造成不必要的浪費或處理器的閒置造成時間浪 費。

0 20 40 60 80 100 120

thread_1 thread_2 thread_4 thread_8 thread_16 執

行 時 間

(

)

資料量100K 支持度0.15%

MATI WDPA para_TID

(53)

43

圖 4.14 資料量 10K 支持度 0.1%核心數 8

表 4.13 資料量 T10I4D10KN100K 支持度 0.1%核心數 8

1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 16 個執行緒 MATI 13.398 7.367 3.732 2.533 2.08

WDPA 18.334 10.082 5.423 3.813 4.585 para_TID 35.36 17.966 11.41 8.511 9.253

圖 4.14 各演算法都因 8 核心的架構得到效能的提升,但是當執行緒數量由 8 增加 為 16 時 WDPA 與 para_TID 的執行時間都略為增加。這種現象說明沒有良好的負載 帄衡或工作分配會使帄行處理效率降低,而當執行緒多過核心數時則會使最佳的效益 多了不必要的時間浪費。本論文所提出的 MATI 演算法在此實驗環境仍然可以穩定的 因核心數增加而提升效率。

0 5 10 15 20 25 30 35 40

thread_1 thread_2 thread_4 thread_8 thread_16 執

行 時 間

(

)

資料量10K 支持度0.1%

MATI WDPA para_TID

(54)

44

圖 4.15 資料量 10K 支持度 0.05%核心數 8

表 4.14 資料量 T10I4D10KN100K 支持度 0.05%核心數 8

1 個執行緒 2 個執行緒 4 個執行緒 8 個執行緒 16 個執行緒 MATI 62.684 36.039 14.663 10.745 7.921

WDPA 181.308 135.892 118.778 116.897 121.751 para_TID 482.138 273.417 197.043 169.895 190.228

當支持度降低至 0.05%時如圖 4.15 所示。從圖 4.15 可以看到 WDPA 在執行緒數 量為 4 的時候執行時間就差不多與執行緒數量 8、16 相同,我們認為這是 WDPA 的 負載帄衡規畫並非很完善,導致雖然執行緒數量增加卻無法有效的達到效率的提升。

而圖 4.15 也看出因為高頻項目的增加,使 MATI 演算法對其他演算法的加速比較圖 4.14 來的好。

0 100 200 300 400 500 600

thread_1 thread_2 thread_4 thread_8 thread_16 執

行 時 間

(

)

資料量10K 支持度0.05%

MATI WDPA para_TID

參考文獻

相關文件

所樹立起的旗幟。許多被歸類 為存在主義的學者,根本反對 這個稱呼。存在主義以外的學

軟體至 NI ELVIS 環境。現在,您在紙上或黑板上的設計可在 Multisim 內進 行模擬,並模擬為 NI ELVIS 或 NI ELVIS II 電路板配置上的傳統電路圖。設 計趨於成熟後,使用者即可在 NI

本校秉承校訓「愛主愛人,求道更 新」,本著基督精神,讓學生在優 良及愉快的環境內,善用資訊科技

電機工程學系暨研究所( EE ) 光電工程學研究所(GIPO) 電信工程學研究所(GICE) 電子工程學研究所(GIEE) 資訊工程學系暨研究所(CS IE )

媒體可以說是內容、資訊最大的生產者,但受制於 國際社交媒體及搜尋平台的經營手法,本地主流媒 體在發展網上業務時,面對不公平的競爭。 這些

1.在系統內:有分為在 TOP N 裡跟在 Change Table 裡,在 TOP N 裡就將票數加上去 後利用 Jump Table 作排序,在 Change Table 裡的話就將票數加上去並拉回到 TOP N

而隨著道路之持續開發,隨之而來的大量環境破壞則成為促進道路生 態學發展的推手。歐美國家自 1920 年開始積極推動有關道路生態之 研究,藉以保護自然環境中之大型哺乳動物。表

近年來,國內外已經有很多學術單位投入 3D 模型搜尋的研究,而且在網路 上也有好幾個系統提供人使用,例如台灣大學的 3D Model Retrieval