欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于Spark內(nèi)存計(jì)算大數(shù)據(jù)平臺(tái)的OPTICS點(diǎn)排序聚類方法與流程

文檔序號(hào):11918938閱讀:432來(lái)源:國(guó)知局
基于Spark內(nèi)存計(jì)算大數(shù)據(jù)平臺(tái)的OPTICS點(diǎn)排序聚類方法與流程

本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)挖掘、計(jì)算機(jī)信息處理技術(shù)領(lǐng)域。



背景技術(shù):

隨著計(jì)算機(jī)信息領(lǐng)域的飛速發(fā)展,大量的數(shù)據(jù)從生活的各個(gè)方面被收集起來(lái),互聯(lián)網(wǎng)上各種各樣信息的規(guī)模也在成幾何倍數(shù)的增大,從海量的數(shù)據(jù)中迅速分析從而提取隱藏在數(shù)據(jù)中的信息變得越來(lái)越重要。

聚類分析是數(shù)據(jù)分析的一個(gè)主要方法,聚類(clustering)是將數(shù)據(jù)對(duì)象進(jìn)行分類的過(guò)程,使同一簇中的對(duì)象之間具有很高的相似度,而不同簇中的對(duì)象高度相異。與分類過(guò)程不同的是,聚類不依賴預(yù)先定義的類和類標(biāo)號(hào),同時(shí)聚類過(guò)程中的分類標(biāo)準(zhǔn)和類型數(shù)量均是未知的。近來(lái)聚類分析方法得到了相當(dāng)多的關(guān)注。傳統(tǒng)的聚類分析算法存在三個(gè)問(wèn)題:第一,需要輸入?yún)?shù),但輸入?yún)?shù)難以獲取;第二,對(duì)輸入?yún)?shù)特別敏感,參數(shù)設(shè)置的細(xì)微不同可能導(dǎo)致聚類的差別很大;第三,高維的數(shù)據(jù)集一般都具有非常傾斜的分布,全局密度參數(shù)不能刻畫(huà)內(nèi)置的聚類結(jié)構(gòu)。

基于密度的聚類方法OPTICS(Ordering Point To Identify the Cluster Structure)是通過(guò)擴(kuò)展傳統(tǒng)的DBSCAN(Density-Based Spatial Clustering of Applications with Noise)算法,對(duì)數(shù)據(jù)集中數(shù)據(jù)對(duì)象通過(guò)計(jì)算基于密度的簇排序,從簇排序序列中提取有用的聚類信息的數(shù)據(jù)分析方法。OPTICS算法相對(duì)于傳統(tǒng)的聚類算法,對(duì)輸入?yún)?shù)不敏感。

隨著數(shù)據(jù)量的增大和數(shù)據(jù)維度的增加,采用傳統(tǒng)的串行方法難以應(yīng)對(duì)百萬(wàn)條以上的數(shù)據(jù)集,通常會(huì)出現(xiàn)時(shí)間過(guò)長(zhǎng),內(nèi)存溢出和宕機(jī)等問(wèn)題,不能滿足現(xiàn)實(shí)中工程的需要。Spark是一個(gè)基于內(nèi)存的分布式計(jì)算系統(tǒng),是由UC Berkeley AMPLab實(shí)驗(yàn)室開(kāi)發(fā)的開(kāi)源數(shù)據(jù)分析集群計(jì)算框架。擁有MapReduce的所有優(yōu)點(diǎn),與MapReduce不同的是,Spark將計(jì)算的中間結(jié)果數(shù)據(jù)持久地存儲(chǔ)在內(nèi)存中,通過(guò)減少磁盤(pán)I/O,使后續(xù)的數(shù)據(jù)運(yùn)算效率更高。Spark的這種架構(gòu)設(shè)計(jì)尤其適合于機(jī)器學(xué)習(xí)、交互式數(shù)據(jù)分析等應(yīng)用。這些應(yīng)用都需要重復(fù)地利用計(jì)算的中間數(shù)據(jù)。在Spark(基于內(nèi)存計(jì)算框架)和Hadoop MapReduce(并行計(jì)算框架)的性能基準(zhǔn)測(cè)試對(duì)比中,運(yùn)行基于內(nèi)存的logistic regression,在迭代次數(shù)相同的情況下,Spark的性能超出Hadoop MapReduce 100倍以上。兩者之間在計(jì)算過(guò)程中也存在一些不同之處,比如MapReduce輸出的中間結(jié)果需要讀寫(xiě)HDFS,而Spark框架會(huì)把中間結(jié)果保存在內(nèi)存中。這些不同之處使Spark在某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越,換句話說(shuō),Spark啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負(fù)載,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的MapReduce的算法。而彈性分布式數(shù)據(jù)集(RDD,Resilient Distributed Datasets)是Spark框架的核心數(shù)據(jù)結(jié)構(gòu),它具備像MapReduce等數(shù)據(jù)流模型的容錯(cuò)特性,并且允許開(kāi)發(fā)人員在大型集群上執(zhí)行基于內(nèi)存的計(jì)算。Spark將數(shù)據(jù)集運(yùn)行的中間結(jié)果保存在內(nèi)存中能夠極大地提高性能,資源開(kāi)銷(xiāo)也極低,非常適合多次迭代的機(jī)器學(xué)習(xí)算法。

