从3个离散变量中查找条件互信息

时间:2019-03-28 16:14:42

标签: python-3.x numpy information-theory

我正在尝试使用pyitlib python软件包,在公式的帮助下找到三个离散随机变量之间的条件互信息:

I(X;Y|Z)=H(X|Z)+H(Y|Z)-H(X,Y|Z)

期望的条件互助信息值为= 0.011

我的第一个代码:

import numpy as np
from pyitlib import discrete_random_variable as drv

X=[0,1,1,0,1,0,1,0,0,1,0,0]
Y=[0,1,1,0,0,0,1,0,0,1,1,0]
Z=[1,0,0,1,1,0,0,1,1,0,0,1]

a=drv.entropy_conditional(X,Z)
##print(a)
b=drv.entropy_conditional(Y,Z)
##print(b)
c=drv.entropy_conditional(X,Y,Z)
##print(c)

p=a+b-c
print(p)

我在这里得到的答案是= 0.4632245116328402

我的第二个代码:

import numpy as np
from pyitlib import discrete_random_variable as drv

X=[0,1,1,0,1,0,1,0,0,1,0,0]
Y=[0,1,1,0,0,0,1,0,0,1,1,0]
Z=[1,0,0,1,1,0,0,1,1,0,0,1]

a=drv.information_mutual_conditional(X,Y,Z)
print(a)

我在这里得到的答案是= 0.1583445441575102

预期结果为= 0.011

有人可以帮忙吗?我现在很麻烦。任何帮助都将是可贵的。 预先感谢。

2 个答案:

答案 0 :(得分:1)

如果您愿意使用SKlearn,则可以看看adjusted_mutual_info_score工具here

答案 1 :(得分:1)

基于条件熵的定义,以位(即基数2)计算,我得到H(X | Z)= 0.784159,H(Y | Z)= 0.325011,H(X,Y | Z)= 0.950826。根据上面提供的条件互信息的定义,我得到I(X; Y | Z)= H(X | Z)+ H(Y | Z)-H(X,Y | Z)= 0.158344。注意pyitlib在默认情况下使用2,因此drv.information_mutual_conditional(X,Y,Z)似乎在计算正确的结果。

请注意,在第一个示例中使用drv.entropy_conditional(X,Y,Z)计算条件熵是不正确的,但是您可以使用drv.entropy_conditional(XY,Z),其中XY是一维数组,表示关于X和Y的联合观测,例如XY = [2 * xy [0] + xy [1]对于zip(X,Y)]中的xy。