使用正态数据直方图与直接公式的熵估计(matlab)



假设我们已经绘制了标准正态分布的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

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

在sum中缺少dp

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

这应该使你足够接近…

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

最新更新