文章ZAHARIA M,CHOWDHURY M,FRANKLIN M J,et al.Spark:cluster computing with working sets[C]//Book of Extremes.2010:1765-1773.采用基于Spark大數(shù)據(jù)平臺(tái)并行聚類方法,能夠快速的處理大規(guī)模的數(shù)據(jù)集。Spark的核心是RDD(resilient distributed dataset),是一個(gè)只讀的,可分區(qū)的分布式數(shù)據(jù)集,這個(gè)數(shù)據(jù)集的全部或部分可以緩存在內(nèi)存中,在多次計(jì)算間重用。傳統(tǒng)的MapReduce雖然具有自動(dòng)容錯(cuò)、平衡負(fù)載和可拓展性的優(yōu)點(diǎn),但是其最大缺點(diǎn)是采用非循環(huán)式的數(shù)據(jù)流模型,使得在迭代計(jì)算時(shí)要進(jìn)行大量的磁盤(pán)IO操作。RDD正是解決這一缺點(diǎn)的方法。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明所要解決的技術(shù)問(wèn)題是,針對(duì)現(xiàn)有技術(shù)在處理大批量數(shù)據(jù)時(shí)進(jìn)行聚類容易內(nèi)存溢出、時(shí)間過(guò)長(zhǎng)和無(wú)法運(yùn)行宕機(jī)等缺點(diǎn),本發(fā)明提出一種基于Spark(基于內(nèi)存計(jì)算平臺(tái))大數(shù)據(jù)平臺(tái)的通過(guò)點(diǎn)排序識(shí)別聚類結(jié)構(gòu)OPTICS(Ordering Points To Identify The Clustering Structure)算法,能夠處理大批量的數(shù)據(jù)集,并可以在極短的時(shí)間內(nèi)得到簇排序。能夠有效的解決上述問(wèn)題,并可以在不同層次觀察導(dǎo)出內(nèi)在的聚類結(jié)構(gòu),滿足用戶的期望輸出。

本發(fā)明解決上述問(wèn)題的技術(shù)方案是,提出一種基于內(nèi)存計(jì)算Spark大數(shù)據(jù)平臺(tái)的OPTICS算法,具體包括:讀取大規(guī)模數(shù)據(jù)集,創(chuàng)建分布式數(shù)據(jù)集RDD,完成初始化操作;對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行并行劃分,得到最優(yōu)數(shù)據(jù)集分區(qū);根據(jù)最優(yōu)數(shù)據(jù)集分區(qū)生成的RDD,并行計(jì)算鄰居樣本數(shù)量和核心距離,對(duì)每個(gè)分區(qū)并行執(zhí)行OPTICS(通過(guò)點(diǎn)排序識(shí)別聚類結(jié)構(gòu))算法可以得到每個(gè)分區(qū)的簇排序并持久化存儲(chǔ);通過(guò)簇排序給每個(gè)分區(qū)賦予簇號(hào),合并分區(qū),使每個(gè)樣本得到全局的簇號(hào)。

本發(fā)明利用Spark分布式并行技術(shù),找到數(shù)據(jù)結(jié)構(gòu)的最優(yōu)劃分結(jié)構(gòu),并行計(jì)算得到每個(gè)分區(qū)的簇排序,通過(guò)OPTICS算法的簇排序,用戶可以從不同層次結(jié)構(gòu)觀察數(shù)據(jù)集的內(nèi)在聚類結(jié)構(gòu)。本發(fā)明具體包括以下步驟:從分布式文件系統(tǒng)HDFS(Hadoop Distributed File System,Hadoop)上讀入數(shù)據(jù)集,并創(chuàng)建一個(gè)Spark的上下文SparkContext(程序運(yùn)行初始環(huán)境)對(duì)象,利用對(duì)象的抽象數(shù)據(jù)結(jié)構(gòu)函數(shù)parallelize(DataSet)或textFile(DataSet URL)創(chuàng)建分布式數(shù)據(jù)集RDD,創(chuàng)建完成的分布式數(shù)據(jù)集可以被并行操作。把RDD中每個(gè)樣本通過(guò)map()(每行數(shù)據(jù)執(zhí)行同一操作的函數(shù))函數(shù)轉(zhuǎn)換為對(duì)應(yīng)的自定義類Point(用來(lái)存儲(chǔ)每個(gè)樣本的各種信息),Point類中存儲(chǔ)有每個(gè)樣本的值及其相關(guān)信息??梢暂斎刖垲惓跏嫉陌霃溅藕桶霃絻?nèi)最小的鄰居數(shù)MinPts。

對(duì)RDD進(jìn)行劃分得到數(shù)據(jù)集的最優(yōu)結(jié)構(gòu),具體可采用如下方法:

(1)通過(guò)RDD的行動(dòng)函數(shù)(reduce()或者fold()(一種通過(guò)折疊RDD來(lái)計(jì)算整個(gè)RDD信息的函數(shù)))計(jì)算數(shù)據(jù)集的所有維度,得到維度數(shù)N(一般維度差異最大的有5個(gè)維度),廣播整個(gè)數(shù)據(jù)集。

(2)把RDD分成N個(gè)分區(qū),每個(gè)分區(qū)能夠獲取到前面的廣播變量,每個(gè)分區(qū)分別根據(jù)相關(guān)維度,各自生成樹(shù)形結(jié)構(gòu)。樹(shù)的每個(gè)節(jié)點(diǎn)都是一個(gè)盒子(box類),盒子有前邊界和后邊界及存儲(chǔ)包括的樣本數(shù)組。生成樹(shù)形結(jié)構(gòu)時(shí),按照維度進(jìn)行數(shù)據(jù)集的劃分。首先按照維度將數(shù)據(jù)集等距離進(jìn)行平分,形成兩個(gè)盒子,這兩個(gè)盒子再進(jìn)行等距離平分,直到盒子的樣本數(shù)據(jù)個(gè)數(shù)小于設(shè)定值或者盒子的前邊界值減去后邊界值小于2×ε。標(biāo)記每個(gè)樣本屬于的盒子,或是否屬于每個(gè)盒子的前后邊界。標(biāo)記每個(gè)樣本與所屬盒子的前后邊界的關(guān)系。例如某個(gè)樣本點(diǎn)到所屬盒子的前邊界線的距離小于ε,則為此盒子的前邊界點(diǎn),若到所屬盒子的后邊界線的距離小于ε,則為此盒子的后邊界點(diǎn)。

