【问题标题】:entropy estimation using histogram of normal data vs direct formula (matlab)使用正常数据直方图与直接公式的熵估计(matlab)
【发布时间】:2013-05-07 19:38:55
【问题描述】:

假设我们已经抽取了标准正态分布的n=10000 个样本。

现在我想用直方图计算它的熵来计算概率。

1) 计算概率(例如使用matlab)

[p,x] = hist(samples,binnumbers);
area = (x(2)-x(1))*sum(p);
p = p/area;

(binnumbers 是由某些规则决定的)

2) 估计熵

H = -sum(p.*log2(p))

给出 58.6488

现在当我使用直接公式计算正常数据的熵时

H = 0.5*log2(2*pi*exp(1)) = 2.0471

使用直方图+熵公式时我做错了什么? 非常感谢您的帮助!

【问题讨论】:

  • 能否提供代码的完整代码?您是否使用了一些中心限制结果?
  • NB hist() 已贬值,请改用histogram()

标签: matlab distribution histogram entropy


【解决方案1】:

总和中缺少dp 术语

dp = (x(2)-x(1));
area = sum(p)*dp;
H = -sum( (p*dp) * log2(p) );

这应该让你足够接近......

PS,
当你拿log2(p) 时要小心,因为有时你可能有空垃圾箱。您可能会发现 nansum 很有用。

【讨论】:

  • 你能简单解释一下为什么我需要添加宽度吗?
  • @user1569756 将其视为集成中的 dt 术语。熵是p(t)log2(p(t)) dt 的 [-\infty \infty] 中的不可积分的t。您使用此有限宽度来计算面积,您还需要将其用于积分...将采样视为积分的近似值...
  • 正确,但作为附加信息@user1569756:该积分定义了连续随机变量的differential entropy,这与严格意义上的信息熵不同,后者仅针对离散分布定义。
  • @Masi 在 cmets 中阅读代码和错误消息非常困难。请考虑作为一个新问题发布
  • @Masi,使用hist 是积分的近似值。如果你回想一下你的微积分,当 bin 足够小时,使用 bin 中心的近似值与使用 bin 的边缘非常相似。
猜你喜欢
  • 2017-01-24
  • 2015-03-19
  • 1970-01-01
  • 2022-01-15
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 2018-03-06
相关资源
最近更新 更多