唐 浩,楊余旺,辛智斌
(1.南京理工大學 計算機科學與工程學院,江蘇 南京 210094;2.淮海集團工業有限公司,山西 長治 046000)
基于MapReduce的單遍K-means聚類算法
唐 浩1,楊余旺1,辛智斌2
(1.南京理工大學 計算機科學與工程學院,江蘇 南京 210094;2.淮海集團工業有限公司,山西 長治 046000)
K-means應用于MapReduce框架的大數據處理可顯著提高K-means對大數據集的處理能力。但K-means聚類算法需要進行多次迭代才能達到可接受的效果,并將每次迭代作為一個獨立map作業執行,需要讀寫整個數據集,從而導致顯著的I/O消耗,與MapReduce框架的設計理念不符。為此,提出了一個基于MapReduce的單遍K-means算法(MRSK)。該算法采用流數據單遍算法讀取數據,聚類時采用K-means++初始化seeding算法得到初始聚類中心。在理論分析MRSK算法復雜度的基礎上,進行了MRSK算法的測試驗證和相關分析。驗證實驗結果表明,相對于基于MapReduce和基于數據流的K-means聚類算法,所提出的MRSK算法在執行速度和聚類效果方面具有更好的優勢。
MapReduce框架;數據聚類;K-means++;Mahout;單遍技術
K-means[1]聚類算法是數據挖掘領域中的一種重要方法,由于計算簡單、收斂速度快,在機器學習、圖像處理等領域應用廣泛。近年來,隨著數據量的不斷攀升,傳統的K-means聚類分析方法已無法滿足大數據[2]的需求,所以亟需對傳統的K-means方法做出改進以支持大規模數據分析。
MapReduce[3]是由谷歌提出的一種大數據并行計算框架。MapReduce的3個主要特點:模型使用方便、適用于大型數據處理、可擴展并內置容錯,使其成為一種理想的大數據處理框架[4]。如今,K-means已經成功地應用在了MapReduce框架中。
Zhao W等提出的基于MapReduce的K-means聚類算法,是一種快速聚類方案,利用了運行在Hadoop[5]框架上的Mahout[6]項目,稱之為PKMeans[7]。艾隆等提出的基于數據流的K-means算法,利用了基于數據流的單通技術[8],稱之為SKMA[9]。
上述解決方案為了達到可接受的結果,都需要對整個數據集進行多次迭代,而MapReduce本質上不支持迭代。在每次迭代中,整個數據集必須從磁盤加載到內存中,數據集經過處理后,輸出時必須再一次寫入磁盤,因此,每一次迭代都會產生大量和I/O相關的操作,如磁盤I/O、數據序列化等等,嚴重影響了程序的執行速度。所以這些方案并不適合MapReduce框架。Hadian和Shahrivari為了共享內存,實現并行計算,提出了一種并行的單遍聚類算法[10],但是該算法沒有使用MapReduce框架。
為此,文中提出一種基于MapReduce的單遍K-means聚類算法(MRSK)。該算法利用流數據單遍算法讀取數據,在數據聚類過程的map階段采用K-means++初始化Seeding算法[11]得到中間簇中心集;在reduce階段,采用支持權重的K-means++初始化Seeding改進算法進行中間簇中心集處理,并獲得初始聚類中心,再利用K-means進行聚類計算,得到最終聚類結果。
1.1K-means++初始化Seeding

K-means是一種簡單快速且高效的聚類算法[12]。質心的計算如下:
(1)
初始聚類中心的選取對K-means影響很大,但是K-means隨機選取初始聚類中心,無法保證聚類效果。K-means++通過初始化Seeding算法[13],可以提供一個較好的初始聚類中心。
通過式(2)初始聚類中心:
(2)
初始化Seeding算法的步驟為:
算法1:K-means++中心初始化。
1:執行K-means++(M,k);

5:end while

7:結束
1.2單遍算法
單遍算法[14]是流式數據聚類的經典方法。該算法依據數據輸入順序依次處理數據,依據當前數據與現有類的匹配度大小,判定該數據歸入已有類或另外創建一個新類。
利用歐氏距離作為匹配度判定依據,歐式距離公式如下:


