incremental data mining based on binary tree...

69
題目:運用二元樹於漸進式關聯法則探勘之研究 Incremental Data Mining Based on Binary Tree Technique 別:資訊管理學系碩士班 學號姓名:M09010008 莊文宗 指導教授:游坤明 博士 中華民國 九十四 年 七 月

Upload: others

Post on 30-Aug-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

中 華 大 學

碩 士 論 文

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

Incremental Data Mining Based on Binary Tree

Technique

系 所 別資訊管理學系碩士班

學號姓名M09010008 莊文宗

指導教授游坤明 博士

中華民國 九十四 年 七 月

I

中文摘要

資料探勘是一種從大量資料庫中萃取有用資訊知識的技術資料探勘技術

應用的範圍相當廣泛挖掘出資料之間的關聯式法則就是其中的一種應用當所

累積下來的資料不是很龐大的時候資料探勘可以很有效率的探勘出資料間的規

則但隨著日子企業所累積的資料量越來越龐大資料探勘的工作也就顯得非常

耗費時間因此如何有效率完成資料探勘便成為很重要的研究課題

有鑑於以往關聯式法則相關研究所提出的探勘方式需要過多的執行時間本

論文提出一種有效率的資料探勘演算法 -降冪頻繁樣式二元樹 (Descending

Frequent Patterns Binary Tree)它僅僅掃描資料庫二次而且本論文所用到的樹

狀結構與維持正確的項目集合次數所用的合併左子樹(Merge Left Child Tree)方

式可以很快速地探勘出關聯式法則以及節省探勘過程記憶體的使用量針對

資料量日益增多的狀況本論文也提出了漸進式資料探勘演算法(Incremental

Descending Frequent Patterns Binary Tree)當資料量增多的時候可以完全不用

掃描舊有資料利用前一次探勘所記錄下來的資訊與探勘新增的資料漸進式的

完成探勘工作在實驗中本論文也利用實際的資料針對演算法進行效能分析

以驗證演算法的效能

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

II

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

III

致 謝

時光匆匆兩年的研究所生涯就此劃上美好的句點回想過去種種時光有

快樂也有悲傷在一起運動聊天的歡笑在一起挑燈夜戰趕報告看書的煎熬

這些過程將成為我最美好的回憶這兩年的研究所日子非常感謝我的指導老師

游坤明老師給予我在研究上最大的支持不管是在學業上或者生活上的指導與鼓

勵還有口試時陳志誠羅家駿老師對於我論文的指正與建議非常的感謝他

們也感謝實驗室同學學弟們這兩年的陪伴有你們我的研究生活多采多姿

最後謝謝父母親的養育之恩並在我求學過程中給我最大的鼓勵與包容給我

最大的力量在課業上努力衝刺也非常謝謝姐姐哥哥體諒我的個性讓我不用

擔憂家裡面的狀況專心地完成學業要感謝的人非常多在此獻上最誠致的

祝福給曾經幫助過我的人祝您們永遠快樂幸福

莊文宗謹致

中華大學資訊管理學系 碩士班

中華民國九十四年七月

IV

目錄

第一章 緒論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

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較 48 第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較 50 第三節 不同支持度對 IDFPBT 演算法效能影響之比較 52 第四節 不同演算法效能之比較 53

V

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

參考文獻57

VI

圖目錄

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

圖 2-2FP-tree 架構圖 10

圖 2-3AFOPT 資料結構 11

圖 2-4push-right step of the subtree of node c12

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

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

圖 3-1DFPBT 架構 21

圖 3-2Merge 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探勘C4合併後的 DFPBT38

圖 3-10探勘C4 A2合併的 DFPBT38

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

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

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)49

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)51

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

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

VII

表目錄

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

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

表 3-1DFPBT 存入資料庫 23

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

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

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

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

表 3-6漸進式演算法 33

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

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

表 3-9DFPBT Table37

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

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

表 3-12新增高頻項目B到 DFPBT Table 41

表 3-13調整高頻順序後的 DFPBT Table41

表 3-14新進資料的高頻資料新增到 DFPBT Table42

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

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

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

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

表 5-1DFPBT 演算法實驗數據表(支持度05) 48

表 5-2IDFPBT 演算法實驗數據表(支持度05)49

表 5-3DFPBT 演算法實驗數據表(支持度03) 50

表 5-4IDFPBT 演算法實驗數據表(支持度03)51

1

第一章 緒論

資料探勘的應用主要是從大量的資料中挖掘出有用的資訊知識以提供

使用者能作出有效的判斷因此有許多的不同的領域開始廣泛應用此項技術來

解決問題舉凡政府機關使用資料探勘技術分析民眾對政府施政滿意度調查

公司行號用來分析顧客消費行為資料探勘都扮演相當重要的角色而在企業

電腦化的推行資料的產生量已經呈現指數攀升雖然伴隨電腦科技的進步

軟硬體設備的速度越來越快但面對龐大的資料量分析時還是需要很長的時間

進行在現今事事講究效率的時代有效率的資料探勘就成為了一個重要的研

究課題

第一節 研究背景

拜資訊科技進步之賜很多企業紛紛引進電子化利用電子科技達到有效

率的作業在這同時企業也開始把每日的商業交易資料顧客基本資料等儲

存在所謂的電子媒介裡例如資料庫資料倉儲等以節省龐大紙本儲存的浪

費健保從執行以來間接的促進醫療院所電子化作業各種的醫療作業申

請都經由電腦來完成作業尤其是每日增加的病患門診資料利用資料庫可以

儲存大量的門診資料而且就診時能透過電腦立即得到病患的就診記錄而不

管是企業的交易資料醫療院所的門診資料都可能隱藏著一些有用的資訊經

過一些技術的萃取可以把這些有用資訊外顯出來因此就有許多學者專家致力

於這一方面的研究針對不同的情況提出了許多挖掘資訊知識的技術

第二節 研究動機

資料探勘是為了發現有意義之模式或規則以自動或半自動的方法對大

量資料進行探勘分析所進行的流程[2]關聯式法則[9]是資料探勘方法的重要

技術之一它可以找出資料之間的關聯性譬如說大部分的人到大賣場買牛

2

奶時也會順便買麵包所以就有「牛奶 麵包」這項關聯式法則大賣場就能

以這項規則推出一些整合性的促銷活動以增加產品的銷售量[12]相同的

在醫療院所的就診記錄上如果能從中找出一些關聯式規則的話不但能佐證

已知的學理或得到醫學上的新發現而且可以提供醫療人員診療的參考因此

關聯式法則的探勘可說是醫療人員診療時的一大助手

一般在做關聯式法則探勘都是對靜態資料進行探勘[101516]一旦資料

有新增的時候就要從頭開始重新探勘這種方式的資料探勘非常不合實際效

益且浪費許多成本因此就有一些學者專家研究[1514]利用以前探勘所記錄下

來的資訊只對新增的資料進行探勘在儘量避免重新探勘原先已探勘過的資

料的情況下快速地探勘出關聯式法則來這種的方式稱為「漸進式資料探勘」

而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來

在原本有些演算法本身就比較沒有效率的原因下其改良後的漸進式資料探勘

演算法還是需要較多的執行時間因此本論文希望針對不斷新增的醫療院所門

診資料發展出一快速的資料探勘演算法並以此演算法發展出一漸進式資料

探勘演算法搜尋出有用的關聯式法則以期輔助醫療院所問診的參考與資料

探勘領域的新貢獻

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊而在面對日新月益不

斷增加的資料庫來說如何有效率的節省時間快速找出規則出來是非常重要的

一件事漸進式的資料探勘雖然可以減少不必要的探勘動作但以往的漸進式

資料探勘大部分還是需求許多的掃描資料庫動作尤其是面對龐大的醫病門診

資料時掃描的動作會花費很多時間近幾年來有些學者提出利用樹狀結構

探勘的方式[1013]此種方式只要求微小的掃描資料庫次數而且可以很迅速

地是勘出規則因此本論文希望使用樹狀呈現資料的方式在減少資料庫搜尋

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 2: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

I

中文摘要

資料探勘是一種從大量資料庫中萃取有用資訊知識的技術資料探勘技術

應用的範圍相當廣泛挖掘出資料之間的關聯式法則就是其中的一種應用當所

累積下來的資料不是很龐大的時候資料探勘可以很有效率的探勘出資料間的規

則但隨著日子企業所累積的資料量越來越龐大資料探勘的工作也就顯得非常

耗費時間因此如何有效率完成資料探勘便成為很重要的研究課題

有鑑於以往關聯式法則相關研究所提出的探勘方式需要過多的執行時間本

論文提出一種有效率的資料探勘演算法 -降冪頻繁樣式二元樹 (Descending

Frequent Patterns Binary Tree)它僅僅掃描資料庫二次而且本論文所用到的樹

狀結構與維持正確的項目集合次數所用的合併左子樹(Merge Left Child Tree)方

式可以很快速地探勘出關聯式法則以及節省探勘過程記憶體的使用量針對

資料量日益增多的狀況本論文也提出了漸進式資料探勘演算法(Incremental

Descending Frequent Patterns Binary Tree)當資料量增多的時候可以完全不用

掃描舊有資料利用前一次探勘所記錄下來的資訊與探勘新增的資料漸進式的

完成探勘工作在實驗中本論文也利用實際的資料針對演算法進行效能分析

以驗證演算法的效能

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

II

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

III

致 謝

時光匆匆兩年的研究所生涯就此劃上美好的句點回想過去種種時光有

快樂也有悲傷在一起運動聊天的歡笑在一起挑燈夜戰趕報告看書的煎熬

這些過程將成為我最美好的回憶這兩年的研究所日子非常感謝我的指導老師

游坤明老師給予我在研究上最大的支持不管是在學業上或者生活上的指導與鼓

勵還有口試時陳志誠羅家駿老師對於我論文的指正與建議非常的感謝他

們也感謝實驗室同學學弟們這兩年的陪伴有你們我的研究生活多采多姿

最後謝謝父母親的養育之恩並在我求學過程中給我最大的鼓勵與包容給我

最大的力量在課業上努力衝刺也非常謝謝姐姐哥哥體諒我的個性讓我不用

擔憂家裡面的狀況專心地完成學業要感謝的人非常多在此獻上最誠致的

祝福給曾經幫助過我的人祝您們永遠快樂幸福

莊文宗謹致

中華大學資訊管理學系 碩士班

中華民國九十四年七月

IV

目錄

第一章 緒論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

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較 48 第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較 50 第三節 不同支持度對 IDFPBT 演算法效能影響之比較 52 第四節 不同演算法效能之比較 53

V

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

參考文獻57

VI

圖目錄

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

圖 2-2FP-tree 架構圖 10

圖 2-3AFOPT 資料結構 11

圖 2-4push-right step of the subtree of node c12

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

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

圖 3-1DFPBT 架構 21

圖 3-2Merge 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探勘C4合併後的 DFPBT38

圖 3-10探勘C4 A2合併的 DFPBT38

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

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

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)49

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)51

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

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

VII

表目錄

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

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

表 3-1DFPBT 存入資料庫 23

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

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

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

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

表 3-6漸進式演算法 33

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

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

表 3-9DFPBT Table37

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

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

表 3-12新增高頻項目B到 DFPBT Table 41

表 3-13調整高頻順序後的 DFPBT Table41

表 3-14新進資料的高頻資料新增到 DFPBT Table42

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

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

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

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

表 5-1DFPBT 演算法實驗數據表(支持度05) 48

表 5-2IDFPBT 演算法實驗數據表(支持度05)49

表 5-3DFPBT 演算法實驗數據表(支持度03) 50

表 5-4IDFPBT 演算法實驗數據表(支持度03)51

1

第一章 緒論

資料探勘的應用主要是從大量的資料中挖掘出有用的資訊知識以提供

使用者能作出有效的判斷因此有許多的不同的領域開始廣泛應用此項技術來

解決問題舉凡政府機關使用資料探勘技術分析民眾對政府施政滿意度調查

公司行號用來分析顧客消費行為資料探勘都扮演相當重要的角色而在企業

電腦化的推行資料的產生量已經呈現指數攀升雖然伴隨電腦科技的進步

軟硬體設備的速度越來越快但面對龐大的資料量分析時還是需要很長的時間

進行在現今事事講究效率的時代有效率的資料探勘就成為了一個重要的研

究課題

第一節 研究背景

拜資訊科技進步之賜很多企業紛紛引進電子化利用電子科技達到有效

率的作業在這同時企業也開始把每日的商業交易資料顧客基本資料等儲

存在所謂的電子媒介裡例如資料庫資料倉儲等以節省龐大紙本儲存的浪

費健保從執行以來間接的促進醫療院所電子化作業各種的醫療作業申

請都經由電腦來完成作業尤其是每日增加的病患門診資料利用資料庫可以

儲存大量的門診資料而且就診時能透過電腦立即得到病患的就診記錄而不

管是企業的交易資料醫療院所的門診資料都可能隱藏著一些有用的資訊經

過一些技術的萃取可以把這些有用資訊外顯出來因此就有許多學者專家致力

於這一方面的研究針對不同的情況提出了許多挖掘資訊知識的技術

第二節 研究動機

資料探勘是為了發現有意義之模式或規則以自動或半自動的方法對大

量資料進行探勘分析所進行的流程[2]關聯式法則[9]是資料探勘方法的重要

技術之一它可以找出資料之間的關聯性譬如說大部分的人到大賣場買牛

2

奶時也會順便買麵包所以就有「牛奶 麵包」這項關聯式法則大賣場就能

以這項規則推出一些整合性的促銷活動以增加產品的銷售量[12]相同的

在醫療院所的就診記錄上如果能從中找出一些關聯式規則的話不但能佐證

已知的學理或得到醫學上的新發現而且可以提供醫療人員診療的參考因此

關聯式法則的探勘可說是醫療人員診療時的一大助手

一般在做關聯式法則探勘都是對靜態資料進行探勘[101516]一旦資料

有新增的時候就要從頭開始重新探勘這種方式的資料探勘非常不合實際效

益且浪費許多成本因此就有一些學者專家研究[1514]利用以前探勘所記錄下

來的資訊只對新增的資料進行探勘在儘量避免重新探勘原先已探勘過的資

料的情況下快速地探勘出關聯式法則來這種的方式稱為「漸進式資料探勘」

而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來

