這是近期science上的一篇關于無監督聚類的文章。本文的作者為Alex Rodriguez 和 Alessandro Laio。以下簡要介紹下算法的主要思想以及算法分析。
算法主要思想:
該算法的兩個重要假設:類簇的中心由一些局部密度比較低的點圍繞, 并且這些點距離其他有高局部密度的點的距離都比較大.
算法的C++實作可以參考這裡:https://github.com/Tonyfy/fastclust
下面是對聚類過程的形象描述
任務:把所有江湖人士放在一起,要找出這裡有幾個幫派,每個人屬于哪個幫派。
假設:真正的幫主被一些“小喽啰”(局部密度低)包圍,知名度高;真正的幫主離其他幫派距離較遠,很獨立——一山無二虎。
按知名度倒序排列,(知道某人的人數越多,他的局部密度越大,知道喬峰的人最多,喬峰密度最大)。越靠前的人,成為幫主的可能性越大。
假設知名度如下:丐幫喬峰>虛竹>慕容複>丐幫二把手>少林方丈...>小喽啰...
在從前往後,考察每個“幫主”與比他知名度高(局部密度更大)的"幫主"的距離。取其中最小的距離作為這個“幫主”的距離值,距離值表示了該人是否遠離其他幫派,稱為獨立指數。
比如丐幫二把手的知名度也高,但度量距離時,二把手的距離值很顯然會等于他與喬峰的距離(喬峰成為他的鄰居),這個值很小。那麼二把手緊緊與喬峰聯系在一起。
按知名度繼續判别,對慕容複,可以看出他的局部密度大,距離值也較大(并沒有和喬峰等人走得近)。但是他還是會有一個鄰居,假設d(虛竹,慕容複)<d(喬峰,慕容複),那麼慕容複的距離值是d(虛竹,慕容複),鄰居是虛竹。
...依此方案可以知道每個人的知名度和獨立指數,對于知名度和獨立指數都大的人,我們判斷其為幫主。同時,我們也知道了每個人的鄰居(喬峰除外,他沒有鄰居)。
我們判斷到有以下幫主:喬峰 虛竹 慕容複 少林方丈...
那麼上述幫主自稱一類,再次按照知名度由高到低,對每個非幫主進行歸類(屬于他鄰居所在的類别),先是丐幫二把手,他的鄰居是喬峰,他屬于喬峰一類。
對于其後的小喽啰,如逍遙派的領地内的一個山大王,他的知名度一般,獨立指數也不高(鄰居是虛竹)。若他沒有能夠被分為幫主,則他屬于虛竹一類。
對于一個更小的幫派,住在遙遠的東瀛,他們離其他幫派很遠,獨立指數很高,但是知名度可以很低(隻被東瀛人所知曉)。但他們也會有個鄰居,假設是少林方丈,若東瀛幫沒被認可,他們會歸入少林寺。資料集變化時,如江湖中混入了峨嵋派,碰巧d(周芷若,東瀛武士A)<d(少林方丈,東瀛武士A)。鄰居改變,則東瀛幫隸屬峨嵋派。