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

时间:2019-01-08 14:09:37

标签: python scikit-learn cluster-analysis scikits

ARI计算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,这表明两个列表完全是随机标签。纵观它们,一个人会说这是一个很好的标签,除了一个列表条目,它是0类而不是1类的标签。这甚至是一个现实的聚类结果,例如,如果其中只有一个聚类一小块没有噪声的数据集,并且一个点被错误地分类为错误(0类)。

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

1 个答案:

答案 0 :(得分:3)

不,是。

否:实现似乎正确,是:您的理解存在缺陷。

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

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

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