在原本有些演算法本身就比較沒有效率的原因下其改良後的漸進式資料探勘

演算法還是需要較多的執行時間因此本論文希望針對不斷新增的醫療院所門

診資料發展出一快速的資料探勘演算法並以此演算法發展出一漸進式資料

探勘演算法搜尋出有用的關聯式法則以期輔助醫療院所問診的參考與資料

探勘領域的新貢獻

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊而在面對日新月益不

斷增加的資料庫來說如何有效率的節省時間快速找出規則出來是非常重要的

一件事漸進式的資料探勘雖然可以減少不必要的探勘動作但以往的漸進式

資料探勘大部分還是需求許多的掃描資料庫動作尤其是面對龐大的醫病門診

資料時掃描的動作會花費很多時間近幾年來有些學者提出利用樹狀結構

探勘的方式[1013]此種方式只要求微小的掃描資料庫次數而且可以很迅速

地是勘出規則因此本論文希望使用樹狀呈現資料的方式在減少資料庫搜尋

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 3: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

II

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

III

致 謝

時光匆匆兩年的研究所生涯就此劃上美好的句點回想過去種種時光有

快樂也有悲傷在一起運動聊天的歡笑在一起挑燈夜戰趕報告看書的煎熬

這些過程將成為我最美好的回憶這兩年的研究所日子非常感謝我的指導老師

游坤明老師給予我在研究上最大的支持不管是在學業上或者生活上的指導與鼓

勵還有口試時陳志誠羅家駿老師對於我論文的指正與建議非常的感謝他

們也感謝實驗室同學學弟們這兩年的陪伴有你們我的研究生活多采多姿

最後謝謝父母親的養育之恩並在我求學過程中給我最大的鼓勵與包容給我

最大的力量在課業上努力衝刺也非常謝謝姐姐哥哥體諒我的個性讓我不用

擔憂家裡面的狀況專心地完成學業要感謝的人非常多在此獻上最誠致的

祝福給曾經幫助過我的人祝您們永遠快樂幸福

莊文宗謹致

中華大學資訊管理學系 碩士班

中華民國九十四年七月

IV

目錄

第一章 緒論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

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較 48 第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較 50 第三節 不同支持度對 IDFPBT 演算法效能影響之比較 52 第四節 不同演算法效能之比較 53

V

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

參考文獻57

VI

圖目錄

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

圖 2-2FP-tree 架構圖 10

圖 2-3AFOPT 資料結構 11

圖 2-4push-right step of the subtree of node c12

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

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

圖 3-1DFPBT 架構 21

圖 3-2Merge 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探勘C4合併後的 DFPBT38

圖 3-10探勘C4 A2合併的 DFPBT38

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

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

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)49

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)51

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

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

VII

表目錄

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

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

表 3-1DFPBT 存入資料庫 23

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

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

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

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

表 3-6漸進式演算法 33

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

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

表 3-9DFPBT Table37

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

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

表 3-12新增高頻項目B到 DFPBT Table 41

表 3-13調整高頻順序後的 DFPBT Table41

表 3-14新進資料的高頻資料新增到 DFPBT Table42

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

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

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

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

表 5-1DFPBT 演算法實驗數據表(支持度05) 48

表 5-2IDFPBT 演算法實驗數據表(支持度05)49

表 5-3DFPBT 演算法實驗數據表(支持度03) 50

表 5-4IDFPBT 演算法實驗數據表(支持度03)51

1

第一章 緒論

資料探勘的應用主要是從大量的資料中挖掘出有用的資訊知識以提供

使用者能作出有效的判斷因此有許多的不同的領域開始廣泛應用此項技術來

解決問題舉凡政府機關使用資料探勘技術分析民眾對政府施政滿意度調查

公司行號用來分析顧客消費行為資料探勘都扮演相當重要的角色而在企業

電腦化的推行資料的產生量已經呈現指數攀升雖然伴隨電腦科技的進步

軟硬體設備的速度越來越快但面對龐大的資料量分析時還是需要很長的時間

進行在現今事事講究效率的時代有效率的資料探勘就成為了一個重要的研

究課題

第一節 研究背景

拜資訊科技進步之賜很多企業紛紛引進電子化利用電子科技達到有效

率的作業在這同時企業也開始把每日的商業交易資料顧客基本資料等儲

存在所謂的電子媒介裡例如資料庫資料倉儲等以節省龐大紙本儲存的浪

費健保從執行以來間接的促進醫療院所電子化作業各種的醫療作業申

請都經由電腦來完成作業尤其是每日增加的病患門診資料利用資料庫可以

儲存大量的門診資料而且就診時能透過電腦立即得到病患的就診記錄而不

管是企業的交易資料醫療院所的門診資料都可能隱藏著一些有用的資訊經

過一些技術的萃取可以把這些有用資訊外顯出來因此就有許多學者專家致力

於這一方面的研究針對不同的情況提出了許多挖掘資訊知識的技術

第二節 研究動機

資料探勘是為了發現有意義之模式或規則以自動或半自動的方法對大

量資料進行探勘分析所進行的流程[2]關聯式法則[9]是資料探勘方法的重要

技術之一它可以找出資料之間的關聯性譬如說大部分的人到大賣場買牛

2

奶時也會順便買麵包所以就有「牛奶 麵包」這項關聯式法則大賣場就能

以這項規則推出一些整合性的促銷活動以增加產品的銷售量[12]相同的

在醫療院所的就診記錄上如果能從中找出一些關聯式規則的話不但能佐證

已知的學理或得到醫學上的新發現而且可以提供醫療人員診療的參考因此

關聯式法則的探勘可說是醫療人員診療時的一大助手

一般在做關聯式法則探勘都是對靜態資料進行探勘[101516]一旦資料

有新增的時候就要從頭開始重新探勘這種方式的資料探勘非常不合實際效

益且浪費許多成本因此就有一些學者專家研究[1514]利用以前探勘所記錄下

來的資訊只對新增的資料進行探勘在儘量避免重新探勘原先已探勘過的資

料的情況下快速地探勘出關聯式法則來這種的方式稱為「漸進式資料探勘」

而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來

在原本有些演算法本身就比較沒有效率的原因下其改良後的漸進式資料探勘

演算法還是需要較多的執行時間因此本論文希望針對不斷新增的醫療院所門

診資料發展出一快速的資料探勘演算法並以此演算法發展出一漸進式資料

探勘演算法搜尋出有用的關聯式法則以期輔助醫療院所問診的參考與資料

探勘領域的新貢獻

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊而在面對日新月益不

斷增加的資料庫來說如何有效率的節省時間快速找出規則出來是非常重要的

一件事漸進式的資料探勘雖然可以減少不必要的探勘動作但以往的漸進式

資料探勘大部分還是需求許多的掃描資料庫動作尤其是面對龐大的醫病門診

資料時掃描的動作會花費很多時間近幾年來有些學者提出利用樹狀結構

探勘的方式[1013]此種方式只要求微小的掃描資料庫次數而且可以很迅速

地是勘出規則因此本論文希望使用樹狀呈現資料的方式在減少資料庫搜尋

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 4: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

III

致 謝

時光匆匆兩年的研究所生涯就此劃上美好的句點回想過去種種時光有

快樂也有悲傷在一起運動聊天的歡笑在一起挑燈夜戰趕報告看書的煎熬

這些過程將成為我最美好的回憶這兩年的研究所日子非常感謝我的指導老師

游坤明老師給予我在研究上最大的支持不管是在學業上或者生活上的指導與鼓

勵還有口試時陳志誠羅家駿老師對於我論文的指正與建議非常的感謝他

們也感謝實驗室同學學弟們這兩年的陪伴有你們我的研究生活多采多姿

最後謝謝父母親的養育之恩並在我求學過程中給我最大的鼓勵與包容給我

最大的力量在課業上努力衝刺也非常謝謝姐姐哥哥體諒我的個性讓我不用

擔憂家裡面的狀況專心地完成學業要感謝的人非常多在此獻上最誠致的

祝福給曾經幫助過我的人祝您們永遠快樂幸福

莊文宗謹致

中華大學資訊管理學系 碩士班

中華民國九十四年七月

IV

目錄

第一章 緒論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

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較 48 第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較 50 第三節 不同支持度對 IDFPBT 演算法效能影響之比較 52 第四節 不同演算法效能之比較 53

V

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

參考文獻57

VI

圖目錄

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

圖 2-2FP-tree 架構圖 10

圖 2-3AFOPT 資料結構 11

圖 2-4push-right step of the subtree of node c12

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

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

圖 3-1DFPBT 架構 21

圖 3-2Merge 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探勘C4合併後的 DFPBT38

圖 3-10探勘C4 A2合併的 DFPBT38

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

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

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)49

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)51

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

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

VII

表目錄

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

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

表 3-1DFPBT 存入資料庫 23

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

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

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

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

表 3-6漸進式演算法 33

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

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

表 3-9DFPBT Table37

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

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

表 3-12新增高頻項目B到 DFPBT Table 41

表 3-13調整高頻順序後的 DFPBT Table41

表 3-14新進資料的高頻資料新增到 DFPBT Table42

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

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

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

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

表 5-1DFPBT 演算法實驗數據表(支持度05) 48

表 5-2IDFPBT 演算法實驗數據表(支持度05)49

表 5-3DFPBT 演算法實驗數據表(支持度03) 50

表 5-4IDFPBT 演算法實驗數據表(支持度03)51

1

第一章 緒論

資料探勘的應用主要是從大量的資料中挖掘出有用的資訊知識以提供

使用者能作出有效的判斷因此有許多的不同的領域開始廣泛應用此項技術來

解決問題舉凡政府機關使用資料探勘技術分析民眾對政府施政滿意度調查

公司行號用來分析顧客消費行為資料探勘都扮演相當重要的角色而在企業

電腦化的推行資料的產生量已經呈現指數攀升雖然伴隨電腦科技的進步

軟硬體設備的速度越來越快但面對龐大的資料量分析時還是需要很長的時間

進行在現今事事講究效率的時代有效率的資料探勘就成為了一個重要的研

究課題

第一節 研究背景

拜資訊科技進步之賜很多企業紛紛引進電子化利用電子科技達到有效

率的作業在這同時企業也開始把每日的商業交易資料顧客基本資料等儲

存在所謂的電子媒介裡例如資料庫資料倉儲等以節省龐大紙本儲存的浪

費健保從執行以來間接的促進醫療院所電子化作業各種的醫療作業申

請都經由電腦來完成作業尤其是每日增加的病患門診資料利用資料庫可以

儲存大量的門診資料而且就診時能透過電腦立即得到病患的就診記錄而不

管是企業的交易資料醫療院所的門診資料都可能隱藏著一些有用的資訊經

過一些技術的萃取可以把這些有用資訊外顯出來因此就有許多學者專家致力

於這一方面的研究針對不同的情況提出了許多挖掘資訊知識的技術

第二節 研究動機

資料探勘是為了發現有意義之模式或規則以自動或半自動的方法對大

量資料進行探勘分析所進行的流程[2]關聯式法則[9]是資料探勘方法的重要

技術之一它可以找出資料之間的關聯性譬如說大部分的人到大賣場買牛

2

奶時也會順便買麵包所以就有「牛奶 麵包」這項關聯式法則大賣場就能

以這項規則推出一些整合性的促銷活動以增加產品的銷售量[12]相同的

在醫療院所的就診記錄上如果能從中找出一些關聯式規則的話不但能佐證

已知的學理或得到醫學上的新發現而且可以提供醫療人員診療的參考因此

關聯式法則的探勘可說是醫療人員診療時的一大助手

一般在做關聯式法則探勘都是對靜態資料進行探勘[101516]一旦資料

有新增的時候就要從頭開始重新探勘這種方式的資料探勘非常不合實際效

益且浪費許多成本因此就有一些學者專家研究[1514]利用以前探勘所記錄下

來的資訊只對新增的資料進行探勘在儘量避免重新探勘原先已探勘過的資

料的情況下快速地探勘出關聯式法則來這種的方式稱為「漸進式資料探勘」

而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來

在原本有些演算法本身就比較沒有效率的原因下其改良後的漸進式資料探勘

演算法還是需要較多的執行時間因此本論文希望針對不斷新增的醫療院所門

診資料發展出一快速的資料探勘演算法並以此演算法發展出一漸進式資料

探勘演算法搜尋出有用的關聯式法則以期輔助醫療院所問診的參考與資料

探勘領域的新貢獻

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊而在面對日新月益不

斷增加的資料庫來說如何有效率的節省時間快速找出規則出來是非常重要的

一件事漸進式的資料探勘雖然可以減少不必要的探勘動作但以往的漸進式

資料探勘大部分還是需求許多的掃描資料庫動作尤其是面對龐大的醫病門診

資料時掃描的動作會花費很多時間近幾年來有些學者提出利用樹狀結構

探勘的方式[1013]此種方式只要求微小的掃描資料庫次數而且可以很迅速

地是勘出規則因此本論文希望使用樹狀呈現資料的方式在減少資料庫搜尋

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 5: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

IV

目錄

第一章 緒論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

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較 48 第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較 50 第三節 不同支持度對 IDFPBT 演算法效能影響之比較 52 第四節 不同演算法效能之比較 53

V

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

參考文獻57

VI

圖目錄

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

圖 2-2FP-tree 架構圖 10

圖 2-3AFOPT 資料結構 11

圖 2-4push-right step of the subtree of node c12

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

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

圖 3-1DFPBT 架構 21

圖 3-2Merge 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探勘C4合併後的 DFPBT38

圖 3-10探勘C4 A2合併的 DFPBT38

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

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

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)49

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)51

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

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

VII

表目錄

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

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

表 3-1DFPBT 存入資料庫 23

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

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

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

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

表 3-6漸進式演算法 33

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

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

表 3-9DFPBT Table37

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

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

表 3-12新增高頻項目B到 DFPBT Table 41

表 3-13調整高頻順序後的 DFPBT Table41

表 3-14新進資料的高頻資料新增到 DFPBT Table42

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

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

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

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

表 5-1DFPBT 演算法實驗數據表(支持度05) 48

表 5-2IDFPBT 演算法實驗數據表(支持度05)49

表 5-3DFPBT 演算法實驗數據表(支持度03) 50

表 5-4IDFPBT 演算法實驗數據表(支持度03)51

1

第一章 緒論

