Canopy聚類(lèi)是一種非常簡(jiǎn)單、快速、準(zhǔn)確地把對(duì)象劃分成聚類(lèi)的方法。所有的對(duì)象都用多維特征空間中的一個(gè)點(diǎn)表示,此算法使用一種快速近似度量法,其兩個(gè)距離閾值為T(mén)1>T2。
算法的基本思想是一開(kāi)始有一個(gè)點(diǎn)集,先從其中選取一個(gè)點(diǎn),并把此點(diǎn)移除此點(diǎn)集,接著創(chuàng)建一個(gè)包含此點(diǎn)的Canopy并對(duì)點(diǎn)集中剩余的點(diǎn)進(jìn)行迭代,對(duì)于每一點(diǎn),如果它與第一個(gè)點(diǎn)的距離小于T1,就把它添加到此Canopy中;如果它與第一個(gè)點(diǎn)的距離小于T2,先把此添加到Canopy中并把它從點(diǎn)集中刪除。這種方式避免了對(duì)那些距中心點(diǎn)距離小于T2的點(diǎn)做進(jìn)一步的處理。此算法不斷地迭代直到初始點(diǎn)集為空為止,最終的結(jié)果是產(chǎn)生了一個(gè)Canopy的集合,每一個(gè)Canopy都包含了一個(gè)或多個(gè)點(diǎn),每個(gè)點(diǎn)都可能出現(xiàn)在一個(gè)或多個(gè)Canopy中。Canopy集群經(jīng)常用做更加嚴(yán)格的聚類(lèi)技術(shù)(如k-Means聚類(lèi))的初始階段。1)并行策略● 把數(shù)據(jù)轉(zhuǎn)換為恰當(dāng)?shù)妮斎敫袷健?/p>● 每個(gè)mapper對(duì)輸入集中的點(diǎn)執(zhí)行Canopy聚類(lèi),并輸出Canopy的中心。● reducer收集Canopy的中心,然后計(jì)算產(chǎn)生最終的Canopy中心。● 最后,將各個(gè)點(diǎn)劃分到最終的Canopy中。2)設(shè)計(jì)實(shí)現(xiàn)此實(shí)現(xiàn)把包含多維點(diǎn)的序列文件作為Hadoop輸入,點(diǎn)可用密集型矢量來(lái)表示,也可以用稀疏型矢量來(lái)表示。處理過(guò)程分為兩個(gè)階段,即Canopy生成階段和聚類(lèi)階段(可選)。(1)Canopy生成階段在Map階段,每個(gè)mapper處理一個(gè)點(diǎn)的子集,并且使用已選的距離度量和閾值來(lái)產(chǎn)生Canopy。mapper根據(jù)已知的距離度量和閾值把各個(gè)點(diǎn)添加到Canopy中,接著產(chǎn)生此Canopy的中心即為輸出,reducer收集所有的初始中心,然后再次應(yīng)用距離度量和閾值來(lái)產(chǎn)生最終的Canopy中心的集合即為輸出。reducer的輸出格式為SequenceFile(Text,Canopy),關(guān)鍵字是Canopy標(biāo)識(shí)符。(2)聚類(lèi)階段在聚類(lèi)階段中,每一個(gè)mapper都讀取由第一階段產(chǎn)生的Canopy作為輸入,因?yàn)樗械膍apper都由相同的Canopy定義,它們的輸出都在shuffle階段會(huì)產(chǎn)生合并,這樣每一個(gè)reducer都會(huì)看到所有的點(diǎn)屬于一個(gè)或多個(gè)Canopy。輸出是SequenceFile(IntWritable, WeightedVectorWritable),關(guān)鍵字是CanopyId。WeightedVectorWritable有兩個(gè)段,即一個(gè)double型的weight和一個(gè)VectorWritable的矢量,其表示了一個(gè)矢量屬于一個(gè)給定Canopy的可能性。近年來(lái),嵌入式系統(tǒng)的廣泛應(yīng)用已經(jīng)深刻改變了我們的生活方式。從智能手機(jī)到智能家居,從汽車(chē)到醫(yī)療設(shè)備,嵌入式技術(shù)已經(jīng)成為現(xiàn)代社會(huì)不可或缺的...詳情>>
2023-12-12 11:02:35在當(dāng)今的科技世界中,嵌入式系統(tǒng)已經(jīng)滲透到我們生活的方方面面,從智能手機(jī)、電視、汽車(chē)到醫(yī)療設(shè)備等。而在這些設(shè)備中,Linux網(wǎng)絡(luò)編程扮演著至...詳情>>
2023-12-12 09:55:55在數(shù)字化世界中,游戲已經(jīng)成為了人們休閑娛樂(lè)的重要方式之一。隨著科技的不斷進(jìn)步,游戲開(kāi)發(fā)行業(yè)也在不斷發(fā)展,而Java作為一門(mén)廣泛使用的編程語(yǔ)...詳情>>
2023-12-12 08:49:15在數(shù)字化的時(shí)代,網(wǎng)頁(yè)設(shè)計(jì)已經(jīng)成為了一個(gè)重要的領(lǐng)域。而在這個(gè)領(lǐng)域中,HTML(HyperTextMarkupLanguage)無(wú)疑是最基礎(chǔ)、最重要的一環(huán)。它是構(gòu)建...詳情>>
2023-12-12 08:15:55嵌入式系統(tǒng)開(kāi)發(fā)中,內(nèi)存分配是一個(gè)至關(guān)重要的話題。嵌入式系統(tǒng)通常具有有限的內(nèi)存資源,因此合理的內(nèi)存分配方式對(duì)系統(tǒng)的性能和穩(wěn)定性至關(guān)重要。...詳情>>
2023-12-12 06:35:55