NMI计算

介绍:

  • NMI(Normalized Mutual Information), 标准化互信息。常用于聚类,度量 聚类结果数据集真实情况 的相似度。
  • NMI的值∈[0, 1]。值越大,说明聚类结果与数据集真实情况的相似度越大,聚类结果越好。如果算法结果很差则NMI值接近0。

举例:假设对于17个样本点 ( v 1 , v 2 , . . . , v 17 ) (v1,v2,...,v17) (v1,v2,...,v17)进行聚类:
A=[1 2 1 1 1 1 1 2 2 2 2 3 1 1 3 3 3] # A 为某一种算法得到聚类结果,其中:len(A)=17、unique(A)=[1 2 3]
B=[1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3] # B 为样本真实的标签,其中:len(B)=17、unique(B)=[1 2 3]

标准化互信息: N M I ( X , Y ) = 2 M I ( X , Y ) H ( X ) + H ( Y ) NMI(X,Y)=\frac{2MI(X,Y)}{H(X)+H(Y)} NMI(X,Y)=H(X)+H(Y)2MI(X,Y)
其中: M I ( X , Y ) = ∑ i = 1 ∣ X ∣ ∑ j = 1 ∣ Y ∣ P ( i , j ) l o g ( P ( i , j ) P ( i ) P ′ ( j ) ) MI(X,Y)=\sum_{i=1}^{|X|}\sum_{j=1}^{|Y|}P(i,j)log(\frac{P(i,j)}{P(i)P'(j)}) MI(X,Y)=i=1Xj=1YP(i,j)log(P(i)P(j)P(i,j))

H ( X ) = − ∑ i = 1 ∣ X ∣ P ( i ) l o g ( P ( i ) ) ; H ( Y ) = − ∑ i = 1 ∣ Y ∣ P ′ ( j ) l o g ( P ′ ( j ) ) H(X)=-\sum_{i=1}^{|X|}P(i)log(P(i)) ; H(Y)=-\sum_{i=1}^{|Y|}P'(j)log(P'(j)) H(X)=i=1XP(i)log(P(i));H(Y)=

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
NMI(Normalized Mutual Information)是一种用于评估聚类结果的指标,它可以衡量聚类结果与真实标签之间的相似度。计算NMI的函数如下: ```python import numpy as np def nmi(labels_true, labels_pred): """ 计算 NMI(Normalized Mutual Information)指标 :param labels_true: 真实标签 :param labels_pred: 预测标签 :return: NMI指标值 """ n = len(labels_true) classes = np.unique(labels_true) # 真实标签的类别数 clusters = np.unique(labels_pred) # 预测标签的类别数 class_size = np.zeros(len(classes)) # 每个类别的样本数 cluster_size = np.zeros(len(clusters)) # 每个聚类的样本数 class_cluster = np.zeros((len(classes), len(clusters))) # 每个类别和聚类的交集数量 for i in range(n): class_idx = np.argwhere(classes == labels_true[i])[0][0] # 真实标签的类别索引 cluster_idx = np.argwhere(clusters == labels_pred[i])[0][0] # 预测标签的聚类索引 class_size[class_idx] += 1 cluster_size[cluster_idx] += 1 class_cluster[class_idx, cluster_idx] += 1 mi = 0.0 eps = np.finfo(float).eps for i in range(len(classes)): for j in range(len(clusters)): if class_cluster[i, j] != 0: mi += (class_cluster[i, j] / n) * np.log((n * class_cluster[i, j] + eps) / (class_size[i] * cluster_size[j])) h_true = -np.sum((class_size / n) * np.log(class_size / n + eps)) h_pred = -np.sum((cluster_size / n) * np.log(cluster_size / n + eps)) denominator = np.sqrt(h_true * h_pred) nmi = mi / denominator return nmi ``` 其中,`labels_true`是真实的标签,`labels_pred`是聚类算法预测出的标签;`classes`和`clusters`分别表示真实标签和预测标签中的类别数;`class_size`和`cluster_size`分别表示每个类别和聚类中的样本数量;`class_cluster`表示每个类别和聚类的交集数量。最后,根据公式计算NMI指标值并返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值