(3)遍歷所有分區(qū)的劃分樹(shù),得到盒子數(shù)組。調(diào)用Spark平臺(tái)所提供的累加變量,匯集所有分區(qū)盒子數(shù)組的情況,尋找到盒子數(shù)組劃分均勻并且盒子數(shù)組長(zhǎng)度最多的分區(qū),得到最優(yōu)分割分區(qū)。具體可采用如下方法:每個(gè)分區(qū)都獲取自己分區(qū)的盒子數(shù)組的總長(zhǎng)度L,每個(gè)分區(qū)的對(duì)應(yīng)的盒子數(shù)組中樣本個(gè)數(shù)最多的樣本數(shù)M,盒子數(shù)組的平均樣本數(shù)N,根據(jù)公式P=N/M計(jì)算判斷傾斜的標(biāo)準(zhǔn)。每個(gè)分區(qū)的L和P標(biāo)準(zhǔn)化,取L+P值最大的分區(qū)為最優(yōu)分割分區(qū),保存最優(yōu)分割分區(qū),去掉其余分區(qū)。保存的最優(yōu)分割分區(qū)其內(nèi)部的盒子數(shù)組就是最優(yōu)劃分結(jié)構(gòu)的盒子數(shù)組。

進(jìn)一步地,可根據(jù)最優(yōu)分割分區(qū)的最優(yōu)劃分結(jié)構(gòu)的盒子數(shù)組得到新的RDD,并計(jì)算樣本鄰居和樣本點(diǎn)的核心距離,具體可包括如下方法:

(1)首先廣播整個(gè)盒子數(shù)組(即把盒子數(shù)組分發(fā)到每臺(tái)機(jī)器并存儲(chǔ)一個(gè)副本,可理解為每個(gè)分區(qū)都會(huì)得到一個(gè)盒子數(shù)組的副本,減少大幅度任務(wù)計(jì)算的時(shí)間),另外再單獨(dú)把盒子數(shù)組生成為RDD結(jié)構(gòu),RDD每個(gè)分區(qū)分別獲得序號(hào)相對(duì)應(yīng)的盒子。例如RDD的0號(hào)分區(qū)獲得盒子數(shù)組的0號(hào)盒子,依次類推。因?yàn)楹凶訑?shù)組和RDD的盒子本身儲(chǔ)存的樣本點(diǎn)都是一樣,廣播處理的話可加快計(jì)算的速度。

(2)每個(gè)RDD分區(qū)中的盒子分別與廣播的盒子數(shù)組中其序號(hào)對(duì)應(yīng)的盒子及其序號(hào)前后盒子進(jìn)行計(jì)算樣本鄰居。例如0號(hào)分區(qū)與盒子數(shù)組的0號(hào)和1號(hào)盒子進(jìn)行計(jì)算,1號(hào)分區(qū)與1號(hào),0號(hào)和2號(hào)盒子進(jìn)行計(jì)算,依次類推。因?yàn)槊總€(gè)盒子存儲(chǔ)的都是大量的樣本點(diǎn),分區(qū)中的盒子與其序號(hào)對(duì)應(yīng)的盒子進(jìn)行計(jì)算樣本點(diǎn)與樣本點(diǎn)之間的距離,可得到一個(gè)樣本點(diǎn)周?chē)心男颖军c(diǎn)是其鄰居樣本點(diǎn)。而分區(qū)中盒子與其序號(hào)對(duì)應(yīng)前后的盒子計(jì)算點(diǎn)與點(diǎn)之間歐幾里得距離是為了計(jì)算分區(qū)盒子中邊界點(diǎn)和前后盒子中邊界點(diǎn)是否是鄰居關(guān)系。是否是鄰居樣本點(diǎn)的判斷標(biāo)準(zhǔn)取決于用戶設(shè)定的閾值。

(3)根據(jù)鄰居樣本點(diǎn)及與其目標(biāo)樣本點(diǎn)的歐幾里得距離,根據(jù)如下公式(1)計(jì)算得到每個(gè)樣本的核心距離。

core-distε,MinPts(p)表示樣本點(diǎn)P的核心距離,其中ε表示樣本點(diǎn)P的鄰域半徑,MinPts表示使得樣本點(diǎn)P成為核心樣本點(diǎn)的最小鄰居樣本點(diǎn)個(gè)數(shù),core-dist表示核心距離。

if|Nε(p)|<MinPts表示當(dāng)樣本點(diǎn)P周?chē)泥従訕颖军c(diǎn)個(gè)數(shù)小于設(shè)定閾值個(gè)數(shù)MinPts時(shí),其中,|Nε(p)|表示樣本點(diǎn)P周?chē)牡泥従訕颖军c(diǎn)個(gè)數(shù)。UNDEFINED表示此時(shí)P的核心距離無(wú)定義。

MinPts-th smallest distance to Nε(p)表示使得樣本點(diǎn)P周?chē)辽儆蠱inPts個(gè)鄰居樣本點(diǎn)的最小鄰域半徑,其中MinPts-th smallest distance表示滿足MinPts鄰居樣本點(diǎn)個(gè)數(shù)最小半徑距離。

根據(jù)公式(2)計(jì)算每個(gè)樣本的可達(dá)距離:

其中,reachability-distε,MinPts(o,p)表示樣本點(diǎn)O到樣本點(diǎn)P的可達(dá)距離,reachability-dist表示可達(dá)距離,Max(core-distε,MinPts(p),dist(p,o))表示取樣本點(diǎn)P的核心距離和樣本點(diǎn)P和樣本O的歐式距離中最大的一個(gè),dist表示distance的歐幾里得距離。

按照最優(yōu)結(jié)構(gòu)劃分并計(jì)算距離得到每個(gè)分區(qū)中每個(gè)樣本點(diǎn)(Point類)的鄰居樣本點(diǎn),并把鄰居樣本點(diǎn)的序號(hào)存儲(chǔ)到樣本點(diǎn)(Point類)后,每個(gè)分區(qū)進(jìn)行經(jīng)典OPTICS(通過(guò)點(diǎn)排序識(shí)別聚類結(jié)構(gòu))算法,對(duì)所有樣本的可達(dá)距離進(jìn)行排序,每個(gè)分區(qū)得到簇排序,調(diào)用saveAsTextFile(“outpath”)(把RDD存儲(chǔ)到hadoop分布式文件系統(tǒng)的函數(shù))函數(shù)將簇排序持久化存儲(chǔ)。每個(gè)分區(qū)的簇排序只能進(jìn)行數(shù)據(jù)結(jié)構(gòu)層面上觀測(cè)作用,而為了得到每個(gè)樣本點(diǎn)的最終簇號(hào),需要輸出聚類結(jié)果。所以根據(jù)每個(gè)分區(qū)的簇排序,可以依照用戶的需求在不同層次結(jié)構(gòu)上得到簇號(hào),然后合并分區(qū),輸出聚類的結(jié)果。具體包括:

