3

我有两个矩阵 X 和 Y(在我的大多数情况下它们是相似的)现在我想计算所有行之间的成对 KL 散度并将它们输出到矩阵中。例如:

X = [[0.1, 0.9], [0.8, 0.2]]

然后,该函数应获取kl_divergence(X, X)并计算两个 X 矩阵的每对行的成对 Kl 散度距离。输出将是一个 2x2 矩阵。

在 Python 中已经有一些实现了吗?如果没有,这应该很容易计算。我想要某种矩阵实现,因为我有很多数据并且需要保持运行时尽可能低。或者,Jensen-Shannon 熵也很好。最终这对我来说甚至是一个更好的解决方案。

4

2 回答 2

14

请注意,KL 散度本质上是 P(i) 和 log(P(i)/Q(i)) 的点积。因此,一种选择是为 P(i) 和 log(P(i)/Q(i)) 形成一个numpy数组的列表,每个要计算的 KL 散度为一行),然后执行点积.

于 2012-05-15T14:48:32.737 回答
2

有一个名为 dit 的新(ish)库,它实现了 JSD,以及互信息和许多其他距离度量:

import dit
foo = dit.Distribution(['A','B','C'],[0.5,0.5,0.0])
bar = dit.Distribution(['A','B','C'],[0.1,0.0,0.9])
dit.divergences.jensen_shannon_divergence([foo,bar])
0.80499327350549388

文档可能需要做一些工作,但看起来很有希望。

http://docs.dit.io/en/latest/generalinfo.html#quickstart

于 2014-10-14T22:10:04.310 回答