• 沒有找到結果。

中 華 大 學

N/A
N/A
Protected

Academic year: 2022

Share "中 華 大 學"

Copied!
69
0
0

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

全文

(1)

中 華 大 學 碩 士 論 文

題目:運用二元樹於漸進式關聯法則探勘之研究

Incremental Data Mining Based on Binary Tree Technique

系 所 別:資訊管理學系碩士班 學號姓名:M09010008 莊文宗 指導教授:游坤明 博士

中華民國 九十四 年 七 月

(2)
(3)
(4)
(5)

中文摘要

資料探勘是一種從大量資料庫中萃取有用資訊、知識的技術,資料探勘技術 應用的範圍相當廣泛,挖掘出資料之間的關聯式法則就是其中的一種應用。當所 累積下來的資料不是很龐大的時候,資料探勘可以很有效率的探勘出資料間的規 則,但隨著日子企業所累積的資料量越來越龐大,資料探勘的工作也就顯得非常 耗費時間,因此如何有效率完成資料探勘便成為很重要的研究課題。

有鑑於以往關聯式法則相關研究所提出的探勘方式需要過多的執行時間,本 論 文 提 出 一 種 有 效 率 的 資 料 探 勘 演 算 法 - 降 冪 頻 繁 樣 式 二 元 樹 (Descending Frequent Patterns Binary Tree),它僅僅掃描資料庫二次,而且本論文所用到的樹 狀結構與維持正確的項目集合次數所用的合併左子樹(Merge Left Child Tree)方 式,可以很快速地探勘出關聯式法則,以及節省探勘過程記憶體的使用量。針對 資料量日益增多的狀況,本論文也提出了漸進式資料探勘演算法(Incremental Descending Frequent Patterns Binary Tree)。當資料量增多的時候,可以完全不用 掃描舊有資料,利用前一次探勘所記錄下來的資訊與探勘新增的資料,漸進式的 完成探勘工作。在實驗中,本論文也利用實際的資料針對演算法進行效能分析,

以驗證演算法的效能。

關鍵字:資料探勘、關聯式法則、樹狀結構、漸進式

(6)

Abstract

Data Mining is a technology to fetch useful information or knowledge from large databases. The techniques of data mining are widely used like association rules. The association rules can be mined efficiently as the amount of the accumulated data is not very huge. However, data mining could take much time because the data grow up in an enterprise with days. So how to mine useful information efficiently becomes a very important issue in the information technology.

According to the related researches the methods to mine association rules, they need too much time to implement their algorithms; therefore, this thesis proposes an efficient data mining algorithm, Descending Frequent Patterns Binary Tree (DFPBT).

It not only scans the database two times like some efficient mining algorithms, but also our proposed tree structure and Merge Left Child Tree can rapidly find the association rules and use less memory. For the incremental data, this thesis also proposes Incremental Descending Frequent Patterns Binary Tree Algorithm. The proposed algorithm does not need to scan the legacy data again when the data increase.

We only utilize the previous mining information and incrementally scan the incremental data to complete the mining work. In the experiments, this research uses the real data to carry out the analysis of performance on our algorithms.

Keyword: data mining, association rules, tree structure, incremental

(7)

致 謝

時光匆匆,兩年的研究所生涯就此劃上美好的句點,回想過去種種時光,有 快樂也有悲傷。在一起運動聊天的歡笑,在一起挑燈夜戰趕報告、看書的煎熬,

這些過程將成為我最美好的回憶。這兩年的研究所日子,非常感謝我的指導老師 游坤明老師給予我在研究上最大的支持,不管是在學業上或者生活上的指導與鼓 勵。還有口試時,陳志誠、羅家駿老師對於我論文的指正與建議,非常的感謝他 們。也感謝實驗室同學、學弟們這兩年的陪伴,有你們,我的研究生活多采多姿。

最後謝謝父母親的養育之恩,並在我求學過程中,給我最大的鼓勵與包容,給我 最大的力量在課業上努力衝刺。也非常謝謝姐姐、哥哥體諒我的個性,讓我不用 擔憂家裡面的狀況,專心地完成學業。要感謝的人非常多,在此,獻上最誠致的 祝福給曾經幫助過我的人,祝您們永遠快樂、幸福。

莊文宗謹致 中華大學資訊管理學系 碩士班 中華民國九十四年七月

(8)

目錄

第一章 緒論...1

第一節 研究背景 ...1

第二節 研究動機 ...1

第三節 研究目的 ...2

第四節 研究範圍與限制 ...3

第五節 研究流程 ...3

第二章 文獻探討 ...5

第一節 資料探勘技術簡介 ...5

第二節 關聯式法則介紹 ...6

第三節 APRIORI 演算法 ...7

第四節 FP-GROWTH 演算法 ...8

第五節 AFOPT 演算法 ...10

第六節 ICTC 演算法 ...12

第七節 AFPIM 演算法...15

第八節 各種演算法比較 ...17

第三章 研究設計理念 ...20

第一節 演算法特性 ...20

第二節 演算法步驟 ...24

第三節 演算法實例推導 ...34

第四章 實驗設計 ...44

第一節 實驗平台 ...44

第二節 資料來源、內容 ...44

第三節 實驗設計 ...47

第五章 實驗及結果 ...48

第一節 支持度 0.5%對 DFPBT 與 IDFPBT 演算法效能影響之比較 ...48

第二節 支持度 0.3%對 DFPBT 與 IDFPBT 演算法效能影響之比較 ...50

第三節 不同支持度對 IDFPBT 演算法效能影響之比較 ...52

第四節 不同演算法效能之比較 ...53

(9)

第六章 結論及未來研究方向 ...55

參考文獻...57

(10)

圖目錄

圖 2-1:Apriori 演算法流程架構圖 ...8

圖 2-2:FP-tree 架構圖 ...10

圖 2-3:AFOPT 資料結構... 11

圖 2-4:push-right step of the subtree of node c...12

圖 2-5:各層所需比對的交易記錄數量 ...13

圖 2-6:ICTC 新舊資料高頻項目比對流程圖 ...14

圖 3-1:DFPBT 架構 ...21

圖 3-2:Merge Left Child Tree 架構...22

圖 3-3:非漸進式演算法流程圖 ...25

圖 3-4:探勘過程與合併資料示意圖 ...28

圖 3-5:漸進式演算法流程 ...30

圖 3-6:系統畫面 ...34

圖 3-7:掃描資料庫一次判斷高頻項目 ...35

圖 3-8:掃描資料庫第二次與建立 DFPBT ...36

圖 3-9:探勘{C:4}合併後的 DFPBT...38

圖 3-10:探勘{C:4, A:2}合併的 DFPBT...38

圖 3-11:新進資料新進後的高頻項目 ...39

圖 3-12:新進資料新增後的 DFPBT ...43

圖 5-1:DFPBT、IDFPBT 演算法探勘時間比較(支持度:0.5%)...49

圖 5-2:DFPBT、IDFPBT 演算法探勘時間比較(支持度:0.3%)...51

圖 5-3:不同支持度對 IDFPBT 演算法效能的影響 ...53

圖 5-4:IDFPBT 與 ICTC 演算法效能比較 ...54

(11)

表目錄

表 2-1:項目集在原資料庫及更新後資料庫中所屬種類組合情況 ...16

表 2-2:各種演算法之比較 ...19

表 3-1:DFPBT 存入資料庫 ...23

表 3-2:高頻項目資料規格 ...26

表 3-3:非漸進式演算法 ...28

表 3-4:探勘 DFPBT 樹狀結構之函式 ...29

表 3-5:含非高頻項目交易記錄內容 ...31

表 3-6:漸進式演算法 ...33

表 3-7:舊有資料表內容 ...35

表 3-8:含有非高頻項目之交易記錄表格 ...36

表 3-9:DFPBT Table...37

表 3-10:新進資料表內容 ...39

表 3-11:刪除 DFPBT Table 的非高頻項目{D} ...40

表 3-12:新增高頻項目{B}到 DFPBT Table ...41

表 3-13:調整高頻順序後的 DFPBT Table...41

表 3-14:新進資料的高頻資料新增到 DFPBT Table...42

表 3-15:非高頻的交易記錄表格 ...43

表 4-1:門診診斷記錄檔資料格式 ...45

表 4-2:轉換後的門診診斷資料表格式 ...46

