scikits ARI 实现中是否存在错误,或者我对算法的理解有缺陷?

Is there a bug in scikits ARI implementation or is my understanding of the algorithm flawed?

在计算ARI with scikit's implementation时,我注意到一个奇怪的情况。对于某些看起来好像在标签上有高度共识的列表,ARI 仍然是 0.0 甚至更糟。

我试过几种标签,下面是最奇怪的一种:

from sklearn import metrics as m

labels_true = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
labels_pred = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1]

res = m.adjusted_rand_score(labels_true,labels_pred)

>>> res = 0.0 

结果为0.0,表明这两个列表是完全随机标记的。看着它们,直觉上人们会说这是一个很好的标签,除了一个列表条目,它是 class 0 而不是 class 1 的标签。这甚至是一个现实的聚类结果,因为例如,如果在一个没有噪声的小数据集中只有一个簇,并且有一个点被错误地 class 确定为错误 (class 0)。

我的问题是:我对 'good' 标签的理解是完全错误的,还是算法可能存在某种错误或什至未记录的输入限制?

否,是。

否:执行似乎是正确的,是的:您的理解有问题。

adjusted rand 索引将给定结果与标签的任意随机排列进行比较。 只有比随机结果更好的结果才是好的。

现在,如果您查看日期,任何随机排列都一样好。因此正确的调整值为 0:与随机排列完全一样。

不过,我同意您的评估,即 ARI 不能用于一个 class 问题。因为在这样的数据上,所有排列都是相等的。针对您的问题的错误工具:它是关于比较数据集的分区,而您没有分区数据...