若某个算法得到分类为:A = [1 1 1 1, 2 2 2 2 2 , 3 3 3 3 3, 4 4 4],而真实的分类结果为 B = [1 2 4 1, 1 2 3 2 2, 1 2 4 3 3, 4 4 2],编写程序求NMI值;
时间: 2024-06-05 11:10:22 浏览: 10
首先,计算 A 和 B 的熵:
$H(A) = -(\frac{4}{14}log_2\frac{4}{14} + \frac{5}{14}log_2\frac{5}{14} + \frac{5}{14}log_2\frac{5}{14} + \frac{3}{14}log_2\frac{3}{14}) ≈ 1.846$
$H(B) = -(\frac{4}{14}log_2\frac{4}{14} + \frac{5}{14}log_2\frac{5}{14} + \frac{5}{14}log_2\frac{5}{14} + \frac{3}{14}log_2\frac{3}{14}) ≈ 1.846$
接着,计算 A 和 B 的互信息:
$I(A,B) = \sum_{i=1}^{4}\sum_{j=1}^{4}\frac{m_{ij}}{N} log_2 \frac{N m_{ij}}{n_i n_j} $
其中,$m_{ij}$ 表示 A 中第 i 类和 B 中第 j 类同时出现的样本数,$n_i$ 表示 A 中第 i 类的样本数,$n_j$ 表示 B 中第 j 类的样本数,$N$ 表示样本总数,即 $N=14$。
计算得到 $I(A,B) ≈ 0.661$。
最后,计算 NMI 值:
$NMI = \frac{I(A,B)}{\sqrt{H(A)H(B)}} ≈ 0.384$
因此,该算法的 NMI 值为约 0.384。
相关问题
若某个算法得到分类为:A=[1 1 1 1, 2 2 2 2, 3 3 3 3, 4 4 4],而真实的分类结果为B=[1 2 4 1, 1 2 3 2 2, 1 2 4 3 3, 4 4 2],求NMI值
首先,需要计算A和B的熵和互信息。
A的熵为:
H(A) = - (4/13) log2 (4/13) - (4/13) log2 (4/13) - (3/13) log2 (3/13) - (2/13) log2 (2/13) ≈ 1.846
B的熵为:
H(B) = - (5/13) log2 (5/13) - (4/13) log2 (4/13) - (3/13) log2 (3/13) - (1/13) log2 (1/13) ≈ 1.783
A和B的互信息为:
I(A,B) = ∑i=1^4 ∑j=1^4 (n_ij / N) log2 [(n_ij * N) / (n_i * n_j)]
其中,n_ij 表示A中属于第i类且B中属于第j类的样本数,n_i 表示A中属于第i类的样本数,n_j 表示B中属于第j类的样本数,N表示样本总数。
计算得到:
I(A,B) ≈ 0.212
根据定义,归一化互信息(NMI)为互信息除以A和B的熵的平均值,即:
NMI = I(A,B) / [(H(A) + H(B)) / 2]
代入数值计算得:
NMI ≈ 0.152
因此,该算法得到的分类结果与真实分类结果的NMI为约0.152。
编程若某个算法得到分类为:A=[1 1 1 1, 2 2 2 2, 3 3 3 3, 4 4 4],而真实的分类结果为B=[1 2 4 1, 1 2 3 2 2, 1 2 4 3 3, 4 4 2],求NMI值
首先,需要计算A和B的熵和互信息(MI)。
A的熵为:
H(A) = -(4/16 * log2(4/16) + 4/16 * log2(4/16) + 4/16 * log2(4/16) + 3/16 * log2(3/16)) ≈ 1.846
B的熵为:
H(B) = -(4/16 * log2(4/16) + 5/16 * log2(5/16) + 5/16 * log2(5/16) + 2/16 * log2(2/16)) ≈ 1.783
A和B的MI可以通过计算每个类别之间的交集和并集来计算。例如,A中类别1和类别2的交集为4个,类别1和类别2的并集为8个,因此它们的MI为:
MI(A1, B1) = log2(4 * 16 / (4 * 4)) ≈ 2.0
MI(A1, B2) = log2(0) = undefined
MI(A1, B3) = log2(0) = undefined
MI(A1, B4) = log2(4 * 16 / (4 * 3)) ≈ 1.415
MI(A2, B1) = log2(0) = undefined
MI(A2, B2) = log2(4 * 16 / (4 * 5)) ≈ 0.322
MI(A2, B3) = log2(4 * 16 / (4 * 5)) ≈ 0.322
MI(A2, B4) = log2(0) = undefined
MI(A3, B1) = log2(4 * 16 / (4 * 4)) ≈ 2.0
MI(A3, B2) = log2(4 * 16 / (4 * 5)) ≈ 0.322
MI(A3, B3) = log2(4 * 16 / (4 * 5)) ≈ 0.322
MI(A3, B4) = log2(4 * 16 / (4 * 3)) ≈ 1.415
MI(A4, B1) = log2(3 * 16 / (4 * 3)) ≈ 0.678
MI(A4, B2) = log2(0) = undefined
MI(A4, B3) = log2(0) = undefined
MI(A4, B4) = log2(4 * 16 / (4 * 2)) ≈ 2.0
下面计算NMI:
NMI = 2 * I(A, B) / (H(A) + H(B))
其中,I(A, B)是A和B的互信息的平均值。由于A和B中有一些类别的MI不确定,需要将这些MI值设为0,因此:
I(A, B) = (2.0 + 1.415 + 0.322 + 1.678 + 2.0) / 9 ≈ 0.819
因此,
NMI = 2 * 0.819 / (1.846 + 1.783) ≈ 0.600
因此,该算法的分类结果与真实分类结果的一致性较低,NMI值为0.6(取值范围为0到1的实数)。