生活随笔
收集整理的這篇文章主要介紹了
一种基于邻域的聚类算法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
基本概念:
給定數(shù)據(jù)集D = {d1,d2 ,..?,dn},p和q是D中的兩個任意對象。我們使用歐氏距離來評估p和q之間的距離,表示為 dist(p,q)。 我們將首先給出k-最近鄰集合和反向的定義k-最近鄰集合。 盡管學(xué)術(shù)中給出了類似的定義, 我們把它們放在這里以方便讀者理解我們的新算法。
下面是算法需要用到的以下定義:
定義1:(kNN) k近鄰p的集合是k(k>0)的集合,由kNN(p)表示,換句話說,kNN(p)是D數(shù)據(jù)集中組成的一個集合對象。 |kNN(p)| = k; 和'分別是的第k和第k+1最近鄰,則 定義2:(反向k近鄰的集合,或者簡稱為R-kNN).p的反向k近鄰集合屬于kNN包含p的集合,命名為R-kNN。 請注意在學(xué)術(shù)中,反向kNN通常是簡稱為RNN,這里使用的是R-kNN而不是RNN,因為每個RNN集合都是在確定的k值基礎(chǔ)上。 kNN(p)和R-kNN(p)采用雙向去探索關(guān)于對象p和它的鄰近集合,一方面,kNN(p)是p自身的鄰近點組成的集合,另一方面,R-kNN(p)表示的鄰近結(jié)合點中包含p的點。這種雙向描述任意的關(guān)系物體及其鄰域給出了更清晰,更準(zhǔn)確的位置圖 在本地和全局的數(shù)據(jù)集中,這取決于k的值,而不僅僅是使用kNN。 在下文中,我們將給出一個定義對象的鄰居。 定義3:(r近鄰,或者簡稱為rNB)。得到一個真實數(shù)字r,p的近鄰集合關(guān)于(其余部分簡稱?w.r.t)r的關(guān)系成為rNM(p),是集合對象位于以p作為圓的中心點,r為半徑的范圍內(nèi)的點。 定義4:(k近鄰,簡稱kNB)。對于D數(shù)據(jù)集中的每個對象p,使得.該p的k近鄰被寫作kNB(p),被定義為r'NB(p), kNB(p) = r'NB(p).我們稱呼kNB(p)作為p的k近鄰kNN(p) 定義3和定義4定義從兩個不同角度定義兩個不同形式的近鄰:rNB(p)是被定義通過使用一個顯性半徑。相反,kNB(p)是被定義通過一個隱性半徑,它是相當(dāng)于被圓的局域給覆蓋通過kNN(p)。很明顯因為可能有多個物體位于鄰域的邊緣(圓) 定義5:(反向k近鄰,簡稱R-kNB)。p是kNB包含p的對象集合,由R-kNB表示,可以寫成 同樣, 在數(shù)據(jù)集中的數(shù)據(jù)點能夠被專業(yè)分類成三類:密集點、稀疏點、均勻點。直觀的說,集群中的點是密集點或均勻點,集群邊上上的點最可能是疏松點。離散點和噪音也是疏松點,目前,大多數(shù)基于密度的聚類算法(eg.DBSCAN)使用使用一種直觀,直接的方法來測量密度,即數(shù)據(jù)對象密度是給定的鄰域中包含的數(shù)據(jù)對象的數(shù)量半徑。顯然,這是一種絕對和全局密度。這樣的密度測量使DBSCAN無法檢測小的、密集的簇 。 來自大而稀疏的星團。本文提出了一種新的測量方法密度:基于鄰域的密度因子 (或簡單的ndf),它將我們的新聚類算法NBC的基礎(chǔ)。 定義6:(基于鄰域的密度因子,或簡稱為NDF)p點的NDF求法如下: 那么NDF的定義是什么呢?讓我們來理解它:|kNB(p)|是數(shù)字p的k-最近鄰域中的對象,是數(shù)字包含在p的k-最近鄰域中的對象。對于大多數(shù)數(shù)據(jù)對象,這個值大約是k(根據(jù)定義4,它可能會更大,但不是小于k)。 | R-KNB(P)|是p反向k近鄰中包含的對象數(shù)鄰域,即將p作為其成員的對象的數(shù)量k-最近的鄰域。對于不同的數(shù)據(jù)點,該值非常不一致。 直觀地,更大的| R-kNB(p)|是,這意味著更多的其他對象將p作為他們k個最近鄰域的成員,即更密集的p 鄰域是,或更大的NDF(p)。在這種情況下,NDF(p)> 1. 對于均勻分布的點,如果q在kNB(p)中,則p最可能在kNB(q)中,因此,kNB(p)≈? R-kNB(p),即NDF(p)≈1。因此,NDF實際上是測量任何數(shù)據(jù)對象的鄰域或數(shù)據(jù)對象的密度相對(非絕對)意義上的局部密度。此外,這樣的測量是直觀(易于理解),簡單(易于實施)和有效(存在能夠找到DBSCAN無法檢測到的一些集群結(jié)構(gòu))。 為了證明NDF作為局部密度測量的能力,我們 舉一個圖1中的例子。圖1(a)是一個包含兩個簇C1、C2的數(shù)據(jù)集, 由圖可看出:C1中的數(shù)據(jù)均勻分布; C2中的數(shù)據(jù)符合高斯分布分配。 圖1(b)顯示了數(shù)據(jù)集中所有數(shù)據(jù)點的NDF值。 如我們可以看到,集群C1內(nèi)的數(shù)據(jù)點大約有NDF值等于1,而位于C1邊界的數(shù)據(jù)點具有較小的NDF值。 對于群集C2,最密集的點靠近C2的質(zhì)心,其具有最大的NDF值,而其他對象的NDF值較小,而且此外,從質(zhì)心定位的點,它們的NDF值越小。使用NDF,在下文中,我們給出了三種類型數(shù)據(jù)的定義局部意義上的點:局部事件點,局部密集點和局部稀疏點。 定義7:(局部密集點,簡稱DP)對象P是局部密集點,如果它的NDF(P)大于1,我們也把p稱為與kNB(p)有關(guān)的密點,NDP(p)越大,p的k鄰域越密集。 定義8:(局部稀疏點,簡稱SP)p是局部稀疏點,如果它的NDF(p) < 1,我們稱p為kNB(p)的局部稀疏點.NDP(q)越小,k近鄰越稀疏。 定義9:(局部平均點,簡稱EP)p是局部平均點,如果它的NDF(p) = 1(或者接近于1),我們稱p為kNB(p)的局部平均點 根據(jù)上面定義的概念,下面我們將介紹基于鄰域的集群的概念。我們的定義遵循dbscan的方式。 定義10:(基于鄰域密度直接可達(dá))從數(shù)據(jù)集D中得到p、q點,滿足一下要求,p是一個基于鄰域直接可達(dá) q是一個DP或者EP 定義11:(領(lǐng)域可達(dá))從數(shù)據(jù)集D中得到p、q點,p是一個領(lǐng)域可達(dá)來自q,如果有對象鏈p1,...,pn,p1=p,pn=q,這樣pi可以從pi+1鄰域可達(dá) 定義12:(基于鄰域緊密連接)從數(shù)據(jù)集D中得到p、q點,p和q是基于鄰域緊密連接,如果q是鄰域可達(dá)來自p,k或者q是鄰域可達(dá)來自p或者第三個對象o這樣p和q都是鄰域可達(dá)來自o 基于以上定義,現(xiàn)在我們能夠定義基于領(lǐng)域聚類的定義 定義13:(基于領(lǐng)域聚類)得到一個數(shù)據(jù)集D,集群C 關(guān)于?k是D的非空子集 集群中的p、q,p和q是鄰域可達(dá) 如果并且q是領(lǐng)域可達(dá)來自p,則 以上定義保證了簇是領(lǐng)域可達(dá)的最大集合對象關(guān)于k
NBC算法:NBC算法由兩部分組成
1.評估NDF值。我們查找kNB和R-kNB來自目標(biāo)集合,然后測量它的NDF。
2.聚類數(shù)據(jù)集。隨機獲取對象p(),如果p是DP或EP,則新建一個新的簇(社團),表示為p的簇,并繼續(xù)找其它的領(lǐng)域可達(dá)的來自p關(guān)于k,涉及到所有對象屬于p集群的所有對象,如果p是一個SP,那么就把它放好暫時擱置,并繼續(xù)檢索下一個要處理的點,這是遞歸操作,直到發(fā)現(xiàn)所有集群,更具體地說,給定一個局部密集點或者平均點來自數(shù)據(jù)庫,首先找到對象直接鄰域可達(dá)來自p關(guān)于k。kNB中一批對象將被移動到p的集群中,然后找到另一個直接鄰域可達(dá)可以從p的簇得到每個DP或EP在p的集群中,直到那里不再有對象可以添加到p的集群中。第二、從剩下的數(shù)據(jù)集中獲取另一個DP或EP已構(gòu)建另一個集群。當(dāng)沒有更過的DP或EP來獲取創(chuàng)建集群,算法終止。不在集群中的點屬于噪聲或者是異常值,下圖有NBC算法的偽代碼。
這里,數(shù)據(jù)集指示聚類的數(shù)據(jù)集,k是NBC中用于評估kNB和R-kNB的唯一輸入?yún)?shù)。 k的值可以由數(shù)據(jù)庫中的專家在一開始或通過實驗來設(shè)置。參數(shù)k的確定將在下一小節(jié)中討論。 DPset保留當(dāng)前處理的群集的DP或EP。 DPset中的對象用于擴展相應(yīng)的集群。將DP或EP的kNB移動到當(dāng)前群集后,將從DPset中刪除它。在那里完全檢測到群集 在DPset中不是對象。當(dāng)NBC算法停止時,clst no屬性為NULL的未分類對象被視為噪聲或異常值。 NBC算法以CalcNDF函數(shù)開始計算kNB, 數(shù)據(jù)集中每個對象的R-kNB和NDF。在傳統(tǒng)的指數(shù)結(jié)構(gòu)中, R * -Tree和X-tree通常用于提高kNB的效率 查詢處理相對較低維度的數(shù)據(jù)集。但是,很少有索引結(jié)構(gòu)在高維數(shù)據(jù)集上有效地工作。為了解決這個問題,我們采用基于單元格的方法來支持kNB查詢處理。 數(shù)據(jù)空間被切割成高維單元格,VA文件[3]用于組織單元格。由于篇幅限制,我們忽略了這里的細(xì)節(jié)。
//偽代碼
void NBC(DataSet, k){for each object p int Dataset{p.clst_no = NULL;//初始化集合中的每個對象}CalcNDF(Dataset, k);//計算NDFNoiseSet.empty();//初始化臟數(shù)據(jù)集合Cluster_count = 0;//初始化社團數(shù)量為0for each object p int Dataset{//掃描整個庫if(p.clst_no != NULL or p.ndf < 1){continue}p.clst_no = cluste_count;//標(biāo)記一個新的社團DPSet.empty();//初始化DPsetfor each object q in kNB(p){//找出與p關(guān)聯(lián)的社團q.clst_no = cluster_count;if(p.ndf >= 1){//ndf > 1加入DPset.add(q);}}while(Dpset != null){//繼續(xù)擴展社團p = DPset.getFirstObject();for each object q int kNB(p){if(q.clst_no != NUll)continue;q.clst_no = cluster_count;if(q.ndf >= 1)DPset.add(q);}DPset.remove(p);}cluster_count++;}for each object p int Dataset{if(p.clst_no == NULL){NoiseSet.add(p);}}}
}
算法分析:
k值的意義?
k值的確定。參數(shù)k粗略地確定了 數(shù)據(jù)庫中最小集群的大小。根據(jù)基于鄰域的聚類概念和NBC算法的過程,找到一個聚類,我們 必須首先找到至少一個其R-kNB大于或等于其kNB的DP或EP(即,NDF的值不小于1)。假設(shè)C是最小的簇w.r.t.數(shù)據(jù)庫D中的k,p是第一個擴展簇C的DP或EP。 kNB(p)中的所有對象自然地分配給C.考慮到p本身,因此C的最小尺寸是k + 1。因此,我們可以使用參數(shù)k來限制要找到的最小簇的大小。 集群是一組數(shù)據(jù)對象,顯示一些相似且獨特的模式。 如果群集的大小太小,則其模式不容易演示。在這種情況下,數(shù)據(jù)表現(xiàn)得更像異常值。在實驗中,我們通常會設(shè)置 從k到10,我們可以在數(shù)據(jù)庫中找到最有意義的聚類。復(fù)雜度?
NBC算法的過程可以分為兩個獨立的部分:計算NDF和發(fā)現(xiàn)簇。最耗時的 計算NDF的工作是評估kNB查詢。讓N成為 d維數(shù)據(jù)集D的大小。將對象映射到適當(dāng)?shù)膯卧裥枰狾(N)時間。對于正確定位的細(xì)胞長度l的值,平均來說,細(xì)胞長度為1 搜索需要3層,每個單元包含k個對象。因此,評估kNB查詢的時間復(fù)合度是O(mN),其中m = k * 5d。對于大 數(shù)據(jù)集,m小于等于?N,它變成O(N)。但是,考慮到m 1,因此CalcNDF的時間復(fù)雜度為O(mN)。發(fā)現(xiàn)集群的遞歸過程需要O(N)。因此,NBC算法的時間復(fù)雜度為O(mN)。
總結(jié)
以上是生活随笔 為你收集整理的一种基于邻域的聚类算法 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。