• 沒有找到結果。

演算法步驟

在文檔中 中 華 大 學 (頁 37-44)

第三章 研究設計理念

第二節 演算法步驟

本論文主要針對關聯式法則探勘的漸進式演算法提出改進,此演算法是利用 只掃描資料庫兩次後建立出一樹狀結構 DFPBT,再經由反覆搜尋 DFPBT 樹狀結 構來得到高頻項目集合。DFPBT 結構把高頻與準高頻的資料壓縮用樹狀結構來 呈現資料庫交易紀錄中項目分布的情況,不但節省了記憶體空間,也節省了搜尋 的時間,不同於以往需要相繼產生候選項目集並重複進行掃描資料庫進行比對是 否為高頻項目集的方式,因為產生的候選項目集多寡往往決定需要重新掃描資料 庫的次數,而重複掃描資料庫的硬體存取動作是漸進式探勘中增加關聯式法則探 勘耗費時間的最大部份。

本論文分別針對非漸進式與漸進式資料探勘提出二種不同的演算法,由於非 漸進式的方式為漸進式方式的前半段作法,我們將大略說明非漸進式的探勘步驟 後,再直接針對漸進式的步驟作詳細地描述與介紹。

非漸進式的演算法經由掃描兩次資料庫後建立 DFPBT 樹狀結構以表示資料 庫中的資料,之後搜尋此樹狀結構得到高頻項目集合,演算法處理資料的過程 中,將需要儲存每個項目的計數值與最後得到的高頻項目集合。而漸進式的演算 法除了記錄非漸進式所需紀錄的資料外,還需要將表示所有資料分布狀態的 DFPBT 樹狀結構利用關聯式資料表記錄下來,以利下次進行漸進式探勘時重建

使用。非漸進式演算法流程如圖 3-1。

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

(1) 設定支持度與準支持度:

當使用者欲進行資料探勘時,需要先設定支持度與準支持度,支持度用來決 定關聯式法則的成立門檻,而準支持度則利用來決定有哪些項目需要被採用來建 立樹狀結構。支持度的設定原則目前尚且沒有相關研究說明支持度設定的依據或 方法;一般而言,在設定支持度的時候需要參考探勘的資料庫交易紀錄量,以及 所要進行探勘的資料庫資料特性而決定;例如醫療資料庫,其項目相互發生的關 係就很少,如果要探勘出一些關聯式法則出來的話,就需設定較小的支持度,而

類似大賣場交易紀錄的資料庫,則可以設定大一點的支持度,因為項目與項目間 合併發生的機會較大。不管是支持度的設定為大或小都需要先行評估。如果支持 度設定過大的時候,可能會導致探勘結果不能充分表現出資料庫中項目之間的關 聯性,而過小的支持度又可能產生過多和沒有實際應用價值的關聯式法則。另外 支持度的大小會直接影響到資料探勘的處理時間,因此支持度的設定端看資料庫 大小與使用者當時的要求來做決定。

(2) 計算一次項計數:

此部分會搜尋在資料庫中每個項目出現的次數,經由這個計算結果我們可以 得到交易紀錄中所有一次項出現的次數,經由準支持度的設定,哪些項目需要被 納入建構樹狀結構的元素中在這個步驟可以被決定。這些項目及個別的所有計數 值將依照次數排列並給予一個 id 值,因為項目出現的次數可能出現相同的情況,

給予 id 值可以幫助我們決定那個項目有較高的權值,避免 A-B 與 B-A 被視為不 同的資料分布而被放在不同的分支中,進而影響探勘結果。項目的儲存格式如表 3-1:

表 3-1:一次項儲存格式

欄位名稱 資料類型 欄位長度 項目說明

Id(pri_key) Int 4 項目順序

Item Narchar 10 項目名稱

Support int 4 項目次數

(3) 建立樹狀結構:

