Science上發表的超讚聚類演算法
作者(Alex Rodriguez, Alessandro Laio)提出了一種很簡潔優美的聚類演算法, 可以識別各種形狀的類簇, 並且其超引數很容易確定.
演算法思想
該演算法的假設是類簇的中心由一些區域性密度比較低的點圍繞, 並且這些點距離其他有高區域性密度的點的距離都比較大. 首先定義兩個值: 區域性密度ρi以及到高區域性密度點的距離δi:
ρi=∑jχ(dij−dc)
其中
χ(x)={10ifx<0otherwise,
dc是一個截斷距離,
是一個超引數. 所以ρi相當於距離點i的距離小於dc的點的個數.
由於該演算法只對ρi的相對值敏感,
所以對dc的選擇比較魯棒,
一種推薦做法是選擇d
δi=minj:ρj>ρi(dij)
對於密度最大的點, 設定δi=maxj(dij). 注意只有那些密度是區域性或者全域性最大的點才會有遠大於正常的相鄰點間距.
聚類過程
那些有著比較大的區域性密度ρi和很大的δi的點被認為是類簇的中心. 區域性密度較小但是δi較大的點是異常點.在確定了類簇中心之後, 所有其他點屬於距離其最近的類簇中心所代表的類簇(我愛機器學習批註:原文是"assigned to the same cluster as its nearest neighbor of higher density",比它的密度更大的最近鄰的類別。感謝鄧公@djvu9和各位留言的同學指出錯誤)
左圖是所有點在二維空間的分佈, 右圖是以ρ為橫座標,
以δ為縱座標,
這種圖稱作決策圖(decision tree). 可以看到, 1和10兩個點的ρi和δi都比較大,
作為類簇的中心點. 26, 27, 28三個點的δi也比較大,
但是ρi較小,
所以是異常點.
聚類分析
在聚類分析中, 通常需要確定每個點劃分給某個類簇的可靠性. 在該演算法中, 可以首先為每個類簇定義一個邊界區域(border region), 亦即劃分給該類簇但是距離其他類簇的點的距離小於dc的點.
然後為每個類簇找到其邊界區域的區域性密度最大的點, 令其區域性密度為ρh.
該類簇中所有區域性密度大於ρ
A圖為生成資料的概率分佈, B, C二圖為分別從該分佈中生成了4000, 1000個點. D, E分別是B, C兩組資料的決策圖(decision tree), 可以看到兩組資料都只有五個點有比較大的ρi和很大的δi. 這些點作為類簇的中心, 在確定了類簇的中心之後, 每個點被劃分到各個類簇(彩色點), 或者是劃分到類簇光暈(黑色點). F圖展示的是隨著抽樣點數量的增多, 聚類的錯誤率在逐漸下降, 說明該演算法是魯棒的.
最後展示一下該演算法在各種資料分佈上的聚類效果, 非常贊.
參考文獻:
[1]. Clustering by fast search and find of density peak. Alex Rodriguez, Alessandro Laio