(1)根據(jù)用戶輸入的判斷距離閾值B,從每個(gè)分區(qū)的簇排序中按順序提取樣本,首先先設(shè)定一個(gè)初始類別,如果該樣本的可達(dá)距離不大于B則屬于當(dāng)前正在判定的類別。如果樣本的可達(dá)距離大于B且核心距離大于B,則為噪聲。如果樣本的可達(dá)距離大于B且核心距離小于B,則屬于下一個(gè)新的類別,則另起一個(gè)新的類別。

(2)生成全局合并簇號(hào)的Map(鍵值對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)),保留每個(gè)分區(qū)的邊界樣本形成盒子邊界數(shù)組,廣播該數(shù)組。按每個(gè)分區(qū)的前邊界點(diǎn)和數(shù)組序號(hào)對(duì)應(yīng)的前一個(gè)盒子的后邊界點(diǎn)進(jìn)行循環(huán),如果存在一對(duì)樣本的距離小于給定B,則加入Map中。

(3)每個(gè)分區(qū)根據(jù)該Map合并簇號(hào),并輸出最終的聚類結(jié)果,如不符合期望公式,期望公式:已分配簇號(hào)的樣本數(shù)/總樣本數(shù)>=0.8(閾值0.8可以根據(jù)用戶的實(shí)際情況進(jìn)行調(diào)整),則可以返回步驟(1),直到符合期望公式為止。

本發(fā)明提出了基于Spark平臺(tái)的OPTICS算法,能夠處理大批量的數(shù)據(jù)集,并可以在極短的時(shí)間內(nèi)得到簇排序。用戶可根據(jù)簇排序和自身的實(shí)際需求,得到最后的聚類結(jié)果。該方法能有效提高大規(guī)模數(shù)據(jù)的計(jì)算效率,更加符合數(shù)據(jù)量快速增長(zhǎng)的實(shí)際應(yīng)用場(chǎng)景,能夠明顯提高數(shù)據(jù)挖掘的效率,具有較好的實(shí)際應(yīng)用價(jià)值且成本較低。

附圖說(shuō)明

圖1基于Spark大數(shù)據(jù)平臺(tái)的OPTICS聚類算法流程框圖;

圖2基于Spark大數(shù)據(jù)平臺(tái)的數(shù)據(jù)分塊部分的流程框圖;

圖3基于Spark大數(shù)據(jù)平臺(tái)計(jì)算鄰居數(shù)流程框圖;

圖4基于Spark大數(shù)據(jù)平臺(tái)OPTICS聚類算法的流程框圖;

圖5基于Spark大數(shù)據(jù)平臺(tái)合并分區(qū)部分流程框圖;

圖6按照分區(qū)維度對(duì)數(shù)據(jù)集進(jìn)行劃分過(guò)程示意圖;

圖7廣播的盒子數(shù)組示意圖例。

具體實(shí)施方式

RDD(彈性分布式數(shù)據(jù)集)是一種有容錯(cuò)機(jī)制的特殊集合,可以分布在集群的節(jié)點(diǎn)上,以函數(shù)式編輯操作集合的方式,進(jìn)行各種并行操作,RDD為一個(gè)具有容錯(cuò)機(jī)制的特殊集合它提供了一種只讀、只能有已存在的RDD變換而來(lái)的共享內(nèi)存,然后將所有數(shù)據(jù)都加載到內(nèi)存中,方便進(jìn)行多次重用。RDD是分布式的,可以分布在多臺(tái)機(jī)器上,進(jìn)行計(jì)算,并且RDD是彈性的,計(jì)算過(guò)程中內(nèi)存不夠時(shí)它會(huì)和磁盤(pán)進(jìn)行數(shù)據(jù)交換。而Spark技術(shù)因其是基于內(nèi)存的計(jì)算,基于Spark的聚類方法大多采用對(duì)數(shù)據(jù)集先進(jìn)行劃分,在每個(gè)小塊數(shù)據(jù)集上樣本點(diǎn)先聚合成小類,再不斷的合并小塊數(shù)據(jù)集中的小類別,最后聚合得到最終的大類別。能夠很好地解決Hadoop平臺(tái)存在內(nèi)存溢出、時(shí)間過(guò)長(zhǎng)和無(wú)法運(yùn)行宕機(jī)等缺點(diǎn)。

以下結(jié)合附圖和具體實(shí)例對(duì)本發(fā)明的實(shí)施作進(jìn)一步具體描述。圖1為本發(fā)明基于Spark大數(shù)據(jù)平臺(tái)的OPTICS聚類算法流程框圖,創(chuàng)建分布式數(shù)據(jù)集RDD,尋找最優(yōu)結(jié)構(gòu),完成對(duì)數(shù)據(jù)分塊;計(jì)算每個(gè)點(diǎn)的鄰居數(shù),得到其核心距離;對(duì)每個(gè)分區(qū)并行執(zhí)行OPTICS,獲得簇排序;在分區(qū)內(nèi)標(biāo)記族號(hào)獲取全局合并族號(hào)map,合并分區(qū)并輸出聚類結(jié)果。具體包括如下步驟:

(1)數(shù)據(jù)分塊階段

如圖2所示為基于Spark大數(shù)據(jù)平臺(tái)的數(shù)據(jù)分塊部分流程圖。輸入需要聚類的數(shù)據(jù)集,將其轉(zhuǎn)換成Spark平臺(tái)的分布式數(shù)據(jù)集RDD,并且完成初始化操作。首先根據(jù)輸入的數(shù)據(jù)集創(chuàng)建一個(gè)SparkContext對(duì)象(SparkContext是程序的入口,負(fù)責(zé)連接Spark集群,創(chuàng)建RDD(分布式數(shù)據(jù)集),累積量和廣播量等)。然后調(diào)用對(duì)象的parallelize(DataSet)或textFile(DataSetURL)(數(shù)據(jù)集轉(zhuǎn)換為RDD函數(shù))創(chuàng)建分布式數(shù)據(jù)集,一旦創(chuàng)建完成,這個(gè)分布式數(shù)據(jù)集就可以被并行操作。即RDD=sc.textFile(DataSetURL);把當(dāng)前的RDD中每個(gè)樣本通過(guò)map()函數(shù)轉(zhuǎn)換為對(duì)應(yīng)的Point(自定義類包括樣本點(diǎn)及其詳細(xì)信息)類,Point類中存儲(chǔ)每個(gè)樣本的值及其相關(guān)的信息。