現在進行第二次的掃描資料庫動作,我們再計算一次項計數的時候掃瞄了第 一次。這個步驟中,依序讀取每一筆交易紀錄,將此筆交易紀錄中所有計數值大 於由交易紀錄筆數及準支持度所計算出的準支持度計數的項目取出,然後依照上 一步驟所儲存下來的高頻項目表格的 id 欄位依序排列,再把此筆交易紀錄新增 到 DFPBT 樹中。讀入下一筆交易紀錄,排序高頻順序與新增到 DFPBT,重複進

行這個做法直到交易紀錄皆已處理完畢。最後得到由包含所有高頻與準高頻項目 的交易紀錄資訊組成的 DFPBT 樹狀結構,此樹狀結構的節點依項目出現的次數 從高到低排列,每個節點為其左節點的前一個項目,而其左節點的右邊節點都為 其下一個項目。

(4) 搜尋 DFPBT:

建立 DFPBT 後,我們就可以開始進行探勘的動作。完成建立 DFPBT 之後,

我們會先從左邊的節點開始搜尋,再搜尋右邊的節點,依序從項目次數高的開始 搜尋,先把含有某項目開頭的高頻項目集合搜尋完畢,因為 DFPBT 是依照次數 高低依序排列,所以含有目前節點項目開頭的高頻項目集合不會出現在之後其右 邊節點的探勘上,因此搜尋完某個項目開頭的高頻項目集合後,不需要再檢查這 些高頻項目集合是否在之後出現。

而在搜尋某個項目為開頭的時候,因為其左節點的所有分支包含有其他節點 所需的資訊,所以在探勘左節點之前,會先把其左節點的所有分支合併(Merge Left Child Tree)到其右邊的節點。在合併的時候如果有相同項目的節點就把項目 的次數相加,如果沒有相同節點的話,則複製一相同節點於該插入的地方。最後 依序尋訪樹狀結構的每個節點,當尋訪完畢時我們也已經得到所有的高頻項目集 合並加以儲存以供利用。

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

在漸進式探勘的部分,我們希望曾經探勘過的舊資料不需要重新再一次掃 描,因此我們會記錄每個一次項的次數,以及前一次探勘時所建立的樹狀結構;

經由這些資訊,我們可以很快的計算出項目的變動順序及重建之前可以代表舊資 料的樹狀結構。漸進式演算法的流程如圖 3-2。

新增資料

設定支持度、準支 持度與新進資料

計算一次項

建立樹狀結構 讀取

搜尋樹狀結構

得到高頻項目集合 讀取

一次項計數 儲存(新)

樹狀結構

高頻項目集 合 儲存

儲存 讀取(舊)

讀取 新增、刪除、

調整項目

讀取(新)

新增刪除調整

圖 3-2:漸進式演算法流程圖 (1) 設定支持度、準支持度與新增資料來源:

欲進行漸進式探勘時同樣與非漸進式步驟相同,需要先設定決定高頻項目門 檻的支持度及建樹元素門檻的準支持度以處理交易紀錄資料;另外並需要指定新 增的交易資料所在的表格名稱。

(2) 計算一次項:

在每一次進行漸進式資料探勘的時候,為了避免再一次掃描舊有的資料,因

此我們會把這一次探勘得到的每個項目出現的次數記錄起來,當有新進資料新增 時,只需針對新進資料進行掃描,再把掃描新進資料所得到的一次項計數與前一 次探勘後所保留的計數值加總,就可以得到整個更新後資料庫的一次項計數,再 依照支持度的設定,找出符合門檻的高頻項目及準高頻項,並把這些項目記錄下 來,以便接下來的步驟利用。

(3) 新增、刪除、調整項目:

在進行漸進式資料探勘時,項目的順序變動時常發生,有些原本是高頻的項 目在更新後資料庫會變成準高頻項或非高頻項,而非高頻的項目則有可能會變成 高頻項或準高頻項。從前一次探勘記錄下來的一次項計數與這一次處理新增資料 後得到的一次項計數值做加總,並以更新後資料庫的總交易筆數及支持度的設定 來找出有哪些項目的變動情況發生,然後再一一針對這些情況,更新從資料庫讀 入的樹狀結構資料表。

