• 沒有找到結果。

演算法之比較

在文檔中 中 華 大 學 (頁 31-36)

第二章 相關研究與技術

2.6 演算法之比較

以上各演算法皆各具特色,對於資料探勘的結果正確性、效率提昇都有很大 的貢獻,然而,針對每個演算法皆有其優缺點,以下將分為關聯法則以及平行分 散式運算兩部分,描述其演算法之優缺點。

2.6.1 關聯式法則演算法之比較

提到最具代表性之關聯法則演算法,則必定會聯想到 Apriori 演算法,再上 一節已有提到,Apriori 演算法的特色是針對資料庫不斷地掃描,並且找出候選 項目集合後,再去找出高頻項目集合。這樣的方式固然容易瞭解且易於實作,但

是對於效率方面,卻容易造成系統負擔,分析其演算法之步驟後可以發現,每當 資料庫掃描過一次之後才能得到候選項目集合之次數,舉例來說,假設現有一個 資料庫存放著 1Gbytes 的資料,當 Apriori 開始運算時,必須先將資料完整掃瞄 一次,才能得出所有的項目集合,然後再去把符合支持度的資料作組合的動作,

產生出候選項目,然後針對這些候選項目再去資料庫裡面掃描,換句話說,當候 選項目集合中有多少筆候選項目,資料庫就要被掃瞄多少次,這樣的巨大 I/O 時 間,隨著資料庫的成長而上升,而且項目的多寡也直接影響了組合這些候選項目 的時間,所以對於現在的超大型資料庫來說,這樣的探勘方式算是相當沒有效率 的。

正由於 Apriori 演算法對於大型資料庫來說,幾乎無用武之地,因此,後來 有學者提出了 FP-growth 這樣的方法來加快資料庫的處理,如文獻探討中介紹 的,FP-growth 採用 FP-Tree 的架構來作為探勘時資料的依據,其特色是只要掃 描過兩次資料庫之後就可以建構出探勘時所需要的所有資料,並建構出一個壓縮 的資料結構,這樣的方法好處是可以不用多次掃描資料庫,對於 I/O 的存取時間 可以大幅度的減少,甚至是將整個探勘過程都於記憶體中處理完畢,所使用的 I/O 時間只有那兩次掃描資料庫的時間而已,如此看來,FP-Growth 似乎是無懈可擊 的一個演算法,事實上,仔細分析其演算結構後可以發現,其演算法仍有其耗費 時間之處,例如大量的排序跟遞迴。

首先對 Header table 的建立來看,這個步驟需要掃描完整資料庫一次,得到 所有項目資料集合後,還必須將這些項目做排序,這樣的動作或許還不致浪費太 多時間,但是 Header table 建構完畢後,緊接著就是第二次掃描資料庫去建構 FP-Tree 的步驟,在此步驟中,每當讀取到一筆資料列後,就必須將資料列中的 項目依照 Header table 的順序來排序,所以要新增一筆資料到樹狀架構中時,就 必須要掃描過一次 Header table,所以,當面對資料量較為稀疏(sparse database)

的大型資料庫時,所建立之 Header table 也勢必相當消耗空間,而且其掃描次數 是資料庫有幾筆資料就要掃描幾次,是相當可觀的次數,雖說排序的動作都在記 憶體中完成,但是從資料庫中讀取資料仍需 I/O 時間,所以要建構出 FP-Tree 也 需要經過大量的運算才能完成。

然而在 FP-Tree 建構完成之後,就是針對其樹狀結構去做探勘,探勘方式是 以遞迴方式去做,其方式是項目為基底去建構出該項目之子樹,不斷地重複這樣 的步驟直到沒有子樹可以產生為止,也就是在樹狀結構中,一個項目的樣式 (Pattern)有多少個節點,就必須要做幾次的遞迴,而每建立一個子樹後,都要再 去對子樹內之項目再建立其子樹,這樣不斷遞迴的結果,就需要大量的記憶體空 間以及時間來完成此探勘步驟,遞迴需要佔用記憶體空間可以容易地理解,然而 而對於時間的消耗,則是因為每次建立子樹都需要在去重複地建構子樹的 Header table 以及其樹狀結構,因而需要大量排序的時間,所以,利用遞迴作為探勘之 方式,也是需要大量運算時間及空間之因素。

