如何计算关节分布的熵?

时间:2018-06-25 11:26:51

标签: python arrays scipy entropy

有两个随机变量XY以及它们的联合概率Posterior_P(离散的2D数组),我使用scipy.stats.entropy得到了后验概率的熵,它返回一个维度为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的值?

1 个答案:

答案 0 :(得分:1)

scipy.stats.entropy计算离散分布的熵。该值应为概率,而不是概率密度。 (实际上,如果输入中值的总和不为1,则将按比例缩放值,因此总和为1。这在文档字符串中已提及。)如果那是您所拥有的(例如2维数组{{ 1}}拥有双变量离散分布的联合分布概率),您只需将展平的数组传递给p;例如scipy.stats.entropy

函数entropy(p.ravel(), base=2)不能计算出像scipy.stats.entropy这样的科学连续分布的entropy方法所用的数学量。 scipy.stats.multivariate_normal方法计算分布的微分熵。有关entropy计算的离散熵与scipy分布的scipy.stats.entropy方法计算的微分熵之间的差异的讨论,请参见wikipedia article on differential entropy

相关问题