有两个随机变量X
和Y
以及它们的联合概率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的值?
答案 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。