若某个算法得到分类为: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 07:10:51 浏览: 11
首先,需要计算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的实数)。
若某个算法得到分类为: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值;
首先,需要计算出 A 和 B 的簇中心以及它们之间的距离矩阵。
A 的簇中心为 [1, 2, 3, 4],B 的簇中心为 [1, 2, 3, 4]。
距离矩阵为:
| | 1 | 2 | 3 | 4 |
| --- | --- | --- | --- | --- |
| 1 | 4 | 7 | 8 | 2 |
| 2 | 7 | 10 | 11 | 5 |
| 3 | 8 | 11 | 12 | 6 |
| 4 | 2 | 5 | 6 | 0 |
其中,矩阵中每个元素表示 A 中对应簇和 B 中对应簇之间的交集大小。
接下来,计算 NMI 值。首先需要计算 A 和 B 的熵以及它们的互信息。
A 的熵为:
H(A) = - (4/16) * log2(4/16) - (5/16) * log2(5/16) - (5/16) * log2(5/16) - (2/16) * log2(2/16) = 1.846
B 的熵为:
H(B) = - (4/14) * log2(4/14) - (5/14) * log2(5/14) - (5/14) * log2(5/14) - (0/14) * log2(1) = 1.846
A 和 B 的互信息为:
I(A, B) = (4/16) * log2((4*14)/(4*4)) + (1/16) * log2((1*14)/(1*2)) + (1/16) * log2((1*14)/(1*3)) + (2/16) * log2((2*14)/(2*4)) + (1/16) * log2((1*14)/(1*2)) + (1/16) * log2((1*14)/(1*3)) + (2/16) * log2((2*14)/(2*4)) + (1/16) * log2((1*14)/(1*3)) + (2/16) * log2((2*14)/(2*4)) + (1/16) * log2((1*14)/(1*2)) + (1/16) * log2((1*14)/(1*3)) + (2/16) * log2((2*14)/(2*4)) + (1/16) * log2((1*14)/(1*3)) + (0/16) * log2(1) + (1/16) * log2((1*14)/(1*2)) = 0.404
因此,NMI 值为:
NMI = I(A, B) / ((H(A) + H(B)) / 2) = 0.404 / ((1.846 + 1.846) / 2) = 0.219
因此,该算法的分类结果与真实分类结果的一致性较低。