資料探勘的應用主要是從大量的資料中挖掘出有用的資訊知識以提供

使用者能作出有效的判斷因此有許多的不同的領域開始廣泛應用此項技術來

解決問題舉凡政府機關使用資料探勘技術分析民眾對政府施政滿意度調查

公司行號用來分析顧客消費行為資料探勘都扮演相當重要的角色而在企業

電腦化的推行資料的產生量已經呈現指數攀升雖然伴隨電腦科技的進步

軟硬體設備的速度越來越快但面對龐大的資料量分析時還是需要很長的時間

進行在現今事事講究效率的時代有效率的資料探勘就成為了一個重要的研

究課題

第一節 研究背景

拜資訊科技進步之賜很多企業紛紛引進電子化利用電子科技達到有效

率的作業在這同時企業也開始把每日的商業交易資料顧客基本資料等儲

存在所謂的電子媒介裡例如資料庫資料倉儲等以節省龐大紙本儲存的浪

費健保從執行以來間接的促進醫療院所電子化作業各種的醫療作業申

請都經由電腦來完成作業尤其是每日增加的病患門診資料利用資料庫可以

儲存大量的門診資料而且就診時能透過電腦立即得到病患的就診記錄而不

管是企業的交易資料醫療院所的門診資料都可能隱藏著一些有用的資訊經

過一些技術的萃取可以把這些有用資訊外顯出來因此就有許多學者專家致力

於這一方面的研究針對不同的情況提出了許多挖掘資訊知識的技術

第二節 研究動機

資料探勘是為了發現有意義之模式或規則以自動或半自動的方法對大

量資料進行探勘分析所進行的流程[2]關聯式法則[9]是資料探勘方法的重要

技術之一它可以找出資料之間的關聯性譬如說大部分的人到大賣場買牛

2

奶時也會順便買麵包所以就有「牛奶 麵包」這項關聯式法則大賣場就能

以這項規則推出一些整合性的促銷活動以增加產品的銷售量[12]相同的

在醫療院所的就診記錄上如果能從中找出一些關聯式規則的話不但能佐證

已知的學理或得到醫學上的新發現而且可以提供醫療人員診療的參考因此

關聯式法則的探勘可說是醫療人員診療時的一大助手

一般在做關聯式法則探勘都是對靜態資料進行探勘[101516]一旦資料

有新增的時候就要從頭開始重新探勘這種方式的資料探勘非常不合實際效

益且浪費許多成本因此就有一些學者專家研究[1514]利用以前探勘所記錄下

來的資訊只對新增的資料進行探勘在儘量避免重新探勘原先已探勘過的資

料的情況下快速地探勘出關聯式法則來這種的方式稱為「漸進式資料探勘」

而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來

在原本有些演算法本身就比較沒有效率的原因下其改良後的漸進式資料探勘

演算法還是需要較多的執行時間因此本論文希望針對不斷新增的醫療院所門

診資料發展出一快速的資料探勘演算法並以此演算法發展出一漸進式資料

探勘演算法搜尋出有用的關聯式法則以期輔助醫療院所問診的參考與資料

探勘領域的新貢獻

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊而在面對日新月益不

斷增加的資料庫來說如何有效率的節省時間快速找出規則出來是非常重要的

一件事漸進式的資料探勘雖然可以減少不必要的探勘動作但以往的漸進式

資料探勘大部分還是需求許多的掃描資料庫動作尤其是面對龐大的醫病門診

資料時掃描的動作會花費很多時間近幾年來有些學者提出利用樹狀結構

探勘的方式[1013]此種方式只要求微小的掃描資料庫次數而且可以很迅速

地是勘出規則因此本論文希望使用樹狀呈現資料的方式在減少資料庫搜尋

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 6: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

V

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

參考文獻57

VI

圖目錄

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

圖 2-2FP-tree 架構圖 10

圖 2-3AFOPT 資料結構 11

圖 2-4push-right step of the subtree of node c12

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

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

圖 3-1DFPBT 架構 21

圖 3-2Merge 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探勘C4合併後的 DFPBT38

圖 3-10探勘C4 A2合併的 DFPBT38

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

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

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)49

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)51

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

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

VII

表目錄

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

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

表 3-1DFPBT 存入資料庫 23

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

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

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

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

表 3-6漸進式演算法 33

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

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

表 3-9DFPBT Table37

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

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

表 3-12新增高頻項目B到 DFPBT Table 41

表 3-13調整高頻順序後的 DFPBT Table41

表 3-14新進資料的高頻資料新增到 DFPBT Table42

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

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

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

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

表 5-1DFPBT 演算法實驗數據表(支持度05) 48

表 5-2IDFPBT 演算法實驗數據表(支持度05)49

表 5-3DFPBT 演算法實驗數據表(支持度03) 50

表 5-4IDFPBT 演算法實驗數據表(支持度03)51

1

第一章 緒論

資料探勘的應用主要是從大量的資料中挖掘出有用的資訊知識以提供

使用者能作出有效的判斷因此有許多的不同的領域開始廣泛應用此項技術來

解決問題舉凡政府機關使用資料探勘技術分析民眾對政府施政滿意度調查

公司行號用來分析顧客消費行為資料探勘都扮演相當重要的角色而在企業

電腦化的推行資料的產生量已經呈現指數攀升雖然伴隨電腦科技的進步

軟硬體設備的速度越來越快但面對龐大的資料量分析時還是需要很長的時間

進行在現今事事講究效率的時代有效率的資料探勘就成為了一個重要的研

究課題

第一節 研究背景

拜資訊科技進步之賜很多企業紛紛引進電子化利用電子科技達到有效

率的作業在這同時企業也開始把每日的商業交易資料顧客基本資料等儲

存在所謂的電子媒介裡例如資料庫資料倉儲等以節省龐大紙本儲存的浪

費健保從執行以來間接的促進醫療院所電子化作業各種的醫療作業申

請都經由電腦來完成作業尤其是每日增加的病患門診資料利用資料庫可以

儲存大量的門診資料而且就診時能透過電腦立即得到病患的就診記錄而不

管是企業的交易資料醫療院所的門診資料都可能隱藏著一些有用的資訊經

過一些技術的萃取可以把這些有用資訊外顯出來因此就有許多學者專家致力

於這一方面的研究針對不同的情況提出了許多挖掘資訊知識的技術

第二節 研究動機

資料探勘是為了發現有意義之模式或規則以自動或半自動的方法對大

量資料進行探勘分析所進行的流程[2]關聯式法則[9]是資料探勘方法的重要

技術之一它可以找出資料之間的關聯性譬如說大部分的人到大賣場買牛

2

奶時也會順便買麵包所以就有「牛奶 麵包」這項關聯式法則大賣場就能

以這項規則推出一些整合性的促銷活動以增加產品的銷售量[12]相同的

在醫療院所的就診記錄上如果能從中找出一些關聯式規則的話不但能佐證

已知的學理或得到醫學上的新發現而且可以提供醫療人員診療的參考因此

關聯式法則的探勘可說是醫療人員診療時的一大助手

一般在做關聯式法則探勘都是對靜態資料進行探勘[101516]一旦資料

有新增的時候就要從頭開始重新探勘這種方式的資料探勘非常不合實際效

益且浪費許多成本因此就有一些學者專家研究[1514]利用以前探勘所記錄下

來的資訊只對新增的資料進行探勘在儘量避免重新探勘原先已探勘過的資

料的情況下快速地探勘出關聯式法則來這種的方式稱為「漸進式資料探勘」

而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來

在原本有些演算法本身就比較沒有效率的原因下其改良後的漸進式資料探勘

演算法還是需要較多的執行時間因此本論文希望針對不斷新增的醫療院所門

診資料發展出一快速的資料探勘演算法並以此演算法發展出一漸進式資料

探勘演算法搜尋出有用的關聯式法則以期輔助醫療院所問診的參考與資料

探勘領域的新貢獻

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊而在面對日新月益不

斷增加的資料庫來說如何有效率的節省時間快速找出規則出來是非常重要的

一件事漸進式的資料探勘雖然可以減少不必要的探勘動作但以往的漸進式

資料探勘大部分還是需求許多的掃描資料庫動作尤其是面對龐大的醫病門診

資料時掃描的動作會花費很多時間近幾年來有些學者提出利用樹狀結構

探勘的方式[1013]此種方式只要求微小的掃描資料庫次數而且可以很迅速

地是勘出規則因此本論文希望使用樹狀呈現資料的方式在減少資料庫搜尋

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 7: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

VI

圖目錄

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

圖 2-2FP-tree 架構圖 10

圖 2-3AFOPT 資料結構 11

圖 2-4push-right step of the subtree of node c12

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

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

圖 3-1DFPBT 架構 21

圖 3-2Merge 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探勘C4合併後的 DFPBT38

圖 3-10探勘C4 A2合併的 DFPBT38

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

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

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)49

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)51

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

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

VII

表目錄

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

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

表 3-1DFPBT 存入資料庫 23

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

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

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

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

表 3-6漸進式演算法 33

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

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

表 3-9DFPBT Table37

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

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

表 3-12新增高頻項目B到 DFPBT Table 41

表 3-13調整高頻順序後的 DFPBT Table41

表 3-14新進資料的高頻資料新增到 DFPBT Table42

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

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

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

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

表 5-1DFPBT 演算法實驗數據表(支持度05) 48

表 5-2IDFPBT 演算法實驗數據表(支持度05)49

表 5-3DFPBT 演算法實驗數據表(支持度03) 50

表 5-4IDFPBT 演算法實驗數據表(支持度03)51

1

第一章 緒論

資料探勘的應用主要是從大量的資料中挖掘出有用的資訊知識以提供

使用者能作出有效的判斷因此有許多的不同的領域開始廣泛應用此項技術來

解決問題舉凡政府機關使用資料探勘技術分析民眾對政府施政滿意度調查

公司行號用來分析顧客消費行為資料探勘都扮演相當重要的角色而在企業

電腦化的推行資料的產生量已經呈現指數攀升雖然伴隨電腦科技的進步

軟硬體設備的速度越來越快但面對龐大的資料量分析時還是需要很長的時間

進行在現今事事講究效率的時代有效率的資料探勘就成為了一個重要的研

究課題

第一節 研究背景

拜資訊科技進步之賜很多企業紛紛引進電子化利用電子科技達到有效

率的作業在這同時企業也開始把每日的商業交易資料顧客基本資料等儲

存在所謂的電子媒介裡例如資料庫資料倉儲等以節省龐大紙本儲存的浪

費健保從執行以來間接的促進醫療院所電子化作業各種的醫療作業申

請都經由電腦來完成作業尤其是每日增加的病患門診資料利用資料庫可以

儲存大量的門診資料而且就診時能透過電腦立即得到病患的就診記錄而不

管是企業的交易資料醫療院所的門診資料都可能隱藏著一些有用的資訊經

過一些技術的萃取可以把這些有用資訊外顯出來因此就有許多學者專家致力

於這一方面的研究針對不同的情況提出了許多挖掘資訊知識的技術

第二節 研究動機

資料探勘是為了發現有意義之模式或規則以自動或半自動的方法對大

量資料進行探勘分析所進行的流程[2]關聯式法則[9]是資料探勘方法的重要

技術之一它可以找出資料之間的關聯性譬如說大部分的人到大賣場買牛

2

奶時也會順便買麵包所以就有「牛奶 麵包」這項關聯式法則大賣場就能

以這項規則推出一些整合性的促銷活動以增加產品的銷售量[12]相同的

在醫療院所的就診記錄上如果能從中找出一些關聯式規則的話不但能佐證

已知的學理或得到醫學上的新發現而且可以提供醫療人員診療的參考因此

關聯式法則的探勘可說是醫療人員診療時的一大助手

一般在做關聯式法則探勘都是對靜態資料進行探勘[101516]一旦資料

有新增的時候就要從頭開始重新探勘這種方式的資料探勘非常不合實際效

益且浪費許多成本因此就有一些學者專家研究[1514]利用以前探勘所記錄下

來的資訊只對新增的資料進行探勘在儘量避免重新探勘原先已探勘過的資

料的情況下快速地探勘出關聯式法則來這種的方式稱為「漸進式資料探勘」

而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來

在原本有些演算法本身就比較沒有效率的原因下其改良後的漸進式資料探勘

演算法還是需要較多的執行時間因此本論文希望針對不斷新增的醫療院所門

診資料發展出一快速的資料探勘演算法並以此演算法發展出一漸進式資料

探勘演算法搜尋出有用的關聯式法則以期輔助醫療院所問診的參考與資料

探勘領域的新貢獻

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊而在面對日新月益不

斷增加的資料庫來說如何有效率的節省時間快速找出規則出來是非常重要的

一件事漸進式的資料探勘雖然可以減少不必要的探勘動作但以往的漸進式

資料探勘大部分還是需求許多的掃描資料庫動作尤其是面對龐大的醫病門診

資料時掃描的動作會花費很多時間近幾年來有些學者提出利用樹狀結構

探勘的方式[1013]此種方式只要求微小的掃描資料庫次數而且可以很迅速

地是勘出規則因此本論文希望使用樹狀呈現資料的方式在減少資料庫搜尋

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 8: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

VII

表目錄

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

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

表 3-1DFPBT 存入資料庫 23

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

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

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

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

表 3-6漸進式演算法 33

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

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

表 3-9DFPBT Table37

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

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

表 3-12新增高頻項目B到 DFPBT Table 41

表 3-13調整高頻順序後的 DFPBT Table41

表 3-14新進資料的高頻資料新增到 DFPBT Table42

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

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

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

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

表 5-1DFPBT 演算法實驗數據表(支持度05) 48

表 5-2IDFPBT 演算法實驗數據表(支持度05)49

表 5-3DFPBT 演算法實驗數據表(支持度03) 50

表 5-4IDFPBT 演算法實驗數據表(支持度03)51

1

第一章 緒論

資料探勘的應用主要是從大量的資料中挖掘出有用的資訊知識以提供

使用者能作出有效的判斷因此有許多的不同的領域開始廣泛應用此項技術來

解決問題舉凡政府機關使用資料探勘技術分析民眾對政府施政滿意度調查

公司行號用來分析顧客消費行為資料探勘都扮演相當重要的角色而在企業

電腦化的推行資料的產生量已經呈現指數攀升雖然伴隨電腦科技的進步

