标准化互信息NMI计算步骤
Python 实现
代码:
‘‘‘ 利用Python实现NMI计算‘‘‘
import math
import numpy as np
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) # Find the intersection of two arrays.
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 id