2.1算法流程
提出MRSK方法,是為了解決現有基于MapReduce方案中因多次迭代而引起的I/O消耗問題。在MRSK方法中,將整個數據集分割成更小的,可存于每臺機器內存的數據塊,并分發這些數據塊到可用的機器。然后,每個塊由所處的機器獨立聚簇,每個塊經過并行處理后產生若干中間簇中心,之后將中間簇中心的集合從每臺機器中抽取出來作為一個更小的數據集裝載進單獨一臺機器的主存中,最終的聚類中心從中間簇中心集中通過重新聚類產生。
每個塊所在的機器在處理數據時采用單遍法,對當前到達的數據進行聚類,依據匹配度大小,將數據判為已有類或創建一個新類。采用單遍算法,計算過程中整個數據集只被讀取了一次。
由于每個塊的處理是相互獨立的,每個塊可以在一個專用的map任務中處理。也就是說,每個map任務選擇一個數據集分塊,并在數據塊上執行K-means++初始化Seeding算法,得到中間簇中心和每個簇中心的權重,然后各聚類中心和各中心的權重作為結果輸出。Map過程完成后,所有加權中心形成中間簇中心集,并作為map輸出。這個中間簇中心集會分配給一個單獨的reduce任務。Reduce任務得到中間簇中心和它們的權重后,會采用改進的支持權重的K-means++初始化Seeding算法得到初始簇中心,然后通過改進的K-means算法得到最終的聚類中心。MRSK算法的完整流程如算法2所示。
算法2:MRSK算法。
1:執行MRSK(M,k)
2:Map過程:
3:將數據集M分割為?塊,構成集合M=M1,M2,…,M?;
4:對于集合M中的每個Mi執行步驟5;


8:end while

10:Map任務結束;
11:Reduce任務:
12:Map任務的輸出構成中間簇中心集Cw;


16:end while

20:結束
2.2MRSK聚類
把整個執行過程放在MapReduce框架中。數據塊處理放在map階段,中間簇中心集的處理放在reduce階段。如前所述,提出方案的主要優勢是使用了數據流單遍算法,降低了迭代過程中的I/O消耗,同時也提高了執行速度。
在這兩個階段中,均使用了K-means++算法,這是因為K-means++的初始化Seeding算法有助于提高算法的聚類效果。對于每個數據塊,利用K-means++算法取得在此數據塊上的k個聚類中心。因此,如果有c個數據塊,在每個數據塊上使用K-means++后,將會生成一個擁有k·c個元素的中間簇中心集合。這個集合就是map階段的輸出。
此外,使用聚類中心的權重來幫助提高MRSK的精確度。每個聚類中心分配的數據項的個數表明了該中心的重要性。因此,對于獲得中間簇中心,必須拓展K-means++算法以支持加權。為了達到此目的,需要改進初始化聚類中心計算方法(式2)和聚類中心計算方法(式1)。
在K-means++算法中,利用式(4)初始化聚類中心,在之后的迭代過程中,使用式(5)計算簇中心。

(4)

初始化簇中心利用式(5):
(5)
之后的迭代過程中,簇中心的選取使用式(6):

(6)
典型的聚類算法有三種類型的復雜度:時間復雜度、I/O復雜度和空間復雜度。MRSK有兩個過程:map階段處理數據塊和reduce階段在中間簇中心集上運行K-means++算法。為確定每一種類型的復雜度,必須考慮這兩個階段。對于MRSK復雜性的分析,提出了以下假設:k為簇的個數,n為數據集中數據項的數量,c為每個數據塊的大小,p為可以并行處理的數據塊數,I為直到收斂為止總的迭代次數。值得注意的是,假設計算和存儲一個數據項的時間復雜度為O(1)(在大部分相似的文獻中也都做了這樣的假設)。3.1數據塊大小設定
為了實現聚類,MRSK需要兩個重要的參數:聚簇個數k和數據塊大小c。如何設置塊大小需要考慮,理論上,塊大小最小為k,最大為n,但這兩個極端值都并不切合實際。