表 4-3:門診診斷資料每月資料量統計表 ...47

表 5-1:DFPBT 演算法實驗數據表(支持度:0.5%) ...48

表 5-2:IDFPBT 演算法實驗數據表(支持度:0.5%)...49

表 5-3:DFPBT 演算法實驗數據表(支持度:0.3%) ...50

表 5-4:IDFPBT 演算法實驗數據表(支持度:0.3%)...51

(12)

第一章 緒論

資料探勘的應用主要是從大量的資料中挖掘出有用的資訊、知識,以提供 使用者能作出有效的判斷,因此有許多的不同的領域開始廣泛應用此項技術來 解決問題,舉凡政府機關使用資料探勘技術分析民眾對政府施政滿意度調查、

公司行號用來分析顧客消費行為,資料探勘都扮演相當重要的角色。而在企業 電腦化的推行,資料的產生量已經呈現指數攀升,雖然伴隨電腦科技的進步,

軟硬體設備的速度越來越快,但面對龐大的資料量分析時還是需要很長的時間 進行,在現今事事講究效率的時代,有效率的資料探勘就成為了一個重要的研 究課題。

第一節 研究背景

拜資訊科技進步之賜,很多企業紛紛引進電子化,利用電子科技達到有效 率的作業,在這同時,企業也開始把每日的商業交易資料、顧客基本資料等儲 存在所謂的電子媒介裡,例如資料庫、資料倉儲等,以節省龐大紙本儲存的浪 費。健保從執行以來,間接的促進醫療院所電子化作業,各種的醫療作業、申 請都經由電腦來完成作業。尤其是每日增加的病患門診資料,利用資料庫可以 儲存大量的門診資料,而且就診時能透過電腦立即得到病患的就診記錄。而不 管是企業的交易資料、醫療院所的門診資料都可能隱藏著一些有用的資訊,經 過一些技術的萃取可以把這些有用資訊外顯出來,因此就有許多學者專家致力 於這一方面的研究,針對不同的情況提出了許多挖掘資訊、知識的技術。

第二節 研究動機

資料探勘是為了發現有意義之模式或規則,以自動或半自動的方法,對大 量資料進行探勘、分析所進行的流程[2]。關聯式法則[9]是資料探勘方法的重要 技術之一,它可以找出資料之間的關聯性,譬如說:大部分的人到大賣場買牛

(13)

奶時也會順便買麵包,所以就有「牛奶Æ麵包」這項關聯式法則,大賣場就能 以這項規則推出一些整合性的促銷活動,以增加產品的銷售量[12]。相同的,

在醫療院所的就診記錄上,如果能從中找出一些關聯式規則的話,不但能佐證 已知的學理或得到醫學上的新發現,而且可以提供醫療人員診療的參考,因此 關聯式法則的探勘可說是醫療人員診療時的一大助手。

一般在做關聯式法則探勘,都是對靜態資料進行探勘[10,15,16],一旦資料 有新增的時候,就要從頭開始重新探勘,這種方式的資料探勘非常不合實際效 益且浪費許多成本,因此就有一些學者專家研究[1,5,14]利用以前探勘所記錄下 來的資訊,只對新增的資料進行探勘,在儘量避免重新探勘原先已探勘過的資 料的情況下,快速地探勘出關聯式法則來,這種的方式稱為「漸進式資料探勘」。 而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來,

在原本有些演算法本身就比較沒有效率的原因下,其改良後的漸進式資料探勘 演算法還是需要較多的執行時間。因此本論文希望針對不斷新增的醫療院所門 診資料,發展出一快速的資料探勘演算法,並以此演算法發展出一漸進式資料 探勘演算法,搜尋出有用的關聯式法則,以期輔助醫療院所問診的參考與資料 探勘領域的新貢獻。

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊,而在面對日新月益不 斷增加的資料庫來說,如何有效率的節省時間快速找出規則出來是非常重要的 一件事。漸進式的資料探勘雖然可以減少不必要的探勘動作,但以往的漸進式 資料探勘大部分還是需求許多的掃描資料庫動作,尤其是面對龐大的醫病門診 資料時,掃描的動作會花費很多時間。近幾年來,有些學者提出利用樹狀結構 探勘的方式[10,13],此種方式只要求微小的掃描資料庫次數,而且可以很迅速 地是勘出規則。因此本論文希望使用樹狀呈現資料的方式,在減少資料庫搜尋

(14)

的次數的同時,也能利用樹狀結構的優點快速地探勘出規則來。

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作,針對該院門診資料做資 料探勘動作[3,4],以期找出有用的關聯式規則。針對該院的門診資料,醫師對 病患所診斷的疾病個數至多為七個,因此本實驗最多只能得到七項項目集合。

此合作的醫院是一地區性的醫院,實驗得到的結果會因該地區就診民眾的健康 情況而有所差異,非完全反應其他醫療院所就診狀況。另外本實驗是以每個月 門診資料進行漸進式的資料探勘,除了記錄下來以前探勘所得到的 1 項集合的 高頻項目外,探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫 裡,以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構。

第五節 研究流程

本論文的研究流程大致可分為下列五個步驟:

1.收集有關資料探勘的相關研究文獻,並整理分析資料探勘應用於醫療分 析之研究,尋找適合於醫療分析的資料探勘方式,並找尋合適於門診資 料探勘的改進方式。

2.改進現有的資料探勘方式,發展出一套全新的資料探勘演算法,並加以 改進為漸進式的演算法,以符合不斷增加的門診資料的情況下,能有效 的探勘出關聯規則,並研究是否能在每次探勘時隨時更動支持度門檻的 設定。

3.收集醫師診斷病患的資料,先過濾掉資料不齊全或錯誤的記錄,然後依 探勘資料的格式進行前置轉換,最後依照月份分類成不同的資料表。

4.利用所開發出來的漸進式資料探勘演算法進行實驗,並分析其結果的正 確性以及其效能。實驗得到的關聯式法則同時會交由醫院專家分析解讀

(15)

在臨床是否有同樣的規則或是醫學上的另一新發現。

5.匯整實驗數據製成圖表,探討是否達到預期目標,並思考未來研究方向。