根據(jù)預(yù)先輸入的聚類初始半徑ε和半徑內(nèi)最小的鄰居數(shù)MinPts,RDD開(kāi)始尋找數(shù)據(jù)集的最優(yōu)劃分結(jié)構(gòu),把數(shù)據(jù)集的樣本點(diǎn)合理均勻的劃分到各個(gè)盒子中,并把數(shù)據(jù)集轉(zhuǎn)換成一個(gè)包含所有樣本點(diǎn)的盒子數(shù)組。通過(guò)RDD的行動(dòng)函數(shù)(reduce()或者fold())計(jì)算得到數(shù)據(jù)集維度差異最大的所有N個(gè)維度,廣播整個(gè)數(shù)據(jù)集到每一個(gè)分區(qū)中,每個(gè)區(qū)會(huì)得到整個(gè)數(shù)據(jù)集的一個(gè)副本,廣播操作可大幅度減少計(jì)算的時(shí)間。將RDD分成N個(gè)分區(qū),每個(gè)分區(qū)均能夠獲取到前面的廣播變量,每個(gè)分區(qū)分別根據(jù)相關(guān)維度各自生成一種樹(shù)形結(jié)構(gòu),樹(shù)形結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)都是一個(gè)盒子(box類),盒子有前邊界和后邊界及存儲(chǔ)的樣本數(shù)組。生成樹(shù)時(shí),按照分區(qū)所得到的維度進(jìn)行數(shù)據(jù)集的劃分。具體可采用如下方法:先平分廣播時(shí)每個(gè)分區(qū)所得到的整個(gè)數(shù)據(jù)集副本形成兩個(gè)盒子,將兩個(gè)盒子的樣本數(shù)據(jù)再進(jìn)行平分,直到每個(gè)盒子的樣本數(shù)據(jù)個(gè)數(shù)小于設(shè)定值或者盒子的前邊界值減去后邊界值小于2倍ε。標(biāo)記每個(gè)樣本點(diǎn)與所屬盒子的前后邊界的關(guān)系。例如某個(gè)樣本點(diǎn)到所屬盒子的前邊界線的距離小于ε,則此盒子的前邊界點(diǎn),若到所屬盒子的后邊界線的距離小于ε,則此盒子的后邊界點(diǎn)。

按每個(gè)分區(qū)遍歷各自生成劃分樹(shù)。通過(guò)Spark的累加變量匯集所有分區(qū)的盒子數(shù)組情況,尋找盒子數(shù)組劃分較均勻并且盒子數(shù)組長(zhǎng)度較多的分區(qū)。具體可采用如下方法:根據(jù)盒子數(shù)組的長(zhǎng)度L,所有分區(qū)的盒子數(shù)組中樣本個(gè)數(shù)最多的盒子中的樣本數(shù)M,求得數(shù)組平均盒子的樣本數(shù)為N=數(shù)據(jù)集的總樣本數(shù)G/盒子數(shù)組的長(zhǎng)度L,則判斷傾斜標(biāo)準(zhǔn)值P=N/M。標(biāo)準(zhǔn)化每個(gè)分區(qū)的L和P,L+P值最大的分區(qū)就是最優(yōu)分割分區(qū),保存最優(yōu)分割分區(qū),去掉其余分區(qū)。

(2)并行計(jì)算鄰居階段

圖3所示為計(jì)算鄰居數(shù)部分流程框圖。對(duì)最優(yōu)分割分區(qū)將盒子分配到對(duì)應(yīng)的分區(qū),盒子數(shù)組的0號(hào)盒子分到0號(hào)分區(qū),1號(hào)盒子分到1號(hào)分區(qū),依次類推,每個(gè)分區(qū)分別獲得序號(hào)相對(duì)應(yīng)的盒子,可得到每個(gè)分區(qū)都存儲(chǔ)一個(gè)盒子的RDD,另外廣播整個(gè)盒子數(shù)組到每一個(gè)分區(qū)中,每個(gè)分區(qū)都得到了一個(gè)完整的盒子數(shù)組的副本。每個(gè)分區(qū)的每個(gè)盒子都調(diào)取mapPartition()函數(shù),mapPartition函數(shù)是每個(gè)分區(qū)的所有樣本點(diǎn)一起調(diào)用一次,每個(gè)分區(qū)的盒子分別與廣播的盒子數(shù)組中其序號(hào)對(duì)應(yīng)的盒子的樣本點(diǎn)及其序號(hào)前后盒子樣本點(diǎn)進(jìn)行計(jì)算歐幾里得距離,然后每個(gè)盒子里的每個(gè)樣本點(diǎn)都能得到鄰居樣本點(diǎn)。例如,1號(hào)分區(qū)的樣本與盒子數(shù)組的1號(hào)盒子的樣本計(jì)算歐幾里得距離,1號(hào)分區(qū)的前邊界樣本與盒子數(shù)組的0號(hào)盒子的后邊界樣本點(diǎn)計(jì)算歐幾里得距離,1號(hào)分區(qū)的后邊界樣本與盒子數(shù)組的2號(hào)盒子的前邊界樣本計(jì)算歐幾里得距離,判斷距離是否小于閾值,可得到是否是其鄰居,依次類推。分區(qū)中盒子與其序號(hào)對(duì)應(yīng)前后的盒子計(jì)算點(diǎn)與點(diǎn)之間距離是為了計(jì)算分區(qū)盒子中邊界點(diǎn)和前后盒子中邊界點(diǎn)是否是鄰居關(guān)系,而是否是鄰居樣本點(diǎn)的判斷標(biāo)準(zhǔn)取決于用戶設(shè)定的閾值。每個(gè)分區(qū)根據(jù)鄰居數(shù)及對(duì)應(yīng)的距離,得到每個(gè)樣本對(duì)應(yīng)的核心距離。最后每個(gè)分區(qū)的每個(gè)樣本點(diǎn)都會(huì)得到一系列的鄰居樣本點(diǎn)編號(hào),保存在自身的Point類中。