軟硬體設備的速度越來越快但面對龐大的資料量分析時還是需要很長的時間

進行在現今事事講究效率的時代有效率的資料探勘就成為了一個重要的研

究課題

第一節 研究背景

拜資訊科技進步之賜很多企業紛紛引進電子化利用電子科技達到有效

率的作業在這同時企業也開始把每日的商業交易資料顧客基本資料等儲

存在所謂的電子媒介裡例如資料庫資料倉儲等以節省龐大紙本儲存的浪

費健保從執行以來間接的促進醫療院所電子化作業各種的醫療作業申

請都經由電腦來完成作業尤其是每日增加的病患門診資料利用資料庫可以

儲存大量的門診資料而且就診時能透過電腦立即得到病患的就診記錄而不

管是企業的交易資料醫療院所的門診資料都可能隱藏著一些有用的資訊經

過一些技術的萃取可以把這些有用資訊外顯出來因此就有許多學者專家致力

於這一方面的研究針對不同的情況提出了許多挖掘資訊知識的技術

第二節 研究動機

資料探勘是為了發現有意義之模式或規則以自動或半自動的方法對大

量資料進行探勘分析所進行的流程[2]關聯式法則[9]是資料探勘方法的重要

技術之一它可以找出資料之間的關聯性譬如說大部分的人到大賣場買牛

2

奶時也會順便買麵包所以就有「牛奶 麵包」這項關聯式法則大賣場就能

以這項規則推出一些整合性的促銷活動以增加產品的銷售量[12]相同的

在醫療院所的就診記錄上如果能從中找出一些關聯式規則的話不但能佐證

已知的學理或得到醫學上的新發現而且可以提供醫療人員診療的參考因此

關聯式法則的探勘可說是醫療人員診療時的一大助手

一般在做關聯式法則探勘都是對靜態資料進行探勘[101516]一旦資料

有新增的時候就要從頭開始重新探勘這種方式的資料探勘非常不合實際效

益且浪費許多成本因此就有一些學者專家研究[1514]利用以前探勘所記錄下

來的資訊只對新增的資料進行探勘在儘量避免重新探勘原先已探勘過的資

料的情況下快速地探勘出關聯式法則來這種的方式稱為「漸進式資料探勘」

而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來

在原本有些演算法本身就比較沒有效率的原因下其改良後的漸進式資料探勘

演算法還是需要較多的執行時間因此本論文希望針對不斷新增的醫療院所門

診資料發展出一快速的資料探勘演算法並以此演算法發展出一漸進式資料

探勘演算法搜尋出有用的關聯式法則以期輔助醫療院所問診的參考與資料

探勘領域的新貢獻

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊而在面對日新月益不

斷增加的資料庫來說如何有效率的節省時間快速找出規則出來是非常重要的

一件事漸進式的資料探勘雖然可以減少不必要的探勘動作但以往的漸進式

資料探勘大部分還是需求許多的掃描資料庫動作尤其是面對龐大的醫病門診

資料時掃描的動作會花費很多時間近幾年來有些學者提出利用樹狀結構

探勘的方式[1013]此種方式只要求微小的掃描資料庫次數而且可以很迅速

地是勘出規則因此本論文希望使用樹狀呈現資料的方式在減少資料庫搜尋

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 9: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

1

第一章 緒論

資料探勘的應用主要是從大量的資料中挖掘出有用的資訊知識以提供

使用者能作出有效的判斷因此有許多的不同的領域開始廣泛應用此項技術來

解決問題舉凡政府機關使用資料探勘技術分析民眾對政府施政滿意度調查

公司行號用來分析顧客消費行為資料探勘都扮演相當重要的角色而在企業

電腦化的推行資料的產生量已經呈現指數攀升雖然伴隨電腦科技的進步

軟硬體設備的速度越來越快但面對龐大的資料量分析時還是需要很長的時間

進行在現今事事講究效率的時代有效率的資料探勘就成為了一個重要的研

究課題

第一節 研究背景

拜資訊科技進步之賜很多企業紛紛引進電子化利用電子科技達到有效

率的作業在這同時企業也開始把每日的商業交易資料顧客基本資料等儲

存在所謂的電子媒介裡例如資料庫資料倉儲等以節省龐大紙本儲存的浪

費健保從執行以來間接的促進醫療院所電子化作業各種的醫療作業申

請都經由電腦來完成作業尤其是每日增加的病患門診資料利用資料庫可以

儲存大量的門診資料而且就診時能透過電腦立即得到病患的就診記錄而不

管是企業的交易資料醫療院所的門診資料都可能隱藏著一些有用的資訊經

過一些技術的萃取可以把這些有用資訊外顯出來因此就有許多學者專家致力

於這一方面的研究針對不同的情況提出了許多挖掘資訊知識的技術

第二節 研究動機

資料探勘是為了發現有意義之模式或規則以自動或半自動的方法對大

量資料進行探勘分析所進行的流程[2]關聯式法則[9]是資料探勘方法的重要

技術之一它可以找出資料之間的關聯性譬如說大部分的人到大賣場買牛

2

奶時也會順便買麵包所以就有「牛奶 麵包」這項關聯式法則大賣場就能

以這項規則推出一些整合性的促銷活動以增加產品的銷售量[12]相同的

在醫療院所的就診記錄上如果能從中找出一些關聯式規則的話不但能佐證

已知的學理或得到醫學上的新發現而且可以提供醫療人員診療的參考因此

關聯式法則的探勘可說是醫療人員診療時的一大助手

一般在做關聯式法則探勘都是對靜態資料進行探勘[101516]一旦資料

有新增的時候就要從頭開始重新探勘這種方式的資料探勘非常不合實際效

益且浪費許多成本因此就有一些學者專家研究[1514]利用以前探勘所記錄下

來的資訊只對新增的資料進行探勘在儘量避免重新探勘原先已探勘過的資

料的情況下快速地探勘出關聯式法則來這種的方式稱為「漸進式資料探勘」

而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來

在原本有些演算法本身就比較沒有效率的原因下其改良後的漸進式資料探勘

演算法還是需要較多的執行時間因此本論文希望針對不斷新增的醫療院所門

診資料發展出一快速的資料探勘演算法並以此演算法發展出一漸進式資料

探勘演算法搜尋出有用的關聯式法則以期輔助醫療院所問診的參考與資料

探勘領域的新貢獻

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊而在面對日新月益不

斷增加的資料庫來說如何有效率的節省時間快速找出規則出來是非常重要的

一件事漸進式的資料探勘雖然可以減少不必要的探勘動作但以往的漸進式

資料探勘大部分還是需求許多的掃描資料庫動作尤其是面對龐大的醫病門診

資料時掃描的動作會花費很多時間近幾年來有些學者提出利用樹狀結構

探勘的方式[1013]此種方式只要求微小的掃描資料庫次數而且可以很迅速

地是勘出規則因此本論文希望使用樹狀呈現資料的方式在減少資料庫搜尋

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 10: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

2

奶時也會順便買麵包所以就有「牛奶 麵包」這項關聯式法則大賣場就能

以這項規則推出一些整合性的促銷活動以增加產品的銷售量[12]相同的

在醫療院所的就診記錄上如果能從中找出一些關聯式規則的話不但能佐證

已知的學理或得到醫學上的新發現而且可以提供醫療人員診療的參考因此

關聯式法則的探勘可說是醫療人員診療時的一大助手

一般在做關聯式法則探勘都是對靜態資料進行探勘[101516]一旦資料

有新增的時候就要從頭開始重新探勘這種方式的資料探勘非常不合實際效

益且浪費許多成本因此就有一些學者專家研究[1514]利用以前探勘所記錄下

來的資訊只對新增的資料進行探勘在儘量避免重新探勘原先已探勘過的資

料的情況下快速地探勘出關聯式法則來這種的方式稱為「漸進式資料探勘」

而漸進式的資料探勘大部分都是由靜態資料的資料探勘演算法改良演變而來

在原本有些演算法本身就比較沒有效率的原因下其改良後的漸進式資料探勘

演算法還是需要較多的執行時間因此本論文希望針對不斷新增的醫療院所門

診資料發展出一快速的資料探勘演算法並以此演算法發展出一漸進式資料

探勘演算法搜尋出有用的關聯式法則以期輔助醫療院所問診的參考與資料

探勘領域的新貢獻

第三節 研究目的

資料探勘技術可以從大量資料中挖掘出有用的資訊而在面對日新月益不

斷增加的資料庫來說如何有效率的節省時間快速找出規則出來是非常重要的

一件事漸進式的資料探勘雖然可以減少不必要的探勘動作但以往的漸進式

資料探勘大部分還是需求許多的掃描資料庫動作尤其是面對龐大的醫病門診

資料時掃描的動作會花費很多時間近幾年來有些學者提出利用樹狀結構

探勘的方式[1013]此種方式只要求微小的掃描資料庫次數而且可以很迅速

地是勘出規則因此本論文希望使用樹狀呈現資料的方式在減少資料庫搜尋

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 11: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

3

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

第四節 研究範圍與限制

本論文主要進行的實驗是與北部某教學醫院合作針對該院門診資料做資

料探勘動作[34]以期找出有用的關聯式規則針對該院的門診資料醫師對

病患所診斷的疾病個數至多為七個因此本實驗最多只能得到七項項目集合

此合作的醫院是一地區性的醫院實驗得到的結果會因該地區就診民眾的健康

情況而有所差異非完全反應其他醫療院所就診狀況另外本實驗是以每個月

門診資料進行漸進式的資料探勘除了記錄下來以前探勘所得到的 1 項集合的

高頻項目外探勘時用來呈現高頻交易狀況的樹狀結構也會一併記錄到資料庫

裡以讓下次的進行資料探勘時能夠快速還原原先的樹狀結構

第五節 研究流程

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

1收集有關資料探勘的相關研究文獻並整理分析資料探勘應用於醫療分

析之研究尋找適合於醫療分析的資料探勘方式並找尋合適於門診資

料探勘的改進方式

2改進現有的資料探勘方式發展出一套全新的資料探勘演算法並加以

改進為漸進式的演算法以符合不斷增加的門診資料的情況下能有效

的探勘出關聯規則並研究是否能在每次探勘時隨時更動支持度門檻的

設定

3收集醫師診斷病患的資料先過濾掉資料不齊全或錯誤的記錄然後依

探勘資料的格式進行前置轉換最後依照月份分類成不同的資料表

4利用所開發出來的漸進式資料探勘演算法進行實驗並分析其結果的正

確性以及其效能實驗得到的關聯式法則同時會交由醫院專家分析解讀

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 12: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

4

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

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

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 13: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

5

第二章 文獻探討

隨著大量地應用資料探勘技術於各領域中許多學者相繼提出不同特性之

探勘的研究關聯式法則的探勘則是最常被拿來研究的議題之一其可以從大

量的資料或資料倉儲中找到一些有用的資訊以幫忙使用者進行資料的分析或

預測等等關聯式法則的探勘可分為二個部分第一個部分為從大量資料中尋

找出符合支持度的高頻項目集合(Frequent Patterns)另一個部分則是從這些高

頻項目集合中推演出關聯式法則第二個部分是由第一個部分產生的結果推演

得到的所以只要能完成第一個部分就可以很容易得到關聯式法則因此大部

分研究此議題的學者都致力於改進第一個部分的工作上以下將針對資料探勘

技術關聯式法則以及一些演算法做介紹

第一節 資料探勘技術簡介

資料探勘在實務上具有兩大目的預測(Prediction)和描述(description)前

者是以現有的資料庫資料去預測感興趣但尚未知的值而後者則是從資料的描

述中解譯人類行為的型樣(pattern)[2]資料探勘可以此兩大目的分為六種模

式(1)分類(Classification) (2)迴歸(Regression) (3)時間序列(Time Series) (4)集群

(Clustering) (5)關聯(Association) (6)因果(Sequence)以下將對此六種模式做說

(1)分類根據一些變數做計算再依照結果做分類例如把顧客基本資料依

特定的數值運算分類成高中低等消費群企業就可以依照不同的

群體規劃推出合適的商品

(2)迴歸此方法使用在預測的目的上為使用一系列的數值來預測一個連續數

值的可能性此模式的屬性資料為連續性的

(3)時間序列主要分析與時間有關的數值與迴歸相似但此模式會得到一些

時間先後順序發生的結果

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

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

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

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

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

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

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

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

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

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

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

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

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

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

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

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

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

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

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

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

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

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

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

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

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

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

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

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 14: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

6

(4)集群是一種普遍被使用的描述性工具它是依據資料項目中的相似度

(similarity metrics)或機率密度(probability density)來尋找自然形成的

集群其異質性(heterogeneous)資料分成幾群同質性(homogeneous)極

高的子群體因此同一子群體中的資料具有類似的特性[2]也具有

子群體間的差異性

(5)關聯找出某些事件或項目同時發生的可能性例如顧客購買商品 A 時同

時購買商品 B 的可能性有多少百分比

(6)因果主要發現某事物前後發生的關聯性其與關聯式相似不同是此模式

的資料項目是以時間來做區隔例如顧客購買商品 A 後下個禮拜

回來購買商品 B 的機率有多少

一般而言以上幾種從事資料探勘的任務中分類迴歸和時間序列通常

被歸類為監督式學習具有預測性功能而關聯和因果則被歸類為非監督式學

習具有描述性功能集群則具有監督和非監督式學習的特點可同時適用預

測及描述性之需求[2]

第二節 關聯式法則介紹

關聯式法則是表達在一堆資料集合中項目的相互關係從這些相互關係可

以知道某些項目常常是伴隨相互發生的而得到這些相互關係的前提是要先從

一堆資料中搜尋出符合支持度的高頻項目集合而探勘高頻項目集合的主要議

題有(1)減少資料庫掃描的次數因為在很多狀況交易資料庫的容量是很大

的超過記憶體的大小而且從硬碟上掃描資料是很耗費時間成本的(2)減少

掃描的空間因為交易資料的每個子集合都可能成為高頻項目集合且這些子

集合的個數會是交易資料個數的指數倍數(3)改善計算項目出現次數的效能

對於大容量的資料庫與潛在的高頻項目集合的長度是很長的時候比對項目集

合是非常耗費執行時間[13]

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

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

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

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

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

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

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

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

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

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

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

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

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

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

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

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

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

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

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

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

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

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

