【发布时间】:2019-06-03 06:02:27
【问题描述】:
在用scikit's implementation 计算ARI 时,我注意到一个奇怪的情况。对于在标签中看起来似乎有高度共识的某些列表,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类)。
我的问题是:我对“好”标签的理解是完全错误的,还是算法可能存在某种错误甚至未记录的输入限制?
【问题讨论】:
-
我可以验证我系统上的行为,并在sklearn's GitHub 上打开了一个错误报告。我认为这是一个错误。我们会看看他们怎么说。
-
另外,我使用 sklearn 0.19.1 进行了验证。不确定您使用的是什么版本。
-
感谢您打开这个问题。我认为对于其中一个列表中仅存在一个标签的情况可能存在某种错误。如果您在两个列表的末尾添加 2,您会神奇地得到大约 0.633 的 ARI。我使用的是 0.20.1 版
-
如果我按照the wiki def 手动计算上述示例的 RI(无调整),我得到 0.90909090。 但是如果我使用列联表计算 ARI 公式的分子,它实际上是零。我什至会声称,只要一个标签只包含一个类别,它就始终为 0。如果该声明属实,则意味着公式中定义的 ARI 对于只有一个类别且没有噪声的实验毫无用处。
标签: python scikit-learn cluster-analysis scikits