可采用如下公式(1)計(jì)算每個(gè)樣本的核心距離,

core-distε,MinPts(p)表示對(duì)于樣本點(diǎn)P的核心距離,其中ε表示樣本點(diǎn)P的鄰域半徑,MinPts表示使得樣本點(diǎn)P成為核心樣本點(diǎn)的最小鄰居樣本點(diǎn)個(gè)數(shù),core-dist表示核心距離。

if|Nε(p)|<MinPts表示當(dāng)樣本點(diǎn)P周?chē)泥従訕颖军c(diǎn)個(gè)數(shù)小于設(shè)定閾值個(gè)數(shù)MinPts時(shí),其中|Nε(p)|表示樣本點(diǎn)P周?chē)牡泥従訕颖军c(diǎn)個(gè)數(shù)。

UNDEFINED表示此時(shí)P的核心距離無(wú)定義。

MinPts-th smallest distance to Nε(p)表示使得樣本點(diǎn)P周?chē)辽儆蠱inPts個(gè)鄰居樣本點(diǎn)的最小鄰域半徑,其中MinPts-th smallest distance表示滿足MinPts鄰居樣本點(diǎn)個(gè)數(shù)最小半徑距離。

根據(jù)公式(2)計(jì)算每個(gè)樣本的可達(dá)距離:

reachability-distε,MinPts(o,p)表示樣本點(diǎn)O到樣本點(diǎn)P的可達(dá)距離,reachability-dist表示可達(dá)距離

Max(core-distε,MinPts(p),dist(p,o))表示取樣本點(diǎn)P的核心距離和樣本點(diǎn)P和樣本O的歐幾里得距離中最大的一個(gè),其中dist表示distance的歐幾里得距離。

(3)OPTICS聚類階段

如圖4所示為OPTICS聚類算法的流程。每個(gè)分區(qū)的樣本并行的執(zhí)行OPTICS(通過(guò)點(diǎn)排序識(shí)別聚類結(jié)構(gòu))聚類算法,每個(gè)分區(qū)各自得到各個(gè)分區(qū)所有樣本點(diǎn)的可達(dá)距離形成序列,稱為分區(qū)可達(dá)序列。具體采用如下方法:

Step1:初始化:結(jié)果隊(duì)列初始為空,全局鄰居數(shù)組初始為空;

Step2:選擇一個(gè)未處理樣本點(diǎn)放入全局鄰居數(shù)組:

Step3:如果全局鄰居數(shù)組為空,返回Step 2,否則選擇第一個(gè)對(duì)象p進(jìn)行擴(kuò)張:

Step3.1:如果p不是核心點(diǎn),轉(zhuǎn)Step 4;否則,對(duì)p的ε鄰域內(nèi)任一未處理的鄰居q計(jì)算歐式距離:

Step 3.1.1:如果q已在全局鄰居數(shù)組中且從p到q的可達(dá)距離小于此時(shí)q的可達(dá)距離,則更新q的可達(dá)距離,并根據(jù)q的新的可達(dá)距離,調(diào)整q到全局鄰居數(shù)組中相應(yīng)位置,以保證隊(duì)列的有序性;

Step3.1.2:如果q不在全局鄰居數(shù)組中,則根據(jù)p到q的可達(dá)距離將其插入有序隊(duì)列;

Step 4:從全局鄰居數(shù)組中刪除p,并將p寫(xiě)入結(jié)果隊(duì)列中,返回Step3。

最后每個(gè)分區(qū)的結(jié)果序列就是我們所求的簇排序,并調(diào)用saveAsTextFile(“outpath”)(將RDD序列化存儲(chǔ)到分布式文件系統(tǒng)的函數(shù))函數(shù)將聚類后的RDD做持久化存儲(chǔ),把每個(gè)分區(qū)的簇排序保存到HDFS上。

(4)合并分區(qū)及簇號(hào)階段

根據(jù)每個(gè)分區(qū)的簇排序,可以依照用戶的需求在不同層次結(jié)構(gòu)上得到簇號(hào),然后進(jìn)行合并分區(qū),輸出聚類的結(jié)果。

根據(jù)用戶輸入的結(jié)果距離值B,從每個(gè)分區(qū)的簇排序中按順序提取樣本,先給出一個(gè)類別,如果該樣本的可達(dá)距離不大于B則屬于當(dāng)前正在處理的類別,則把樣本點(diǎn)所屬的Point類的類別屬性標(biāo)記當(dāng)前類別。如果可達(dá)距離大于B并且核心距離大于B,則把樣本點(diǎn)所屬的Point類的類別屬性標(biāo)記噪聲。如果當(dāng)可達(dá)距離大于B并且核心距離小于B,則把樣本點(diǎn)所屬的Point類的類別屬性標(biāo)記下一個(gè)新的類別。

將得到簇號(hào)的RDD調(diào)用map()函數(shù),留下每個(gè)分區(qū)的前后邊界點(diǎn)為分布式數(shù)據(jù)集RDD1,RDD1調(diào)用collect()(把RDD轉(zhuǎn)換為數(shù)組的函數(shù))函數(shù)把RDD1轉(zhuǎn)換為數(shù)組并廣播。然后RDD1通過(guò)mapPartition()(一個(gè)分區(qū)調(diào)用一次這個(gè)函數(shù))與廣播變量進(jìn)行全局合并獲得map(鍵值對(duì)形式數(shù)據(jù)儲(chǔ)存結(jié)構(gòu))

如圖5所示合并分區(qū)部分流程框圖,根據(jù)RDD1的1號(hào)分區(qū)的前邊界樣本和廣播變量的0號(hào)元素的后邊界點(diǎn)計(jì)算map,map的方向由后指向前,向前合并簇號(hào),把合并的簇號(hào)加入到map中。

