我试图通过使用scikit learn's normalized_mutual_info_score() function.来评估归一化互信息(NMI)的集群质量。我理解NMI的数学理论,但对这个函数如何工作有点困惑。
参数是两个数组,包含两个聚类(labels_pred
)和分类(labels_true
)的标签。我对这两个数组的理解是,标签是有序的,我的意思是,例如if,
labels_pred=[0,0,1,1]
然后将文档编号one
和two
标记为zero
,将third
和fourth
标记为one
。现在,如果label_true=[0,0,0,1]
,则表示文档one
,two
和three
的基本事实分类为zero
,fourth
为{{1} }}。因此分类器错误地分类了第三个文档。我的理解是否正确?
现在,请查看文档,one
和labels_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。这是为什么?我的理解有什么问题?
感谢您花时间阅读我的问题。我将非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
你不能(并且方法没有)期望一个群集中的“1”与其他群集中的“1”相同。
每个标签都与其他标签进行比较。因此,重命名标签不会影响结果。
事实上,标签甚至来自不同的领域也很常见。一旦你走出“一切都是一个数字”框,标签是很常见的,例如文本。
例如着名的虹膜数据集。这些类不标记为0,1,2,但是iris setosa,iris virginica等。但是,如果你运行k-means,k-means将标记簇0,1,2,因为它没有名字。
因此,任何群集评估指标必须能够匹配不同的标签(通常,将每个标签与每个其他标签进行比较,匹配所有对)。
“交换参数”然而指的是不同的东西:你也可以交换labels_pred和labels_true,结果不会改变。没有假设哪个论证是“正确的”。这些度量只是衡量从标签获得的分区的相似程度。