22

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

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

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

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

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

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

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

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

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

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

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

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

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

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

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

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

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

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

(3) 新增刪除高頻項目

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

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

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

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

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

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 15: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

7

有一些研究就提出改善效能的演算法在探勘高頻項目集合的時候許多

提出的演算法主要是減少搜尋的空間如 Apriori 演算法假如一個項目集合不

是高頻項目集合則包含有此項目集合的其他集合一定不是高頻項目集合

[78]現今關聯式法則探勘的演算法可分成兩類(1)候選項目產生與測試方法

(the candidate-and-test approach)此方法是產生候選項目集合然後針對每個候

選項目集合掃描資料庫判斷是否為高頻項目集合再從這些高頻項目集合生

成其他候選項目集合然後再反覆掃描資料庫判斷這些候選項目集合是不是高

頻(2)項目成長方法(the pattern growth approach)因為掃描資料庫是一件非常

耗時的事情如果能避免多次掃描資料庫的話就能增加探勘的效能有一些學

者提出減少資料庫掃描次數的探勘演算法這些演算法大部分是對資料庫掃描

一至二次然後把掃描得到的資訊利用另一種資料結構存放起來如陣列

(Array)樹(Tree)這資料結構大部分是儲存剛剛掃描資料庫得到的高頻項目資

訊經由反覆搜尋剛剛建立的資料結構來產生所有的高頻項目集合也因為

這樣的資料結構大部分是適合記憶體容量的因此可以避免直接的硬體存取

而且也不用額外的空間去儲存產生的候選項目集合

第一類的方式主要減少候選項目集合的產生所以也減少掃描資料庫的次

數而第二類的方式則是直接減少資料庫掃描次數至一~二次因為高頻項目

集的子集合一定不是非高頻的項目集合所以我們只要藉由少量次數的掃描資

料庫得到 1 項次的高頻項目(Frequent item)再針對這些高頻資訊就搜尋就可以

得到所有高頻項目集合了因此第二類的方法除了直接減少資料庫的掃描次數

外建立高頻項目資訊的資料結構與搜尋的方式將是決定演算法效能的關鍵

第三節 Apriori 演算法

此演算法是由 Agrawal 等人於 1994 年所提出關聯式法則探勘的演算法

[7]是最具代表性的演算法之一其主要是反覆搜尋資料庫找出符合支持度的

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

圖 2-1Apriori 演算法流程架構圖

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

圖 2-5各層所需比對的交易記錄數量

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

圖 2-6ICTC 新舊資料高頻項目比對流程圖

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

與舊有資料的交易記錄也必須進行合併動作成為下一次進行漸進式資料

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 16: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

8

項目集合循序漸進由下往上(bottom-up)搜尋出候選項目集合是否為高頻項目

集合以形成關聯式法則演算法的步驟如圖 2-1

圖 2-1Apriori 演算法流程架構圖

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]其

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

圖 2-5各層所需比對的交易記錄數量

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

圖 2-6ICTC 新舊資料高頻項目比對流程圖

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

與舊有資料的交易記錄也必須進行合併動作成為下一次進行漸進式資料

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 17: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

9

主要的方法是由掃描資料庫兩次後把資料庫裡高頻項目狀況建立在一個頻繁

樣式的樹狀資料結構中稱為 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

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

圖 2-5各層所需比對的交易記錄數量

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

圖 2-6ICTC 新舊資料高頻項目比對流程圖

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

與舊有資料的交易記錄也必須進行合併動作成為下一次進行漸進式資料

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 18: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

10

圖 2-2FP-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)排列再次掃描資料庫每一筆交易資料依序讀

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

圖 2-5各層所需比對的交易記錄數量

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

圖 2-6ICTC 新舊資料高頻項目比對流程圖

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

與舊有資料的交易記錄也必須進行合併動作成為下一次進行漸進式資料

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 19: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

11

入記憶體刪除非高頻的項目再以剛剛的升冪排列順序排序然後建立 AFOPT

樹狀結構此樹狀結構的每個節點含有項目名稱和此項目的出現次數如果樹

狀結構的某子樹狀結構為單一分支則以陣列的方式儲存此子樹狀結構AFOPT

演算法的樹狀資料結構如圖 2-3

圖 2-3AFOPT 資料結構

AFOPT演算法使用良好的升冪排列結構和Top-Down搜尋方式求得所有的

高頻項目集合這樣的組合使得對不同特性的資料庫都能做到有效率的探勘

資料搜尋會從樹狀結構根節點下的第一個子樹狀結構開始搜尋當第一個子樹

狀結構搜尋完畢含有第一節點為首的高頻項目集就被找尋出來然後再把這

節點下的其他子樹狀結構合併(Merge)到右邊的子樹狀結構因為這些樹狀結構

還需用來計算其他項目集真正的支持度這個動作稱為 push-right step如圖

2-4不像 FP-growth 演算法需要額外的成本建構 Conditional FP-treeAFOPT

演算法在掃描的時候只有更新節點的支持度與節點的連結沒有額外空間的需

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

圖 2-5各層所需比對的交易記錄數量

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

圖 2-6ICTC 新舊資料高頻項目比對流程圖

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

與舊有資料的交易記錄也必須進行合併動作成為下一次進行漸進式資料

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 20: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

12

圖 2-4push-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 演算法

[9]所提出的漸進式探勘方法因為此演算法利用資料分群的特性把交易記錄

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

圖 2-5各層所需比對的交易記錄數量

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

圖 2-6ICTC 新舊資料高頻項目比對流程圖

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

與舊有資料的交易記錄也必須進行合併動作成為下一次進行漸進式資料

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 21: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

13

中的資料長度進行分類因此在進行候選項目集合的比對時是以分群資料表

為搜尋單位而不是整個資料庫依據候選項目集的長度進行資料探勘可以

直接跳過沒有用的分群資料表針對可以成為高頻項目集合的資料進行掃描動

作各層比對的交易記錄數量如圖 2-5從圖中可以了解掃描的資料筆數會

因為分群的關係使掃描的筆數變少

圖 2-5各層所需比對的交易記錄數量

ICTC 演算法的流程依據其功能可以分成五大階段

一 設定支持度

在進行關聯式法則探勘之前使用者需要定義出現的頻率為多少才

是所關心的高頻項目集合依照此支持度演算法會去探勘出出現次數有

大於或等於支持度的項目集合

二 找尋高頻項目集合

此階段可以分成兩個部分1依據資料長度分群 2找尋高頻項目集

合原始要探勘的資料會先依照資料的長度做分群以後進行候選項目集

搜尋時就可以只掃描大於或等於資料長度的分群資料表必不需整個資

料庫做掃描的動作

三 比對高頻項目集合

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

圖 2-6ICTC 新舊資料高頻項目比對流程圖

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

與舊有資料的交易記錄也必須進行合併動作成為下一次進行漸進式資料

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 22: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

14

因為 ICTC 是一漸進式的演算法此方法會把以前探勘過的高頻資料

記錄下來再進行而後的探勘的時候會把正在探勘的候選項目集合與之

前的高頻資料進行相互比對的動作可以很容易知道哪些候選項目點是

高頻項目集合而且藉由相互比對就可以知道要不要重新掃描舊有的資

料以避免重覆掃描資料庫新舊資料高頻項目比對的流程如圖 2-6

圖 2-6ICTC 新舊資料高頻項目比對流程圖

四 存入或取消高頻項目集合

此步驟為決定漸進式掃描之後哪些資料是成為最新的高頻項目集

合然後就必順修改現有的高頻記錄並修改其累積的已掃描次數與之前

掃描到哪一個資料表對於以前是高頻變成非高頻的項目集合予以刪除

並新增新進的高頻項目集合與其記錄經由這些記錄可以非常快速知道高

頻項目集的次數與掃描到哪個資料表

五 合併新舊資料

當新進的資料探勘完畢後當高頻項目集合探勘完成新進資料與舊

有資料中的高頻項目會加總起來變成高頻項目集合的次數而新進資料

15

與舊有資料的交易記錄也必須進行合併動作成為下一次進行漸進式資料

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 23: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

15

與舊有資料的交易記錄也必須進行合併動作成為下一次進行漸進式資料

探勘的歷史資料

第七節 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 了

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 24: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

16

表 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 的資料得到更新後所有項目的出現次數依出現的次數

得到高頻的項目與準高頻的項目

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 25: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

17

步驟 3判斷更新後資料庫的所有高頻 1-項目集是否存在於 FP-tree 之

header-table 中

步驟 31假如有任一高頻 1-項目集不存在於原先的 header-table則重新

掃描資料庫得到高頻 1-項目集與準高頻 1-項目集然後重建

FP-tree

步驟 32假如所有高頻 1-項目集都存在於原先的 header-table則更新

FP-tree

步驟 321自 FP-tree 中移除非高頻 1-項目集

步驟 322依項目出現次數之降冪順序調整 FP-tree 中節點的順序

步驟 323第二次掃描異動的資料庫將項目集從 FP-tree 新增或刪除

得到完整的 FP-tree

步驟 4分別套用 FP-growth 演算法及 Top-down FP-growth 演算法[17]求得

高頻項目集

第八節 各種演算法比較

本論文針對非漸進式與漸進式演算法進行研究在本章節中所提到的

AprioriFP GrowthAFOPT 演算法為非漸進式演算法ICTC 與 AFPIM 為漸

進式演算法理論上來講因為漸進式的方式避免重覆掃描已掃描過的資料庫

所以會比非漸進演算法每次探勘都要重新掃描整個資料庫的方式還快其中

AprioriICTC 演算法探勘的方式是產生候選項目集後掃描資料庫判斷有沒有

達到高頻門檻其他的演算法則是藉由掃描資料庫二次得到每筆交易記錄所

存在的單一高頻項目集合後再利用樹狀結構的方式來呈現這些單一高頻項目

集合經由瀏覽此樹狀結構來得到高頻項目集合

Apriori 演算法的時間負載取決於產生的候選項目集合多寡因為產生的候

選項目集要經過掃描資料庫計算個別的次數後才能知道有沒有達到高頻門

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 26: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

18

檻因此候選項目集合越多演算法所需的時間就越久而 ICTC 演算法雖然

利用分群的方式與提早決定高頻項目的特性來減少不必要的掃描範圍但是

不能減少產生的候選項目集合個數也就不能減少掃描資料庫的次數

FP-GrowthAFOPTAFPIM 都為項目成長方法(the pattern growth approach)

也同樣在整個探勘的動作只掃描資料庫兩次FP-Growth 演算法建構出來的樹

狀結構是以降冪方式的排列這種建構方式對於緊湊的資料庫是可以有效率地

壓縮樹狀結構的大小相反的對於比較稀疏的資料庫就沒有辦法有效地壓縮

樹狀結構的大小另外為了加快掃描樹狀結構的速度FP-Growth 會建立額

外的 header table 與用來連結相同項目名稱的指標因此建構的動作需要較多的

時間AFOPT 演算法的樹狀結構與搜尋高頻項目集合的方式都與 FP-Growth

演算法不同其建立樹狀結構的方式是以升冪的方式排列搜尋的方式是從上

到下而從[13]中的實驗結果可以知道 AFOPT 演算法執行的效能比 FP-Growth

還快AFPIM 演算法是改良 FP-Growth 演算法成漸進式的一種演算法它利用

調整 FP-tree 的方式維持高頻資料的正確性以儘量避免重新掃描舊有資料庫的

需求表 2-2 為以上所提及的演算法之比較一般來講本章節所提到的漸進

式演算法不用再重新掃描舊有資料庫可是當有些低頻項目集合在下一次探勘

時變成高頻項目集合時這些另外狀況就需要重新掃描舊有資料庫因為之前

沒有記錄這些低頻項目集合的項目次數因此需要再掃描舊有資料庫以了解

這些集合的情況

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 27: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

19

表 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 以維

持整個資料庫高頻項

目的正確性

只掃描新進資料庫

二次(另外狀況-重新掃描舊有資料

庫)

由上表除了了解到各種演算法之間的不同外在某些狀況下這些漸進式

演算法需要重新掃描上一次探勘已掃描過的舊有資料庫本論文將提出一漸進

式演算法讓探勘的過程中完全不需再重新掃描舊有資料庫並且利用另一新的

樹狀結構與探勘方式以提升探勘的效能

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 28: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

20

第三章 研究設計理念

本論文主要針對關聯式法則資料探勘進行研究有鑒於資料探勘的來源資

料越來越龐大且過程花費許久時間因此本論文發展出一個漸進式的演算法

能夠有效率地進行探勘動作本論文在當資料庫有新增資料進來後可以不需

要重新掃描整個資料庫只需掃描新增進來的資料以及利用前一次探勘所保

留下來的記錄就可以得到所有高頻項目集此不同於有些漸進式演算法在某

些情況下還是要重新掃描整個資料庫的窘境接下來將針對本論文所提出的

演算法做說明

第一節 演算法特性

本論文所提出的演算法完全不同於之前相關資料探勘研究所用到的資料結

構與搜尋方式對於儲存交易資料中高頻項目的資料結構我們提出一個

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這樣的排列方式對於左邊

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 29: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

21

節點來說我們可以很清楚地知道每個節點上的次數一定大於或等於其左節點

的次數

圖 3-1DFPBT 架構

(2) DFPBT 節省建構所需的空間

對於樹狀的排列順序DFPBT 是依項目次數的高低來排列讀入一筆交易

資料的高頻項目依項目次數上面圖表 Header Table 次數的高低順序排列後

開始建立 DFPBT 結構當讀入的項目已存在於某子樹的節點上則我們就把

此節點的次數加 1然後讀入下一個項目反之依高頻項目產生另一個分支

的節點然後再繼續讀入下一個項目例如說假設 DFPBT 裡已有

D6CB2A1這個分支當有一筆高頻項目CDE排序後得到DCE讀

入第一個項目 D因為 DFPBT 第一個項目為D6的節點因此把此節點的次

數加 1 變成D7然後讀入第二個節點剛好D7節點的左節點的項目為 C

因此把 C 的節點次數加 1再讀入最後一個項目 E因為C3節點的左節點與

其左節點B2之右節點沒有項目 E 的節點所以新增一個分支節點而 E 在

Header Table 的項目次數順序是在 B 之後所以產生 B 的右節點E1以這樣

的方式不但可以壓縮讀入的高頻項目用樹狀結構來呈現所有高頻資訊外而