每個(gè)分區(qū)所有樣本點(diǎn)都根據(jù)Map(鍵值對(duì)形式數(shù)據(jù)儲(chǔ)存結(jié)構(gòu))合并簇號(hào),并輸出最終的所有樣本點(diǎn)的簇號(hào),相同簇號(hào)的放在一起輸出到文件中,最后將文件進(jìn)行持久化的保存。

以下舉例對(duì)本發(fā)明的實(shí)施作進(jìn)一步說(shuō)明。本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過(guò)程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。

假如有一數(shù)據(jù)集有10個(gè)樣本,維度為2,數(shù)據(jù)集具體為{(1,3),(2,3),(1,2),(2,2),(3,3),(4,4),(5,4),(4,5),(5,5),(6,5)},初始的聚類半徑ε為1和半徑內(nèi)最小的鄰居數(shù)MinPts為3。

首先讀取這個(gè)數(shù)據(jù)集,并轉(zhuǎn)換為分布式數(shù)據(jù)集RDD,再通過(guò)map()函數(shù)把數(shù)據(jù)集的每一個(gè)樣本點(diǎn)轉(zhuǎn)換為Point類,Point類中包括樣本點(diǎn)和樣本的相關(guān)信息(如樣本的編號(hào),是否為邊界點(diǎn),鄰居數(shù)組,核心距離,可達(dá)距離,屬于哪個(gè)盒子和是否被訪問(wèn)等)。

進(jìn)入數(shù)據(jù)分塊階段,尋找維度差異最大的5個(gè)維度,通過(guò)reduce()或者fold函數(shù)進(jìn)行分布式查找,數(shù)據(jù)集只有2維,則取數(shù)據(jù)集的所有維度進(jìn)行查找最優(yōu)的結(jié)構(gòu)劃分。先用collect函數(shù)把RDD轉(zhuǎn)換數(shù)組并廣播出去。將RDD分為兩個(gè)parttion(分區(qū))每個(gè)partition(分區(qū))按照1個(gè)維度進(jìn)行樹(shù)形結(jié)構(gòu)劃分。樹(shù)的每個(gè)節(jié)點(diǎn)都是一個(gè)盒子(box類),盒子有前邊界和后邊界及存儲(chǔ)包括的樣本數(shù)組。

按照分區(qū)的維度對(duì)數(shù)據(jù)集進(jìn)行劃分,生成樹(shù)狀結(jié)構(gòu)。首先將數(shù)據(jù)集的所有數(shù)據(jù)按照第一維度進(jìn)行平分形成兩個(gè)盒子,兩個(gè)盒子的邊界分別為(1,3.5)和(3.5,6),所以此時(shí){(1,3),(2,3),(1,2),(2,2),(3,3)}屬于第一個(gè)盒子,其余的樣本點(diǎn)屬于第二個(gè)盒子,兩個(gè)盒子的數(shù)據(jù)再按照第一維度進(jìn)行平分,直到盒子中的樣本數(shù)據(jù)個(gè)數(shù)小于設(shè)定值或者盒子的前邊界值減去后邊界值小于2倍ε,結(jié)束數(shù)據(jù)劃分。標(biāo)記每個(gè)數(shù)據(jù)樣本屬于這個(gè)盒子是否屬于每個(gè)盒子的前后邊界。例如(1,1)樣本點(diǎn)到所屬盒子的前邊界線的值1的距離小于ε值1,則為此盒子的前邊界點(diǎn),而(2.2)樣本點(diǎn)到所屬盒子的后邊界線值2.25的距離小于ε值1,則為此盒子的后邊界點(diǎn)。

劃分過(guò)程如圖6所示,圖6為按照分區(qū)維度對(duì)數(shù)據(jù)集進(jìn)行劃分過(guò)程示意圖。(a)圖按照第一維度生成劃分樹(shù),第一次計(jì)算得到劃分邊界為1+6/2=3.5,所以根節(jié)點(diǎn)的左孩子的盒子的邊界為(1,3.5),右孩子的邊界為(3.5,6),所有樣本點(diǎn)按照邊界分別歸進(jìn)兩個(gè)盒子中。此后兩個(gè)盒子再進(jìn)行劃分,當(dāng)滿足盒子的前后邊界值之差小于兩倍ε或者盒子中樣本數(shù)量小于MinPts,停止分裂。(b)圖是按照第二維度進(jìn)行劃分,劃分出來(lái)的兩個(gè)盒子邊界范圍(3,4),(4,5),第二次劃分因盒子的前后邊界值之差小于兩倍ε,所以停止分裂。

此時(shí)兩個(gè)分區(qū)都得到一個(gè)樹(shù)形結(jié)構(gòu),通過(guò)樹(shù)的先序遍歷可各自得到一個(gè)盒子數(shù)組。因?yàn)樵趧澐謺r(shí)是按等距離進(jìn)行劃分的,所以尋找到盒子數(shù)組劃分樣本點(diǎn)數(shù)量較均勻并且盒子數(shù)組長(zhǎng)度較多的分區(qū),并保留此分區(qū),避免計(jì)算時(shí)數(shù)據(jù)傾斜。

具體可采用如下方法判斷為,首先盒子數(shù)組的長(zhǎng)度為L(zhǎng),每個(gè)分區(qū)的盒子數(shù)組中樣本個(gè)數(shù)最多的盒子為a,盒子a中所有樣本數(shù)有M個(gè),求得數(shù)組平均盒子的樣本數(shù)為N個(gè)和判斷是否平均的標(biāo)準(zhǔn)值P=N/M。再把每個(gè)分區(qū)的L和P標(biāo)準(zhǔn)化,L+P的值最大的分區(qū)就是最優(yōu)的分割分區(qū),保存這一分區(qū),其余分區(qū)均去掉。通過(guò)累加變量可得到各個(gè)分區(qū)的盒子數(shù)組的具體信息,此時(shí)0號(hào)分區(qū)的盒子數(shù)組長(zhǎng)度為4,1號(hào)分區(qū)為2,0號(hào)分區(qū)的樣本數(shù)量最多盒子樣本數(shù)為4,1號(hào)分區(qū)為5,0號(hào)分區(qū)的平均盒子樣本數(shù)為:10/4=2.5,1號(hào)分區(qū)為:10/2=5。標(biāo)準(zhǔn)化后兩個(gè)分區(qū)L+P值分別為1.625和1.5,所以0號(hào)分區(qū)的盒子數(shù)組是最優(yōu)的劃分結(jié)構(gòu),按照0號(hào)分區(qū)進(jìn)行劃分。

