我在python中使用sklearn中的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 :(得分:0)
群集通常不会分配相同的标签。
因为标签本身无意义。唯一有价值的信息是什么对象在一起。
至于sklearn,如果您使用旧版本,它将(不必要地)随机地随机播放数据。因此,对标签进行随机排列并不奇怪。
通常,如果您需要稳定的标签,那么您做错了!
Butif你真的知道你需要它,实现一个简单的逻辑:按最小的对象对簇进行排序,并相应地重新标记它们。即第一个对象簇是簇0.第二个对象簇(除非它是相同的)是cluater 1,依此类推。
答案 1 :(得分:0)
您可以使用自定义功能来规范集群标签。
def normalize_cluster_labels(labels):
min_value = min(labels)
if (min_value < 0):
labels = labels + abs(min(labels)) # normalize indexes
#idx = clustering.labels_ - min(clustering.labels_ )
return labels