但是將 FP-growth 與 Apriori 相比之,FP-growth 仍是較有效率之方法,原因 就在於 FP-Growth 減少了大量的 I/O 時間,並且其樹狀結構可以於記憶體中處 理,探勘時雖然需要更大量的運算,但是在記憶體中運算及搜尋結果也絕對比反 覆地去讀取硬碟中的資料還要快上許多,在一些學者的實驗研究中,FP-growth 的效率表現也較 Apriori 更加快速(可參考圖 2-5),因此,FP-Growth 演算法的壓 縮架構便為關聯式法則之探勘,帶來另一種發展的方向。

2.6.2 以 FP-Tree 為基礎之平行分散式演算法之比較

因為 FP-Tree 的架構具有可拆解的特性,所以平行分散式的運算可以輕易地 應用於其架構之上,其中最先採用的是 MLFPT 演算法,正如前面文中所介紹,

此演算法之步驟就是將資料平均分散到各處理器中做運算,然後再將結果加以結

合,這樣的方法固然可以做到分散處理,但是我們可以知道,一般的資料並不會 如此平均的分布,在平均切割資料的外表下,其中的資料所對處理器造成的負載 可能有極大的差異,舉例來說,在量販店的資料庫中,因為 1、2 月份為農曆過 年之時,大部分消費者在單次購買行為中的物品數量可能較其他月份來的多,因 此一筆資料中所包含的項目將比較多,所以當一個處理器被分配到 1、2 月份的 資料時,以 FP-Tree 的架構原理看來,其負擔必定較其他處理器要沉重,但是 MLFPT 並沒有針對這樣的方式去平均負載,此為其一之缺點。其次,MLFPT 的 探勘方式是以項目為主,並且由各處理器去對所分配到的資料探勘,最後再將結 果做整合,可以想見這樣的情況下,若有處理器因為負擔較重而需要較多時間才 能完成工作時,其他的處理器則會進入閒置狀態,待所有的處理器完成工作後才 能完成探勘步驟,這樣非但不能有效減低探勘之時間,也無法有效率地運用處理 器之效能。

因此而有 Shard Nothing Parallel Execution of FP-Growth 演算法[12]的出現,

其可以針對樹狀結構做深度地記錄,並且在建構樹狀結構時將長度較長的的結構 留至最後處理,甚至可以將其結構給其他已經結束工作的處理器去處理,這樣的 優點是可以使得處理器的負載得以平均,確保處理器能被有效利用,但是其深度 之判斷會隨著資料不同而有所改變,要做到平均則需要不斷調整其最小路徑長度 才能達到最好的效果,要將其應用於實際資料庫時仍有其不便性;另外,分析 FP-Tree 的結構後會發現,其實建構樹狀結構及探勘時,並非只有深度才會影響 其效率,樹葉節點的多寡也會影響到其效能,葉節點越多,則需要的記憶體及探 勘遞迴處理的次數就越多,因此其評估負載方式也有待改良。

除了平均負載的需求之外,分散式運算還有另一個重點在於資料間的傳輸,

當資料的傳輸次數越多,探勘所需要的時間也就越長,也因為在這樣的需求下,

PFP-Tree 演算法也解決了這樣的問題,其主要概念是用群體溝通的方式來減少各

處理器的溝通次數,並且以項目為主的探勘方式,使得使用者不需要等待所有處 理器都完成即可得到部分正確的結果。而 PFP-Tree 的確可以減低溝通而達到減 少探勘時間的目的,但是仔細觀察後可以發現,雖然減少了溝通次數,但是實際 上對於資料的處理負擔卻比較重,因為在資料交換時,每個處理器所需要的資料 是固定的,所以其他處理器雖然減少了傳遞的次數,但是卻必須要負擔更大量的 資料傳輸量,而每次的資料傳輸過後,都需要將資料附加於樹狀結構上,所以每 個處理器都會去紀錄並處理額外的、其探勘過程中不需要的資料,這無疑是更耗 費空間的作法。另外,PFP-Tree 並沒有針對各處理器的負載做均衡的處理動作,

當面對了上述資料歪斜的情況時,各處理器的負載程度也會有所差異,雖然是以 項目為主的探勘方式,可以得到先處理完的部分探勘結果,但是要得到所有的探 勘結果能需要等待所有處理器完成工作才行,因此,此演算法仍有改進之空間。

綜觀以上各項演算法之優缺點及詳細運作原理後,可以了解到平行運算之重 點乃在於處理器的負載平衡以及其傳輸的資料量大小,因此本論文便發展出一套 演算法,將以上演算法之優點加以利用,並且利用 FP-Tree 架構之原理,期望讓 處理器的負載能達到平衡並且降低處理器間的溝通次數,讓硬體的計算效能發揮 到最大,而使得快速探勘大量資料的目的能得以成功。

在文檔中 中 華 大 學 (頁 31-36)

相關文件