计算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 类)。
我的问题是:我对“好”标签的理解是否完全错误,或者算法是否可能存在某种错误,甚至未记录的输入限制?
最佳答案
不,又是。
否:实现似乎是正确的,是的:您的理解有缺陷。
调整后的 rand 索引将给定结果与标签的任意随机排列进行比较。 只有比随机结果更好的结果才是好的结果。
现在,如果您查看日期,任何随机排列都将完全相同。因此,正确的调整值为 0:与随机排列一样好。
不过,我确实同意您的评估,即 ARI 不能用于一类问题。因为对于这样的数据,所有排列都是相等的。针对您的问题使用了错误的工具:它是关于比较数据集的分区,并且您没有分区数据......
关于python - scikits ARI 实现中是否存在错误,或者我对算法的理解是否有缺陷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54093596/