Normalized Mutual Information 归一化互信息(NMI) Matlab 代码
MI(A,B)=2*I(A,B)/(H(A)+H(B)),
其中I(A,B)是A,B两向量的mutual information, H(A)是A向量的信息熵。
I(A,B)=H(A)-H(A|B)=H(B)-H(B|A),这也好理解,直觉上,如果已知B的情况,A的条件熵H(B|A)相对于H(A)变小了, 即不确定程度变小,那么B能提供对A有用的信息,越有用,越相近。互信息的式子是不是很眼熟?其实决策树中所言的information gain就是属性与类的互信息。information gain ratio也与NMI有些类似。
I(A,B)=H(A)+H(B)-H(A,B)>=0,而且I(A,B)的最大值在A,B完全一样时取到,此时H(A|B)=0,所以NMI(A,B)=2*H(A)/(H(A)+H(B))=1,所以NMI(A,B)在[0,1]范围。
I(A,B)=H(A)-H(A|B)=sigma x p(x)*log(1/p(x)) - sigma y p(y) sigma x p(x|y)*log(1/p(x|y))=
sigma x,y p(x,y)*log(1/p(x)) - sigma x,y p(x,y)*log(1/p(x|y))= sigma x,y p(x,y)*log(1/p(x)) - sigma x,y p(x,y)*log(p(y)/(p(x,y))= sigma x,y p(x,y)* log(p(x,y)/(p(x)*p(y))
其中,x属于A,y属于B.
值得注意的是,对于任一向量,如果把该向量上的类别全改成另一个数值,NMI不变。
比如 A = [1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3];
B = [1 2 1 1 1 1 1 2 2 2 2 3 1 1 3 3 3];
则把B改成[4 1 4 4 4 4 4 1 1 1 1 7 4 4 7 7 7], NMI不变。
NMI的最大值为1,当A,B两个向量完全一样时取到。此时I(A,B)=H(A)=H(B),NMI=2*I(A,B)/(H(A)+H(B)=1.
当A = [1,1,1,1,1];
B= [1,1,1,1,1]; 时,H(A)=H(B)=0,此时要特判。
当A = [1,1,1,1,1];
B= 除[1,1,1,1,1]外的任意向量 时,I(A,B)=0, H(A)=0, H(B)>0, NMI=0.