基於Map/Reduce的頻繁項集挖掘


雲計算是分佈式計算技術的一種,其最基本的概念是透過網絡將龐大的計算處理程序自動拆成無數個較小的子程序,再交由多服務崧所組成的龐大系統經搜尋、計算分析之後將處理結果回傳給用戶。雲計算具有超大規模、虛擬化、高可靠性、高可擴展性、通用性等特點,在海量數據的處理中有着重要的地位和發展空間。雲計算普遍採用的編程模式是MapReduce,它由Google提出,爲編寫需要大規模並行處理的代碼提供了簡單模式L。

    Hadoop最早是作爲一個開源搜索引擎項目Nutch的基礎平臺而開發的,是MapReduce的實現。作爲一個開源的軟件平臺,它使用了一個分佈式文件系統(HDFS),將應用切分爲許多小任務塊去執行。使得編寫和運用於處理海量數據的應用程序更加容易。

    Aproiir算法是一種爲布爾關聯規則挖掘頻繁項集的算法,是關聯規則挖掘的重要算法。目前,海量數據挖掘提出了經典算法在分佈式計算環境下並行執行的需求。而云計算提供了海量數挖掘所需的並行執行環境。

    爲此,本文對基於Apriori算法的思想,通過改進,設計了基於雲計算的Map/Reduce機制的頻繁項集挖掘方法,並在Hadooop平臺上對之進行了實現和性能分析。

1 MapReduce編程模型..

    MapReduce是一個將大型分佈式計算表達爲一個對數據鍵/值(key/value)對集合進行串行化分佈式操作的編程模型。一個Map/Reduce計算包括兩個階段,map階段和reduce階段。用MapReduce來處理的數據集(或任務)有一個基本要求:待處理的數據集可以分解成許多小的數據集,而且各個小數據集都可以完全並行地進行處理。

    在map階段,MapReduce框架將輸人數據拆分爲大量的數據片段,並將每一個數據片段分配給一個map任務。每一個.. map任務會將對其分配到的key/value對進行計算,生成一箇中間結果,然後將中間結果中所有具有相同key值的value經過計算後傳遞給reduce函數。

    在reduce階段,每一個reduce任務會將分配到的二元組key/value集合的片段作爲輸入。對於每一個這樣的二元組都會調用一個用戶定義的reduce函數將value值合併,形成一個較小的value的集合,每次reduce函數調用只產生0或1個value值輸出。每個階段的任務執行都是支持容錯的,如果任一個或多個節點在計算過程中出現錯誤都會將任務自動重新分配到其他節點。同時運行多個map和reduce任務提供了很好的負載均衡並且保證了運行中失敗的任務被重新運行的代價降到儘可能的小。

2 Aproiir算法分析..

    Aproiir算法使用一種稱爲逐層搜索的迭代方法,k項集用於探索(k+1)項集。首先掃描一次數據庫,產生頻繁.. 1項集.. L;然後進行循環,在第k次循環中,首先由頻繁k一1項集進行自連接和剪枝產生候選頻繁k項集Ck,然後使用.. Hash函數把.. Ck存儲到一棵樹上,掃描數據庫,對每一個交易rf使用同樣的Hash函數,計算出該交易T內包含哪些候選頻繁k項集,並對這些候選頻繁項集的支持度加1,如果某個候選頻繁項集的支持度大於最小支持度,則該候選項集爲頻繁項集;如此下去,直到不能再找到頻繁項集爲止。爲了提高生成頻繁項集的效率,Apriori算法利用了兩個重要的性質來壓縮搜索空間:

(1)若X是頻繁項集,則.. X的所有子集是頻繁項集。
(2)若X是非頻繁項集,則.. X的所有超集都是非頻繁項集。

3基於MapReduce的頻繁項集挖掘方法設計

    Aproi67通過對數據庫的多趟掃描來發ir算法c,j現所有的頻繁項集,在海量數據的條件下,對數據庫的掃描將會耗費大量的時間和內存。本文充分利用雲計算提供的分佈式並行計算功能,對Apir算法加以改進,得到新的適用於雲計算的頻繁項集挖掘方法,該方法使查找和L+的過程獨立,能夠提高海量數據挖掘的效率。新方法的基本思想如下:

(1)把數據庫分成規模相當的.. M個數據子集,把數據子集發送到M個站點;
(2)每個站點掃描它的數據子集,產生一個局部的候選k項集的集合,記作C2,每個候選項集的支持度計數爲1;
(3)利用hash函數把M個站點的C2中相同的項集和它的支持度計數發送到R個站點;..
(4)R個站點中的每個站點把相同項集的計數累加起來,產生最後的實際支持度,與最小支持度計數rnsp比較確定局部頻繁k項集的集合ai_u,;
(5)把R個站點的輸出合併即產生全局頻繁k項集的集合上咄。將以上思想運用於雲計算的MapReduce框架中,由Map函數對輸入的候選k項集進行掃描,產生中間.. key/value對,經過combiner函數處理之後交給Reduce函數,Reduce函數將相同候選k項集的支持度計數累加得到候選k項集在整個事務數據庫中的實際支持度計數。K值從.. 1開始遞增,經過數次計算之後,就能得到所有頻繁項集。

4 Hadoop平臺上的實驗與結果分析

    爲了驗證以上方法的可行性和有效性,本文做了所設計的新方法與傳統.. Aproi算法的對比ir實驗。

4.1實驗環境與實驗數據
    實驗中採用了由bnuelpe和hdooop構成的軟件環境,硬件環境由1O臺.. PC機互聯構成。實驗數據是事務數據庫數據,格式爲[TID,I1、I2、I3],其中TID爲事務標識,I1、I2爲項的列表,項數在2—8之問隨機選取。實驗數據由JAVA編寫的數據生成器生成,數據量在數十到數百K不等。

4.2 Hadoop平臺的搭建
實驗使用的10臺PC機中1臺作爲NameNode,9臺作爲DataNode。平臺搭建大致分以下幾步完成。

(1)完成.. ubuntu、jdk、ssh以及hadoop的安裝。
(2)配置JDK環境變量,添加CLASSPATH及JAVA_HOME,並設置路徑值。
(3)配置SSH,在每臺機器上新建一個超級用戶,並建立SSHKEY用來遠程登錄。
(4)配置hadoop,導人JAVA—HOME環境變量值,指定默認文件系統名和tracker默認路徑端口。
(5)使用-format命令格式化NameNode;使用start—al1.sh命令啓動所有Hadoop進程。完成以上步驟之後,通過jps命令檢查進程是否啓動成功,如成功,則Hadooop平臺搭建完成。

4.3傳統Apriori算法的實現
    實驗中對傳統的Aproiir算法進行了實現,其運行結果與本文提出的分佈式一次掃描方法的運行結果進行了對比。傳統Apriori算法的主要實現流程如下圖。

 

 

    在整個算法流程中,需要重複掃描數據庫,對算法性能會產生比較大的影響。改進後的算法則避免了這一問題。

4.4新頻繁項集挖掘方法的實現
    新頻繁項集挖掘方法的實現流程如下圖所示。

 


    改進後的算法對數據庫的掃描次數大大減少,基於Map/Reduce的運算方法使得改進後算法在處理大規模數據時更具有優勢。根據需要也可以通過一次掃描數據庫求出所有頻繁項集。僞代碼如下:
k=1;
while k<max   //k下雨最長項的項數
  for each data in  事物數據庫
    Map(data,k); //產生k項集的<key,value>對;
  Combiner(itemset,sup) //本地合併
  Reduce(itemset,result); //產生頻繁k項集的最終結果
  k=k+1;
 

4.5結果與分析
    傳統的Apriori算法和改進後的新頻繁項集挖掘方法的運行結果如下圖。

 

 

    可以看出,本文設計的新方法在處理大規模數據時所需時間少於傳統的Apriori算法,時間複雜度較低,數據量越大優勢將越明顯。


5結束語

    針對關聯規則挖掘中頻繁項集的並行挖掘問題,基於傳統的Apriori算法,通過改進,設計了新的能適用於MapReduce編程模型的並行的頻繁項集挖掘方法。並通過在Hadooop平臺上的對比實驗,驗證了新方法對雲計算的適應性和較之傳統Apriori算法的優越性。
發佈了14 篇原創文章 · 獲贊 11 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章