且因為 DFPBT 是依高的項目次數降冪排列所以出現頻率高的項目會很容易

出現重複的節點就只需項目次數再加 1 而已不需額外空間儲存新的節點

因此本論文所提出的用來建構高頻項目的 DFPBT 樹狀結構可以有效節省記憶

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 30: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

22

體空間相對地對於非常龐大資料庫的探勘能夠有效降低記憶體空間需求

節省探勘時間

(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-2Merge Left Child Tree 架構

(4) 快速探勘高頻項目集合

關於本論文所提出的探勘方式因為 DFPBT 是依降冪的方式由高到低排

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 31: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

23

序因此在搜尋的時候也同樣由 DFPBT 的最上面節點開始搜尋先搜尋左節

點再搜尋右節點的方式探勘出所有高頻項目集合而因為 DFPBT 是從次數高

的項目排列到次數低的項目因此上一層的節點必定大於或等於其左節點的項

目次數我們可以得到一個規則某一節點如果沒有符合支持度其左節點的

所有分支也不會符合支持度的要求所以我們在進行探勘高頻項目集的時候

只要搜尋到沒有大於支持度的節點為止就不用向左節點繼續搜尋下去因為

其節點有左節點的項目次數必定小於支持度

(5) 快速回復 DFPBT

當完成一次資料探勘後可能需要一段時間之後才會再進行新增資料的

漸進式探勘所以我們會把探勘過程所建立的 DFPBT 儲存起來以方便下一

次探勘時快速得到以前探勘的高頻記錄為了方便儲存以及之後 DFPBT 會

越來越大因此我們使用關聯式資料庫來 DFPBT如表 3-1

表 3-1DFPBT 存入資料庫

表 3-1 為我們上面圖 3-1 所舉例的 DFPBT 儲存入資料庫的結果表格上的

id 為主索引鍵欄位症狀 1~症狀 7 為資料項目因為我們實驗的數據最多有 7

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 32: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

24

個項目所以有 7 個欄位Support 為此列高頻項目出現的次數另外儲存

DFPBT 是使用升冪的排列我們從此表可以看到我們把會把樹狀右邊節點儲存

在資料庫的前面比較左邊的節點則儲存在資料庫後面例如我們先把 A 開

頭的分支資料放到資料庫前面再新增 C 開頭的資料而後是 D 開頭的資料

因為 DFPBT 建構出的樹狀結構是採降冪方式排列因此從資料庫依序讀回

DFPBT 時都是插入到最左邊的節點而不用一個一個比對到最後一個節點才

新增另一個新節點這樣可以很快地還原 DFPBT

(6) 快速新增刪除高頻項目

為了讓儲存在資料庫的高頻項目資訊能夠快速回復成 DFPBT 樹狀結構

我們使用升冪的方式把 DFPBT 儲存在資料庫中也就是說次數較低的高頻

項目會排在前面次數較多的高頻項目會排列在後面而我們在進行漸進式探

勘的時候大部分都會有一些高頻項目在當時變成了非高頻項目或者是非高

頻項目在當時變成高頻項目了而這些高頻變成非高頻的項目或非高頻變成高

頻的項目大部分都出現在出現次數與支持度門檻次數相近的項目上因此如果

我們把這些最有可能變動的項目放在前面的話在搜尋的時候就可以很快的找

到這些項目進行新增刪除因此可以減少探勘的時間

(7) 可變動支持度

在探勘的過程我們會記錄每個項目的名稱與出現的次數當新進資料進

來做資料探勘時我們就可以把項目加總得到最新的高頻項目再由最新產生

的高頻項目去建構出 DFPBT因此理論上本演算法可以依使用者不同的需

求去更動支持度的設定

第二節 演算法步驟

本論文主要針對關聯式法則的探勘提出一個漸進式的演算法而此演算法

是利用只掃描資料庫兩次後建立出一樹狀結構 DFPBT再經由搜尋 DFPBT 來

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 33: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

25

得到高頻項目集合而且此 DFPBT 是把高頻資料壓縮用樹狀結構來呈現高頻

項目情況不但節省了記憶體空間也節省了搜尋的時間這不同於以往需要

產生候選項目集後多次掃描資料庫判斷是否為高頻項目集的演算法而且候選

項目集的多寡往往決定需要去掃描資料庫的次數本論文架構主要可分為二個

部分一個是非漸進式的部分一個是漸進式的部分非漸進式的部分經由我

們提出的演算法掃描兩次資料庫並搜尋建立出的 DFPBT得到最後的高頻項

目集合演算法除了建立每個項目次數高頻項目與最後得到的高頻項目集合

外中間不會再額外記錄任何資料而漸進式的部分除了記錄非漸進式所需記

錄的資料外還記錄上一次探勘的 DFPBT Table 與含有非高頻項目的交易記

錄非漸進式演算法如圖 3-3

圖 3-3非漸進式演算法流程圖

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 34: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

26

(1) 設定支持度

使用者在每次進行資料探勘時需要先設定項目要達到多少支持度才成為

關聯式法則的設定而支持度的設定高低尚且沒有相關研究說明支持度設定的

依據或方法而一般而言在設定支持度的原則會以所要探勘的資料庫大小

以及所探勘的資料庫特性而決定例如醫療資料庫其項目相互發生的關係就

很少如果要探勘出一些關聯式法則出來的話就需設定較小的持度而類似

大賣場的這種交易資料庫則可以設定大一點的支持度不管是支持度設大或

設小都要先經過評估在過大的支持度的時候可能會導致探勘結果不能充

分表現出資料庫中項目之間的關聯性而過小的支持度又可能過多和沒有適用

價值的關聯法則而且支持度的大小會直接影響到探勘時間因此支持度的設

定端看資料庫大小與使用者當時的要求來做一個設定

(2) 搜尋高頻項目

此部分會搜尋在資料庫中每個項目出現的次數經由支持度的設定我們

可以判斷有哪些項目成為高頻項目並且把這些高頻項目依照高頻出現的次數

排列然後存入資料庫而高頻項目資料庫的規格如表 3-2當我們掃描一次

依高頻出現次數由高到低記錄下來後第二次掃描資料庫得到每筆交易記錄的

高頻項目會依照項目的 id 來排序此筆交易記錄的高頻項目在判別高頻順序

的時候我們不用 support 來判別因為高頻項目的 support 會有可能有相同的

項目出現次數如果用 support 來判別的話會無法判斷項目的順序

表 3-2高頻項目資料規格

名稱 說明 資料型別 長度

Id(primary key) 項目高頻順序 int 4

Item 項目名稱 vnarchar 10

Support 項目次數 int 4

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 35: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

27

(3) 建立 DFPBT 樹

當第二次掃描資料庫讀入第一筆交易記錄然後判斷此筆交易記錄有哪

幾個高頻項目並依照上一步驟所儲存下來的高頻項目表格的 id 欄位依序排

列在這同時會順便把此筆交易記錄的高頻項目新增到 DFPBT 樹中然後

依序再讀入下一筆交易記錄排序高頻順序與新增到 DFPBT讀完每一筆交易

記錄後也順便得到了表示高頻項目資訊的 DFPBT此樹狀結構的節點依項目

出現的次數從高到低排列每個節點為其左節點的上一個項目而其左節點的

右邊節點都為其下一個項目依序建立的 DFPBT 後我們就可以開始進行探

(4) 搜尋 DFPBT

建立完成 DFPBT 後我們會先從左邊的節點開始搜尋再搜尋右邊的節

的依序從項目次數高的開始搜尋先把含有某項目開頭的高頻項目集合搜尋

完畢因為 DFPBT 是依照高低順序排列所以含有某項目開頭的高頻項目集

合不會出現在之後的探勘上因此搜尋完某個項目開頭的高頻項目集合後就

不用再去檢查這些高頻項目集合在之後出現而在搜尋某個項目為開頭的時

候因為其左節點的所有分支包含有其他節點所需的資訊所以在探勘左節點

之前會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節

點如圖 3-4探勘過程與合併資料示意圖如圖演算法在探勘D7節點的

左節點的時候會把其左節點的所有分支合併到D7節點的右邊節點如圖上

紅色的虛線部分在合併的時候如果有相同項目的節點就把項目的次數相加

如果沒有相同節點的話則複製一相同節點於該插入的地方當在探勘D7 C3

之前同樣會先把D7 C3左節點的所有分支合併到D7 C3的右節點如

圖四上藍色的虛線部份在探勘含有D7 C3 B2的時候則把其左節點的所

以分支合併到D7 C3 B2的右節點上如圖綠色的虛線部分

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 36: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

28

圖 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 gt= 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

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 37: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

29

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 gt= 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

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 38: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

30

圖 3-5漸進式演算法流程

(1) 設定支持度與選擇探勘新進資料來源

剛開始進行探勘時同樣與非漸進式演算法一樣需要先設定門檻的支持

度支持度的設定除了要注意資料庫大小外也要視資料庫的特性為一個決

定支持度的重要依據進行資料庫探勘的時點大部分都是累積到一定數量的

資料再進行資料探勘太小的資料量找出來的關聯式法則會無法代表整個資

料庫特性而太大的資料量則需要過長的時間量來累積而且針對龐大的資

料量進行探勘需要許多時間設定完支持度之後我們需要再選擇所要探勘的

資料來源

(2) 搜尋高頻項目

在每一次資料探勘的時候為了避免再一次掃描舊有的資料因此我們會

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 39: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

31

把這一次探勘得到的每個項目出現的次數記錄起來當有新進資料新增時只

需針對新進資料進行掃描再把掃描新進資料所得到的項目次數與前一次探勘

的記錄加總就可以得到整個新舊資料庫的每個項目次數再依支持度的設定

找出符合門檻的高頻項目並把這些高頻項目記錄下來以便接下來的步驟使

(3) 新增刪除高頻項目

在進行下一次資料探勘時有些原本是高頻的項目會變成非高頻的項目

而非高頻的項目會變成高頻項目我們會從上一次記錄下來的高頻項目資料與

這一次得到的高頻項目做比對來求得有哪些高頻項目在這次探勘變成非高頻

項目哪些非高頻項目卻變成高頻項目了然後再一一針對這些項目更新從

資料庫讀入的 DFPBT Table另外我們會額外建立一個表格儲存著含有非

高頻項目的交易記錄(Infrequent Transactions Table)資料內容如表 3-5當有新

增刪除高頻項目的時候會去更新此表格針對每一個刪除的高頻項目會去

判斷刪除的高頻項目之交易記錄是否已存在於非高頻交易記錄表格中如果沒

有的話則新增此筆交易記錄而新增的高頻項目則需判斷該筆交易記錄是

否都為高頻然後從非高頻交易記錄表格移除此筆交易記錄中

表 3-5含非高頻項目交易記錄內容

id 症狀 1 症狀 2 症狀 3 症狀 4 症狀 5 症狀 6 症狀 7

1 A B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 C D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A B C E ltNULLgt ltNULLgt ltNULLgt

5 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C E F ltNULLgt ltNULLgt ltNULLgt

7 A C D E F ltNULLgt ltNULLgt

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 40: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

32

(4) 調整 DFPBT Table 順序

有新進資料新增後不只是高頻項目會有所變動原先是高頻項目可能變

成非高頻項目非高頻項目變成高頻項目高頻的項目次數也會跟著變動隨

之而來的高頻的順序也會跟著變動所以我們 DFPBT Table 做一個調整使

它能夠依照新的高頻順序來排序這樣在建立 DFPBT 時才能依照正確的順序

建構出來

(5) 建立 DFPBT

經由上一步驟新增刪除高頻項目後我們就可以得到一 DFPBT 暫存表

格另外在這一步驟會掃描新進資料第二次判斷每一筆交易記錄含有哪

些高頻項目排序之後新增到 DFPBT Table 中並把含有非高頻的交易記錄

新增到非高頻交易記錄表格中再把這一表格依照我們定義的資料結構與高頻

項目順序依序建立成 DFPBT 樹狀結構建立完成的樹狀結構就可以進行探

勘高頻項目集之後我們需要搜尋一次 DFPBT把完整的 DFPBT 資訊重

新寫回資料庫的 DFPBT Table 中以讓下一次探勘得到前一次探勘的高頻資訊

(6) 搜尋 DFPBT

建立完成的 DFPBT 樹狀結構會包含有整個舊有資料庫與新進資料庫的

高頻資訊接下來只要搜尋整個 DFPBT 就可以得到所有的高頻項目集合而

搜尋的方式與非漸進式演算法的相同先從項目次數較多的項目開始搜尋

再搜尋項目次數較少的項目而在搜尋樹的左節點分支時會先把左節點的所

有分支合併到右邊的節點以找出正確的所有高頻項目集合

(7) 得到高頻項目集合

探勘整個 DFPBT 之後我們就可以得到所有高頻項目集合再經由一些

分析去產生關聯式法則

以上是有關漸進式演算法的說明表 3-6 為此演算法的過程在探勘的過

程中我們會把前一次探勘所用到的資訊記錄起來其中包含有每個項目的出

現次數高頻的項目以及含有非高頻項目的交易記錄經由這些記錄我們

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 41: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

33

在下次探勘的時候就完全不用重新掃描舊有的資料庫只要針對新增刪除

的高頻項目做一些 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 Frdquo is all frequent items of legacy database Trsquo is DFPBT Table stored in the database Trdquo 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 Frsquo

whose support gt= min_sup 2 Compare Frsquo with Frdquo then find all infrequent items Irsquo which were frequent

and all frequent items Irdquo which were infrequent in previous mining 3 for all item i in Irsquo 4 Delete the item i in Trsquo 5 if the transactions including i is not exist Trdquo then 6 Insert these transactions into Trdquo 7 end if 8 end for 9 for all item i in Irdquo 10 Traversal all transactions including i in Trdquo and

insert the newly frequent items to Trsquo 11 if all items of the transactions including i in Trdquo are frequent then 12 Delete the transactions from Trdquo 13 end if

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 42: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

34

14 end for 15 Sort the items in Trsquo 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 Trsquo 20 end for 20 Build the tree root from Trsquo 21 SearchFP(root null)

圖 3-6系統畫面

第三節 演算法實例推導

前一節我們介紹了非漸進式演算法與漸進式演算法的流程本節將實際舉

例說明本論文所提出的演算法進行的過程我們會有兩個資料表格一份舊有

資料代表第一個月份的資料另一份新進式資料代表第二月份的資料假設舊

有資料表如表 3-7最小支持度設定為 50

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 43: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

35

表 3-7舊有資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

2 A B C E ltNULLgt ltNULLgt ltNULLgt

3 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A D E F ltNULLgt ltNULLgt ltNULLgt

5 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

首先我們要先掃描資料庫計算每個項目出現的次數把最小支持度乘

於交易記錄的總筆數得到最低出現的門檻假如有大於或等於這個門檻次數的

話就變成高頻項目在這個例子門檻的次數為 2(506)對舊有資料掃描

一次之後得到如下圖

圖 3-7掃描資料庫一次判斷高頻項目

經由判斷是否符合支持度設定的最小門檻次數得到CAED為高頻項

目接下來就要掃描資料庫第二次尋找這些高頻項目在資料庫裡互相出現的

關係掃描資料庫後並按照高頻項目的 id 排序得到如圖 4-8 左邊的表格

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 44: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

36

因為 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 ltNULLgt ltNULLgt ltNULLgt

2 A D E F ltNULLgt ltNULLgt ltNULLgt

3 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 45: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

37

當完成上述步驟我們就可以針對剛剛建立完成的 DFPBT 做探勘高頻項

目集合的動作在探勘之前我們會把 DFPBT 瀏覽過一遍把 DFPBT 高頻資

訊儲存到關聯式表格裡如表 3-9

表 3-9DFPBT Table

Id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E D ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

首先從樹狀結構的最上層的左邊節點開始探勘從C4節點開始探勘在

探勘的時候會把其左邊的節點合併到右邊的節點上合併的排序順序也是依

照高頻項目的 id 排序如果有相同項目名稱的節點的話則把兩節點的次數加

總不用在產生新節點反之則產生一個相同項目名稱與次數的節點合併

後的 DFPBT 如圖 3-9 的右邊 DFPBT 所示而最上層的節點一定是高頻所以

不用判斷它的次數有沒有符合支持度把C4記錄在一個高頻項目集的暫存

區等整個 DFPBT 探勘完成之後就把這個暫存區寫入資料庫

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 46: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

38

圖 3-9探勘C4合併後的 DFPBT

接下來往左節點探勘在要探勘C4 A2之前會先把C4 A2左邊的

節點合併到C4 A2右邊的節點如圖 3-10合併完之後就開始探勘C4 A2

有沒有是高頻項目A節點的項目次數為 2沒有符合支持度不做任何動作

而因為C4 A2不是高頻項目集合所以其左邊的節點也一定沒有高頻項目集

合因此停止對C4 A2的左節點探勘之後回來探勘C4 A2的右邊

圖 3-10探勘C4 A2合併的 DFPBT

開始探勘C4A2的右節點先探勘第一個右節點為C4 E1C4E1

沒有左節點所以不用合併探勘C4 E1的時候得到 E 的次數為 1不符合

高頻再探勘右邊節點C4 D1沒有左節點不用合併且次數不符合支持度

再來探勘C4右邊的節點依之類推得到所有高頻項目集合

當第二月份新進資料有 6 筆記錄新增後一樣先搜尋新進資料一次得到

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 47: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

39

新進資料中每個項目的次數在與掃描舊有資料時所儲存的每個項目的出現次

數加總就可以知道每個項目的次數了然後在判斷有沒有達到高頻假設新

進的資料如表 3-10

表 3-10新進資料表內容

TID Item1 Item2 Item3 Item4 Item5 Item6 Item7

1 A B C F ltNULLgt ltNULLgt ltNULLgt

2 B C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

3 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

4 A C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C E ltNULLgt ltNULLgt ltNULLgt

此時如果支持度依然是 50的話最低的門檻次數就為 6(5012)得

到排序過後的高頻項目如圖 3-11 最右邊的表格

圖 3-11新進資料新進後的高頻項目

我們得到新的高頻項目之後接下來要把 DFPBT Table 中變成非高頻的

項目刪去並把新增的高頻加入首先從上一次探勘得到的高頻項目表格(圖 3-7)

和本次探勘得到的高頻項目(圖 3-11)我們可以很清楚的知道D項目已變成非

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 48: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

40

高頻項目因此我們讀入 DFPBT Table 暫存到記憶體中把非高頻項目D一

一找出並把D欄位設為 NULL 予以刪除結果如下表 3-11刪除的部分如

表格中粗體字的部分

表 3-11刪除 DFPBT Table 的非高頻項目D

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

在刪除非高頻項目D的同時也會判斷所屬的交易記錄是否已存在於非

高頻交易記錄的表格(Infrequent Transactions Table)中如果不存在則予以新

增刪除完成非高頻項目D以後接下來我們也要判斷是否有新增的高頻

項目比對新舊的高頻項目表格得到B為這次探勘新增的高頻項目此時我

們就要判斷非高頻交易記錄表格中含有B的資訊比對 DFPBT Table然後把

B插入到 DFPBT Table 的正確資料列中新增之後如表 3-12粗體的部分表

示剛新增的高頻項目新增高頻項目也會同時判斷非高頻交易記錄表格含B

的資料列是否都為高頻項目如果是的話刪除此資料列因此此資料列已不

包含非高頻項目應該予以刪除

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 49: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

41

表 3-12新增高頻項目B到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 A E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C A E B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

經由刪除新增的動作之後因為高頻的順序已有更動所以我們要針對

DFPBT Table 重新排序過排序過後的 DFPBT Table 如下表 3-13

表 3-13調整高頻順序後的 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

完成新增高頻項目刪除非高頻項目之後我們就要針對新進資料掃描第

二次然後把高頻的資訊新增到 DFPBT Table一般而言此時的 DFPBT Table

資料量已很多我們不去比對插入的資料是否有存在於 DPBT Table 中然後

support 次數加 1 這樣的動作因為這樣的比對會浪費一些時間所以在這個步

驟是把要插入的資料直接新增在 DFPBT Table 的後面如表 3-14並且判斷新

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 50: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

42

進資料的每筆交易記錄是否含有非高頻項目然後儲存到非高頻交易記錄中

再一次把非高頻交易記錄表格一次寫回到資料庫裡此時我們更新過的

DFPBT Table 都只是存放在記憶體的暫存表格非真正寫入到資料庫

表 3-14新進資料的高頻資料新增到 DFPBT Table

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support

1 E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

2 E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

3 C ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

4 C E A B ltNULLgt ltNULLgt ltNULLgt 1

5 C A ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

6 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

7 C A B ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

8 C B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

9 E B ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

10 C E A ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

11 C E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt 1

12 C E A B ltNULLgt ltNULLgt ltNULLgt 1

而經過上述幾個步驟後此時的非高頻的交易記錄如表 3-15

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 51: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

43

表 3-15非高頻的交易記錄表格

id Item1 Item2 Item3 Item4 Item5 Item6 Item7

2 A D E F ltNULLgt ltNULLgt ltNULLgt

4 D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt ltNULLgt

5 B C D ltNULLgt ltNULLgt ltNULLgt ltNULLgt

6 A B C F ltNULLgt ltNULLgt ltNULLgt

7 B D E ltNULLgt ltNULLgt ltNULLgt ltNULLgt

之後我們就依 DFPBT Table 建立出 DFPBT 樹狀結構如圖 3-12

圖 3-12新進資料新增後的 DFPBT

建立完成的 DFPBT 在探勘之後會先瀏覽一次把樹狀結構的資訊重新

寫回到資料庫的 DFPBT Table 中再進行探勘探勘的方式與舊有資料探勘

DFPBT 的規則一樣探勘完成以後我們會把高頻項目集合記錄到資料庫中

以方便使用者查詢

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 52: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

44

第四章 實驗設計

本論文提出一資料探勘的演算法並利用這演算法發展出一漸進式資料探

勘演算法本章節的實驗會以醫院門診資料做為實驗數據在不同的支持度

050301下對我們所提出的演算法的實驗效能進行討論

第一節 實驗平台

本論文所使用的實驗平台與開發工具如下

個人電腦Intel Pentium 4 26G amp Memory 1G

作業系統Microsoft Windows 2003 Enterprise Edition

資料庫伺服器Microsoft SQL Server 2000 amp service pack 3

開發工具Microsoft Visual Basic NET

第二節 資料來源內容

本論文所實驗的數據為北部某教學醫院的門診資料利用該醫院 90 年度醫

生問診的記錄檔進行實驗分析該醫院於 1995 年成立為透過 ISO 9002 國際

品質認證的醫院平均每日看診人數為 2500 人其包含的門診科別有心臟血

管外科胸腔外科一般外科泌尿外科神經外科大腸直腸外科整形外

科骨科腫瘤科過敏免疫風濕科心臟內科胸腔內科腸胃肝膽科腎

臟科新陳代謝科神經內科婦產科小兒科中醫科眼科牙科皮膚

科耳鼻喉科呼吸胸腔科家庭醫學科一般外科精神科急診醫學科

營養諮詢等共計有 28 種不同科別的門診服務

醫院的門診診斷資料檔中醫師對病患所下的診斷結果共有 1~7 欄可供填

入而此 7 個欄位並無前後順序的問題完全以醫師個人主觀的判斷作業填寫

的準則醫生會以醫院內部的診斷編號來填寫對病患的診斷結果門診診斷的

資料格式如表 4-1

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 53: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

45

表 4-1門診診斷記錄檔資料格式

欄位名稱 欄位型態 長度 說明

病歷號碼 int 10 病歷號碼

日期 char 6 病患看診日期

看診順序 char 2 病患在同一天的看診順序

診斷順序 Char 2 醫師診斷的代碼順序

診斷代碼 char 6 醫師的診斷代碼

診斷說明 Char 20 診斷代碼的說明

病歷號碼每位病患第一次就診時由醫院所給予的唯一編號

日 期該位病患至醫院門診就診的日期

看診順序該位病患在該日可能會不只在一個門診科別中就診此欄位為紀錄

該病患其就診科別的順序例如該病患在當日分別至內科及耳鼻喉

科其在內科就診時醫師所下之診斷此欄位的值為 0而耳鼻喉科

醫師所下之診斷則為 1以此類推

診斷順序由於醫師所下之診斷可能不只一個在本論文中醫院所提供之門

診診斷資料醫師的診斷最多可達七個此欄位便是紀錄醫師所下

診斷的順序

診斷代碼此診斷代碼為醫師對此病患目前症狀所下的診斷此診斷代碼為固

定的編號

診斷說明為該筆診斷代碼的說明可能是英文上的術語或是中文說明

除了以上的資料外還包含了如診斷醫師代碼病患性別等基本資料此

部份的資料與本論文目的較無直接關聯因此再進行資料探勘時便不需考慮此

部份的資料

依照門診診斷資料格式我們就可以很清楚的獲得醫師對每一門診病患診

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 54: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

46

斷所下的記錄但由於輸入資料的過程中可能發生錯誤(人為錯誤資料不齊

全等hellip)因此在進行資料探勘前仍必須先行處理這一類的資料不符規範或錯

誤的問題必須將所有錯誤或不符的資料刪除後方能進行資料轉換而經過

去除錯誤與不符資料之後其資料轉換後的資料格式如表 4-2

表 4-2轉換後的門診診斷資料表格式

欄位名稱 欄位型態 長度 說明

ID Int 4 Primary key

診斷 1 Char 10 醫師診斷代碼

診斷 2 Char 10 醫師診斷代碼

診斷 3 Char 10 醫師診斷代碼

診斷 4 Char 10 醫師診斷代碼

診斷 5 Char 10 醫師診斷代碼

診斷 6 Char 10 醫師診斷代碼

診斷 7 Char 10 醫師診斷代碼

在表 4-2 之中每一筆記錄是指該病患在一天內單一門診的門診紀錄而

現實狀況中每位病患在一天之內可至不同的門診就診因此在實際情況中

每一位病患在每一天內可能會看不同門診因此會有多筆的門診診斷記錄另

外由於病患可能因為住院或長期回診之故會產生許多相同的診斷因此

若是發生所有的診斷代碼皆相同但就診日期不同或是病患不同的情況本論

文中將視為兩筆不同的紀錄

因為本論文需進行漸進式資料探勘的實驗因此我們會把資料轉換後的門

診資料本實驗共進行一年份的門診診斷資料以不同的月份分類共分成十

二個月份而每個月份的資料量都差不多轉換的每個月份資料統計如下表 4-3

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 55: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

47

表 4-3門診診斷資料每月資料量統計表

月份 當月資料量 累積資料量 一月 67204 筆 67204 筆 二月 65997 筆 133201 筆 三月 78535 筆 211736 筆 四月 74667 筆 286403 筆 五月 81564 筆 367967 筆 六月 77643 筆 445610 筆 七月 76685 筆 522295 筆 八月 78148 筆 600443 筆 九月 67850 筆 668293 筆 十月 78156 筆 746449 筆 十一月 74323 筆 820772 筆 十二月 74453 筆 895225 筆

第三節 實驗設計

本實驗主要針對我們所提出的演算法與漸進式演算法進行實驗非漸進部

分的探勘依探勘的月份把資料合在一起放在同一資料表格後進行探勘漸進

式的部分依序選擇每一月份即可進行漸進式的探勘而針對本論文的實驗

會以支持度 050301等三種不同支持度來探討演算法在不同情況下

的效能表現

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 56: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

48

第五章 實驗及結果

本實驗依據不同的支持度針對我們所提出的非漸進式與漸進式演算法進

行資料探勘實驗以醫院的門診資料先進行資料轉換把不全的資料刪除後並

依不同的月份分類在實驗中我們會一一記錄每個不同支持度下從開始到結束

所需的時間並比較不同的支持度下對 DFPBT 與 IDFPBT 演算法的效能影響

以及探討不同支持度對漸進式演算法 IDFPBT 的影響以下將對這幾個部分加

以描述討論

第一節 支持度 05對 DFPBT 與 IDFPBT 演算法效能影響之比較

在支持度設定為 05的情況下每月份 DFPBT 演算法與 IDFPBT 演算法

探勘的資料量與探勘的時間如表 5-15-2

表 5-1DFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 34 秒 二月 65997 筆 133201 筆 5 分 38 秒 三月 78535 筆 211736 筆 9 分 42 秒

四月 74667 筆 286403 筆 14 分 14 秒

五月 81564 筆 367967 筆 19 分 34 秒

六月 77643 筆 445610 筆 24 分 48 秒 七月 76685 筆 522295 筆 30 分 7 秒

八月 78148 筆 600443 筆 36 分 九月 67850 筆 668293 筆 41 分 14 秒

十月 78156 筆 746449 筆 47 分 18 秒

十一月 74323 筆 820772 筆 54 分 36 秒 十二月 74453 筆 895225 筆 61 分 16 秒

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 57: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

49

表 5-2IDFPBT 演算法實驗數據表(支持度05)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 12 秒

二月 65997 筆 133201 筆 3 分 31 秒

三月 78535 筆 211736 筆 4 分 25 秒

四月 74667 筆 286403 筆 4 分 27 秒

五月 81564 筆 367967 筆 6 分 36 秒 六月 77643 筆 445610 筆 10 分 26 秒

七月 76685 筆 522295 筆 8 分 19 秒

八月 78148 筆 600443 筆 9 分 11 秒

九月 67850 筆 668293 筆 22 分 38 秒

十月 78156 筆 746449 筆 11 分 5 秒

十一月 74323 筆 820772 筆 11 分 18 秒

十二月 74453 筆 895225 筆 17 分 54 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-1

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(05) IDFPBT(05)

圖 5-1DFPBTIDFPBT 演算法探勘時間比較(支持度05)

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 58: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

50

從上圖我們很清楚發現除了第一個月份 IDFPBT 演算法比 DFPBT 演算法

慢一點時間以外之後的 2~12 月的探勘都比 DFPBT 快甚至到後面兩者的差

距越來越大在第一個月時因為 IDFPBT演算法所需額外的時間來記錄DFPBT

Table 和非高頻的交易記錄所以會比 DFPBT 演算法多一點時間而從數據表

來看第一個月 IDFPBT 只比 DFPBT 慢不超過一分鐘時間上DFPBT 演算法

呈直線性的成長而 IDFPBT 演算法是呈比較平穩的成長而在 IDFPBT 漸進

式探勘到九月份時所花的時間突然加大這由於在探勘九月份的時候有比較

多項目從高頻變成非高頻非高頻變成高頻的原故所以需要較久的時間但

整體來看IDFPT 演算法還是能保持快速探勘的效能

第二節 支持度 03對 DFPBT 與 IDFPBT 演算法效能影響之比較

此節進行在支持度 03的狀況下DFPBT 演算法與 IDFPBT 演算法探勘

的資料量與探勘的時間如表 5-35-4

表 5-3DFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 2 分 35 秒

二月 65997 筆 133201 筆 5 分 42 秒

三月 78535 筆 211736 筆 9 分 57 秒

四月 74667 筆 286403 筆 14 分 20 秒 五月 81564 筆 367967 筆 19 分 43 秒

六月 77643 筆 445610 筆 24 分 58 秒

七月 76685 筆 522295 筆 30 分 25 秒

八月 78148 筆 600443 筆 36 分 14 秒

九月 67850 筆 668293 筆 42 分 21 秒

十月 78156 筆 746449 筆 47 分 39 秒

十一月 74323 筆 820772 筆 53 分 57 秒

十二月 74453 筆 895225 筆 60 分 36 秒

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 59: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

51

表 5-4IDFPBT 演算法實驗數據表(支持度03)

月份 當月資料量 累積資料量 所需時間 一月 67204 筆 67204 筆 3 分 28 秒

二月 65997 筆 133201 筆 4 分 19 秒

三月 78535 筆 211736 筆 8 分 10 秒 四月 74667 筆 286403 筆 6 分 41 秒

五月 81564 筆 367967 筆 11 分 44 秒

六月 77643 筆 445610 筆 10 分 35 秒

七月 76685 筆 522295 筆 16 分 52 秒

八月 78148 筆 600443 筆 10 分 33 秒

九月 67850 筆 668293 筆 17 分 32 秒

十月 78156 筆 746449 筆 11 分 13 秒

十一月 74323 筆 820772 筆 18 分 24 秒 十二月 74453 筆 895225 筆 19 分 49 秒

針對上述 DFPBTIDFPBT 演算法探勘的時間用折線圖表示如下圖 5-2

0

500

1000

1500

2000

2500

3000

3500

4000

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

DFPBT(03) IDFPBT(03)

圖 5-2DFPBTIDFPBT 演算法探勘時間比較(支持度03)

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 60: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

52

在 03支持度下同樣的第一個月 IDFPBT 演算法需要額外記錄一些資

訊讓下一次探勘時使用因此第一個月漸進式的演算法會比非漸進式演算法

慢一點整體上 IDFPBT 演算法比 DFPBT 演算法還快到最後兩者的差距會

越來越明顯甚至有 3 倍之多另外DFPBT 演算法是呈直線性的成長IDFPBT

演算法探勘所需的時間是比較平穩的而 IDFPBT 演算法會有起伏的狀況則可

能剛好探勘的那一個月份需要做較多的更動高頻資料更新非高頻交易記錄表

格下一月份探勘剛好就沒有太多更新的資料需要處理所以會有高低起伏的

現象整體來看漸進式的演算法 IDFPBT 還是能夠在短時間內完成資料探勘

第三節 不同支持度對 IDFPBT 演算法效能影響之比較

此部分進行 IDFPBT 在不同支持度 050301下IDFPBT 演算法

探勘時間變化的情形如圖 5-3 所示大體上IDFPBT 演算法在支持度 01

的時候所花時間最久再過來是支持度 03支持度 05的時候所花的時間

為三者中最少的而從圖表中可以看到支持度 0301在探勘七月的時候與

支持度 0503在探勘九月的時候時間呈明顯的上升這說明了在這幾個月

中高頻項目的變動比較大需要更動的時間去調整 DFPBT 和非高頻交易記

錄表格另外支持度 05和支持度 03時間是呈比較水平的狀態但支

持度 01的時候探勘的時間有往後成長的趨勢這也說明了在低支持度的時

候會有比較多的項目符合支持度的要求相對地在下一次探勘時會有較多

的項目變為符合支持度的高頻項目所以所需的時間也就比較多了

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 61: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

53

0

500

1000

1500

2000

2500

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(秒)

IDFPBT(05) IDFPBT(03) IDFPBT(01)

圖 5-3不同支持度對 IDFPBT 演算法效能的影響

第四節 不同演算法效能之比較

由[5]論文中的各種演算法比較ICTC 演算法比 TBCPFUP 與 I-STD 等

演算法的執行效能還快因此接下來將針對 ICTC 與本論文所提出的 IDFPBT

演算法做一個比較另外當支持度 01的時候ICTC 演算法由於產生過多

候選項目集合使探勘的效能變得非常沒有效率因此本節只針對支持度 05

03做一個比較圖 5-4 為 IDFPBT 與 ICTC 演算法在 0503支持度執行

所需的時間

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 62: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

54

0

10

20

30

40

50

60

70

80

90

100

一月

二月

三月

四月

五月

六月

七月

八月

九月

十月

十一

十二

月份

時間

(分)

IDFPBT(05) IDFPBT(03)

ICTC(05) ICTC(03)

圖 5-4IDFPBT 與 ICTC 演算法效能比較

圖中縱軸部分為演算法執行所花的分鐘數橫軸為探勘的資料月份從圖

中可以明顯看出本論文所提出的演算法遠遠比 ICTC 演算法執行的效能還要

好最好的狀況有 18 倍之多而參考[5]的實驗結果本論文所提出的 IDFPBT

演算法比 ICTCTBCPFUP 與 I-STD 演算法還要快由此可證明本論文所提

出的演算法是一個有效率的演算法

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 63: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

55

第六章 結論及未來研究方向

本論文提出一關聯式法則資料探勘的演算法 DFPBT並發展出一漸進式的

資料探勘演算法 IDFPBT本論文的探勘方式非產生大量的候選項目集重覆資

料庫判斷候還項目集是否達到高頻的方式而是僅僅掃描資料庫兩次的情況

下把資料庫的高頻資料建立在一緊湊的資料結構 DFPBT 中而在建構 DFPBT

時是以項目出現的次數依序從高到低排列所以在探勘 DFPBT 樹狀結構時

如果某一節點上的次數沒有達到高頻的話就不用就繼續往其左邊的節點搜尋

下去這樣可以節省很多探勘的時間而探勘 DFPBT 樹狀結構時不像 FP

Growth 演算法需要額外產生其他的 Conditional FP Tree我們利用合併左子樹

的方式維持正確的項目內容使探勘能正確探勘出所有的高頻項目集合而且

也節省了額外產出其他樹狀結構所需的空間要求

在實際狀況下每次資料探勘完畢會等經過一段時間或等資料量達到一

定程度後才會在進行下一次的探勘動作所以進行下一次探勘之前不可能一

直把探勘所用到的樹狀結構保留在記憶體中所以在研究漸進式演算法時就

考慮到把樹狀結構儲存到硬體上以方便下一次探勘時快速把上一次探勘的

結構還原回來而儲存的順序是依照項目次數由低到高排序的方式儲存到資料

庫中因此在重新建回樹狀結構時會比較快速的完成建構而在探勘的過程

我們也額外使用一個資料庫表格來儲存含有非高頻項目的交易記錄在有新增

或刪除高頻項目的時候就可以直接比對非高頻交易記錄表格把該新增刪

除的項目做一個更新的動作因此我們就可以省去掃描整個資料庫的動作

在實驗方面我們利用醫療院所的門診資料進行資料探勘的實驗經過前

置處理把不完整的資料予以刪除並轉換成我們希望的資料格式後再以月份分

類把總共一年份的門診資料分成十二個月份而每個月份的資料量大約 67

萬筆每筆資料列最多有七個欄位的資料我們以不同支持度 050301

實驗我們所提出的 DFPBTIDFPBT 演算法從實驗我們可以得到 IDFPBT 演

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 64: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

56

算法比 DFPBT 演算法還快甚至有 3 倍之多雖然在某幾個月探勘中IDFPBT

演算法可能會因為要處理較多的更新高頻項目的動作而增加了一點時間但都

能快速的完成資料探勘而實驗也顯示漸進式的部分較高支持度探勘所需的

時間會比低支持度探勘所需的時間還少而且從實驗的結果可以證明本論文所

提出的演算法比其他演算法更有效率

另外我們所提出的演算法為了能夠完全避免重新掃描舊有資料的狀況

使用額外的資料庫來儲存非高頻的交易記錄而如果探勘的月份越來越多所

累積下來的非高頻交易記錄也會越來越多所以希望在未來的研究能夠針對這

一點進行改良以減少在新增刪除高頻項目比對時所花的時間讓探勘的時

間能夠較縮短更有效率

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 65: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

57

參考文獻

[1] 謝水鳳ldquo以調整FP樹狀結構為基礎之關聯規則漸進式探勘方法rdquo台灣師範

大學資訊教育研究所碩士畢業論文2002

[2] 高淑珍ldquo應用資料探勘於顧客回應模式之研究mdash以國內 A 壽險公司為

例rdquo國立成功大學企業管理學系博士論文2004

[3] 游坤明林年茂蕭偉呈莊文宗ldquo結合關聯式資料庫的資料探勘方法運

用於醫病資料之研究rdquo2005 資通技術應用與管理研討會pp422005

[4] 游坤明莊文宗蕭偉呈ldquo分群技術與資料探勘應用於肝功能檢驗與疾

病關係之研究rdquo第十屆資訊管理暨實務研討會pp1462004

[5] 梅志航ldquo應用分群分式提升漸進式資料探勘效能之研究rdquo中華大學資訊

管理學系碩士畢業論文2004

[6] 江俊彥ldquo應用分群法提昇關聯法則效率之研究rdquo國立屏東科技大學資訊

管理學系碩士畢業論文2001

[7] R Agrawal and R Srikant ldquoFast algorithms for Mining Association Rules in

Large Databaserdquo Proceedings of the 20th International conference on Very

Large Data Basepp487-499 1994

[8] R Agrawal T Imielinski and A Swami ldquoMining Association Rules between

Sets of Items in Large Databaserdquo The 1993 ACMSIGMOD Conference

pp207-216 1993

[9] D W Cheung J Han V T Ng and C Y Wong ldquoMaintenance of Discovered

Association Rules in Large Databases An Incremental Updating Techniquerdquo

Proc Of the International Conference on Data Engineering pp106-114 1996

[10] Jiawei Han Jian Pei Yiwen Yin ldquoMining frequent patterns without candidate

generationrdquo Proceedings of the 2000 ACM SIGMOD international conference

on Management of data pp1-12 2000

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002

Page 66: Incremental Data Mining Based on Binary Tree Techniquechur.chu.edu.tw/bitstream/987654321/2826/1/NC093CHPI0396001.pdf中 華 大 學 碩 士 論 文 題目:運用二元樹於漸進式關聯法則探勘之研究

58

[11] Ellis Horowitz Sartaj Sahni and Dinesh MehtaldquoFundamentals of Data

Structures in C++WH Freeman and Company 1995

[12] Michael JA and berry Gordon Linoff ldquoData Mining Techniques for

Marketing Sales and Customer Supportrdquo Weikeg Publishing CoLtd2001

[13] Guimei Liu Hongjun Lu Yabo Xu Yu JX ldquoAscending Frequency Ordered

Prefix-Tree Efficient Mining of Frequent Patternsrdquo Proceedings of the Eighth

International Conference on Database System for Advanced Applications IEEE

pp65-72 2003

[14] Sarda NL and Sriniyas N V ldquoAn adaptive algorithm for incremental mining

of association rulesrdquo The Ninth International Workshop on Database and

Expert System Applications pp240-245 1998

[15] Jian Pei Jiawei Han Hongjun Lu Shojiro Nishio Shiwei Tang Dongqing

Yang ldquoH-mine hyper-structure mining of frequent patterns in large databasesrdquo

IEEE International Conference on Data Mining pp441-448 2001

[16] Cheng-Fa Tsai Yi-Chau Lin Chi-Pin Chen ldquoA new fast algorithms for mining

association rules in large databaserdquo IEEE International Conference system

man and cybernetics vol 7 pp6 2002

[17] K Wang L Tang J Han and J Liu ldquoTop down FP-Growth for association Rule Mining the 6th Pacific Area Conference on Knowledge Discovery and Data Mining pp334-340 2002