ROCK 聚類算法?

jopen 9年前發布 | 18K 次閱讀 算法? 算法

原文  http://www.cnblogs.com/1zhk/p/4539645.html

ROCK (RObust Clustering using linKs)聚類算法?是一種魯棒的用于分類屬性的聚類算法。該算法屬于凝聚型的層次聚類算法。之所以魯棒是因為在確認兩對象(樣本點/簇)之間的關系時 考慮了他們共同的鄰居(相似樣本點)的數量,在算法中被叫做鏈接(Link)的概念。而一些聚類算法只關注對象之間的相似度。

ROCK算法中用到的四個關鍵概念

  1. 鄰居(Neighbors):如果兩個樣本點的相似度達到了閾值(θ),這兩個樣本點就是鄰居。閾值(θ)有用戶指定,相似度也是通過用戶指定的相似度函數計算。常用的分類屬性的相似度計算方法有: Jaccard   系數 ,余弦相似度。
  2. 鏈接(Links):兩個對象的共同鄰居數量
  3. 目標函數(Criterion Function):最大化下面目標函數以獲得最優的聚類結果(最終簇之間的鏈接總數最小,而簇內的鏈接總數最大)。C i :第i個簇,k:簇的個數,n i :C i 的大小(樣本點的數量)。一般可使用f (θ) = (1-θ)/(1+θ). f(θ)一般具有以下性質:C i 中的每個樣本點在C i 中有n i f(θ) 個鄰居。(具體請見參考文獻2)

ROCK 聚類算法?

4. 相似性的度量(Goodness Measure):使用該公式計算所有對象的兩兩相似度,將相似性最高的兩個對象合并。通過該相似性度量不斷的凝聚對象至k個簇,最終計算上面目標函數值必然是最大的。

ROCK 聚類算法? ,link[C i ,C j ]= ROCK 聚類算法?

大概算法思路(偽代碼請見參考文獻2):

輸入:需要聚類的個數-k,和相似度閾值-θ

算法:

開始每個點都是單獨的聚類,根據計算點與點間的相似度,生成相似度矩陣。

根據相似度矩陣和相似度閾值-θ,計算鄰居矩陣-A。如果兩點相似度>=θ,取值1(鄰居),否則取值0.

計算鏈接矩陣-L=A x A

計算相似性的度量(Goodness Measure),將相似性最高的兩個對象合并。回到第2步進行迭代直到形成k個聚類或聚類的數量不在發生變換。

輸出:

簇和異常值(不一定存在)

ROCK in R - cba 包:

load('country.RData')
d<-dist(countries[,-1])
x<-as.matrix(d)
library(cba)
rc <- rockCluster(x, n=4, theta=0.2, debug=TRUE) rc$cl

參考文獻:

【1】http://www.enggjournals.com/ijcse/doc/IJCSE12-04-05-248.pdf

【2】http://www.cis.upenn.edu/~sudipto/mypapers/categorical.pdf

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!