(16)

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中,許多學者相繼提出不同特性之 探勘的研究,關聯式法則的探勘則是最常被拿來研究的議題之一,其可以從大 量的資料或資料倉儲中找到一些有用的資訊,以幫忙使用者進行資料的分析或 預測等等。關聯式法則的探勘可分為二個部分,第一個部分為從大量資料中尋 找出符合支持度的高頻項目集合(Frequent Patterns),另一個部分則是從這些高 頻項目集合中推演出關聯式法則。第二個部分是由第一個部分產生的結果推演 得到的,所以只要能完成第一個部分就可以很容易得到關聯式法則。因此大部 分研究此議題的學者都致力於改進第一個部分的工作上,以下將針對資料探勘 技術、關聯式法則以及一些演算法做介紹。

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的:預測(Prediction)和描述(description),前 者是以現有的資料庫資料去預測感興趣但尚未知的值;而後者則是從資料的描 述中解譯人類行為的型樣(pattern)[2]。資料探勘可以此兩大目的分為六種模 式:(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群 (Clustering) (5)關聯(Association) (6)因果(Sequence),以下將對此六種模式做說 明:

(1)分類:根據一些變數做計算,再依照結果做分類,例如把顧客基本資料,依 特定的數值運算分類成高、中、低等消費群,企業就可以依照不同的 群體規劃推出合適的商品。

(2)迴歸:此方法使用在預測的目的上,為使用一系列的數值來預測一個連續數 值的可能性,此模式的屬性資料為連續性的。

(3)時間序列:主要分析與時間有關的數值,與迴歸相似,但此模式會得到一些 時間先後順序發生的結果。

(17)

(4)集群:是一種普遍被使用的描述性工具,它是依據資料項目中的相似度 (similarity metrics)或機率密度(probability density)來尋找自然形成的 集群。其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極 高的子群體,因此同一子群體中的資料具有類似的特性[2],也具有 子群體間的差異性。

(5)關聯:找出某些事件或項目同時發生的可能性,例如顧客購買商品 A 時,同 時購買商品 B 的可能性有多少百分比。

(6)因果:主要發現某事物前後發生的關聯性,其與關聯式相似,不同是此模式 的資料項目是以時間來做區隔。例如:顧客購買商品 A 後,下個禮拜 回來購買商品 B 的機率有多少。

一般而言,以上幾種從事資料探勘的任務中,分類、迴歸和時間序列通常 被歸類為監督式學習,具有預測性功能。而關聯和因果則被歸類為非監督式學 習,具有描述性功能。集群則具有監督和非監督式學習的特點,可同時適用預 測及描述性之需求[2]。

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係,從這些相互關係可 以知道某些項目常常是伴隨相互發生的,而得到這些相互關係的前提是要先從 一堆資料中搜尋出符合支持度的高頻項目集合。而探勘高頻項目集合的主要議 題有:(1)減少資料庫掃描的次數,因為在很多狀況交易資料庫的容量是很大 的,超過記憶體的大小,而且從硬碟上掃描資料是很耗費時間成本的;(2)減少 掃描的空間,因為交易資料的每個子集合都可能成為高頻項目集合,且這些子 集合的個數會是交易資料個數的指數倍數;(3)改善計算項目出現次數的效能,

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候,比對項目集 合是非常耗費執行時間[13]。

(18)

有一些研究就提出改善效能的演算法,在探勘高頻項目集合的時候,許多 提出的演算法主要是減少搜尋的空間,如 Apriori 演算法。假如一個項目集合不 是高頻項目集合,則包含有此項目集合的其他集合一定不是高頻項目集合 [7,8]。現今關聯式法則探勘的演算法可分成兩類:(1)候選項目產生與測試方法 (the candidate-and-test approach):此方法是產生候選項目集合,然後針對每個候 選項目集合,掃描資料庫判斷是否為高頻項目集合,再從這些高頻項目集合生 成其他候選項目集合,然後再反覆掃描資料庫判斷這些候選項目集合是不是高 頻。(2)項目成長方法(the pattern growth approach):因為掃描資料庫是一件非常 耗時的事情,如果能避免多次掃描資料庫的話就能增加探勘的效能。有一些學 者提出減少資料庫掃描次數的探勘演算法,這些演算法大部分是對資料庫掃描 一至二次,然後把掃描得到的資訊利用另一種資料結構存放起來,如陣列 (Array)、樹(Tree)。這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資 訊,經由反覆搜尋剛剛建立的資料結構,來產生所有的高頻項目集合。也因為 這樣的資料結構大部分是適合記憶體容量的,因此可以避免直接的硬體存取,

而且也不用額外的空間去儲存產生的候選項目集合。

第一類的方式主要減少候選項目集合的產生,所以也減少掃描資料庫的次 數。而第二類的方式則是直接減少資料庫掃描次數至一~二次,因為高頻項目 集的子集合一定不是非高頻的項目集合,所以我們只要藉由少量次數的掃描資 料庫得到 1 項次的高頻項目(Frequent item),再針對這些高頻資訊就搜尋就可以 得到所有高頻項目集合了。因此第二類的方法除了直接減少資料庫的掃描次數 外,建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵。

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法 [7],是最具代表性的演算法之一。其主要是反覆搜尋資料庫找出符合支持度的

(19)

項目集合,循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目 集合,以形成關聯式法則,演算法的步驟如圖 2-1。

圖 2-1:Apriori 演算法流程架構圖 Apriori 演算法的步驟如下:

(1) 首先由使用者設定門檻值

(2) 搜尋資料庫一次,找出符合門檻值的 1 次項目,利用高頻項目集合的子 集合也是高頻的特性。產生 2 次候選項目集合(Candidate Itemset) (3) 再次搜尋資料庫,判斷 2 次的候選項目集合有那些符合門檻值成為 2

次的高頻項目集合。利用第 k+1 次的候選項目集合是由第 k 次的高頻 項目集合產生的原理,生成其他的候選項目集合。

(4) 反覆搜尋資料庫,判斷候選項目集合是否為高頻項目集合,直到不能產 生候選項目集合為止

(5) 利用之前搜尋所得到的高頻項目集合,分析得到所關心的關聯式法則。

第四節 FP-Growth 演算法

Jiawei Han 等人於 2000 年提出 FP(Frequent Pattern)-Growth 演算法[10],其

(20)

主要的方法是由掃描資料庫兩次後,把資料庫裡高頻項目狀況建立在一個頻繁 樣式的樹狀資料結構中,稱為 Frequent Pattern Tree(FP-tree),接下來反覆搜尋 建構成的樹狀結構,以求得所有高頻項目集合。FP-tree 利用只儲存 1 次的高頻 項目以及項目間相同的原故,壓縮了原始資料庫龐大的空間需求,因此所花費 的時間與空間遠遠比需要產生候選項目集及多次掃描資料庫的演算法更有效 率。以下二點為此演算法的特性:

(1) 節點連結特性(Node-link property):藉由把相同項目的節點相連起來,

方便搜尋時快速找出含有某項目開頭的高頻資訊。

(2) 字首路徑特性(Prefix path property):計算含有某項目的高頻項目集合頻 率,只需掃描含有此項目為首的子路徑,且路徑上節點的次數與該項 目的次數相同。

FP-Growth 是由下往上(Bottom-Up)的搜尋方式,FP-tree 的架構則是降冪 (Descending)的建構方式,FP-Growth 在第一次掃描資料庫,求得所有 1 次項目 的次數,符合設定的支持度才變成高頻項目,依這些高頻項目出現的次數由高 到低排序建立於 Header Table 中,其中包含有項目名稱與用來連結 FP-tree 項目 第一次出現的連結。第二次掃描資料庫時,讀入每筆交易記錄的高頻項目,依 Header Table 順序排列,建立出 FP-tree,每個節點包含有項目名稱、項目的次 數、用來連結其它子路徑上相同項目的連結,在建立 FP-tree 時如果節點上的項 目不同或者沒有此項目節點,就會另外建立另一分支的路徑,FP-tree 的架構圖 如圖 2-2。

(21)

圖 2-2:FP-tree 架構圖

FP-Growth 搜尋的時候,會從項目次數低的開始搜尋,也就是從 Header Table 最後一個項目開始搜尋到第一個項目。因為 FP-tree 是由高到低降冪的方 式排列,因此對某個項目做完搜尋完畢後,下一個項目的搜尋就不會包含之前 搜尋過的項目。另外,在掃描 FP-tree 時,會需要產生額外的 Conditional FP-tree 以搜尋出含有某項目的其他高頻項目集組合。

第五節 AFOPT 演算法

AFOPT(Ascending Frequency Ordered Prefix-tree)演算法[13]是 2003 年由 Guimei Liu 等 人 提 出 的 , Guimei 等 人 提 出 一 種 新 的 資 料 結 構 為 AFOPT(Ascending Frequency Ordered Prefix-tree),這種資料結構對於緊湊或稀 疏的資料庫都能有效率地探勘。此演算法並利用了陣列儲存此樹狀上單一路徑 的資料,以節省儲存的空間和建構 AFOPT 的成本。此方法不像 FP-growth 演算 法需要花費時間去建立節點的連結和表頭表格,所以節省了不少建構的成本。

AFOPT 的結構原理為先掃描資料庫一次求得高頻 1-項目集,然後以各項目 的出現的頻率升冪(Ascending)排列,再次掃描資料庫,每一筆交易資料依序讀

(22)

入記憶體,刪除非高頻的項目再以剛剛的升冪排列順序排序,然後建立 AFOPT 樹狀結構。此樹狀結構的每個節點含有項目名稱和此項目的出現次數,如果樹 狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構。AFOPT 演算法的樹狀資料結構如圖 2-3。

圖 2-3:AFOPT 資料結構

AFOPT 演算法使用良好的升冪排列結構和 Top-Down 搜尋方式求得所有的 高頻項目集合,這樣的組合使得對不同特性的資料庫都能做到有效率的探勘。

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋,當第一個子樹 狀結構搜尋完畢,含有第一節點為首的高頻項目集就被找尋出來,然後再把這 節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構,因為這些樹狀結構 還需用來計算其他項目集真正的支持度,這個動作稱為 push-right step,如圖 2-4。不像 FP-growth 演算法需要額外的成本建構 Conditional FP-tree,AFOPT 演算法在掃描的時候只有更新節點的支持度與節點的連結,沒有額外空間的需 求。

(23)

圖 2-4:push-right step of the subtree of node c AFOPT 的步驟如下:

步驟 1:掃描資料庫判斷每個項目的支持度是否符合最小支持度,以求得 高頻 1-項目集。

步驟 2:依照高頻 1-項目集的出現次數升冪排列。

步驟 3:掃描資料庫讀取每一筆資料,移除非高頻 1-項目集,之後以第二 步的排列順序排序並建立 AFOPT 樹狀結構。

步驟 4:掃描 AFOPT 第一個子樹狀結構,計算項目集的支持度以得到含有 第一個節點的項目為首的高頻項目集,再把此節點下子樹狀結構 合併到右邊其他的樹狀結構。

步驟 5:同第四個步驟,掃描 AFOPT 其他的樹狀結構以求得所有高頻項目 集。

第六節 ICTC 演算法

Incremental Clustering Table Counting(ICTC)[5]是結合以 TBCP 演算法[6]為 基礎,建構出一個運用在漸進式資料探勘的方式,而此演算法保留 TBCP 利用 資料長度分群的特性,與提前決定高頻項目集合的方式,並且利用 FUP 演算法

(24)

中的資料長度進行分類,因此在進行候選項目集合的比對時,是以分群資料表 為搜尋單位,而不是整個資料庫,依據候選項目集的長度進行資料探勘,可以 直接跳過沒有用的分群資料表,針對可以成為高頻項目集合的資料進行掃描動 作。各層比對的交易記錄數量如圖 2-5,從圖中可以了解,掃描的資料筆數會 因為分群的關係,使掃描的筆數變少。

圖 2-5:各層所需比對的交易記錄數量 ICTC 演算法的流程,依據其功能可以分成五大階段,

一、 設定支持度:

在進行關聯式法則探勘之前,使用者需要定義出現的頻率為多少,才 是所關心的高頻項目集合。依照此支持度,演算法會去探勘出出現次數有 大於或等於支持度的項目集合,

二、 找尋高頻項目集合:

此階段可以分成兩個部分:1.依據資料長度分群 2.找尋高頻項目集 合。原始要探勘的資料會先依照資料的長度做分群,以後進行候選項目集 搜尋時,就可以只掃描大於或等於資料長度的分群資料表,必不需整個資 料庫做掃描的動作。

三、 比對高頻項目集合:

(25)

因為 ICTC 是一漸進式的演算法,此方法會把以前探勘過的高頻資料 記錄下來,再進行而後的探勘的時候,會把正在探勘的候選項目集合與之 前的高頻資料,進行相互比對的動作,可以很容易知道哪些候選項目點是 高頻項目集合,而且藉由相互比對就可以知道要不要重新掃描舊有的資 料,以避免重覆掃描資料庫。新舊資料高頻項目比對的流程如圖 2-6。

圖 2-6:ICTC 新舊資料高頻項目比對流程圖 四、 存入或取消高頻項目集合:

此步驟為決定漸進式掃描之後,哪些資料是成為最新的高頻項目集 合,然後就必順修改現有的高頻記錄,並修改其累積的已掃描次數與之前 掃描到哪一個資料表。對於以前是高頻變成非高頻的項目集合予以刪除,

並新增新進的高頻項目集合與其記錄。經由這些記錄可以非常快速知道高 頻項目集的次數與掃描到哪個資料表。

五、 合併新舊資料:

當新進的資料探勘完畢後,當高頻項目集合探勘完成,新進資料與舊 有資料中的高頻項目會加總起來,變成高頻項目集合的次數,而新進資料

(26)

與舊有資料的交易記錄也必須進行合併動作,成為下一次進行漸進式資料 探勘的歷史資料。

第七節 AFPIM 演算法

AFPIM(Adjusting FP-tree for Incremental Mining) 演 算 法 [1] 是 一 種 調 整 FP-tree 以達到漸進式的資料探勘。除了定義最小支持度外,還需建立一個低於 最小支持度的準最小支持度。FP-tree 是由達到最小支持度的高頻 1-項目集與達 到準最小支持度的準高頻 1-項目集所構成的,FP-tree 包含準高頻 1-項目集的資 訊,這樣的方法可以減低掃描原始資料庫的機會,但相對增加了 FP-tree 所需記 錄的空間。另外要儲存的部分為每個項目出現的次數,當新增或刪除資料庫時 能夠快速地得到哪些項目為高頻 1-項目集、準高頻 1-項目集。每個項目在原始 資料庫或更新過的資料庫中可能是高頻 1-項目集、準高頻 1-項目集或非高頻 1- 項目集,因此探勘的時候共有九種狀況,如表 2-1。只有第七種狀況 X 原先為 非高頻 1-項目集,更新後 X 為高頻 1-項目集,或者第四種狀況,X 為準高頻 1-項目集且不存在 FP-tree 中,而更新資料庫後 X 為高頻 1-項目集,這兩種情 況才需重新掃描資料庫一遍重建 FP-tree,其它的情況只需依更新的資料庫調整 FP-tree 就能得到完整的 FP-tree 了。

(27)

表 2-1:項目集在原資料庫及更新後資料庫中所屬種類組合情況 狀況 原始資料庫 DB 更新後的資料 UD UD 之建構方式

一 X 為高頻 1-項目集 X 為高頻 1-項目集 依異動資料調整 FP-tree 二 X 為高頻 1-項目集 X 為準高頻 1-項目集 依異動資料調整 FP-tree 三 X 為高頻 1-項目集 X 為非高頻 1-項目集 將 X 從 FP-tree 移除 四

X 為準高頻 1-項目集 X 為高頻 1-項目集 若 X 在 FP-tree 中,依異動 資料調整 FP-tree,否則需 掃描 UD 一次重建 FP-tree 五 X 為準高頻 1-項目集 X 為準高頻 1-項目集 若 X 在 FP-tree 中,依異動

資料調整 FP-tree

六 X 為準高頻 1-項目集 X 為非高頻 1-項目集 若 X 在 FP-tree 中,將 X 從 FP-tree 移除

七 X 為非高頻 1-項目集 X 為高頻 1-項目集 需 掃 描 UD 一 次 重 建 FP-tree

八 X 為非高頻 1-項目集 X 為準高頻 1-項目集 X 不影響 FP-tree 九 X 為非高頻 1-項目集 X 為非高頻 1-項目集 X 不影響 FP-tree

當新增、刪除更新資料庫時,有些項目可能從高頻 1-項目集或準高頻 1-項 目集變成非高頻 1-項目集或者從非高頻 1-項目集變成高頻 1-項目集,這只需從 FP-tree 把該項目新增或刪除就好了。至於 FP-tree 項目出現次數的順序大小更 新後有所不同者,則採用泡沫排序法(bubble sort)來兩兩交換 FP-tree 中節點的 位置,當兩兩交換的節點還有父節點或子節點時,使用新增另一節點或者與其 他節點合併的方法來達到正確更新 FP-tree 架構。

AFPIM 演算法使用調整 FP-tree 結構來做到漸進式的功用,至於搜尋的方 法依然使用 FP-growth 的方法,其整體步驟如下:

步驟 1:讀取原始資料庫所儲存下來的所有 1-項目集及其在原始資料庫 DB 中出現的次數。

步驟 2:掃描異動的資料庫,計算出異動資料庫所有項目出現的次數,整 合步驟 1 的資料得到更新後所有項目的出現次數,依出現的次數 得到高頻的項目與準高頻的項目。

(28)

步驟 3:判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之 header-table 中。

步驟 3.1:假如有任一高頻 1-項目集不存在於原先的 header-table,則重新 掃描資料庫,得到高頻 1-項目集與準高頻 1-項目集,然後重建 FP-tree。

步驟 3.2:假如所有高頻 1-項目集都存在於原先的 header-table,則更新 FP-tree。

步驟 3.2.1:自 FP-tree 中移除非高頻 1-項目集。

步驟 3.2.2:依項目出現次數之降冪順序,調整 FP-tree 中節點的順序。

步驟 3.2.3:第二次掃描異動的資料庫,將項目集從 FP-tree 新增或刪除,

得到完整的 FP-tree。

步驟 4:分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得 高頻項目集。

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究,在本章節中所提到的 Apriori、FP Growth、AFOPT 演算法為非漸進式演算法,ICTC 與 AFPIM 為漸 進式演算法。理論上來講,因為漸進式的方式避免重覆掃描已掃描過的資料庫,

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快。其中 Apriori、ICTC 演算法探勘的方式是產生候選項目集後,掃描資料庫判斷有沒有 達到高頻門檻,其他的演算法則是藉由掃描資料庫二次,得到每筆交易記錄所 存在的單一高頻項目集合後,再利用樹狀結構的方式來呈現這些單一高頻項目 集合,經由瀏覽此樹狀結構來得到高頻項目集合。

Apriori 演算法的時間負載取決於產生的候選項目集合多寡,因為產生的候 選項目集要經過掃描資料庫計算個別的次數後,才能知道有沒有達到高頻門

(29)

檻,因此候選項目集合越多,演算法所需的時間就越久。而 ICTC 演算法雖然 利用分群的方式與提早決定高頻項目的特性,來減少不必要的掃描範圍,但是 不 能 減 少 產 生 的 候 選 項 目 集 合 個 數 , 也 就 不 能 減 少 掃 描 資 料 庫 的 次 數 。 FP-Growth、AFOPT、AFPIM 都為項目成長方法(the pattern growth approach),

也同樣在整個探勘的動作只掃描資料庫兩次。FP-Growth 演算法建構出來的樹 狀結構是以降冪方式的排列,這種建構方式對於緊湊的資料庫是可以有效率地 壓縮樹狀結構的大小,相反的,對於比較稀疏的資料庫就沒有辦法有效地壓縮 樹狀結構的大小。另外,為了加快掃描樹狀結構的速度,FP-Growth 會建立額 外的 header table 與用來連結相同項目名稱的指標,因此建構的動作需要較多的 時間。AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth 演算法不同,其建立樹狀結構的方式是以升冪的方式排列,搜尋的方式是從上 到下,而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth 還快。AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法,它利用 調整 FP-tree 的方式維持高頻資料的正確性,以儘量避免重新掃描舊有資料庫的 需求,表 2-2 為以上所提及的演算法之比較。一般來講,本章節所提到的漸進 式演算法不用再重新掃描舊有資料庫,可是當有些低頻項目集合在下一次探勘 時變成高頻項目集合時,這些另外狀況就需要重新掃描舊有資料庫。因為之前 沒有記錄這些低頻項目集合的項目、次數,因此需要再掃描舊有資料庫以了解 這些集合的情況。

(30)

表 2-2:各種演算法之比較 演算法

名 稱 性 質 方 法 特 性 掃 描 資 料 庫 次 數 Apriori 非 漸

進 式

the candidate-and-test approach

由 k-1 次高頻項目集 合產生 k 次候選項目 集合

取決於候選項目集 合的個數多寡

ICTC 漸進式 the candidate-and-test approach

利用分群方式與提前 決定高頻項目集合,

以加快探勘效率

取決於候選項目集 合的個數多寡,只 掃描新進資料庫 (另外狀況-重新掃 描舊有資料庫) FP

Growth

非 漸 進 式

the pattern growth approach

降 冪 方 式 的 資 料 排 列,從下到上的搜尋 方式,header table 連 結相同項目的節點

掃描全部資料庫二 次

AFOPT 非 漸 進 式

the pattern growth approach

升冪方式的資料排 列,從上到下的搜尋 方式,合併的方式得 到正確的項目集合次 數

掃描全部資料庫二 次

AFPIM 漸進式 the pattern growth approach

利用調整 FP tree 以維 持整個資料庫高頻項 目的正確性

只掃描新進資料庫 二次(另外狀況-重 新掃描舊有資料 庫)

由上表除了了解到各種演算法之間的不同外,在某些狀況下,這些漸進式 演算法需要重新掃描上一次探勘已掃描過的舊有資料庫。本論文將提出一漸進 式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫,並且利用另一新的 樹狀結構與探勘方式以提升探勘的效能。

(31)

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究,有鑒於資料探勘的來源資 料越來越龐大且過程花費許久時間,因此本論文發展出一個漸進式的演算法,

能夠有效率地進行探勘動作。本論文在當資料庫有新增資料進來後,可以不需 要重新掃描整個資料庫,只需掃描新增進來的資料,以及利用前一次探勘所保 留下來的記錄,就可以得到所有高頻項目集。此不同於有些漸進式演算法在某 些情況下,還是要重新掃描整個資料庫的窘境。接下來將針對本論文所提出的 演算法做說明。

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結 構與搜尋方式。對於儲存交易資料中高頻項目的資料結構,我們提出一個 DFPBT(Descending Frequent Patterns Binary Tree)以及全新的搜尋方式,本演算 法的特性如下:

(1) Left Child-Right Sibling Tree 樹狀結構:

我們在進行資料探勘搜尋資料庫兩次之後,會得到 1 次高頻項目以及每筆 交易資料含有哪些高頻項目,之後我們會把這些高頻項目儲存一樹狀結構中,

此樹狀結構是一左子-右兄樹(Left Child-Right Sibling Tree)[11]。此樹上的每個節 點(Node)最多包含有一個左邊的節點與一個右邊的節點,我們利用樹狀結構裡 左邊的節點為上一個節點的子節點,而右邊的節點和同一層的其他節點是兄弟 節點,也同樣是上一層節點的子節點之特性,建構出有順序性的資料排列樣式。

左節點連結方式則是由項目次數從高到低(Descending)連結,右節點的連結方式 同樣由項目次數從高到低方式連結起來,所以我們的演算法所用到的樹狀結構 上每個節點,包含有項目名稱(Item)、項目次數(Count)、左節點連結(Left Child Link)與右節點連結(Right Sibling Link),如圖 3-1。這樣的排列方式,對於左邊

(32)

節點來說,我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點 的次數。

圖 3-1:DFPBT 架構 (2) DFPBT 節省建構所需的空間:

對於樹狀的排列順序,DFPBT 是依項目次數的高低來排列,讀入一筆交易 資料的高頻項目,依項目次數上面圖表 Header Table 次數的高低順序排列後,

開始建立 DFPBT 結構,當讀入的項目已存在於某子樹的節點上,則我們就把 此節點的次數加 1,然後讀入下一個項目;反之,依高頻項目產生另一個分支 的 節 點 , 然 後 再 繼 續 讀 入 下 一 個 項 目 。 例 如 說 : 假 設 DFPBT 裡 已 有 {D:6,C:,B:2,A:1}這個分支,當有一筆高頻項目{C,D,E}排序後得到{D,C,E},讀 入第一個項目 D,因為 DFPBT 第一個項目為{D:6}的節點,因此把此節點的次 數加 1 變成{D:7},然後讀入第二個節點,剛好{D:7}節點的左節點的項目為 C,

因此把 C 的節點次數加 1,再讀入最後一個項目 E,因為{C:3}節點的左節點與 其左節點{B:2}之右節點沒有項目 E 的節點,所以新增一個分支節點,而 E 在 Header Table 的項目次數順序是在 B 之後,所以產生 B 的右節點{E:1}。以這樣 的方式不但可以壓縮讀入的高頻項目,用樹狀結構來呈現所有高頻資訊外,而 且因為 DFPBT 是依高的項目次數降冪排列,所以出現頻率高的項目會很容易 出現重複的節點,就只需項目次數再加 1 而已,不需額外空間儲存新的節點。

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

(33)

體空間。相對地,對於非常龐大資料庫的探勘,能夠有效降低記憶體空間需求,

節省探勘時間。

(3) 合併左子樹(Merge Left Child Tree):

對於資料探勘演算法的研究,有一些學者專家提出一些探勘的資料結構與 搜尋方法,其中如 Jiawei Han 等人所提出的 FP Growth 演算法,此演算法使用 FP Tree 來儲存高頻項目,雖然 FP Tree 同樣使用降冪的排列方式節省建構 FP Tree 所需的空間,但是 FP Growth 在進行探勘的時候,要反覆建立額外的條件 頻繁樣式樹(Conditional FP Tree),所以需要許多的空間來儲存這些條件頻繁樣 式樹。因此本論文提出合併左子樹(Merge Left Child Tree)的方式,此種方式可 避免產生額外的樹狀結構,以節省空間成本。在我們所提出的 DFPBT 結構上,

每個節點的右節點是依照 Header Table 的次數順序排列,因此某個項目節點的 右節點的其他分支不會再出現此項目節點,但是此節點的左節點及左節點的其 他分支可能包含其他節點的分支,因此需要把此節點下的左節點分支合併到此 節點的右節點分支,如圖 3-2。如此才能讓探勘演算法正確挖掘出所有高頻項 目集合。

圖 3-2:Merge Left Child Tree 架構 (4) 快速探勘高頻項目集合:

關於本論文所提出的探勘方式,因為 DFPBT 是依降冪的方式由高到低排

(34)

序,因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋,先搜尋左節 點再搜尋右節點的方式探勘出所有高頻項目集合。而因為 DFPBT 是從次數高 的項目排列到次數低的項目,因此上一層的節點必定大於或等於其左節點的項 目次數。我們可以得到一個規則:某一節點如果沒有符合支持度,其左節點的 所有分支也不會符合支持度的要求。所以我們在進行探勘高頻項目集的時候,

只要搜尋到沒有大於支持度的節點為止,就不用向左節點繼續搜尋下去,因為 其節點有左節點的項目次數必定小於支持度。

(5) 快速回復 DFPBT:

當完成一次資料探勘後,可能需要一段時間之後,才會再進行新增資料的 漸進式探勘,所以我們會把探勘過程所建立的 DFPBT 儲存起來,以方便下一 次探勘時快速得到以前探勘的高頻記錄,為了方便儲存,以及之後 DFPBT 會 越來越大,因此我們使用關聯式資料庫來 DFPBT。如表 3-1。

表 3-1:DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果,表格上的

(35)

個項目,所以有 7 個欄位,Support 為此列高頻項目出現的次數。另外,儲存 DFPBT 是使用升冪的排列,我們從此表可以看到我們把會把樹狀右邊節點儲存 在資料庫的前面,比較左邊的節點則儲存在資料庫後面。例如,我們先把 A 開 頭的分支資料放到資料庫前面,再新增 C 開頭的資料,而後是 D 開頭的資料,

因為 DFPBT 建構出的樹狀結構是採降冪方式排列,因此從資料庫依序讀回 DFPBT 時,都是插入到最左邊的節點,而不用一個一個比對到最後一個節點才 新增另一個新節點,這樣可以很快地還原 DFPBT。

(6) 快速新增刪除高頻項目:

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構,

我們使用升冪的方式把 DFPBT 儲存在資料庫中,也就是說,次數較低的高頻 項目會排在前面,次數較多的高頻項目會排列在後面。而我們在進行漸進式探 勘的時候,大部分都會有一些高頻項目在當時變成了非高頻項目,或者是非高 頻項目在當時變成高頻項目了,而這些高頻變成非高頻的項目或非高頻變成高 頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上,因此如果 我們把這些最有可能變動的項目放在前面的話,在搜尋的時候就可以很快的找 到這些項目進行新增、刪除,因此可以減少探勘的時間。

(7) 可變動支持度:

在探勘的過程,我們會記錄每個項目的名稱與出現的次數,當新進資料進 來做資料探勘時,我們就可以把項目加總得到最新的高頻項目,再由最新產生 的高頻項目去建構出 DFPBT。因此理論上,本演算法可以依使用者不同的需 求,去更動支持度的設定。

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法,而此演算法 是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT,再經由搜尋 DFPBT 來

(36)

得到高頻項目集合,而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻 項目情況,不但節省了記憶體空間,也節省了搜尋的時間。這不同於以往需要 產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法,而且候選 項目集的多寡往往決定需要去掃描資料庫的次數。本論文架構主要可分為二個 部分,一個是非漸進式的部分,一個是漸進式的部分。非漸進式的部分經由我 們提出的演算法掃描兩次資料庫,並搜尋建立出的 DFPBT,得到最後的高頻項 目集合,演算法除了建立每個項目次數、高頻項目與最後得到的高頻項目集合 外,中間不會再額外記錄任何資料。而漸進式的部分除了記錄非漸進式所需記 錄的資料外,還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記 錄。非漸進式演算法如圖 3-3。

圖 3-3:非漸進式演算法流程圖

(37)

(1) 設定支持度:

使用者在每次進行資料探勘時,需要先設定項目要達到多少支持度才成為 關聯式法則的設定,而支持度的設定高低尚且沒有相關研究說明支持度設定的 依據或方法。而一般而言,在設定支持度的原則,會以所要探勘的資料庫大小,

以及所探勘的資料庫特性而決定,例如醫療資料庫,其項目相互發生的關係就 很少,如果要探勘出一些關聯式法則出來的話,就需設定較小的持度,而類似 大賣場的這種交易資料庫,則可以設定大一點的支持度。不管是支持度設大或 設小,都要先經過評估。在過大的支持度的時候,可能會導致探勘結果不能充 分表現出資料庫中項目之間的關聯性,而過小的支持度又可能過多和沒有適用 價值的關聯法則,而且支持度的大小會直接影響到探勘時間,因此支持度的設 定端看資料庫大小與使用者當時的要求來做一個設定。

(2) 搜尋高頻項目:

此部分會搜尋在資料庫中每個項目出現的次數,經由支持度的設定,我們 可以判斷有哪些項目成為高頻項目,並且把這些高頻項目依照高頻出現的次數 排列,然後存入資料庫。而高頻項目資料庫的規格如表 3-2。當我們掃描一次 依高頻出現次數由高到低記錄下來後,第二次掃描資料庫得到每筆交易記錄的 高頻項目,會依照項目的 id 來排序此筆交易記錄的高頻項目。在判別高頻順序 的時候,我們不用 support 來判別,因為高頻項目的 support 會有可能有相同的 項目出現次數,如果用 support 來判別的話,會無法判斷項目的順序。

表 3-2:高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4 Item 項目名稱 vnarchar 10

Support 項目次數 int 4

(38)

(3) 建立 DFPBT 樹:

當第二次掃描資料庫,讀入第一筆交易記錄,然後判斷此筆交易記錄有哪 幾個高頻項目,並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排 列。在這同時,會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中。然後 依序再讀入下一筆交易記錄,排序高頻順序與新增到 DFPBT。讀完每一筆交易 記錄後,也順便得到了表示高頻項目資訊的 DFPBT,此樹狀結構的節點依項目 出現的次數從高到低排列,每個節點為其左節點的上一個項目,而其左節點的 右邊節點都為其下一個項目。依序建立的 DFPBT 後,我們就可以開始進行探 勘。

(4) 搜尋 DFPBT:

建立完成 DFPBT 後,我們會先從左邊的節點開始搜尋,再搜尋右邊的節 的,依序從項目次數高的開始搜尋,先把含有某項目開頭的高頻項目集合搜尋 完畢,因為 DFPBT 是依照高低順序排列,所以含有某項目開頭的高頻項目集 合不會出現在之後的探勘上,因此搜尋完某個項目開頭的高頻項目集合後,就 不用再去檢查這些高頻項目集合在之後出現。而在搜尋某個項目為開頭的時 候,因為其左節點的所有分支包含有其他節點所需的資訊,所以在探勘左節點 之前,會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節 點。如圖 3-4:探勘過程與合併資料示意圖。如圖,演算法在探勘{D:7}節點的 左節點的時候,會把其左節點的所有分支合併到{D:7}節點的右邊節點,如圖上 紅色的虛線部分,在合併的時候如果有相同項目的節點就把項目的次數相加,

如果沒有相同節點的話,則複製一相同節點於該插入的地方。當在探勘{D:7, C:3}

之前,同樣會先把{D:7, C:3}左節點的所有分支合併到{D:7, C:3}的右節點,如 圖四上藍色的虛線部份。在探勘含有{D:7, C:3, B:2}的時候,則把其左節點的所 以分支合併到{D:7, C:3, B:2}的右節點上。如圖綠色的虛線部分。

(39)

圖 3-4:探勘過程與合併資料示意圖 (5) 得到高頻項目集合:

依序探勘完每個項目開頭的節點後,我們就可以得到所有正確的高頻項目 集合,再經由這些高頻項目集合,就可以求得關聯式法則,表 3-3 為非漸進式 演算法的過程,表 3-4 建立樹狀結構後探勘的函式。

表 3-3:非漸進式演算法 DFPBT Algorithm

Input:

DB is the database that will to be mined min_sup is the minimum support threshold Output:

The frequent patterns

Description:

1: Scan DB first time to find all frequent items whose support >= min_sup 2: Scan DB second time to find frequent items F in every transaction in DB 3: for all F in every transaction

4: Sort the items in F in descending order of their frequencies 5: if there is no Descending Frequent Patterns Binary Tree then 6: Build a binary tree root for these items

7: else

8: Insert these items into root in descending order of their frequencies 9: end if

9: end for

(40)

10: SearchFP(root, null)

表 3-4:探勘 DFPBT 樹狀結構之函式 SearchFP(root, p) Function

Input:

root is the root of the binary tree p is the previous pattern of the root Output:

the frequent patterns

Description:

1: subroot = the child of the root 2: sibroot=the sibling of subroot 3: Duplicate subroot to sibroot

4: if the support of subroot >= minimum support then 5: p=p + the item of subroot

6: Output p

7: SearchFP(subroot, p) 8: end if

9: SearchFP(sibroot, p) 10: return

以上是有關非漸進式演算法流程的說明,運用了降冪的樹狀結構來儲存高 頻資訊,除了可以合乎記憶體容量,節省空間外,而且搜尋 DFPBT 求得所有 高頻項目集合所花的時間是非常少的。

在漸進式的部分,因為我們希望達到探勘過的舊有資料不再需求搜尋,因 此我們會記錄每個項目的次數、高頻項目與含有非高頻項目的交易記錄。因為 在每一次的探勘,原先是高頻的項目可能變成非高頻項目了,非高頻的項目可 能變成高頻,因此我們需要有一些記錄,以便下一次探勘的時候能夠快速知道 上一次探勘的結果。漸進式演算法的流程如圖 3-5。

(41)

圖 3-5:漸進式演算法流程 (1) 設定支持度與選擇探勘新進資料來源:

剛開始進行探勘時,同樣與非漸進式演算法一樣,需要先設定門檻的支持 度,支持度的設定,除了要注意資料庫大小外,也要視資料庫的特性為一個決 定支持度的重要依據。進行資料庫探勘的時點,大部分都是累積到一定數量的 資料再進行資料探勘,太小的資料量,找出來的關聯式法則會無法代表整個資 料庫特性。而太大的資料量,則需要過長的時間量來累積,而且針對龐大的資 料量進行探勘需要許多時間。設定完支持度之後,我們需要再選擇所要探勘的 資料來源。

(2) 搜尋高頻項目:

在每一次資料探勘的時候,為了避免再一次掃描舊有的資料,因此我們會

(42)

把這一次探勘得到的每個項目出現的次數記錄起來,當有新進資料新增時,只 需針對新進資料進行掃描,再把掃描新進資料所得到的項目次數與前一次探勘 的記錄加總,就可以得到整個新舊資料庫的每個項目次數,再依支持度的設定,

找出符合門檻的高頻項目,並把這些高頻項目記錄下來,以便接下來的步驟使 用。

(3) 新增、刪除高頻項目:

在進行下一次資料探勘時,有些原本是高頻的項目會變成非高頻的項目,

而非高頻的項目會變成高頻項目,我們會從上一次記錄下來的高頻項目資料與 這一次得到的高頻項目做比對,來求得有哪些高頻項目在這次探勘變成非高頻 項目,哪些非高頻項目卻變成高頻項目了,然後再一一針對這些項目,更新從 資料庫讀入的 DFPBT Table。另外,我們會額外建立一個表格,儲存著含有非 高頻項目的交易記錄(Infrequent Transactions Table),資料內容如表 3-5。當有新 增刪除高頻項目的時候,會去更新此表格。針對每一個刪除的高頻項目,會去 判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中,如果沒 有的話,則新增此筆交易記錄;而新增的高頻項目,則需判斷該筆交易記錄是 否都為高頻,然後從非高頻交易記錄表格移除此筆交易記錄中。

表 3-5:含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7 1 A B C <NULL> <NULL> <NULL> <NULL>

2 C D E <NULL> <NULL> <NULL> <NULL>

3 C D <NULL> <NULL> <NULL> <NULL> <NULL>

4 A B C E <NULL> <NULL> <NULL>

5 A C E <NULL> <NULL> <NULL> <NULL>

6 B C E F <NULL> <NULL> <NULL>

7 A C D E F <NULL> <NULL>

(43)

(4) 調整 DFPBT Table 順序:

有新進資料新增後,不只是高頻項目會有所變動,原先是高頻項目可能變 成非高頻項目,非高頻項目變成高頻項目,高頻的項目次數也會跟著變動,隨 之而來的,高頻的順序也會跟著變動,所以我們 DFPBT Table 做一個調整,使 它能夠依照新的高頻順序來排序,這樣在建立 DFPBT 時才能依照正確的順序 建構出來。

(5) 建立 DFPBT:

經由上一步驟新增、刪除高頻項目後,我們就可以得到一 DFPBT 暫存表 格,另外,在這一步驟,會掃描新進資料第二次,判斷每一筆交易記錄含有哪 些高頻項目,排序之後,新增到 DFPBT Table 中,並把含有非高頻的交易記錄 新增到非高頻交易記錄表格中。再把這一表格依照我們定義的資料結構與高頻 項目順序依序建立成 DFPBT 樹狀結構,建立完成的樹狀結構,就可以進行探 勘高頻項目集。之後,我們需要搜尋一次 DFPBT,把完整的 DFPBT 資訊,重 新寫回資料庫的 DFPBT Table 中,以讓下一次探勘得到前一次探勘的高頻資訊。

(6) 搜尋 DFPBT:

建立完成的 DFPBT 樹狀結構,會包含有整個舊有資料庫與新進資料庫的 高頻資訊,接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合,而 搜尋的方式,與非漸進式演算法的相同,先從項目次數較多的項目開始搜尋,

再搜尋項目次數較少的項目,而在搜尋樹的左節點分支時,會先把左節點的所 有分支合併到右邊的節點,以找出正確的所有高頻項目集合。

(7) 得到高頻項目集合:

探勘整個 DFPBT 之後,我們就可以得到所有高頻項目集合,再經由一些 分析去產生關聯式法則。

以上是有關漸進式演算法的說明,表 3-6 為此演算法的過程。在探勘的過 程中,我們會把前一次探勘所用到的資訊記錄起來,其中包含有每個項目的出 現次數,高頻的項目,以及含有非高頻項目的交易記錄。經由這些記錄,我們

(44)

在下次探勘的時候,就完全不用重新掃描舊有的資料庫,只要針對新增、刪除 的高頻項目做一些 DFPBT 樹狀結構的更新,並視需要新增、刪除非高頻的交 易記錄,然後再把新進資料庫的高頻資訊加入到 DFPBT,與把新進資料的非高 頻交易記錄新增到非高頻交易記錄表格中。因此,在不需要掃描舊有資料庫的 前提下,我們就可以探勘出完整的高頻項目集合,並且節省了不少探勘時間。

而系統的介面如圖 3-6 所示。

表 3-6:漸進式演算法 IDFPBT Algorithm

Input:

db is the incremental database that will to mined min_sup is the minimum support threshold

I is all items and their support of legacy database F” is all frequent items of legacy database T’ is DFPBT Table stored in the database

T” is all transactions including any infrequent item of legacy database Output:

the frequent patterns

Description:

1: Scan db first time and accumulate all item with I to find all frequent items F’

whose support >= min_sup

2: Compare F’ with F” then find all infrequent items I’ which were frequent and all frequent items I” which were infrequent in previous mining

3: for all item i in I’

4: Delete the item i in T’

5: if the transactions including i is not exist T” then 6: Insert these transactions into T”

7: end if 8: end for

9: for all item i in I”

10: Traversal all transactions including i in T” and insert the newly frequent items to T’

11: if all items of the transactions including i in T” are frequent then 12: Delete the transactions from T”

13: end if

(45)

14: end for

15: Sort the items in T’ in newly descending order of their frequencies 16: Scan db second time to find frequent items F in every transaction in db 17: for all F in every transaction

18: Sort the items in F in descending order of their frequencies 19: Insert these items into T’

20: end for

20: Build the tree root from T’

21: SearchFP(root, null)

圖 3-6:系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程,本節將實際舉 例說明本論文所提出的演算法進行的過程,我們會有兩個資料表格,一份舊有 資料代表第一個月份的資料,另一份新進式資料代表第二月份的資料。假設舊 有資料表如表 3-7,最小支持度設定為 50%。

(46)

表 3-7:舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7 1 A C <NULL> <NULL> <NULL> <NULL> <NULL>

2 A B C E <NULL> <NULL> <NULL>

3 D E <NULL> <NULL> <NULL> <NULL> <NULL>

4 A D E F <NULL> <NULL> <NULL>

5 C <NULL> <NULL> <NULL> <NULL> <NULL> <NULL>

6 B C D <NULL> <NULL> <NULL> <NULL>

首先,我們要先掃描資料庫,計算每個項目出現的次數。把最小支持度乘 於交易記錄的總筆數得到最低出現的門檻,假如有大於或等於這個門檻次數的 話,就變成高頻項目,在這個例子,門檻的次數為 2(50%*6)。對舊有資料掃描 一次之後得到如下圖。

圖 3-7:掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數,得到{C,A,E,D}為高頻項 目,接下來就要掃描資料庫第二次,尋找這些高頻項目在資料庫裡互相出現的 關係,掃描資料庫後,並按照高頻項目的 id 排序,得到如圖 4-8 左邊的表格。

(47)

因為 item4~item7 都沒有資料,所以在表格中我們把它們省略。

圖 3-8:掃描資料庫第二次與建立 DFPBT

當掃描資料庫第二次,一筆一筆讀入判斷交易記錄有哪些高頻項目與排序 後,會順便把這一筆的排序過的高頻項目建立到 DFPBT 樹狀結構中,至到掃 描整個資料庫為止。而在掃描資料庫的當時,也會同時判斷交易記錄是否含有 非高頻項目,如果有的話,就先新增到非高頻項目交易記錄暫存區,等掃描整 個資料庫後,再把這暫存區寫回資料庫,儲存在一個記錄含有非高頻項目的交 易記錄資料表格(Infrequent Transactions Table)中。這上面這個例子,非高頻的 交易記錄如下表,共有三筆交易記錄,下表 3-8。因為非高頻的項目為{B}與 {F},所以包含有任何一個非高頻項目的交易記錄都會被記錄非高頻項目交易 記錄表格中,而其中有 id 欄位當主索引鍵,也可以讓以後的更新高頻項目的步 驟更方便。

表 3-8:含有非高頻項目之交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 1 A B C E <NULL> <NULL> <NULL>

2 A D E F <NULL> <NULL> <NULL>

3 B C D <NULL> <NULL> <NULL> <NULL>

(48)

當完成上述步驟,我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項 目集合的動作。在探勘之前,我們會把 DFPBT 瀏覽過一遍,把 DFPBT 高頻資 訊儲存到關聯式表格裡,如表 3-9。

表 3-9:DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support 1 E D <NULL> <NULL> <NULL> <NULL> <NULL> 1 2 A E D <NULL> <NULL> <NULL> <NULL> 1 3 C D <NULL> <NULL> <NULL> <NULL> <NULL> 1 4 C A E <NULL> <NULL> <NULL> <NULL> 1 5 C A <NULL> <NULL> <NULL> <NULL> <NULL> 1 6 C <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 1

首先從樹狀結構的最上層的左邊節點開始探勘,從{C:4}節點開始探勘,在 探勘的時候,會把其左邊的節點合併到右邊的節點上,合併的排序順序也是依 照高頻項目的 id 排序。如果有相同項目名稱的節點的話,則把兩節點的次數加 總,不用在產生新節點;反之,則產生一個相同項目名稱與次數的節點,合併 後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示。而最上層的節點一定是高頻,所以 不用判斷它的次數有沒有符合支持度,把{C:4}記錄在一個高頻項目集的暫存 區,等整個 DFPBT 探勘完成之後,就把這個暫存區寫入資料庫。

(49)

圖 3-9:探勘{C:4}合併後的 DFPBT

接下來往左節點探勘,在要探勘{C:4, A:2}之前,會先把{C:4, A:2}左邊的 節點合併到{C:4, A:2}右邊的節點,如圖 3-10。合併完之後就開始探勘{C:4, A:2}

有沒有是高頻項目,{A}節點的項目次數為 2,沒有符合支持度,不做任何動作,

而因為{C:4, A:2}不是高頻項目集合,所以其左邊的節點也一定沒有高頻項目集 合,因此停止對{C:4, A:2}的左節點探勘。之後回來,探勘{C:4, A:2}的右邊。

圖 3-10:探勘{C:4, A:2}合併的 DFPBT

開始探勘{C:4,A:2}的右節點,先探勘第一個右節點為{C:4, E:1},{C:4,E:1}

沒有左節點,所以不用合併。探勘{C:4, E:1}的時候得到 E 的次數為 1,不符合 高頻,再探勘右邊節點{C:4, D:1},沒有左節點不用合併,且次數不符合支持度。

再來,探勘{C:4}右邊的節點,依之類推,得到所有高頻項目集合。

當第二月份新進資料有 6 筆記錄新增後,一樣先搜尋新進資料一次,得到

(50)

新進資料中每個項目的次數,在與掃描舊有資料時所儲存的每個項目的出現次 數加總,就可以知道每個項目的次數了,然後在判斷有沒有達到高頻,假設新 進的資料如表 3-10。

表 3-10:新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7 1 A B C F <NULL> <NULL> <NULL>

2 B C <NULL> <NULL> <NULL> <NULL> <NULL>

3 B D E <NULL> <NULL> <NULL> <NULL>

4 A C E <NULL> <NULL> <NULL> <NULL>

5 C E <NULL> <NULL> <NULL> <NULL> <NULL>

6 A B C E <NULL> <NULL> <NULL>

此時,如果支持度依然是 50%的話,最低的門檻次數就為 6(50%*12),得 到排序過後的高頻項目如圖 3-11 最右邊的表格。

圖 3-11:新進資料新進後的高頻項目

我們得到新的高頻項目之後,接下來,要把 DFPBT Table 中變成非高頻的 項目刪去並把新增的高頻加入。首先從上一次探勘得到的高頻項目表格(圖 3-7) 和本次探勘得到的高頻項目(圖 3-11),我們可以很清楚的知道{D}項目已變成非

(51)

高頻項目,因此我們讀入 DFPBT Table 暫存到記憶體中,把非高頻項目{D}一 一找出,並把{D}欄位設為 NULL 予以刪除,結果如下表 3-11,刪除的部分如 表格中粗體字的部分。

表 3-11:刪除 DFPBT Table 的非高頻項目{D}

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support 1 E <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 1 2 A E <NULL> <NULL> <NULL> <NULL> <NULL> 1 3 C <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 1 4 C A E <NULL> <NULL> <NULL> <NULL> 1 5 C A <NULL> <NULL> <NULL> <NULL> <NULL> 1 6 C <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 1 在刪除非高頻項目{D}的同時,也會判斷所屬的交易記錄是否已存在於非 高頻交易記錄的表格(Infrequent Transactions Table)中,如果不存在,則予以新 增。刪除完成非高頻項目{D}以後。接下來,我們也要判斷是否有新增的高頻 項目,比對新舊的高頻項目表格得到{B}為這次探勘新增的高頻項目,此時我 們就要判斷非高頻交易記錄表格中含有{B}的資訊,比對 DFPBT Table,然後把 {B}插入到 DFPBT Table 的正確資料列中,新增之後如表 3-12。粗體的部分表 示剛新增的高頻項目。新增高頻項目也會同時判斷非高頻交易記錄表格含{B}

的資料列,是否都為高頻項目,如果是的話刪除此資料列,因此此資料列已不 包含非高頻項目,應該予以刪除。

參考文獻

相關文件

2.1.1 The pre-primary educator must have specialised knowledge about the characteristics of child development before they can be responsive to the needs of children, set

 Promote project learning, mathematical modeling, and problem-based learning to strengthen the ability to integrate and apply knowledge and skills, and make. calculated

• Is the school able to make reference to different sources of assessment data and provide timely and effective feedback to students according to their performance in order

To make friends, people need to spend time together so they can discover their common interests and have a.. comfortable rapport with

This kind of algorithm has also been a powerful tool for solving many other optimization problems, including symmetric cone complementarity problems [15, 16, 20–22], symmetric

• Visit the primary school before school starts, find out about the learning environment and children’s impression of the school and help children adapt to the new school after the

For example, even though no payment was made on the interest expenses for the bank loan in item (vi), the interest expenses should be calculated based on the number of

Efficient training relies on designing optimization algorithms by incorporating the problem structure Many issues about multi-core and distributed linear classification still need to