• 沒有找到結果。

演算法實例推導

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

第三章 研究設計理念

第三節 演算法實例推導

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

表 3-9:DFPBT Table

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support 1 E <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 1 2 A E <NULL> <NULL> <NULL> <NULL> <NULL> 1 3 C <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 1 4 C A E

B

<NULL> <NULL> <NULL> 1 5 C A <NULL> <NULL> <NULL> <NULL> <NULL> 1

6 C

B

<NULL> <NULL> <NULL> <NULL> <NULL> 1

經由刪除、新增的動作之後,因為高頻的順序已有更動,所以我們要針對 DFPBT Table 重新排序過,排序過後的 DFPBT Table 如下表 3-13。

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support 1 E <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 1

2

E A

<NULL> <NULL> <NULL> <NULL> <NULL> 1

3 C <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 1 4

C E A B

<NULL> <NULL> <NULL> 1 5 C A <NULL> <NULL> <NULL> <NULL> <NULL> 1 6 C B <NULL> <NULL> <NULL> <NULL> <NULL> 1

完成新增高頻項目、刪除非高頻項目之後,我們就要針對新進資料掃描第 二次,然後把高頻的資訊,新增到 DFPBT Table。一般而言,此時的 DFPBT Table 資料量已很多,我們不去比對插入的資料是否有存在於 DPBT Table 中,然後 support 次數加 1 這樣的動作,因為這樣的比對會浪費一些時間。所以在這個步 驟是把要插入的資料直接新增在 DFPBT Table 的後面,如表 3-14。並且判斷新

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

再一次把非高頻交易記錄表格一次寫回到資料庫裡。此時,我們更新過的 DFPBT Table 都只是存放在記憶體的暫存表格,非真正寫入到資料庫。

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 Support 1 E <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 1 2 E A <NULL> <NULL> <NULL> <NULL> <NULL> 1 3 C <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 1 4 C E A B <NULL> <NULL> <NULL> 1 5 C A <NULL> <NULL> <NULL> <NULL> <NULL> 1 6 C B <NULL> <NULL> <NULL> <NULL> <NULL> 1 7 C A B <NULL> <NULL> <NULL> <NULL> 1 8 C B <NULL> <NULL> <NULL> <NULL> <NULL> 1 9 E B <NULL> <NULL> <NULL> <NULL> <NULL> 1 10 C E A <NULL> <NULL> <NULL> <NULL> 1 11 C E <NULL> <NULL> <NULL> <NULL> <NULL> 1 12 C E A B <NULL> <NULL> <NULL> 1

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

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

id Item1 Item2 Item3 Item4 Item5 Item6 Item7 2 A D E F <NULL> <NULL> <NULL>

4 D E <NULL> <NULL> <NULL> <NULL> <NULL>

5 B C D <NULL> <NULL> <NULL> <NULL>

6 A B C F <NULL> <NULL> <NULL>

7 B D E <NULL> <NULL> <NULL> <NULL>

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

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

建立完成的 DFPBT 在探勘之後,會先瀏覽一次,把樹狀結構的資訊重新 寫回到資料庫的 DFPBT Table 中,再進行探勘,探勘的方式與舊有資料探勘 DFPBT 的規則一樣,探勘完成以後,我們會把高頻項目集合記錄到資料庫中,

以方便使用者查詢。

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

相關文件