如何计算联合分布的熵?

How to calculate entropy of joint distribution?

有两个随机变量XY及其联合概率Posterior_P(离散,二维数组),我通过[=15得到后验概率的熵=],其中 returns 一个维度为 len(X) 的数组,因为默认轴 = 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 计算 离散 分布的熵。这些值应该是概率,而不是概率密度。 (事实上​​ ,如果输入中值的总和不是 1,则会缩放值,因此总和为 1。文档字符串中提到了这一点。)如果这是你所拥有的(例如,二维数组 p 保存双变量离散分布的联合分布概率)您可以简单地将展平数组传递给 scipy.stats.entropy;例如entropy(p.ravel(), base=2).

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