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

标签 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 类)。

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

最佳答案

不,又是。

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

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

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

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

关于python - scikits ARI 实现中是否存在错误,或者我对算法的理解是否有缺陷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54093596/

相关文章:

python - 如何覆盖我的模板而不是 django 管理面板来重置密码?

python - 如何通过python读取apache beam(数据流)中的JSON文件?

python - 值错误: setting an array element with a sequence while using scale

python - 导入整个 python 模块不允许使用子模块

python - 绘制聚类矩阵

python - 在Python编程中使用numpy和nltk或CLUTO对单词进行聚类

python - 什么是 matplotlib 的良好收敛色图

python - 如何用python reshape caffe中的图层?

machine-learning - 使用分类数据和文本数据作为输入的机器学习分类

java - K-means 中的总距离总和必须始终递减吗?