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

如何针对不同格式标签使用归一化互信息(NMI)评估聚类效果?

用归一化互信息(NMI)评估不同类型标签的聚类结果

嘿,这个问题我太熟了!其实你完全不用纠结标签的类型——不管是字符型的原始标签(比如你的"a"/"b"/"c"),还是数值型的聚类输出标签(比如你的1/2/3),NMI的计算根本不挑这个,只要它们都是代表样本分组的分类变量,直接用工具算就行。

核心原理

NMI的本质是衡量两个分组体系之间的信息重叠程度,它只关心每个样本属于哪个组,不关心组的命名(是叫"a"还是1,对结果没影响)。所有靠谱的NMI计算工具都会自动把不同类型的标签转换成统一的分类编码,不用你手动折腾。

实操示例(用R实现)

我用你给出的标签数据来演示,推荐用aricode包——它的NMI函数简单直接,自动处理不同类型的标签:

  1. 先安装并加载包(如果还没装的话):
install.packages("aricode")
library(aricode)
  1. 定义你的标签向量:
# 原始字符型真实标签
true_labels <- c(rep("a",7), rep("b",8), rep("c",5))
# 层次聚类得到的数值型标签
cluster_labels <- c(1,1,1,1,2,3,2,2,2,2,2,2,1,3,3,1,2,3,3,3)
  1. 直接计算NMI:
nmi_score <- NMI(true_labels, cluster_labels)
print(nmi_score)

运行后你会得到一个0到1之间的数值,越接近1说明你的聚类结果和原始标签的一致性越高。

额外说明

  • 如果你想用其他包,比如entropy或者mclust,原理也是一样的:先把标签转成因子(as.factor()),再计算互信息并归一化。不过aricode的NMI函数已经帮你做了这一步,最省心。
  • 不用担心标签的顺序问题,比如你的聚类标签里1对应的可能是原始标签的"b",NMI会自动匹配最优的组对应关系,不会因为组名不同影响结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:38:39