In [15]: a = np.array([0.5, 0.5, 0, 0, 0])
In [16]: b = np.array([1, 0, 0, 0, 0])
In [17]: entropy(a, b)
Out[17]: inf
In [18]: entropy(b, a)
Out[18]: 0.6931471805599453
由于给定的等式为inf
,因此我希望他们都从documentation返回S = sum(pk * log(pk / qk), axis=0)
。第18行出现非无限输出的原因是什么?
答案 0 :(得分:2)
entropy(b, a)
函数计算第一对:
1 * np.log(1/0.5)
其结果为0.6931471805599453
。
对于entropy(a, b)
,存在一种除以零的情况,0.5/0
导致无限解。
对于其他情况,entropy()
假设0 * np.log(0/0)
等于0
。
答案 1 :(得分:2)
研究Kullback-Leibler散度的定义,似乎是由于其定义。
这是来自维基百科:
每当P(x)为零时,相应项的贡献就解释为零,因为 the limit goes to zero(单击方程式的链接)。
答案 2 :(得分:0)
当同时提供 p 和 q 时,熵函数计算 KL 散度。 KL 散度是不对称的,这意味着 KL(p,q)!=KL(q,p)
除非 p==q
。因此你会得到不同的答案。
进一步,正如其他答案解释了这样一个事实,即您的分布中有零意味着我们将根据 KL 散度的定义除以零。
KL(p,q) = sum(p * log(p/q))