• 沒有找到結果。

演算法步驟

在文檔中 中 華 大 學 (頁 35-45)

第三章 研究設計理念

第二節 演算法步驟

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

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

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

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

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

(7) 可變動支持度:

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

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

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

(1) 設定支持度:

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

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

(2) 搜尋高頻項目:

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

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

名稱 說明 資料型別 長度

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

Support 項目次數 int 4

(3) 建立 DFPBT 樹:

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

(4) 搜尋 DFPBT:

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

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

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

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

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

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

Input:

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

The frequent patterns

Description:

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

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

7: else

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

9: end for

10: SearchFP(root, null)

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

Input:

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

the frequent patterns

Description:

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

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

6: Output p

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

9: SearchFP(sibroot, p) 10: return

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

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

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

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

(2) 搜尋高頻項目:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在文檔中 中 華 大 學 (頁 35-45)

相關文件