You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于scikit-learn normalized_mutual_info_score对称性及标签理解的疑问

关于scikit-learn中normalized_mutual_info_score()的疑问解答

第一个问题:对标签数组顺序的理解是否正确?

嘿,你的这个理解完全正确!labels_pred和labels_true两个数组的索引是严格对应的——数组中第i个位置的元素,就对应第i个样本的预测聚类标签和真实分类标签。

比如你举的例子:

  • labels_pred=[0,0,1,1]表示第1、2个样本被聚类到编号为0的组,第3、4个样本被聚类到编号为1的组;
  • labels_true=[0,0,0,1]表示第1、2、3个样本的真实类别是0,第4个是1,确实是第3个样本被聚类算法误分到了错误的组里。

第二个问题:为什么标签置换或交换参数不改变得分?

你在这里的误区,是把normalized_mutual_info_score()当成了逐个样本的标签匹配指标(比如准确率),但实际上它衡量的是两个分组结构的相似性,核心看的是“哪些样本被归为一组”,而不是“这个组的编号是什么”。

核心原因:NMI基于类别间的互信息,而非单个标签匹配

归一化互信息(NMI)的计算,是基于两个标签集合的联合概率分布——它关注的是“真实类别中的组和聚类预测的组之间的重叠程度”,而不是每个样本的标签数字是否完全一致。

拿你给出的文档例子来说:

  • 真实标签labels_true = [0, 0, 0, 1, 1, 1]对应的分组是:组0包含样本{0,1,2},组1包含样本{3,4,5};
  • 原预测标签labels_pred = [0, 0, 1, 1, 2, 2]对应的分组是:组0包含{0,1},组1包含{2,3},组2包含{4,5};
  • 置换后的预测标签labels_pred = [1, 1, 0, 0, 2, 2]对应的分组是:组1包含{0,1},组0包含{2,3},组2包含{4,5}。

你会发现,这两个预测的分组结构完全一致——只是组的编号换了而已!对于NMI来说,组的编号只是一个无关紧要的标识,它只关心“哪些样本被放在一起”,所以这两种情况和真实标签的互信息是完全相同的,归一化后的得分自然不变。

关于对称性:交换labels_true和labels_pred得分不变

这同样是因为互信息本身具有对称性——“真实类别对聚类结果的互信息”和“聚类结果对真实类别的互信息”是相等的,归一化之后的NMI自然也保持对称性。这也体现了NMI的特性:它衡量的是两个分组系统的相似程度,不管哪个是“真实”哪个是“预测”。

总结你的误区

你之前错误地用“逐个样本标签是否匹配”来判断NMI的得分,但NMI本质是结构相似度指标:它不关心分组的编号,只关心样本的分组方式是否和真实类别相似。这也是聚类评估指标的常见特性——因为聚类的标签本身就是无意义的编号,重要的是分组的逻辑。

内容的提问来源于stack exchange,提问作者sovon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:57:28