为什么在normalized_mutual_info_score中“交换参数不会改变分数”?

时间:2018-01-12 13:22:30

标签: python scikit-learn cluster-analysis

我试图通过使用scikit learn's normalized_mutual_info_score() function.来评估归一化互信息(NMI)的集群质量。我理解NMI的数学理论,但对这个函数如何工作有点困惑。

参数是两个数组,包含两个聚类(labels_pred)和分类(labels_true)的标签。我对这两个数组的理解是,标签是有序的,我的意思是,例如if,

labels_pred=[0,0,1,1]然后将文档编号onetwo标记为zero,将thirdfourth标记为one 。现在,如果label_true=[0,0,0,1],则表示文档onetwothree的基本事实分类为zerofourth为{{1} }}。因此分类器错误地分类了第三个文档。我的理解是否正确?

现在,请查看文档,onelabels_true = [0, 0, 0, 1, 1, 1],根据我的理解,群集算法正确预测了3个文档(第一个,第二个和第四个)。不过他们说,

labels_pred = [0, 0, 1, 1, 2, 2]

One can permute 0 and 1 in the predicted labels

因此,如果normalized_mutual_info_score are symmetric: swapping the argument does not change the score ,则只有一个文档被正确标记。据他们说,这种交换不会改变NMI。这是为什么?我的理解有什么问题?

感谢您花时间阅读我的问题。我将非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

不能(并且方法没有)期望一个群集中的“1”与其他群集中的“1”相同。

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

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

例如着名的虹膜数据集。这些类标记为0,1,2,但是iris setosa,iris virginica等。但是,如果你运行k-means,k-means将标记簇0,1,2,因为它没有名字。

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

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