【问题标题】:Pairwise Kullback Leibler (or Jensen-Shannon) divergence distance matrix in PythonPython中的成对Kullback Leibler(或Jensen-Shannon)散度距离矩阵
【发布时间】:2012-05-23 02:05:44
【问题描述】:

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

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

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

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

【问题讨论】:

  • X 的行代表什么,有限事件集的概率分布?
  • 没错,行是概率分布,每一行在分布中的元素数量完全相同。

标签: python matrix distance metrics


【解决方案1】:

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

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2013-03-30
      • 2017-12-18
      • 1970-01-01
      相关资源
      最近更新 更多