計(jì)算鄰居階段,此前得到4個(gè)盒子,每個(gè)盒子內(nèi)部的樣本點(diǎn)需標(biāo)明是當(dāng)前盒子的前邊界點(diǎn)或后邊界點(diǎn)或既是前邊界點(diǎn)又是后邊界點(diǎn)或內(nèi)部點(diǎn)。先把這個(gè)盒子數(shù)組廣播出去,減少計(jì)算時(shí)的計(jì)算開(kāi)銷(xiāo)。然后新建一個(gè)RDD把這個(gè)盒子數(shù)組放進(jìn)去,0號(hào)分區(qū)放0號(hào)盒子,1號(hào)分區(qū)放1號(hào)盒子,依次類推。如圖7所示為廣播的盒子數(shù)組示意圖。

每個(gè)分區(qū)調(diào)取mapPartition()函數(shù)分別與前面廣播的盒子數(shù)組中其對(duì)應(yīng)的盒子及其前后盒子進(jìn)行計(jì)算距離并得到所有樣本鄰居的編號(hào)。1號(hào)分區(qū)的(3,3)樣本與盒子數(shù)組的1號(hào)盒子的(3,3)樣本進(jìn)行計(jì)算歐幾里得距離,1號(hào)分區(qū)的前邊界樣本(3,3)與盒子數(shù)組的0號(hào)盒子的后邊界樣本(2,3)和(2,2)進(jìn)行計(jì)算歐幾里得距離,1號(hào)分區(qū)的后邊界樣本(3,3)與盒子數(shù)組的2號(hào)盒子的前邊界樣本(4,4)和(4,5)進(jìn)行計(jì)算距離并得到該樣本點(diǎn)所有鄰居的編號(hào),保存在樣本點(diǎn)的Point類中,依次類推。每個(gè)分區(qū)的每個(gè)樣本點(diǎn)根據(jù)鄰居數(shù)及對(duì)應(yīng)的距離,得到每個(gè)樣本對(duì)應(yīng)的核心距離。

然后每個(gè)分區(qū)并行執(zhí)行OPTICS算法,得到簇排序。根據(jù)用戶鍵入的判斷結(jié)果值1,可給每個(gè)分區(qū)的點(diǎn)標(biāo)記上分區(qū)簇號(hào),簇號(hào)結(jié)構(gòu)為(分區(qū)號(hào),分區(qū)內(nèi)的簇號(hào)),噪聲則為(-1,-1)。

因1號(hào)分區(qū)的(3,3)樣本的鄰居為(2,3),(3,3)小于MinPts,則為噪聲點(diǎn)。而2號(hào)分區(qū)的樣本(4,4)有(4,4),(4,5),(5,4)為鄰居,則不是噪聲點(diǎn)有簇號(hào)。

最后進(jìn)入求合并map的階段,如圖5,先把不是邊界點(diǎn)的樣本去掉,本例中無(wú)內(nèi)部點(diǎn),所以全部都留下來(lái)。再用collect函數(shù)得到數(shù)組并廣播出去。Map的格式為(分區(qū)號(hào),分區(qū)簇號(hào),噪聲樣本的編號(hào))。如RDD的1號(hào)分區(qū)的前邊界樣本(3,3)和廣播變量的0號(hào)元素的后邊界樣本(2,2)計(jì)算map,因?yàn)?3,3)是噪聲樣本,為了避免噪聲樣本過(guò)多,所以需保留噪聲樣本的編號(hào),而不是噪聲樣本則不需要保留。通過(guò)計(jì)算這些邊界點(diǎn)之間的距離,判斷兩個(gè)分區(qū)的邊界點(diǎn)是否是鄰居。如果是鄰居則加入map中。如0號(hào)分區(qū)和1號(hào)分區(qū)可得到(1,(-1,-1),4))->(0,(0,0),-1),map的方向由后指向前,向前合并簇號(hào),加入到map中。最后可得map為{(1,(-1,-1),4))->(0,(0,0),-1),(3,(3,0),-1)->(2,(2,0),-1)}

最后,每個(gè)分區(qū)都執(zhí)行mapPartition(),每個(gè)樣本根據(jù)合并map可得到最終的簇號(hào),最后整合為一個(gè)分區(qū)后輸出結(jié)果。

我們可根據(jù)上圖數(shù)據(jù)集可劃分成兩個(gè)簇。通過(guò)上述的方法得到的聚類結(jié)果能夠快速將數(shù)據(jù)分類到不同的類或者簇,所以同一個(gè)簇中的對(duì)象有很大的相似性,而不同簇間的對(duì)象有很大的相異性,能夠快速區(qū)分哪些是噪聲,哪些是有價(jià)值的數(shù)據(jù)。例如,此數(shù)據(jù)集如果是用戶在淘寶購(gòu)物的行為數(shù)據(jù),我們可以根據(jù)最后的聚類結(jié)果,把用戶歸結(jié)成兩組購(gòu)物喜好的用戶,比如一組用戶喜好買(mǎi)衣服,可以更多的在用戶購(gòu)物時(shí)推薦衣服,另一組用戶喜好買(mǎi)褲子,則可以更多的在用戶購(gòu)物時(shí)推薦褲子等。我們可以通過(guò)聚類結(jié)果實(shí)際情況挖掘出更多有價(jià)值的信息。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
会宁县| 新闻| 罗源县| 确山县| 微博| 台前县| 赤城县| 九寨沟县| 塔河县| 邳州市| 公安县| 清新县| 临城县| 绥滨县| 蓬溪县| 新竹市| 东港市| 水富县| 天长市| 达州市| 毕节市| 司法| 缙云县| 天镇县| 黎平县| 科技| 深泽县| 兰溪市| 宜城市| 白山市| 虞城县| 宜兰县| 佛冈县| 普洱| 汉阴县| 中卫市| 定边县| 邵阳县| 娱乐| 新疆| 嵊州市|