一種面向大數(shù)據(jù)的分布式密度聚類方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及一種大數(shù)據(jù)處理領(lǐng)域,涉及一種分布式密度聚類方法?!?br>背景技術(shù):
】[0002]基于密度的聚類方法將簇看作是數(shù)據(jù)空間中被低密度區(qū)域分割開的高密度對象區(qū)域。具備發(fā)現(xiàn)任意形狀的聚類、識別數(shù)據(jù)集中的噪點、對輸入對象的順序不敏感、可伸縮性好等特點,因此在聚類分析中有著重要的應(yīng)用。然而,絕大部分基于密度的聚類算法無法在密度不均勻的數(shù)據(jù)集中發(fā)現(xiàn)聚類并且存在對輸入?yún)?shù)敏感、大規(guī)模數(shù)據(jù)迭代復(fù)雜等缺點。使得基于密度算法的應(yīng)用在一定程度上受到限制。[0003]DBSCAN(Density-BasedSpatialClusteringofApplicationswithNoise)是一個比較有代表性的基于密度的聚類算法。DBSCAN聚類的結(jié)果受輸入?yún)?shù)的影響,沒有普適性。該算法用固定的參數(shù)識別聚類,在聚類過程中首先找到核心對象,然后向外擴(kuò)展。然而,當(dāng)聚類的稀疏程度不同時,若用固定的參數(shù)可能會破壞聚類的自然結(jié)構(gòu);當(dāng)核心對象將不斷增多時,未處理的對象被保留在內(nèi)存中,因此在處理數(shù)據(jù)集龐大時造成嚴(yán)重內(nèi)存消耗。目前雖然有很多方法對基于密度聚類算法進(jìn)行了改進(jìn),但是一般方法都只是提高了小數(shù)據(jù)集的聚類質(zhì)量及精度,并沒有解決數(shù)據(jù)規(guī)模與維度增加所帶來的計算效率問題。例如專利《基于空間最短距離平均的密度自適應(yīng)無監(jiān)督聚類方法》提出一種通過最短距離平均倍數(shù)系數(shù)步長來調(diào)整距離密度范圍以適應(yīng)不同密度聚類區(qū)的方法,部分解決了輸入?yún)?shù)對聚類結(jié)果的影響問題。。專利《基于限定區(qū)域數(shù)據(jù)取樣的密度聚類方法》中,發(fā)明者采用基于限定區(qū)域數(shù)據(jù)取樣技術(shù)的密度聚類方法,將每次數(shù)據(jù)取樣的范圍限定在距離核心點較近的區(qū)域,降低了大簇分裂產(chǎn)生造成的過多微簇的可能性。[0004]大規(guī)模和高維度數(shù)據(jù)在以上方法中都不有得到解決。而隨著物聯(lián)網(wǎng)的發(fā)展,各種傳感器大量的使用,使得采集的數(shù)據(jù)量急劇膨脹。單就交通領(lǐng)域的浮動車數(shù)據(jù)而言,每輛浮動車每隔5秒返回一條數(shù)據(jù),一個中等城市的一天數(shù)據(jù)規(guī)模就達(dá)到108條。當(dāng)我們在基于浮動車歷史數(shù)據(jù)研宄出行密度區(qū)識別問題時,這個數(shù)據(jù)量將達(dá)到1〇1(1條。[0005]目前的密度聚類算法的無法快速有效的處理如此大規(guī)模的數(shù)據(jù)。[0006]快速密度聚類算法(Clusteringbyfastsearchandfindofdensitypeaks)是一種無需根據(jù)目標(biāo)函數(shù)不斷迭代,并且能夠有效識別任意形狀簇的聚類算法。該方法主要利用點對之間的距離矩陣計算點密度,并結(jié)合與高密度點的距離參數(shù)來選取聚類中心,進(jìn)而進(jìn)行簇類劃分。然而隨著數(shù)據(jù)維度與規(guī)模的增加,該方法在計算空間點的密度矩陣時的計算量是成非線性增加的,聚類過程中不斷的對距離矩陣中數(shù)據(jù)重復(fù)排序來確定各點的距離閾值時造成大量的內(nèi)存消耗。在利用java和matlab編程實驗中,30000點2維數(shù)據(jù)時算法就無法完成聚類過程。【
發(fā)明內(nèi)容】[0007]為解決現(xiàn)有密度聚類方法在處理大數(shù)據(jù)集時算法效率低下的問題,本發(fā)明提出了一種面向大數(shù)據(jù)的分布式密度聚類方法,利用分布式方法計算點密度與點與最小密度的距等閾值來對點進(jìn)行聚類,在處理大數(shù)據(jù)集時快速有效,并具備輸入?yún)?shù)對聚類結(jié)果的魯棒性較好的效果。[0008]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:[0009]一種面向大數(shù)據(jù)的分布式密度聚類方法,所述聚類方法包括如下步驟:[0010]步驟一:虛擬化環(huán)境、搭建Hadoop平臺;[0011]步驟二:數(shù)據(jù)預(yù)處理與加載[0012]從數(shù)據(jù)庫中將原始數(shù)據(jù)表抽取,利用sqoop_query命令截取需要的字段,將預(yù)處理后的數(shù)據(jù)直接抽取到Hdfs中;[0013]步驟三:計算距離矩陣【主權(quán)項】1.一種面向大數(shù)據(jù)的分布式密度聚類方法,其特征在于:所述聚類方法包括如下步驟:步驟一:虛擬化環(huán)境、搭建Hadoop平臺;步驟二:數(shù)據(jù)預(yù)處理與加載從數(shù)據(jù)庫中將原始數(shù)據(jù)表抽取,利用sqoop-query命令截取需要的字段,將預(yù)處理后的數(shù)據(jù)直接抽取到Hdfs中;步驟三:計算距離矩陣(1)Ai={dn...din}=a!?{a!...aj={la!?aj...la!?an|}(2)其中,%代表點的坐標(biāo)(1<i<N),N為點集合的總數(shù),AiS距離矩陣的第i行距離向量,R為地球半徑,,ai、a」為球面上的兩點、球面坐標(biāo)為ai(Xpy),B(x2,y2),x2G[-jt,3I]^y〇y2G[-^/2,/2];在計算距離矩陣的第i行時,向量化中所有的|ai?a」(1<j<N)都會用到相同起始點aJP整個數(shù)據(jù)集的所有點{a」|1<j<N};a;?aj=R?arccos[cosy1cosy2cos(x!-x2)+siny1siny2](3)步驟四:計算截止距離與點密度4.1)計算截止距離截至距離d。為距離集合降序排列的20%的位置處的距離即:dc=D([N*0.2]);其中,D為計算所得的距離{&|1彡i,j彡N}的降序排列集合,N為點的總數(shù),□為取整函數(shù);4.2)計算點密度P點密度Pi為點i與其他所有點的距離小于截止距離d。的個數(shù);在Map過程中將同一行的元素集中在相同Key中,將每個小于&的元素化成常數(shù)'1'加入到key值為i的value里;Reduce過程中對key值i對應(yīng)的Values里的元素進(jìn)行累加就得到各點的密度Pi;步驟五:計算點與較高密度點的最小距離Si\為1與其高局部密度點的最小距離,計算S,的公式如下:8i=min{dij|pi<P』},最大Max(P)點所對應(yīng)的8=Max⑷),包括如下步驟:5.1)對Pi進(jìn)行降序排序,得到對應(yīng)i的排序后的集合{i}d_byPi;5.2)利用i對應(yīng)的{j|Pi<Pj,得到i點的Si計算所需要的d的角標(biāo)集合{ij|Pi<Pj};5.3)計算角標(biāo)集合中對應(yīng)cy勺最小值,由{ij|PfP」},距離集合{dj彡i,j彡N}得到計算Si所需要的{dijlpi<p」};并且記錄當(dāng)8i=minWijlpi<pj}成立時所對應(yīng)的j值;其中,t為點i與點j的距離,Pi代表點i與其他所有點的距離小于d。的個數(shù),P』代表點j與其他所有點的距離小于d。的個數(shù),N為點的總個數(shù);步驟六:臨界密度點臨界距離以及聚類中心6.1)臨界密度點P。、臨界距離臨界密度點{PJ是密度從大到小后的排列的第C個點,臨界距離是集合從大到小后的排列的第C個點,我們對{Pi}從小到達(dá)的排序,然后取點{p」i=C}的點作為P〇,對{SJ,我們進(jìn)行從小到達(dá)的排序,然后取點{Sili=C}的點作為SQ;其中,Pi代表點i與其他所有點的距離小于d。的個數(shù),s,為1與其高局部密度點的最小距離,C為固定常數(shù);6.2)判定i是否為聚類中心分別判斷i與之對應(yīng)的Pi>P〇,5i>s。是否成立,若都成立則點i為聚類中心;判斷所有的點后得到聚類中心集合M={i|Pi>pd,Si>6J;步驟七:點進(jìn)行聚類順序取Ki,j)}的點,判斷i是否為聚類中心,如果屬于則判斷下個點,如果不屬于判斷(i,j)的j是否屬于聚類中心,如果屬于則i為j類,如果不屬于判斷i=j點對應(yīng)的j是否屬于聚類中心,循環(huán)后會得到最終的聚類結(jié)果,其中i為點編號,j為當(dāng)S廠minWijlPfP成立時所對應(yīng)的值,{(i,j)}代表(i,j)按照PiW大到小排列。2.如權(quán)利要求1所述的一種面向大數(shù)據(jù)的分布式密度聚類方法,其特征在于:所述聚類方法還包括以下步驟:步驟八:判定離群點:計算每個點的廣義密度值:broacLpf(pi+maxfej|屯」<di與j屬于不同的聚類中心})/2將原有點密度Pi與廣義密度值broad_pi比較,Pi>broad_pi,則i仍屬于原有類,否則將i則屬于離群點,其中i為點編號,Pi為點密度值。3.如權(quán)利要求1或2所述的一種面向大數(shù)據(jù)的分布式密度聚類方法,其特征在于:所述步驟三中,在Map階段,把計算行需要的ai,標(biāo)識成條<key,value>的形式,其中key=〈i>,i=1,2,…,N,value=('A#',ai);把的元素行六丨所需要的{a』|1彡j彡N},標(biāo)識成條<key,value>形式,其中key=<i>,i=1,2,…,N,value=('B#',{a』}),j=1,2,…,N,那么在Reduce階段,計算化所需要的&1和集合{a」}就會被分配到同一reduce任務(wù)中。4.如權(quán)利要求3所述的一種面向大數(shù)據(jù)的分布式密度聚類方法,其特征在于:所述步驟4.1)中,在計算一大數(shù)據(jù)集中的最大的前K個數(shù)時,將數(shù)據(jù)集切分若干段,不同機(jī)器分別求出分片后各數(shù)據(jù)集中的最大的前K個數(shù),然后合并到一臺機(jī)器,求出整個數(shù)據(jù)集的最大的前K個數(shù),Topk為數(shù)據(jù)集中元素按從大到小排列的后的前K個值的集合;在Map任務(wù)完成后將所有中間值傳遞到同一個Key之下,在Map階段中,將來自數(shù)據(jù)集中元素,標(biāo)識成條<key,value>的形式,其中key=〈NullWritable〉,value=(dij),(1彡i,j彡N);那么在Reduce階段,就將求出合并后的小數(shù)據(jù)集中的TopK;所述步驟4.2)中,Map階段,當(dāng)dc,將添加一條<key,value>,其中key=<i>,i=1,2,…,N,value=(onewritable),onewritable代表常數(shù)'1';在Reduce階段,Key值i所對應(yīng)的則為Pi=Eonewritable。5.如權(quán)利要求4所述的一種面向大數(shù)據(jù)的分布式密度聚類方法,其特征在于:所述步驟5.2)中,在Map階段,把點i與對應(yīng)的pi,標(biāo)識成條<key,value>的形式,其中key=<NullWritable>,value=('i',pJ,在Reduce階段,對vaule集合里的i按pi大小做降序排序得到{jIPi<P」},標(biāo)識成條<key,value>的形式,其中key=<i>,i=1,2,…,N,value=({ij|p!<p』});所述步驟5.3)包括如下過程:①在Map階段,把來自角標(biāo)數(shù)據(jù)的元素,標(biāo)識成條<key,value>的形式,其中key=<i>,i=1,2,…,N,value=('Aft'listQj));把來自距離矩陣的元素,標(biāo)識成條<key,value>形式,其中key=〈i>,i=l,2,...,N,value=('B#',list(屯山);在Map階段,通過key,我們把參與計算的數(shù)據(jù)歸為一類,通過value區(qū)分元素是來自還是角標(biāo)數(shù)據(jù)還是距離數(shù)據(jù);②在Shuffle階段,相同key的value會被加入到同一個列表中,形成<key,list(value)>對,傳遞給Reduce,這個由Hadoop自動完成;③在Reduce階段,計算(i,j)Glist(i,j)i的最小距離,即為所求的8it)【專利摘要】一種面向大數(shù)據(jù)的分布式密度聚類方法,包括如下步驟:步驟一:虛擬化環(huán)境、搭建Hadoop平臺;步驟二:數(shù)據(jù)預(yù)處理與加載:從數(shù)據(jù)庫中將原始數(shù)據(jù)表抽取,利用sqoop–query命令截取需要的字段,將預(yù)處理后的數(shù)據(jù)直接抽取到Hdfs中;步驟三:計算距離矩陣;步驟四:計算截止距離與點密度;步驟五:計算點與較高密度點的最小距離;步驟六:臨界密度點臨界距離以及聚類中心;步驟七:點進(jìn)行聚類,得到最終的聚類結(jié)果;步驟八:剔除離群點。本發(fā)明在處理大數(shù)據(jù)集時快速有效,并具備輸入?yún)?shù)對聚類結(jié)果的魯棒性較好的效果?!綢PC分類】G06F17-30【公開號】CN104615638【申請?zhí)枴緾N201410687507【發(fā)明人】王興武,李建元,趙貝貝【申請人】浙江銀江研究院有限公司【公開日】2015年5月13日【申請日】2014年11月25日