import math
import numpy as np
from sklearn import metrics
from sklearn import metrics
def NMI(A,B): #此为计算互信息的函数,还可以计算标准互信息
#样本点数
total = len(A)
A_ids = set(A)
B_ids = set(B)
#互信息计算
MI = 0
eps = 1.4e-45
for idA in A_ids:
for idB in B_ids:
idAOccur = np.where(A==idA)
idBOccur = np.where(B==idB)
idABOccur = np.intersect1d(idAOccur,idBOccur)
px = 1.0*len(idAOccur[0])/total
py = 1.0*len(idBOccur[0])/total
pxy = 1.0*len(idABOccur)/total
MI = MI + pxy*math.log(pxy/(px*py)+eps,2)
# 标准化互信息
Hx = 0
for idA in A_ids:
idAOccurCount = 1.0*len(np.where(A==idA)[0])
Hx = Hx - (idAOccurCount/total)*math.log(idAOccurCount/total+eps,2)
Hy = 0
for idB in B_ids:
idBOccurCount = 1.0*len(np.where(B==idB)[0])
Hy = Hy - (idBOccurCount/total)*math.log(idBOccurCount/total+eps,2)
MIhat = 2.0*MI/(Hx+Hy)
return MIhat
if __name__ == '__main__':
A = [0.0206, 0.0277, 0.019, 0.0211, 0.0155, 0.0249, 0.0054, 0.0251, 0.0274, 0.0166, 0.0402, 0.0398, 0.0315, 0.0164, 0.0194, 0.0172, 0.022, 0.0429, 0.03, 0.0875, 0.0077, 0.0015, 0.0613, 0.0047, 0.0457, 0.0441, 0.0432, 0.0533, 0.0493, 0.0177, 0.0758, 0.0454]
B = [0.0192, 0.0274, 0.0187, 0.0198, 0.0164, 0.0259, 0.0046, 0.0277, 0.0264, 0.0158, 0.0413, 0.0399, 0.0332, 0.0167, 0.0202, 0.0201, 0.0203, 0.0412, 0.0344, 0.0882, 0.0072, 0.0012, 0.0479, 0.0044, 0.0461, 0.0483, 0.0394, 0.0552, 0.0472, 0.017, 0.0776, 0.0509]
result_NMI=metrics.normalized_mutual_info_score(A, B)
print("result_NMI:",result_NMI)
print(len(A))
print(len(B))
A = np.array([0.0206, 0.0277, 0.019, 0.0211, 0.0155, 0.0249, 0.0054, 0.0251, 0.0274, 0.0166, 0.0402, 0.0398, 0.0315, 0.0164,
0.0194, 0.0172, 0.022, 0.0429, 0.03, 0.0875, 0.0077, 0.0015, 0.0613, 0.0047, 0.0457, 0.0441, 0.0432, 0.0533,
0.0493, 0.0177, 0.0758, 0.0454])
B =np.array([0.0192, 0.0274, 0.0187, 0.0198, 0.0164, 0.0259, 0.0046, 0.0277, 0.0264, 0.0158, 0.0413, 0.0399, 0.0332, 0.0167,
0.0202, 0.0201, 0.0203, 0.0412, 0.0344, 0.0882, 0.0072, 0.0012, 0.0479, 0.0044, 0.0461, 0.0483, 0.0394, 0.0552,
0.0472, 0.017, 0.0776, 0.0509])
result_NMI =NMI(A, B)
print("result_NMI:",result_NMI)
互信息和标准互信息
最新推荐文章于 2022-07-26 19:24:52 发布