【问题标题】:How to calculate entropy of joint distribution?如何计算联合分布的熵?
【发布时间】:2018-06-25 11:26:51
【问题描述】:

有两个随机变量XY以及它们的联合概率Posterior_P(离散,二维数组),我通过使用scipy.stats.entropy得到了后验概率的熵,它返回一个维度为@的数组987654328@ 因为默认轴 = 0。我对熵完全陌生,所以如果我混淆了某些定义,请纠正我。 我创建了一个相当简单的例子来作证:

x = np.arange(-2,2,0.01)
y = np.arange(-2,2,0.01)

X,Y = np.meshgrid(x,y)

# support area
sup = np.dstack((X,Y))

distribution = multivariate_normal(mean=[0,0],cov=[[1,0],[0,1]])

# This is what I want, returns a value = 2.83
entropy_0 = distribution.entropy()

# calculate from 2-D array PDF 
# returns an array [8.4605,8.4605,...,8.4605] with a size of len(X)
pdf = distribution.pdf(sup)
entropy_1 = entropy(pdf,base=2)

它们之间有什么区别?如何从联合密度中获得整体熵,这应该是使用 scipy.stats.entropy 的值?

【问题讨论】:

  • 仅供参考:scipy.stats.entropy 计算(离散)entropymultivariate_normal.entropy 计算 differential entropy。它们是不相同的。你真正想要哪一个?
  • @WarrenWeckesser 我想计算联合分布的熵。因为我用meshgrid来定义支撑,所以联合分布的pdf其实是一个二维数组。当我尝试entropy 时,它返回一个长度为X 而不是单个值的一维数组。但是根据定义,熵应该是P(x,y)*log1/(P(x,y)) 在支持空间上的总和,这将是一个单一的值?

标签: python arrays scipy entropy


【解决方案1】:

scipy.stats.entropy 计算离散分布的熵。这些值应该是概率,而不是概率密度。 (事实上​​,如果输入中的值的总和不是 1,则这些值将被缩放,因此总和为 1。这在文档字符串中提到。)如果这是你所拥有的(例如二维数组 @987654324 @ 持有二元离散分布的联合分布概率)您可以简单地将展平数组传递给scipy.stats.entropy;例如entropy(p.ravel(), base=2).

函数scipy.stats.entropy 计算的数学量与entropy scipy 连续分布(如scipy.stats.multivariate_normal)的方法不同。 entropy 方法计算分布的微分熵。有关由scipy.stats.entropy 计算的离散熵与由 scipy 分布的entropy 方法计算的微分熵之间差异的讨论,请参阅wikipedia article on differential entropy

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 1970-01-01
    • 2013-11-13
    • 2010-11-18
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2018-10-05
    • 2010-11-02
    相关资源
    最近更新 更多