2017-01-05 36 views
0

我使用python中的sklearn中的DBSCAN來聚集一些數據點。我正在使用預先計算的距離矩陣對點進行聚類。DBSCAN中變化的羣集標籤

import sklearn.cluster as cl 
C = cl.DBSCAN(eps = 2, metric = 'precomputed', min_samples =2) 
db = C.fit(Dist_Matrix) 

Dist_Matrix是我使用的預先計算的距離矩陣。每次運行我的代碼時,我都會獲取數據點的不同集羣標籤。集羣的數量也不同 一樣,在第一次運行時,標籤是

[ 2 3 3 0 3 0 2 2 2 4 2 -1 0 0 0 1 4 0 1 0 1 3 0 3 0 
0 1 -1 0 3 1 3 0 0 2 0 2 0 -1 0 0 3 0 0 0 1 0 1 0 0] 

在另一個運行,它就像

[ 0 2 2 1 2 1 0 0 0 3 0 -1 1 1 1 0 3 1 0 1 0 2 1 2 1 
1 0 -1 1 2 0 2 1 1 0 1 0 1 -1 1 1 2 1 1 1 0 1 0 1 1] 

我怎樣才能解決這個問題?請幫忙

+0

'min_samples = 2'太小。你正在做單鏈接,而不是DBSCAN! –

回答

0

集羣將通常不分配相同的標籤。

因爲標籤本身是無意義的。唯一有價值的信息是對象在一起

至於sklearn,如果您使用舊版本,它將(不必要地)隨機洗牌數據。所以你得到一個隨機的標籤排列並不奇怪。

通常,如果你需要穩定的標籤,你做錯了什麼!

Butif你真的知道你需要那個,實現一個簡單的邏輯:按照它們最小的對象對簇進行排序,並相應地重新標記它們。即第一個對象簇是簇0.第二個對象簇(除非它是相同的)是cluater 1,依此類推。