但是如果數據集不是非常大,塊大小可以被設置為較小的值,如k·logn或者k的倍數。因為塊較小,可以產生更多的中間簇中心,從而可以更好地代表原始數據集,得到的聚類結果也會更好。
3.2I/O復雜度

3.3空間復雜度

3.4時間復雜度

3.5與相關工作進行復雜度對比
在前面提到的PKMeans和SKMA中,PKMeans利用了Apache Hadoop Mahout項目,是標準K-means在MapReduce框架中的實現;SKMA算法將原始數據集分割為多個小的子集,在每個子集上利用K-means#算法選擇k個中心構成中間簇中心集,然后利用K-means++算法[11]從中間簇中心集中選出最終的k個中心。
表1分別列出了PKMeans、SKMA和MRSK的三種復雜度。在大數據集中,數據量n很大,所以聚類算法要達到收斂,需要經過多次迭代,從而導致I很大,而且容易得到n?I>k>p。可以發現,在I/O復雜度上,PKMeans最高,MRSK與SKMA相當;但是在時間復雜度和空間復雜度上MRSK均比其他兩種算法低。通過比較可以得出,相對于另外兩種算法,MRSK復雜度最低。

表1 復雜度比較
4.1實驗設置
實驗中,使用6臺服務器搭建Hadoop集群,每臺機器CPU為Intel Xeon E5520*2,內存16 G。機器上安裝Centos6.5(64位)系統,Open JDK 7,CDH5(Cloudera Hadoop 5)和Mahout0.8。
主要目標是比較MRSK算法和另外兩種算法的執行速度和精確度。為了比較三種算法對于大數據集的處理能力和效果,生成了四個大型合成數據集,分別包括10,50,100,和500個簇。每個數據集擁有10億數據項。每個數據項有5個特征,標準偏差為10,因此,最優聚類時,SSE大約為5·1011。
4.2評價指標
在實驗中,主要比較在相同情況下三種算法的執行速度和聚類效果。執行速度通過執行時間來比較。聚類效果通過誤差平方和函數SSE(Sum of Squares for Error)來比較。SSE顯示簇的緊湊性,SSE值低,意味著聚類效果更好。SSE計算公式如下:

(7)
4.3實驗結果分析
標準K-means和SKMA算法,利用Apache Mahout項目中基于MapReduce框架的版本。圖1為k增加時PKMeans、SKMA和MRSK的執行時間變化圖。圖2為k增加時三種算法的SEE變化圖。

圖1 k和時間的關系
從圖1的結果可以看出,相對于其他方案,MRSK的速度更快。尤其是k大于100時,MRSK的速度遠快于另外兩種算法。在圖2中,MRSK的聚類效果也比另外兩種算法要好,隨著k值增大,SSE越來越接近5·1011,而5·1011正是預估的理論值。圖中,PKMeans的聚類效果一直比另外兩種算法差。k=10時,SKMA和MRSK的SSE值大小相當,k大于10時,MRSK的SSE值逐漸低于SKMA。而且,隨著簇的增加,MRSK一直保持著較低的SSE值。

