2017-01-05 37 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,依此类推。