Python 为什么;交换参数不会改变分数;在标准化的相互信息评分中?

Python 为什么;交换参数不会改变分数;在标准化的相互信息评分中?,python,scikit-learn,cluster-analysis,Python,Scikit Learn,Cluster Analysis,我试图用归一化互信息(NMI)来评估簇质量,我理解NMI的数学理论,但对这个函数的工作原理有点困惑 参数是两个数组,包含两个集群的标签(labels\u pred)和分类(labels\u true)。我对这两个数组的理解是,标签是有序的,我的意思是,例如 标签\u pred=[0,0,1,1]然后文档编号1和2被标记为0,3和4被标记为1。现在如果label\u true=[0,0,0,1],这意味着文档one,two和two是zero,而第四是one。因此分类器对第三个文档进行了错误分类。我

我试图用归一化互信息(NMI)来评估簇质量,我理解NMI的数学理论,但对这个函数的工作原理有点困惑

参数是两个数组,包含两个集群的标签(
labels\u pred
)和分类(
labels\u true
)。我对这两个数组的理解是,标签是有序的,我的意思是,例如

标签\u pred=[0,0,1,1]
然后文档编号
1
2
被标记为
0
3和
4
被标记为
1
。现在如果
label\u true=[0,0,0,1]
,这意味着文档
one
two
two
zero
,而
第四
one
。因此分类器对第三个文档进行了错误分类。我的理解正确吗

现在,看看文档,其中
labels\u true=[0,0,0,1,1,1]
labels\u pred=[0,0,1,1,2,2]
,因此根据我的理解,集群算法正确预测了3个文档(第一、第二和第四个)。不管他们怎么说,

可以在预测的标签中排列0和1

normalized_mutual_info_score are symmetric: swapping the argument does not change the score
因此,如果
标签\u pred=[1,1,0,0,2,2]
,则只有一个文档正确地标记。根据他们的说法,这种交换不会改变NMI。为什么呢?我的理解有什么错

谢谢你宝贵的时间阅读我的问题。我将非常感谢任何帮助,谢谢

您不能(而且这些方法也不能)期望一个集群中的“1”与另一个集群中的“1”相同

每个标签都会与其他标签进行比较。因此,重命名标签不会影响结果

事实上,标签甚至来自不同的域是很常见的。一旦您跳出“一切都是数字”框,标签是非常常见的,例如文本

例如著名的虹膜数据集。类的标签不是0,1,2,而是iris setosa、iris virginica等。但是,如果运行k-means,k-means会将集群标记为0,1,2,因为它没有名称

因此,任何集群评估度量都必须能够匹配不同的标签(通常,将每个标签与其他标签进行比较,匹配所有对)

然而,“交换参数”指的是不同的东西:你也可以交换标签pred和标签true,结果不会改变。没有假设哪一个论点是“正确的”。这些度量只是度量从标签中得到的分区的相似程度