圖2 k和SSE的關系
實驗結果表明,MRSK在保證聚類效果的前提下,降低了I/O開銷,提高了執行速度。
針對K-means的迭代性質并不能在MapReduce框架中被模型化,需要反復讀寫磁盤導致極高I/O開銷的問題,提出了基于MapReduce的單遍K-means算法。理論分析和實驗結果均表明,MRSK有效提高了算法執行速度,降低了I/O開銷,為處理大數據集上的大量聚簇問題提供了一個有益的解決思路和方案。下一步的研究重點是利用包括k-d樹在內的臨近搜索方法,進一步降低算法的時間復雜度。
[1] Wang L,Tao J, Ranjan R,et al. G-Hadoop:MapReduce across distributed data centers for data-intensive computing[J].Future Generation Computer Systems,2013,29(3):739-750.
[2] 王 珊,王會舉,覃雄派,等.架構大數據:挑戰、現狀與展望[J].計算機學報,2011,34(10):1741-1752.
[3] Dean J,Ghemawat S.MapReduce:simplified data processing on large clusters[C]//Conference on symposium on operating systems design & implementation.[s.l.]:USENIX Association,2004:107-113.
[4] Dean J,Ghemawat S.MapReduce:a flexible data processing tool[J].Communications of the ACM,2010,53(1):72-77.
[5] White T.Hadoop:the definitive guide[M].[s.l.]:[s.n.],2010.
[6] Thangavel S K,Thampi N S,Johnpaul C I.Performance analysis of various recommendation algorithm using apache Hadoop and mahout[J].International Journal of Scientific & Engineering Research,2013,4(12):279-287.
[7] Zhao W,Ma H,He Q.Parallel k-means clustering based on MapReduce[C]//IEEE international conference on cloud computing.[s.l.]:IEEE,2009:674-679.
[8] 謝國富,王文成.單遍數據讀取的GPU上的多片元效果繪制[J].計算機學報,2011,34(3):473-481.
[9] Ailon N,Jaiswal R,Monteleoni C.Streaming k-means approximation[C]//Conference on neural information processing systems.Vancouver,British Columbia,Canada:[s.n.],2009:10-18.
[10] Hadian A,Shahrivari S.High performance parallel k-means clustering for disk-resident datasets on multi-core CPUs[J].Journal of Supercomputing,2014,69(2):845-863.
[11] Arthur D,Vassilvitskii S.k-means++:the advantages of careful seeding[C]//Proceedings of the eighteenth annual ACM-SIAM symposium on discrete algorithms.[s.l.]:Society for Industrial and Applied Mathematics,2007:1027-1035.
[12] Hartigan J A,Wong M A.A K-means clustering algorithm[J].Applied Statistics,2013,28(1):100-108.
[13] Bahmani B,Moseley B,Vattani A,et al.Scalable k-means++[J].Proceedings of the VLDB Endowment,2012,5(7):622-633.
[14] 張培偉.基于改進Single-Pass算法的熱點話題發現系統的設計與實現[D].武漢:華中師范大學,2015.
A Single-passK-means Clustering Algorithm with MapReduce
TANG Hao1,YANG Yu-wang1,XIN Zhi-bin2
(1.School of Computer Science and Technology,Nanjing University of Science and Technology,Nanjing 210094,China;2.Huaihai Industrial Group Co.,Ltd.,Changzhi 046000,China)
The application of fittingK-means into MapReduce framework can greatly improve the processing ofK-means on large datasets.ButK-means achieves an acceptable clustering effect through multiple iterations.Each iteration is executed as an independent map job,in which the whole dataset must be read and wrote to slow disks,resulting in high I/O overhead,and it is not consistent with the design concept of the MapReduce framework.Therefore,a single-passK-means clustering algorithm based on MapReduce,called MRSK,is proposed.It reads the data by single-pass and uses theK-means++ seeding algorithm to get the initial cluster center.On the basis of theoretically analyzing the complexity of the MRSK,a series of test and analysis for MRSK is conducted.The experimental results show that compared with the available MapReduce-based and stream-basedK-means variants,MRSK performs both faster execution times and higher quality of clustering results.
MapReduce framework;data clustering;K-means++;Mahout;single-pass
2016-11-04
:2017-03-09 < class="emphasis_bold">網絡出版時間
時間:2017-07-11
國家自然科學基金資助項目(61640020);江蘇省科技支撐計劃(BE2012386,BE2011342);江蘇省農業自主創新項目(CX(13)3054,CX(16)1006);江蘇省重點研發計劃(BE2016368-1);深圳市戰略性新興產業發展專項資金項目(JCYJ20130331151710105)
唐 浩(1990-),男,碩士生,研究方向為云計算和大數據處理;楊余旺,教授,研究方向為云計算和大數據處理、網絡編碼、傳感器網絡。
http://kns.cnki.net/kcms/detail/61.1450.TP.20170711.1457.086.html
TP301.6
:A
:1673-629X(2017)09-0026-05
10.3969/j.issn.1673-629X.2017.09.006