在這個部份所先要處理的第一個,就是新增項目。前一次的資料探勘時,我 們的樹狀結構中包含了所有高頻與準高頻項目的元素,藉以保留了原資料庫的相 關交易紀錄資訊。然而在更新後的資料庫中,有些項目可能從原本的非高頻項轉 變為更新後資料庫的準高頻或高頻項,但是在保留的樹狀結構中,並沒有含有舊 資料庫中這些項目的相關資訊,因此我們需要再一次掃描舊資料庫。但是前面曾 經提過,我們採用了 AFPIM 的偷懶式掃描的作法,當有非高頻項目變為準高頻 項目的時候,不管這個準高頻在不在樹狀結構中,我們皆不需要去重新掃描舊資 料庫,因為這些準高頻項並不影響高頻項目集合的構成,因此在這個原則設定 下,這部分我們只需要判斷是不是所有高頻項目皆存在樹狀結構中,如不存在才 需要重新掃描舊資料庫。

另外有些項目可能在新的交易紀錄中出現次數非常少,導致這些原本保留的 高頻與準高頻項目在更新後變為非高頻項,所以我們要把這些已經不需要的項目 從樹狀結構資料表中刪除,以節省建樹時所使用的記憶體空間與耗費的時間。在 做法上我們會針對每一筆資料作處理,當有發現需要移除的項目時,就把此欄位

設定為 NULL。

最後是依照更新後資料庫的項目順序調整每筆紀錄的項目,有新進資料新增 後,不只是項目在高頻、準高頻或非高頻三者間發生變動,高頻項目群中的各個 項目次數也會跟著變動,隨之而來的就是高頻的順序也跟著變動,因為我們的樹 狀結構必須依照先後順序建立,所以必須對樹狀結構資料表做調整,使它能夠依 照新的高頻順序來排序,這樣在建立樹狀結構才能依照正確的順序建構出來且不 影響探勘的結果準確性。

(4) 建立樹狀結構:

經由上一步驟的新增、刪除與調整項目後,我們就可以得到一個樹狀結構暫 存表格表示舊資料庫在項目變動後的新狀態,接下來掃描新增資料庫第二次,判 斷每一筆交易紀錄含有哪些高頻項目,並加以排序之後新增到樹狀結構中。在這 個部份處理新增資料時,我們是採用先將所有新增資料作處理後加到樹狀結構的 暫存資料表中,再把這一表格一次建立成樹狀結構的方式。當樹狀結構建立完成 時,我們會瀏覽一次此樹狀結構,把包含更新後資料庫的完整樹狀結構資訊重新 寫回資料庫的樹狀結構資料表中,以便下一次探勘得到完整的保留資訊。

(5) 搜尋樹狀結構:

樹狀結構建立完成後會包含舊有資料庫與新進資料庫的所有高頻項目資訊 與部分的準高頻項目資訊,接下來只要搜尋整個樹狀結構就可以得到所有的高頻 項目集合。搜尋的方式與非漸進式演算法相同,先從項目次數較多也就是順序較 高的項目開始搜尋,再搜尋項目次數較少的項目,而在搜尋樹的左節點分支時,

一樣需要先把左節點的所有分支資訊合併到右邊的節點,以便找出正確的所有高 頻項目集合。

以上是有關漸進式演算法的說明。在探勘的過程中,我們會把前一次探勘所 用到的資訊記錄起來,其中包含有每個項目的出現次數,高頻與準高頻的項目及 樹狀結構。經由這些資訊的保留,在下次漸進式探勘的時候就可以避免重新掃描 舊資料庫的發生,只要在樹狀結構中針對新增、刪除的高頻項目做一些更新與調

在文檔中 中 華 大 學 (頁 37-44)

相關文件