我有一些关于某些属性的统计数据,例如:
1st iter : p1:10 p2:0 p3:12 p4:33 p5:0.17 p6:ok p8:133 p9:89
2nd iter : p1:43 p2:1 p6:ok p8:12 p9:33
3rd iter : p1:14 p2:0 p3:33 p5:0.13 p9:2
...
(p1 -> number of tries, p2 -> try done well, p3..pN -> properties of try).
我需要计算每个属性的信息量。经过一些量化程序(例如到 10 个级别)以使所有输入数字在同一级别上,输入文件开始如下所示:
p0: 4 3 2 4 5 5 6 7
p3: 4 5 3 3
p4: 5 3 3 2 1 2 3
...
哪里p(0) = funct(p1,p2)
。
并非每条输入线都能pK
如此len(pk) <= len(p0)
。
现在我知道如何通过香农熵为每条线计算每个属性的熵。我需要从这里计算互信息。
I(p0,pK)
由于长度不同,互信息的联合熵计算卡住了。
我正在计算这样一个元素的熵:
def entropy(x):
probs = [np.mean(x == c) for c in set(x)]
return np.sum(-p * np.log2(p) for p in probs)
那么,对于关节,我需要使用product
来生成输入数组x
并使用zip(p0,pk)
而不是set(x)
?