【问题标题】:3 functions for computing relative entropy in scipy. What's the difference?scipy 中用于计算相对熵的 3 个函数。有什么不同?
【发布时间】:2023-03-30 10:57:01
【问题描述】:

python 中的 Scipy 提供了以下函数,这些函数似乎可以计算相同的信息论度量,即 Kullback-Leibler 散度,也称为相对熵:

  • scipy.stats.entropy,如果qk=None可以切换到计算KL-divergence
  • scipy.special.rel_entr
  • scipy.special.kl_div

为什么是三个相同的东西?有人能解释一下它们之间的区别吗?

【问题讨论】:

    标签: python entropy information-theory scipy.stats


    【解决方案1】:

    计算离散概率向量之间的 KL 散度的默认选项是 scipy.stats.entropy

    相比之下,scipy.special.rel_entrscipy.special.kl_div 都是“逐元素函数”,可以与通常的数组运算结合使用,并且必须在它们产生聚合相对熵值之前求和。

    虽然两者的总和相同(当与适当的概率向量一起使用时,其元素总和为 1),第二个变体 (scipy.special.kl_div) 在元素方面是不同的,因为它添加了 -x +y 项,即,

    (x log(x/y)) - x + y

    在总和中抵消。

    例如

    from numpy import array
    from scipy.stats import entropy
    from scipy.special import rel_entr, kl_div
    
    p = array([1/2, 1/2])
    q = array([1/10, 9/10])
    
    print(entropy(p, q))
    print(rel_entr(p, q), sum(rel_entr(p, q)))
    print(kl_div(p, q), sum(kl_div(p, q)))
    

    产量

    0.5108256237659907
    [ 0.80471896 -0.29389333] 0.5108256237659907
    [0.40471896 0.10610667] 0.5108256237659906
    

    我不熟悉 scipy.special.kl_div 的元素额外术语背后的基本原理,但文档指向可能解释更多的参考。

    见: https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.kl_div.html#scipy.special.kl_div

    【讨论】:

    • 如何使用 scipy 获得概率分布的生成器?
    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多