编程若某个算法得到分类为: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值
时间: 2024-06-07 18:10:51 浏览: 12
首先,需要计算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的实数)。